API
Environment Variables
The API requires the following environment variables:
Redis Configuration
# Local development (Docker):
REDIS_URL=redis://localhost:6379
REDIS_QUEUE_URL=redis://localhost:6379
# Production:
# REDIS_URL=rediss://:password@...upstash.io:6379 (Upstash - multi-region cache)
# REDIS_QUEUE_URL=redis://...railway.internal:6379 (Railway Redis - queue)
Local Development Setup
Start Redis with Docker:
docker run -d --name redis -p 6379:6379 redis:alpineSet environment variable:
export REDIS_URL=redis://localhost:6379
Database Configuration
DATABASE_PRIMARY_URL=postgresql://...
DATABASE_FRA_URL=postgresql://... # EU replica
DATABASE_IAD_URL=postgresql://... # US East replica
DATABASE_SJC_URL=postgresql://... # US West replica
Development
bun dev
Production
bun start
Cache Implementation
The API uses Redis for distributed caching across multiple server instances:
- apiKeyCache: Caches API key lookups (30 min TTL)
- userCache: Caches user data (30 min TTL)
- teamCache: Caches team access permissions (30 min TTL)
- teamPermissionsCache: Caches team permission lookups (30 min TTL)
- replicationCache: Tracks recent mutations for read-after-write consistency (10 sec TTL)
Environment-Specific Configuration
The Redis client automatically configures itself based on the environment:
Production (Railway):
- Standard IPv4 connections
- Longer connection timeouts (10s)
- TLS support for Upstash Redis (cache)
- Railway internal networking for queue Redis
Development (Local):
- IPv4 connections
- Shorter timeouts (5s)
- No TLS
This ensures cache consistency across multiple stateful servers and eliminates the "No procedure found" TRPC errors caused by cache misses.