97acaf6b10
WEB-6a: Oeffentliche Webseite — Gestaltung & Grundseiten
...
- SiteRenderer: neues warmes, mobile-first CSS (Georgia-Headings, Scrollnav,
site-footer-nav mit Impressum/Datenschutz-Links)
- AbgabetiereList: Gruppen-Karten statt Einzelkarten (Becken-Gruppierung,
Geschlecht-Label, Verfuegbar-Badge, Foto-Strip, pro-Tier-Detail-Zeilen
mit Farbschlag + geboren-am + Persoenlichkeit/CharacterNote)
- SiteSnapshotService: ForSale-Snapshot um gender, dateOfBirth, characterNote
erweitert
- Migration AddImpressumDatenschutzPages: Impressum + Datenschutz als
Platzhalter-Seiten (footer-only, kein navOrder-Eintrag)
- SeedCms: Impressum/Datenschutz auch in HasData (SQLite-Tests)
- Tests: CmsTests angepasst (8 Seiten), 6 neue SiteRendererTests
(Gruppen-Karte, Geschlecht, Badge, DateOfBirth, Solo-Tier,
Impressum/Datenschutz, Footer-Links)
Gate: dotnet 131/131 + vitest 78/78 + e2e 94/94 + build clean
2026-06-06 15:15:54 +02:00
4dcd416ff6
WEB-1: static site renderer (SiteRenderer, dry-run endpoint, 22 tests)
...
GerbilManagerWebAPI/Cms/SiteRenderer.cs:
- Render(JsonObject snapshot) -> IReadOnlyDictionary<string,string> (path->content)
- Covers all 6 block types: Heading, RichText, Image, Gallery, ContactInfo,
AbgabetiereList (auto-resolved animals from snapshot; empty placeholder)
- start -> index.html; other slugs -> {slug}/index.html; assets/site.css
- Draft pages excluded; nav links with aria-current for current page
- Minimal Markdown->HTML (headings, bold, italic, code, links, ul/ol) --
no extra dependencies, deterministic output
- H() encodes only the 5 HTML special chars (not umlauts) for UTF-8 pages
- Mobile-first CSS: site header+nav, animal card grid, responsive breakpoints,
warm off-white palette (style reference: Jimdo Kleine Chaoten)
GerbilManagerWebAPI/Endpoints/CmsEndpoints.cs:
- GET /api/render-site -- dry-run: returns [{path, size}] for each rendered file
GerbilManager.Tests/SiteRendererTests.cs:
- 21 unit tests (pure JsonObject, no DB): file paths, HTML structure, each block
type, draft exclusion, XSS encoding, all 6 seeded pages, Markdown inline tests
- 1 integration test (ApiFactory): /api/render-site returns CSS + index.html
Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com >
2026-06-06 11:06:43 +02:00
94f055f9bf
WEB-0: CMS content model + /api/site-snapshot + Page/Block CRUD
...
- Entities: Site (singleton, navOrder JSON), Page (slug/title/seoDescription/status enum),
Block (single table, Type enum + Data JSON; RichText=Markdown), Media. Migration
AddCmsEntities, seeds 6 Jimdo-mirror pages (placeholder Heading each; abgabetiere also an
auto AbgabetiereList block) + Site singleton nav.
- GET /api/site-snapshot: one JSON doc (site nav + pages + ordered blocks {id,order,type,data});
AbgabetiereList(auto) resolved from live ForSale gerbils -> {name, farbschlag, group(=Becken),
photos[urls], aiSaleText:null} (no price per god). SiteSnapshotService.
- CRUD: GET/POST/PUT/DELETE pages; add/update/delete blocks; PUT .../blocks/order reorder.
Block type allowlisted by enum; data validated as JSON object.
2026-06-06 09:21:20 +02:00