Aaron Po a1a63b11bb Migrate Auth and Emails to vertical slices (Features.Auth, Features.Emails)
Auth and Emails land together since Auth's registration/resend flows need
Emails to exist first. Service.Auth's four services (Register, Login,
Confirmation, Token) collapse into MediatR commands/queries in
Features.Auth; TokenService stays as a slice-internal service since
multiple handlers call it. Auth no longer references Emails directly —
it sends SendRegistrationEmailCommand/SendResendConfirmationEmailCommand
(defined in Shared.Application) which Features.Emails handles, so neither
slice has a project reference on the other.

Service.Emails' IEmailService becomes Features.Emails' IEmailDispatcher,
simplified to take (firstName, email, token) instead of a full UserAccount
since that's all it ever used. API.Specs' TestApiFactory/MockEmailService
are updated to swap in the relocated interface.

Also deletes Infrastructure.Repository now that Breweries, UserManagement,
and Auth have all moved their repos out of it, and replaces the two
now-dead docker-compose test services (repository.tests, service.auth.tests,
both pointing at deleted Dockerfiles) with a single unit.tests service that
runs every Features.*.Tests project via Dockerfile.tests.
2026-06-20 01:49:12 -04:00
2026-05-12 01:05:07 -04:00
2026-04-27 18:47:39 -04:00

The Biergarten App

The Biergarten App is a full-stack directory and discovery platform for breweries. It features a robust user authentication system, a searchable database of brewery locations, and a custom offline data-generation pipeline that uses LLMs (Llama.cpp) and Wikipedia to synthesize realistic seed data.

It features:

  • A .NET backend (Web API + database migrations/seed) under web/backend/
  • A server-rendered React website (React Router + Vite) under web/frontend/
  • A C++20 “pipeline” CLI for generating seed data under tooling/pipeline/

Specialized documentation (setup, architecture, docker, testing, diagrams, and pipeline notes) lives under docs/.

Documentation (Start Here)

Website + backend (active stack):

Data generation pipeline (C++):

Diagrams

Current Status

Active areas in the repository:

  • .NET 10 backend (layered architecture) + SQL Server
  • React 19 website (React Router 7 + Vite)
  • Shared Biergarten theme system + Storybook coverage
  • Auth flows and account/email integration (local Mailpit in dev compose)
  • Data generation pipeline with C++ and Llama.cpp

Archived/reference areas:

  • archive/next-js-web-app/ contains an older Next.js frontend retained for reference

Tech Stack

  • Backend: .NET 10, ASP.NET Core, SQL Server 2022, DbUp
  • Frontend: React 19, React Router 7, Vite 7, Tailwind CSS 4, DaisyUI 5
  • UI Documentation: Storybook 10, Vitest browser mode, Playwright
  • Testing: xUnit, Reqnroll (BDD), FluentAssertions, Moq
  • Infrastructure: Docker, Docker Compose
  • Security: Argon2id password hashing, JWT access/refresh/confirmation tokens
  • Data Pipeline: C++20, CMake, Boost, libcurl, SQLite, llama.cpp

Quick Start

For full setup details, use Getting Started. This section is the shortest path to a working dev environment.

Backend (Docker)

git clone https://github.com/aaronpo97/the-biergarten-app
cd the-biergarten-app

cp web/.env.example web/.env.dev
docker compose --env-file web/.env.dev -f web/docker-compose.dev.yaml up --build -d

Backend access:

Frontend (Node)

cd web/frontend
npm install
API_BASE_URL=http://localhost:8080 SESSION_SECRET=dev-secret-change-me npm run dev

Optional frontend tools:

cd web/frontend
npm run storybook
npm run test:storybook
npm run test:storybook:playwright

Repository Structure

web/
  backend/          .NET API + domain/service/infrastructure + DB projects
  frontend/         React Router website + Storybook + Playwright/Vitest

tooling/
  pipeline/         C++20 seed-data generation CLI (CMake)

docs/
  architecture.md   High-level architecture overview
  website/          Backend/frontend setup, docker, testing, diagrams
  pipeline/         Pipeline docs, ethics notes, PlantUML diagrams

archive/
  next-js-web-app/  Older Next.js frontend (reference only)

Testing

Run the backend test stack with Docker:

docker compose --env-file web/.env.test -f web/docker-compose.test.yaml up --abort-on-container-exit

See Testing for the full command list.

Configuration

Common active variables:

  • Backend/Docker: DB_SERVER, DB_NAME, DB_USER, DB_PASSWORD, ACCESS_TOKEN_SECRET, REFRESH_TOKEN_SECRET, CONFIRMATION_TOKEN_SECRET, WEBSITE_BASE_URL
  • Frontend runtime: API_BASE_URL, SESSION_SECRET, NODE_ENV

See Environment Variables for details.

Contributing

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request
Languages
C# 47.5%
C++ 26.8%
TypeScript 14.5%
HTML 2%
Gherkin 2%
Other 7.2%