Tech Stack

Tech Stack

Single source of truth for all technology choices, versions, and rationale.


Backend

TechnologyVersionPurposeCost
Symfony8.0Web framework, DDD-friendly, modular monolithFree
PHP8.4+Backend language (enums, fibers, typed properties)Free
PostgreSQL16Primary database (ltree for hierarchy, JSONB flexibility)Included in Hetzner
PgBouncerConnection pooling for PostgreSQLFree
Redis7Cache + Symfony Messenger transport (async events, job queues)Included in Hetzner
Doctrine ORM3.xDatabase abstraction (XML mapping, custom types)Free
DeptracArchitecture boundary enforcementFree
PHPStanLevel 8Static analysisFree

Frontend

TechnologyVersionPurposeCost
React NativeCross-platform mobile + web frameworkFree
ExpoSDK 52+Build tooling, OTA updates, routerFree
Expo Routerv4File-based routing (tabs, stacks, modals)Free
TypeScript5.xType safety for frontend codeFree

Identity & Auth

TechnologyVersionPurposeCost
ZitadelSelf-hostedOIDC identity provider, universal loginFree
JWTAPI authentication (bearer tokens from Zitadel)

Infrastructure

TechnologyVersionPurposeCost
HetznerCPX21 + CPX11App server + DB server (EU data residency)~€12/mo
DockerComposeContainer orchestration (all environments)Free
OpenTofuInfrastructure as Code (server provisioning)Free
Cloudflare R2Object storage (media, profile images)Free tier
Cloudflare CDNContent delivery, DDoS protectionFree tier
Cloudflare PagesPWA hosting (web app builds)Free tier
MinIOS3-compatible storage for local developmentFree

Email & Notifications

TechnologyVersionPurposeCost
MailgunEU regionTransactional email (password reset, invites, verification)Free tier → ~€35/mo
Firebase FCMPush notifications (Android)Free tier
APNsPush notifications (iOS)Free

Monitoring & Quality

TechnologyVersionPurposeCost
Uptime KumaSelf-hostedUptime monitoringFree
Prometheus + GrafanaSelf-hostedMetrics and dashboardsFree
SentrySelf-hostedError trackingFree
MailpitEmail testing (local dev)Free

CI/CD

TechnologyVersionPurposeCost
GitLab CI/CDFree tierAutomated pipeline (lint, test, deploy)Free
Expo EASNative app builds (iOS, Android)Free tier

Total Monthly Cost

EnvironmentCost
Development€0 (Docker Compose on laptop)
Staging~€4.50/mo (Hetzner CPX11)
Production~€12/mo (Hetzner CPX21 + CPX11)
EmailFree tier → ~€35/mo at scale
Total MVP~€25-35/mo

Key Design Rationale

  • Symfony 8 over Laravel: Better DDD support, explicit configuration, stable LTS cycle. Symfony’s service container and Messenger component fit the modular monolith pattern.
  • PostgreSQL over MySQL: ltree extension for hierarchical queries (org trees), JSONB for flexible data, mature ecosystem.
  • React Native + Expo over Flutter: JavaScript ecosystem, web support via Expo Web, OTA updates, larger talent pool.
  • Zitadel over Keycloak: Modern OIDC provider, built-in multi-tenancy, better developer experience, Go-based (lighter than Java).
  • Hetzner over AWS: EU data residency (GDPR), 5-10x cheaper for equivalent compute, simpler for a solo founder.
  • Redis over RabbitMQ: Simpler to operate, sufficient for Symfony Messenger, doubles as cache layer.
  • Cloudflare R2 over AWS S3: Zero egress fees, Cloudflare CDN integration, S3-compatible API.