
Overview
This guide helps you:- Set up the backend (Go + Fiber + GraphQL)
- Prepare PostgreSQL & Redis locally
- Run database migrations (Drizzle)
- Develop the React Native app (Expo)
- Test, debug, and iterate quickly
Architecture
Understand how backend, frontend, and database work together.
Self-host
Run locally with Docker Compose or deploy on Kubernetes.
Contribute
Follow guidelines to open PRs and build features confidently.
Prerequisites
Ensure you have the following tools installed:- Git (latest)
- Go toolchain (matches
services/go.modtoolchain) - Node.js 18+ or 20+ (for tooling and Drizzle CLI)
- Package manager:
bunornpm/yarn(repo includesbun.lock) - Docker & Docker Compose (recommended for local DB)
- PostgreSQL 16+ (optional if not using Docker)
- Redis 7+ (optional if not using Docker)
- Expo CLI & Expo Go app (for mobile development)
- A
.envfile for backend runtime secrets
The backend requires
DATABASE_URL and REDIS_URL to run. In the Docker Compose setup, these are set automatically. When running outside Docker, you must set them yourself.Clone the repo
Environment configuration
Create a.env in the project root (blindly/.env) for runtime secrets used by the backend. Examples:
In Docker Compose,
DATABASE_URL and REDIS_URL are set in the backend service. Other env vars still need to be provided via .env.Bring up local infrastructure
The fastest way to get Postgres + Redis + migrations + backend is Docker Compose.The
migrate job automatically applies Drizzle migrations from db/drizzle/ before the backend starts.Database migrations (manual run)
If you prefer to run migrations manually (without Docker):- Using local Postgres
- Using Docker Postgres
Run the backend (Go)
The backend serves GraphQL for most functionality and HTTP endpoints for health checks, webhooks, and specialized flows.
Frontend (React Native / Expo)
Configure the app to point to your backend host and GraphQL endpoint (e.g.,
http://localhost:9000/graphql for local dev). Use your app config or environment strategy to switch between dev and prod.- EAS Build
- APK (Android)
For production builds:To distribute quickly in testing, use EAS update and QR (works on iOS & Android).
Testing
- Backend unit tests:
- API smoke tests:
- Hit
/health - Exercise common GraphQL queries/mutations
- Hit
- Mobile:
- Run on device and verify common flows (onboarding, match, chat, reveal)
Consider adding integration tests for GraphQL resolvers and DB interactions. Use a test database and deterministic seeds.
Debugging
- Add structured logs with context (request IDs, user IDs)
- Use verbose logging in dev (
ENVIRONMENT=DEV) - Inspect Postgres with a client (e.g.,
psqlor TablePlus) - Monitor Redis keys for sessions and rate-limits
- Use network proxy tools (e.g.,
mitmproxy) to inspect mobile requests
If the backend doesn’t start, confirm
DATABASE_URL and REDIS_URL are set and reachable. Also verify migrations have been applied.Linting & Formatting
- Go formatting:
- JS/TS formatting (docs/expo/db tooling):
- Recommended: enable pre-commit hooks for formatting and basic checks.
Common Issues
- DB connection refused
- Migrations fail
- Mobile cannot reach backend
- Ensure Postgres is running and reachable at the host/port
- Check credentials and database name
- If using Docker, confirm port mappings and container health
Development Workflow
Next steps
Self-host Blindly
Deploy locally or in Kubernetes and share with your team.
Contribution Guidelines
Learn how to propose changes, write tests, and land PRs smoothly.