bc98a19fc624393f464a576cc92859883d307e75
Complete implementation including: - Express server with Bessa API proxy - Puppeteer scraper for menu data - Flag storage (file-based persistence) - SSE manager for real-time updates - Polling orchestrator for distributed polling - Frontend with weekly view, ordering, and flagging UI - Yellow/green glow indicators for flagged items
Bessa Knapp-Kantine Menu Scraper
Automatischer Menü-Scraper für die Knapp-Kantine basierend auf https://web.bessa.app/knapp-kantine.
Setup
-
Dependencies installieren:
npm install -
Credentials konfigurieren:
cp .env.example .env # Dann .env bearbeiten und echte Zugangsdaten eintragen -
TypeScript kompilieren:
npm run build
Usage
Menüs scrapen
# Development mode (mit TypeScript direkt)
npm run dev
# Production mode (kompiliertes JavaScript)
npm run build
npm run scrape
Scraper-Ablauf
- Öffnet Browser (Puppeteer)
- Akzeptiert Cookies
- Klickt "Pre-order menu"
- Loggt sich ein (mit Credentials aus
.env) - Navigiert durch Kalenderwochenansicht
- Extrahiert Menüdaten für jeden Tag
- Speichert alles in
data/menus.json
Output
Die gescrapten Daten werden in data/menus.json gespeichert:
{
"lastUpdated": "2026-02-02T10:00:00.000Z",
"weeks": [
{
"year": 2026,
"weekNumber": 6,
"days": [
{
"date": "2026-02-03",
"weekday": "Monday",
"items": [
{
"id": "2026-02-03_M1_Herzhaftes",
"name": "M1 Herzhaftes",
"description": "Rindsuppe mit Backerbsen / Puten Tikka Masala...",
"price": 5.5,
"available": true
}
]
}
]
}
]
}
Development
npm run dev- Run scraper in development mode with tsxnpm run build- Compile TypeScript to JavaScriptnpm run type-check- Check TypeScript types without building
Debugging
Setze PUPPETEER_HEADLESS=false in .env um den Browser sichtbar zu machen.
Sicherheit
⚠️ WICHTIG: Die .env-Datei enthält Zugangsdaten und darf niemals ins Git committed werden!
Description
Languages
JavaScript
61.7%
CSS
24.8%
Shell
13.5%