Aaron Po 98083ab40c Pipeline: add CURL/WebClient & Wikipedia service
Introduce a pluggable web client interface and concrete CURL implementation: adds IWebClient, CURLWebClient, and CurlGlobalState (headers + curl_web_client.cpp). DataDownloader now accepts an IWebClient and delegates downloads. Add WikipediaService for cached Wikipedia summary lookups. Refactor SqliteDatabase to return full City records and update consumers accordingly. Improve JsonLoader to use batched transactions during streaming parses. Enhance LlamaGenerator with sampling options, increased token limits, JSON extraction/validation, and other parsing helpers. Modernize CMake: set policy/version, add project_options, simplify FetchContent usage (spdlog), require Boost components (program_options/json), list pipeline sources explicitly, and tweak post-build/memcheck targets. Update README to match implementation changes and new CLI/config conventions.
2026-04-02 16:29:16 -04:00

The Biergarten App

The Biergarten App is a multi-project monorepo with a .NET backend and an active React Router frontend in src/Website. The current website focuses on account flows, theme switching, shared UI components, Storybook coverage, and integration with the API.

Documentation

Diagrams

Current Status

Active areas in the repository:

  • .NET 10 backend with layered architecture and SQL Server
  • React Router 7 website in src/Website
  • Shared Biergarten theme system with a theme guide route
  • Storybook stories and browser-based checks for shared UI
  • Auth demo flows for home, login, register, dashboard, logout, and confirmation
  • Toast-based feedback for auth outcomes

Legacy area retained for reference:

  • src/Website-v1 contains the archived Next.js frontend and is no longer the active website

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

Quick Start

Backend

git clone https://github.com/aaronpo97/the-biergarten-app
cd the-biergarten-app
cp .env.example .env.dev
docker compose -f docker-compose.dev.yaml up -d

Backend access:

Frontend

cd src/Website
npm install
API_BASE_URL=http://localhost:8080 SESSION_SECRET=dev-secret npm run dev

Optional frontend tools:

cd src/Website
npm run storybook
npm run test:storybook
npm run test:storybook:playwright

Repository Structure

src/Core/          Backend projects (.NET)
src/Website/       Active React Router frontend
src/Website-v1/    Archived legacy Next.js frontend
docs/              Active project documentation
docs/archive/      Archived legacy documentation

Key Features

Implemented today:

  • User registration and login against the API
  • JWT-based auth with access, refresh, and confirmation flows
  • SQL Server migrations and seed projects
  • Shared form components and auth screens
  • Theme switching with Lager, Stout, Cassis, and Weizen variants
  • Storybook documentation and automated story interaction tests
  • Toast feedback for auth-related outcomes

Planned next:

  • Brewery discovery and management
  • Beer reviews and ratings
  • Social follow relationships
  • Geospatial brewery experiences
  • Additional frontend routes beyond the auth demo

Testing

Backend suites:

  • API.Specs - integration tests
  • Infrastructure.Repository.Tests - repository unit tests
  • Service.Auth.Tests - service unit tests

Frontend suites:

  • Storybook interaction tests via Vitest
  • Storybook browser regression checks via Playwright

Run all backend tests with Docker:

docker compose -f docker-compose.test.yaml up --abort-on-container-exit

See Testing for the full command list.

Configuration

Common active variables:

  • Backend: DB_SERVER, DB_NAME, DB_USER, DB_PASSWORD, ACCESS_TOKEN_SECRET, REFRESH_TOKEN_SECRET, CONFIRMATION_TOKEN_SECRET
  • Frontend: 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

Development Workflow

  1. Start development environment: docker compose -f docker-compose.dev.yaml up -d
  2. Make changes to code
  3. Run tests: docker compose -f docker-compose.test.yaml up --abort-on-container-exit
  4. Rebuild if needed: docker compose -f docker-compose.dev.yaml up -d --build api.core

Support

Languages
TypeScript 76.4%
C# 18.7%
Gherkin 1.3%
HTML 1.1%
CSS 1%
Other 1.4%