Prerequisites
Before you begin, ensure you have:- Docker Desktop running (for Docker Compose or Kind)
- Git installed
- Terminal with bash or zsh
You don’t need to install Go, Node.js, or other tools manually - Nix will handle all dependencies automatically!
Setup Instructions
Install Nix and direnv
Install the Determinate Nix installer and direnv for automatic environment setup:Add direnv hook to your shell (choose your shell):
Nix provides reproducible development environments. The Determinate installer makes setup seamless on macOS and Linux.
Clone the Repository
Clone the repository and navigate to the directory:Allow direnv to activate the Nix environment:Once complete, you’ll have access to all project commands:
Configure Environment Variables
Copy the example environment files:The
Default values work out of the box for local development. You can customize them later if needed.
.env file contains configuration for all services:.env
Choose Your Development Mode
You have three options for running the platform:Access points:Access the Tilt UI at http://localhost:10350 to monitor service status.Access points:
Option 1: Docker Compose (Recommended for beginners)
Fastest way to get started. No Kubernetes complexity.- Frontend: http://localhost:30081
- Traefik Dashboard: http://localhost:30081/dashboard/
- PostgreSQL: localhost:5432
This mode runs all services but without the observability stack (Prometheus, Grafana, etc.).
Option 2: Kubernetes with Tilt (Lightweight)
Local Kubernetes with Kind, without heavy monitoring infrastructure.Option 3: Kubernetes with Full Observability (For advanced users)
Complete setup with Prometheus, Grafana, Loki, and Tempo.- Tilt Dashboard: http://localhost:10350
- Traefik: http://localhost:30081
- Grafana: http://localhost:30300 (admin/admin)
- Prometheus: http://localhost:30090
- Hubble UI: http://localhost:31235 (Network visualization)
Run Tilt in the background:
tilt up > /dev/null 2>&1 &Verify the Installation
Test that services are responding:Expected response:
If using Tilt, check the health-check resource in the Tilt UI at http://localhost:10350 for service status.
Next Steps
Frontend Development
Learn how to run the React frontend in development mode
Architecture Overview
Understand how the microservices communicate
Adding Services
Create new Go or Node.js microservices
Protocol Buffers
Work with proto definitions and code generation
Troubleshooting
Nix installation fails
Nix installation fails
Ensure you have admin/sudo access. On macOS, you may need to grant Full Disk Access to your terminal in System Preferences > Security & Privacy.Try the official installer as an alternative:
direnv allow does nothing
direnv allow does nothing
Make sure you added the direnv hook to your shell configuration:
Docker Compose services fail to start
Docker Compose services fail to start
Check Docker Desktop is running and you have sufficient resources allocated:Common issues:
- Port conflicts (5432, 30081 already in use)
- Insufficient memory (allocate at least 4GB to Docker)
- Network issues (firewall blocking containers)
Tilt fails to start services
Tilt fails to start services
Ensure Kind cluster is running:If the cluster is missing, create it:Check Tilt logs for specific errors:
Protocol Buffer generation fails
Protocol Buffer generation fails
Regenerate proto files:If
buf is not found, ensure direnv is activated:Development Commands
Once set up, you have access to these helper commands:| Command | Description |
|---|---|
fmt | Format all code (Go, TypeScript, Nix) and stage changes |
lint | Run linters across all languages |
buf-check | Lint Protocol Buffers and check for breaking changes |
gen-manifests | Regenerate Kubernetes manifests from nixidy modules |
debug-k8s | Show pod status and recent events |
debug-grpc | Test gRPC endpoints with grpcurl |
test-smoke | Run smoke tests against running services |
new-service go <name> | Generate new Go service scaffold |
new-service custom <name> | Generate new Node.js service scaffold |
Run these commands from the project root after
direnv allow has activated the environment.