Untaxed Backend

Untaxed backend redesign scaffold

The backend now exposes anonymous calculator, premium, reference-data, and history endpoints for the mobile app. Business logic stays inside the backend app and uses PostgreSQL plus optional Valkey caching.

Key endpoints

{
  "calculations": [
    "POST /api/calculations/estimate",
    "POST /api/calculations/map",
    "GET /api/calculations/history?installationId=..."
  ],
  "maps": [
    "GET /api/maps/reference-comparison?installationId=...&scope=switzerland"
  ],
  "reference": [
    "GET /api/reference/cantons",
    "GET /api/reference/municipalities?query=...",
    "GET /api/reference/languages?language=en"
  ],
  "subscriptions": [
    "GET /api/subscriptions/status?installationId=...",
    "POST /api/subscriptions/validate",
    "POST /api/subscriptions/restore"
  ]
}

Configured resources

{
  "appName": "untaxed",
  "resources": {
    "bucket": "untaxed-local-artifacts",
    "jobQueue": "untaxed-local-calculation-jobs",
    "jobDlq": "untaxed-local-calculation-jobs-dlq",
    "taxProfilesTable": "untaxed-local-tax-profiles",
    "calculationRunsTable": "untaxed-local-calculation-runs-v2",
    "auditEventsTable": "untaxed-local-audit-events",
    "requestLogsTable": "untaxed-local-request-logs",
    "subscriptionsTable": "untaxed-local-subscriptions",
    "roadmapVotesTable": "untaxed-local-roadmap-votes",
    "eventBus": "untaxed-local-bus"
  }
}