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