Skip to main content
Blindly Logo Light

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.mod toolchain)
  • Node.js 18+ or 20+ (for tooling and Drizzle CLI)
  • Package manager: bun or npm/yarn (repo includes bun.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 .env file 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):

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)

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
  • 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., psql or 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

  • 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.