ConfigFlow is a config-driven full-stack app builder. Users submit JSON app configs, preview apps, manage generated projects, and export a complete codebase ZIP.
- Frontend: Next.js (App Router), React, Tailwind CSS
- Backend: Express.js, TypeScript, JWT auth
- Database: PostgreSQL with Prisma
- Monorepo: npm workspaces (
client,server,shared)
- User registers or logs in.
- User pastes a JSON app config on the landing page.
- Backend validates config and creates a user-owned app record.
- User is redirected to
/builder/:appIdfor live preview. - Dynamic routes render pages from that app's config.
- User can export generated source code as a ZIP.
- JWT authentication with protected API routes
- OAuth start/callback routes for Google and GitHub
- Multi-app, per-user app management
- Dynamic CRUD API routes scoped by
appIdandentityName - Dashboard widgets (stats/charts/recent data)
- Code export endpoint that returns a generated ZIP
- i18n support (including RTL)
For the fastest deployment setup, see DEPLOYMENT_QUICKSTART.md.
Recommended Stack:
- DEPLOYMENT.md — Complete deployment guide with all platforms
- CI_CD_DEPLOYMENT.md — GitHub Actions + automated deployments
- DEPLOYMENT_QUICKSTART.md — 5-minute setup guide
# Copy example files
cp client/.env.example client/.env.local
cp server/.env.example server/.env
# Fill in your values
# DATABASE_URL, JWT_SECRET, API_URL, OAuth credentials, etc.# Start full stack locally with Docker
docker-compose up
# Database: localhost:5432
# Backend: localhost:4000
# Frontend: localhost:3000- Notification and email delivery support
Current delivery snapshot:
- Config runtime: complete
- Dynamic frontend renderers: complete
- Dynamic backend entity layer: complete
- Export pipeline: complete
- Automated test suite: in progress
- CI expansion (lint/tests/smoke): in progress
- Deployment runbook: pending
Detailed execution plan and phase-wise roadmap are maintained in:
implementation_plan.md
- Add server/shared unit tests for validation and config engine behavior.
- Add integration tests for app and entity endpoints.
- Add generator snapshot tests for output integrity.
- Expand CI to run lint, tests, and build smoke checks.
- Add startup env validation and basic production hardening.
.
|- client/ # Next.js frontend
|- server/ # Express API + Prisma integration
|- shared/ # Shared types and config validation utilities
|- configs/ # Example JSON app configs
|- package.json # Workspace scripts
`- tsconfig.base.json # Base TypeScript config
- Node.js 18+
- npm 9+
- PostgreSQL database
Create server/.env:
DATABASE_URL=postgresql://USER:PASSWORD@HOST:PORT/DB_NAME
JWT_SECRET=replace-with-a-strong-secret
PORT=4000
CLIENT_URL=http://localhost:3000
SERVER_URL=http://localhost:4000
# OAuth (Google)
GOOGLE_CLIENT_ID=your-google-client-id
GOOGLE_CLIENT_SECRET=your-google-client-secret
GOOGLE_REDIRECT_URI=http://localhost:4000/api/auth/google/callback
# OAuth (GitHub)
GITHUB_CLIENT_ID=your-github-client-id
GITHUB_CLIENT_SECRET=your-github-client-secret
GITHUB_REDIRECT_URI=http://localhost:4000/api/auth/github/callback
# Optional: where server redirects after successful OAuth callback
CLIENT_AUTH_CALLBACK_URL=http://localhost:3000/auth/callbackOptional for frontend (client/.env.local):
NEXT_PUBLIC_API_URL=http://localhost:4000Install dependencies:
npm installPrepare Prisma schema:
npm run prisma:push --workspace=serverOptional seed:
npm run prisma:seed --workspace=serverRun frontend and backend together:
npm run devDefault URLs:
- Frontend: http://localhost:3000
- Backend: http://localhost:4000
- Health check: http://localhost:4000/api/health
Auth:
POST /api/auth/registerPOST /api/auth/loginGET /api/auth/google/startGET /api/auth/google/callbackGET /api/auth/github/startGET /api/auth/github/callback
Apps:
POST /api/appsGET /api/appsGET /api/apps/:idDELETE /api/apps/:idGET /api/apps/:id/export
Entities (dynamic):
GET /api/entities/:appId/:entityNameGET /api/entities/:appId/:entityName/:idPOST /api/entities/:appId/:entityNamePUT /api/entities/:appId/:entityName/:idDELETE /api/entities/:appId/:entityName/:idGET /api/entities/:appId/:entityName/statsGET /api/entities/:appId/:entityName/recent
npm run buildThis builds both server and client workspaces.
npm run dev- run server and client togethernpm run dev:server- run server workspace onlynpm run dev:client- run client workspace onlynpm run build- build all workspaces
- If Prisma client is out of date, run:
npm run prisma:generate --workspace=server- If API requests fail locally, verify:
CLIENT_URLandSERVER_URLinserver/.envNEXT_PUBLIC_API_URLinclient/.env.local