A trust-based platform for community impact.
- Monorepo Management: Turborepo
- Frontend: Next.js (App Router, React 19)
- Backend: Hono (Node.js runtime)
- Database: Drizzle ORM with PostgreSQL
- Auth: Better Auth
- Styling: Tailwind CSS & Shadcn UI
- State Management: Zustand & React Query
.
├── apps/
│ ├── web/ # Next.js frontend
│ └── backend/ # Hono API server (bundled with tsup)
├── packages/
│ ├── db/ # Drizzle schema & database client
│ ├── ui/ # Shared Shadcn UI components
│ └── typescript-config/ # Shared TS configurations
├── deploy-gcp.sh # Interactive GCP deployment script
└── turbo.json # Turborepo configuration
- pnpm (v10+)
- Google Cloud CLI (for deployment)
-
Install dependencies:
pnpm install
-
Setup environment variables: Create
.env.productionin bothapps/webandapps/backend(or use local.envfiles). -
Run development servers:
pnpm dev
- Frontend: http://localhost:3000
- Backend: http://localhost:8080
We use an automated script to deploy both services to Google Cloud Run.
# Deploy everything
./deploy-gcp.sh <PROJECT_ID>
# Deploy only the web app
./deploy-gcp.sh <PROJECT_ID> --web-only
# Deploy only the backend
./deploy-gcp.sh <PROJECT_ID> --backend-only- Zero-Config Env Loading: Automatically sources credentials from
.env.productionfiles. - Tsup Bundling: Backend is bundled into a single file to eliminate monorepo pathing issues in Docker.
- Standalone Mode: Frontend uses Next.js standalone output for optimized container sizes.
Built with ❤️ for community impact.