Monorepo Structure
Overview
FAIHT v2 is organized as a monorepo using pnpm workspaces and turbo for build orchestration.
faiht2-mono/
├── apps/
│ ├── web/ # Next.js Frontend (Cloudflare Pages)
│ ├── api/ # Cloudflare Worker (API Gateway)
│ ├── docs-public/ # Public API Documentation (Docusaurus)
│ └── docs-private/ # Internal Wiki (Docusaurus)
├── services/
│ ├── supabase/ # Backend (Edge Functions, Migrations)
│ ├── fetcher/ # Data Fetcher Worker (Docker)
│ └── scheduler/ # Task Scheduler (Docker)
├── packages/
│ ├── core/ # Shared TypeScript types
│ └── assets/ # Shared brand assets (logos, etc.)
├── infra/ # Infrastructure as Code (Terraform, Docker Compose)
└── scripts/ # Utility scripts
Shared Assets
All applications reference brand assets from a single source:
packages/assets/
└── logo.svg # Single source of truth
apps/web/public/
└── assets -> ../../../packages/assets (symlink)
apps/docs-public/static/
└── assets -> ../../../packages/assets (symlink)
apps/docs-private/static/
└── assets -> ../../../packages/assets (symlink)
Usage:
- Web:
/assets/logo.svg - Docs:
assets/logo.svg
OpenAPI Specification
The API specification is also shared:
openapi.yaml # Single source of truth (root)
apps/docs-public/api/
└── openapi.yaml -> ../../../openapi.yaml (symlink)
Docusaurus automatically generates API reference pages from this spec.
Package Dependencies
Core Types (packages/core)
Shared TypeScript types used across applications:
TrendingHashtagUserProfileSubscription
Apps Dependencies
apps/web→ depends onpackages/coreapps/api→ depends onpackages/coreapps/docs-*→ depends onpackages/assets(static assets only)
Workspace Commands
Install Dependencies
pnpm install
Build All
pnpm build
Dev Mode (Specific App)
pnpm --filter web dev
pnpm --filter api dev
pnpm --filter docs-public dev
Run Tests
pnpm --filter api test
Adding New Packages
- Create directory in
packages/ - Add
package.jsonwith workspace reference:
{
"name": "@faiht/package-name",
"version": "0.0.0",
"private": true
}
- Reference in app's
package.json:
{
"dependencies": {
"@faiht/package-name": "workspace:*"
}
}
Deployment Pipeline
Each app/service has its own deployment workflow:
- Web: Cloudflare Pages (automated on push)
- API: Cloudflare Workers (automated on push)
- Docs: Cloudflare Pages (automated on push)
- Supabase: Supabase CLI (automated on push)
- Workers: Docker Registry (automated on push)
See Deployment Guide for details.