Manuelles Astro-5-Setup mit Node-Adapter (standalone-SSR), keine
Tailwind/UI-Framework — schlankes inline-CSS, mobile-first.
- apps/web/src/pages/
- index.astro Liste + Filter-Form (country/region/q als GET-State)
- heute.astro Heute-only Variante mit Datums-Bereich
- event/[slug].astro Detail mit Attribution-Footer (Quelle + Crawl-Datum)
- venue/index.astro alle Venues, Country-Filter
- venue/[slug].astro Detail + upcoming-Events (Client-Filter weil
Server-Filter by venue_id noch nicht da)
- takedown.astro mailto-CTA + Verweis auf AGGREGATOR_POLICY
- src/components/EventCard.astro, FilterBar.astro
- src/lib/api.ts Typed SSR-Client gegen :3095
- src/lib/format.ts de-DE Intl.DateTimeFormat (Europe/Berlin),
Country-Flags, truncate
- src/layouts/Base.astro: Header mit Nav (Alle/Heute/DE/CH/Orte),
Footer mit Take-Down-Hinweis
Build: astro build grün (1.06s). Live-Smoke gegen leere DB:
- / → 200 mit "Noch keine Events" + Filter-Form ✓
- /heute → 200 ✓
- /venue → 200 ✓
- /takedown?event=foo → 200 mit mailto-Link für foo ✓
- /event/nope → 404 ✓
Layout-Entscheidungen:
- Hot-Link für Bilder (`referrerpolicy="no-referrer"`) — AGGREGATOR
_POLICY §3 Default.
- Quell-Attribution sichtbar pro Event-Karte (Domain + Crawl-Datum
+ Original-Link).
- Filter sind URL-State (teilbar), Form GET — kein JS-Island nötig.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
15 lines
469 B
JavaScript
15 lines
469 B
JavaScript
import { defineConfig } from 'astro/config';
|
|
import node from '@astrojs/node';
|
|
|
|
// Node-Adapter im standalone-Mode: ein einzelner Process, `node dist/server/entry.mjs`
|
|
// startet den Server. SSR ist Default — wir wollen, dass neue Events
|
|
// nach Re-Crawl ohne Astro-Rebuild sichtbar werden.
|
|
export default defineConfig({
|
|
output: 'server',
|
|
adapter: node({ mode: 'standalone' }),
|
|
server: {
|
|
port: 3096,
|
|
host: '0.0.0.0',
|
|
},
|
|
site: 'https://seepuls.mana.how',
|
|
});
|