Brand-safe AI content operations for drafting, SEO, analytics, and repeatable publishing workflows.
Blog AI is a monorepo with three product surfaces:
apps/web: Next.js application for content teamsapps/api: FastAPI backend for generation, quotas, and integrationsapps/extension: browser extension
The product is positioned around repeatable publishing, not generic prompt-box output: brand voice controls, structured drafting, SEO workflows, history, analytics, and monetization hooks.
- Bun-first frontend workflow with a committed
bun.lock - Next.js 16 web app with React 18, Clerk, and Sentry
- FastAPI backend with Neon/Postgres, Stripe, and quota-based product logic
- Static marketing homepage at
/for maximum Lighthouse performance - Verified Lighthouse
100 / 100 / 100 / 100 - Verified React Doctor
100 / 100
- Bun
1.3+ - Python
3.12+ - Git
- At least one LLM API key
git clone https://github.com/gr8monk3ys/blog-AI.git
cd blog-AI
bun installcp .env.example .env
cp .env.local.example apps/web/.env.localMinimum local values:
.envOPENAI_API_KEY=...ENVIRONMENT=development
apps/web/.env.localNEXT_PUBLIC_API_URL=http://localhost:8000NEXT_PUBLIC_WS_URL=ws://localhost:8000
cd apps/api
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python server.pycd /path/to/blog-AI
bun devOpen http://localhost:3000.
| Command | Purpose |
|---|---|
bun dev |
Start the Next.js app in apps/web |
bun run build |
Build the web app |
bun run start |
Start the production web app |
bun run lint |
Run ESLint for apps/web |
bun run type-check |
Run TypeScript checks for apps/web |
bun run test:run |
Run Vitest once |
bun run test:coverage |
Run Vitest with coverage |
bun run test:e2e |
Run Playwright end-to-end tests |
bun run test:e2e:coverage |
Run the E2E coverage gate |
bun run audit:runtime |
Run the Bun-based runtime audit policy |
bun run db:migrate |
Apply SQL migrations from db/migrations/ |
| Command | Purpose |
|---|---|
cd apps/api && python server.py |
Start the FastAPI app locally |
cd apps/api && pytest -q |
Run backend tests |
bun run test:api:smoke |
Run the blocking backend smoke suite from the repo root |
bun run test:api:full |
Run the full backend suite from the repo root |
- Web: Vercel
- API: Railway or another container host
- Database: Neon Postgres
- Auth: Clerk
- Billing: Stripe
Key references:
blog-AI/
├── apps/
│ ├── api/ FastAPI backend
│ ├── extension/ Browser extension
│ └── web/ Next.js app
├── db/ SQL migrations
├── docs/ Operational and technical docs
├── scripts/ Build, audit, and release helpers
└── package.json Bun-first workspace shell
bun run buildpassesbun run audit:runtimepasses- Lighthouse on
/:100 / 100 / 100 / 100 - React Doctor:
100 / 100
- The landing page is served from
apps/web/public/home.htmlthrough a rewrite inapps/web/next.config.mjsto keep/extremely fast. - Dependabot still uses the GitHub
npmecosystem forapps/web, but day-to-day development and CI now run through Bun.