Backend Architecture
POSTGRESQL (PRIMARY DATA STORE)
Postgres stores all structured, relational, transactional data.
Reasons for Postgres:
- ACID transactions
- Strong referential integrity
- Complex joins
- Efficient indexing
- Full-text search (if needed)
- Easy to run differential queries (for sync)
DYNAMODB + S3 (DOCUMENTS ONLY)
Large binary objects (PDFs, manuals, certificates) remain in DynamoDB/S3. Metadata is moved to Postgres.
GRAPHQL API LAYER
A custom GraphQL server (Apollo Server, Yoga, Mercurius, etc.) sits between clients and Postgres. It exposes:
Standard CRUD Resolvers
Used for normal online operations.
Delta Sync Endpoint
Clients request:
GET /sync?since=timestamp
where: updated_at > last_sync
The server returns all rows across all tables relevant to the user.
Push Endpoint (Mutations Batch)
Clients send queued offline changes:
POST /push
{
changes: […],
client_timestamp,
}
Server applies conflict rules then returns authoritative records