Note
This project is still in progress, so there might not be much to see yet, but it'll be improved over time.
Concert/event dashboard and visualization app
Just a hobby project I've been working on to demo various technologies using the concerts and events I've attended as a dataset.
I've saved the ticket stubs from (almost) every concert I've been to since I was a teenager (or at least the emails and digital tickets since we don't get paper tickets these days). I thought it would be interesting to use as a dataset for creating a hobby code project using the latest technologies.
So far, it's mainly just a list of events that link to detail pages, but eventually I would like to tie it into third party API's like Spotify, Setlist.fm, Last.fm, Google Maps, et al., to create a more rich experience.
- "Play this artist" on Spotify
- Display actual setlist from concert
- Plot venues on interactive map
- Filter by taxonomies, e.g., genre, venue
This project is being systematically production-hardened as a hands-on SRE/DevOps learning exercise — covering containerization, CI/CD, cloud infrastructure (AWS EKS), observability, alerting, chaos engineering, and GitOps across a 9-module roadmap.
| Document | Description |
|---|---|
| docs/ARCHITECTURE.md | Full target architecture, system diagrams, technology decisions, and ADR index |
| docs/STATUS.md | Current implementation state, active blockers, and module progress |
| docs/adr/ | Individual Architecture Decision Records |
| Dependency | Version | Notes |
|---|---|---|
| Node.js | 22+ | Dockerfiles pin 22; local dev ≥ 24 |
| pnpm | 10.30+ | Enforced via packageManager |
| Docker | 20+ | For containerized workflow |
| PostgreSQL | 16 | Provided via Docker or install locally |
Copy the sample env files before starting:
cp packages/api/.env.sample packages/api/.env
cp packages/ui/.env.sample packages/ui/.envAPI (packages/api/.env):
| Variable | Description | Example |
|---|---|---|
POSTGRES_DB |
Database name (used by Postgres image) | ttis_db |
POSTGRES_USER |
Database user (used by Postgres image) | postgres |
POSTGRES_PASSWORD |
Database password (used by Postgres image) | password |
DATABASE_URL |
Prisma connection string | postgresql://postgres:password@localhost:5432/ttis_db |
UI (packages/ui/.env):
| Variable | Description | Default |
|---|---|---|
NEXT_PUBLIC_API_URL |
GraphQL API endpoint URL | http://localhost:4000/graphql |
pnpm install # Install all dependencies
pnpm dev # Start DB (Docker) + API and UI locally with hot reloadThis starts PostgreSQL and Adminer in Docker, then runs the API and UI dev servers locally for fast iteration and hot reload.
On first run, you'll also need to run database migrations:
pnpm --filter @ttis/api exec prisma migrate devpnpm prod # Build and run full stack in Docker (DB, API, UI, Adminer)
pnpm prod:down # Stop everythingkubectl apply -f k8s/namespace.yaml
kubectl apply -f k8s/db-deployment.yaml
kubectl apply -f k8s/api-deployment.yaml
kubectl apply -f k8s/ui-deployment.yaml
kubectl apply -f k8s/db-migrate-job.yaml # Run Prisma migrationsAccess services via port-forward:
kubectl port-forward -n ttis svc/api 4000:4000
kubectl port-forward -n ttis svc/ui 3000:3000pnpm test # Run tests across all packages (Vitest, via Turbo)
pnpm lint # Lint all packages (via Turbo)
pnpm types # Type-check all packages with `tsc --noEmit` (via Turbo)
pnpm format # Format the whole tree (oxfmt)
pnpm build # Build all packages (via Turbo, with remote cache)
pnpm parse-csv # Parse CSV data into JSON for seeding- UI: http://localhost:3000
- GraphQL Playground: http://localhost:4000/graphql
- Adminer (DB GUI): http://localhost:8080
See each package's README for detailed setup and usage:
| Package | Description |
|---|---|
| packages/api | GraphQL API (Yoga, Pothos, Prisma) |
| packages/ui | Next.js frontend (Apollo, Tailwind) |