fb3fc62b4b
Finding 3: fetch_error, not_found, mail_error and de onverwachte-fout branch loggen nu naam/url plus reden naar stderr; runCheck logt na elke run een regel met de tellingen per status, zodat een cron-run zichtbaar is in de container-logs. De recordCheckSuccess/recordCheckFailure-condities en alle return-waarden zijn ongewijzigd. Finding 4: server.js controleert bij het opstarten dat BASIC_AUTH_USER, BASIC_AUTH_PASS, SMTP_FROM en NOTIFY_EMAIL gezet zijn en stopt anders met exit code 1 in plaats van later opake 500's te geven. Finding 7: dotenv toegevoegd en als eerste regel in server.js geladen, zodat het gedocumenteerde `cp .env.example .env && npm start` echt werkt. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013gwc3aCiyQxmCWQke8RvEz
42 lines
1.4 KiB
Markdown
42 lines
1.4 KiB
Markdown
# Korting — prijstracker
|
|
|
|
Houdt een lijst productpagina's dagelijks in de gaten en mailt wanneer
|
|
de prijs verandert.
|
|
|
|
## Lokaal draaien
|
|
|
|
```bash
|
|
npm install
|
|
cp .env.example .env # env vars invullen
|
|
npm test
|
|
npm start
|
|
```
|
|
|
|
De app leest `.env` in via `dotenv`. `BASIC_AUTH_USER`, `BASIC_AUTH_PASS`,
|
|
`SMTP_FROM` en `NOTIFY_EMAIL` zijn verplicht; ontbreken ze, dan stopt de
|
|
app bij het opstarten met een melding.
|
|
|
|
De UI staat achter basic auth (`BASIC_AUTH_USER` / `BASIC_AUTH_PASS`) op
|
|
`http://localhost:3000`.
|
|
|
|
## Environment variables
|
|
|
|
| Variabele | Omschrijving |
|
|
|---|---|
|
|
| `PORT` | HTTP-poort (default `3000`) |
|
|
| `DB_PATH` | Pad naar het SQLite-bestand (default `./data/korting.db`) |
|
|
| `BASIC_AUTH_USER` / `BASIC_AUTH_PASS` | Login voor de web-UI |
|
|
| `SMTP_HOST` / `SMTP_PORT` / `SMTP_USER` / `SMTP_PASS` | SMTP-server (Postal op `mail.sjoerd.app`) |
|
|
| `SMTP_FROM` | Afzenderadres van de notificatiemails |
|
|
| `NOTIFY_EMAIL` | Ontvangeradres van de notificatiemails |
|
|
|
|
## Hoe het werkt
|
|
|
|
Elke dag om 08:00 (Europe/Amsterdam) doorloopt de app alle producten,
|
|
haalt de huidige prijs op (JSON-LD → meta tags → regex-fallback), en
|
|
stuurt een email als de prijs is veranderd sinds de vorige geslaagde
|
|
check. Een mislukte poging (pagina onbereikbaar, geen prijs gevonden,
|
|
of de mail kon niet verstuurd worden) verandert de opgeslagen prijs
|
|
niet, zodat de volgende dag opnieuw wordt geprobeerd. Via de "Nu
|
|
controleren"-knop in de UI kan dit ook handmatig getriggerd worden.
|