RunAny is a local-first tech blog and developer playground for AI setup guides, developer tools, and practical tutorials. The web app is built with Astro, with small Fastify services for API and webhook experiments.
apps/web Astro static website and MDX blog
apps/api Fastify API service
apps/webhook Fastify webhook service
packages/shared Shared TypeScript utilities and types
- Astro and MDX for the website and blog
- UnoCSS for styling
- Fastify for backend services
- TypeScript across apps and packages
- npm workspaces for monorepo management
- Node.js 22 or newer
- npm 10 or newer
- Git
git clone https://github.com/meesudzu/runany.git
cd runany
npm install
npm run devRun a single workspace:
npm run dev -w web
npm run dev -w @runany/api
npm run dev -w @runany/webhooknpm run dev # Start all workspaces in development mode
npm run build # Build all workspaces
npm run build:web # Build only the Astro website
npm run type-check # Run TypeScript checks
npm run lint # Run ESLint
npm test # Run tests across workspacesBlog posts live in:
apps/web/src/content/blog/
Use timestamped filenames so posts sort correctly:
YYYY-MM-DD-HHMMSS-post-slug.mdx
Example:
2026-05-29-153000-setup-ollama-openwebui.mdx
Required frontmatter:
---
title: "Post title"
description: "Short SEO description under 200 characters."
pubDate: "2026-05-29"
tags: ["ai", "ollama", "self-hosted"]
category: "ai-setup"
author: "Du"
featured: false
draft: false
---Recommended post structure:
## TL;DR
> **TL;DR:** One-sentence summary.
## Why this matters
## Prerequisites
## Step 1: Do the first thing
## FAQ
## ConclusionContributions are welcome. Please read CONTRIBUTING.md before opening an issue or pull request.
Good first contributions include:
- Fixing typos or broken links
- Improving setup guides
- Adding screenshots or clearer examples
- Reporting bugs with reproduction steps
- Suggesting new blog topics
Please do not report security vulnerabilities through public issues. See SECURITY.md for reporting guidance.
RunAny is licensed under the MIT License.