You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This document describes the technology stack as actually implemented in the codebase, validated against the original proposal (see docs/tech stack.pdf).
Discrepancies between the proposal and the current implementation are noted explicitly.
Frontend (apps/web)
Category
Technology
Version
Notes
Framework
React
19
✅ As proposed
Build tool
Vite
7
✅ As proposed
Routing
TanStack Router
1.x
✅ As proposed
Server state / cache
TanStack Query
5.x
✅ As proposed
Global client state
Zustand
5.x
✅ As proposed
Component library
Material UI (MUI)
7.x
⚠️Changed — proposal recommended ShadCN/UI; MUI was adopted instead
⚠️Changed — proposal mentioned Supertest; integration tests use Testcontainers with real DB/storage
Cache
(not implemented)
—
❌ Proposal included Redis; not yet adopted
Job queues
(not implemented)
—
❌ Proposal included BullMQ; not yet adopted
Observability
(not implemented)
—
❌ Proposal included Azure App Insights + OpenTelemetry; not yet adopted
Database
Category
Technology
Version
Notes
Database
PostgreSQL
≥ 15 (current: 18 on Azure)
Minimum 15 required for NULLS NOT DISTINCT
ORM / client
Prisma
7.x
Type-safe query builder + migrations
DB adapter
@prisma/adapter-pg
7.x
Supports Azure AD token auth
Shared Packages
Package
Purpose
@repo/database
Prisma client, schema, migrations
@repo/types
Shared Zod schemas and TypeScript types
@repo/constants
Shared constants (enums, config values)
@repo/utils
Shared utility functions
@repo/eslint-config
Shared ESLint configurations
@repo/typescript-config
Shared TypeScript base configs
Infrastructure & DevOps
Category
Technology
Notes
Cloud provider
Azure
✅ As proposed
IaC engine
Azure Bicep
✅ As proposed
Deployment management
Azure Deployment Stacks
Atomic resource lifecycle management
Container registry
Azure Container Registry (ACR)
Per-environment
API hosting
Azure App Service (containerized)
Node.js API via Docker
Frontend hosting
Azure Static Web App
React SPA
Database
Azure PostgreSQL Flexible Server
Managed PostgreSQL
File storage
Azure Blob Storage
With Managed Identity
Secrets
Azure Key Vault
With RBAC
CDN / WAF
Azure Front Door
Optional
Package manager
pnpm
10.23
Monorepo
Turborepo
2.x
CI/CD
GitHub Actions
✅ As proposed
Code quality
ESLint + Prettier
✅ As proposed
Git hooks
(not configured)
❌ Proposal included Husky + lint-staged; not configured
Methodology Loader (load_methodologies/)
A standalone Python script for seeding emission factor data from Excel spreadsheets into the database. Used for initial data loading when deploying a new country instance.
Category
Technology
Language
Python 3
Data processing
pandas (Excel parsing)
HTTP
requests (or similar)
Summary of Discrepancies
Category
Proposed
Actual
Impact
Component library
ShadCN/UI
Material UI (MUI) v7
MUI provides richer pre-built components at the cost of more opinionated styling
HTTP client
fetch / axios
ky
Minor — ky is a lightweight fetch wrapper with a similar API
Node version
Node 20 LTS
Node 26
Forward-compatible — newer features available
API testing
Vitest + Supertest
Vitest + Testcontainers
More realistic integration tests with real DB/storage containers
Frontend tests
Vitest + RTL + Playwright
Vitest + RTL implemented; Playwright (E2E) not yet
Logic-layer regression coverage in place; render-heavy UI / E2E still uncovered
i18n
i18next + react-i18next
Not implemented
Platform is currently single-language (Spanish)
Redis cache
Redis
Not implemented
No server-side caching layer; acceptable for current load
Job queues
BullMQ
Not implemented
No async job processing; all operations are synchronous
Observability
Azure App Insights + OpenTelemetry
Not implemented
No structured metrics or traces; only basic Pino logs