Aaron Po 60a7b790d4 Scaffold vertical-slice migration: Shared.Contracts, Shared.Application, MediatR
Begins the move to vertical-slice architecture. ResponseBody moves out of
API.Core into Shared.Contracts so slices won't have to depend on the API
host project for it. Shared.Application adds the MediatR pipeline's
ValidationBehavior plus the cross-slice email commands that Features.Auth
will send and Features.Emails will handle, keeping slices decoupled from
each other.
2026-06-20 15:54:53 -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%