Skip to content

Latest commit

 

History

91 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⚡ ExpenseFlow by 99 Downtime

GitHub commit activity GitHub branch check runs Latest Release

Personal finance app — track expenses, manage budgets, and get spending alerts.

Quick Start

cp .env.example .env

# Generate these values and paste them into the matching entries in .env
openssl rand -base64 32 # BETTER_AUTH_SECRET
openssl rand -base64 24 # GRAFANA_ADMIN_PASSWORD

docker compose config --quiet
docker compose up -d --build

Open http://localhost:9099. See Development Setup for the full guide (native Nx mode, endpoints, per-service instructions).

This also brings up the observability stack - metrics, logs and alerting in Grafana at http://localhost:3001 (log in as admin with the GRAFANA_ADMIN_PASSWORD you set in .env). See Observability.

Live Environments

Environment App Drizzle Studio
Stage https://stage.t99.stud.k8s.aet.cit.tum.de https://studio.stage.t99.stud.k8s.aet.cit.tum.de
Prod https://t99.stud.k8s.aet.cit.tum.de https://studio.t99.stud.k8s.aet.cit.tum.de
Azure VM https://expenseflow-app.spaincentral.cloudapp.azure.com

Observability

Metrics, dashboards and alerting. Behind the same GitHub OAuth gate as Drizzle Studio - repo collaborators only, one login per environment covers all three.

Environment Grafana Alertmanager Alert mail
Stage https://grafana.stage.t99.stud.k8s.aet.cit.tum.de https://alerts.stage.t99.stud.k8s.aet.cit.tum.de Resend → noreply@1ho.st
Prod https://grafana.t99.stud.k8s.aet.cit.tum.de https://alerts.t99.stud.k8s.aet.cit.tum.de Resend → noreply@1ho.st
Local http://localhost:3001 http://localhost:9093 http://localhost:8025 (MailHog)

Part of the app's Helm chart, so it deploys with everything else. Firing alerts are emailed through Resend on the cluster; locally they are captured by MailHog at http://localhost:8025 instead of being delivered, so no SMTP credentials are needed for dev. See Observability.

Deployment

Every push to main is automatically deployed to stage. Promote to prod via the Deploy to Production workflow dispatch in GitHub Actions. For manual deploys: bun deploy:k8s. See Kubernetes Deployment.

Team

All three members contributed across the full stack throughout the project. Responsibilities rotated heavily — the areas below reflect where each person took the lead, not exclusive ownership.

Member Primary focus
Daniel Günther (@danielgnth) Monorepo tooling (NX), CI/CD pipelines, Kubernetes / Helm infrastructure
Stefania Mocan (@stefaniamocan) Azure VM deployment (Terraform + Ansible), Docker Compose stack, OpenAPI generation, architecture docs
Bilgehan Savgu (@bilgehansavgu) Playwright end-to-end testing, Java microservices foundation, authentication (Better Auth), React client (UI/shadcn), budget feature, Caddy setup, GenAI service

Docs

Topic Link
Development setup docs/development/SETUP.md
Architecture & services docs/architecture/SERVICE_OVERVIEW.md
Auth dev guide docs/development/AUTHENTICATION.md
OpenAPI & generated clients docs/development/API_CLIENTS.md
Kubernetes deployment docs/deployment/KUBERNETES.md
Azure VM deployment docs/deployment/AZURE.md
Scripts reference docs/development/SCRIPTS.md
Observability docs/deployment/OBSERVABILITY.md
Problem statement docs/problem/PROBLEM_STATEMENT.md

About

Repository for team 99% Downtime

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages