A fully working monorepo with Next.js, FastAPI, Rust (Actix), Python gRPC, PostgreSQL, and basic CI.
This project uses a dynamic installer that allows you to customize ports, database credentials, and project names.
Prerequisites:
- Docker Desktop
- uv (The script can attempt to install it, but pre-installing is recommended)
Installation:
0. Check Requirements:
bash uv run manage.py check
-
Install Dependencies:
uv run manage.py install
-
Configure & Start:
# Interactive setup (will prompt for ports/names) uv run manage.py setup # Start the stack uv run manage.py start
If you prefer defaults, you can use the legacy scripts:
Windows: .\start.bat
Linux/Mac: ./start.sh
If you want to wipe the Docker containers/volumes and rebuild everything from scratch (using uv for Python builds):
Windows: .\reinstall.ps1
Linux/Mac: ./reinstall.sh
To set up your local Python environment for intellisense/testing using uv:
Windows: .\local_dev_setup_uv.ps1
This project uses Rust and Tauri. We have provided a script to verify you have the best tools (rustup) installed and to set up the dependencies.
Windows:
.\setup_desktop.ps1Linux / Mac:
./setup_desktop.shAfter running the setup, you can launch the app:
cd frontend
npm run tauri dev-
Environment Setup:
cp .env.example .env
-
Start Services:
docker-compose up --build -d
-
Access Endpoints:
- Frontend: http://localhost
- FastAPI Health: http://localhost/api/health
- GraphQL Playground: http://localhost/graphql
- Rust Health: http://localhost/rust/health
- pgAdmin: http://localhost:8081
- Traefik Dashboard: http://localhost:8090
We now use Traefik as the reverse proxy instead of Nginx.
- Traefik listens on port
80and routes traffic based on URL paths (/api,/rust,/) to the appropriate containers via Docker labels. - The Traefik Dashboard is available at port
8090.
We use uv for package management in the Docker builds for faster install times.
api/grpcsvc/
The grpcsvc runs on port 50051.
Envoy proxies gRPC-Web traffic from http://localhost:8080 (mapped internally) which Nginx can route or you can hit directly if exposed.
In this setup, Envoy is at envoy:8080.
- Database Connection: If
apifails to connect, givedba few seconds to initialize. Docker Composedepends_onstarts containers but doesn't wait for DB readiness. - Ports: Ensure ports 80, 3000, 8000, 8001, 8081, 50051 are free.
A GitHub Actions workflow is included in .github/workflows/ci.yml. It builds images and runs smoke tests.