How ianmllr/tech-tilbud works
Tech-tilbud gathers Danish subscription-linked tech offers, compares their six-month costs with market prices, and lets users browse savings and request an expiry reminder. The main flow runs from provider and price scrapers through offer normalization into the searchable listing; reminders are a separate persistence-and-email flow. The sampled source confirms the listing filters, reminder endpoints, and market-price matching. Other scraper wiring and the reminder dispatch schedule are not shown, so those connections are left out.
Main entry points: useOffers.ts Search and filters · route.ts Due reminder sender · offers.ts Offer catalog · page.tsx Offer listing
Components 16
Offer collection
- Provider scrapers
scrapers - Scraper utilities
scrapers/scraper_utils.py - Market price scrapers
scrapers/pricerunner_scraper.py
Offer comparison
- Offer catalog
src/lib/offers.ts - Offer model
src/types/offer.ts
Web experience
- Offer listing
src/app/page.tsx - Search and filters
src/hooks/useOffers.ts - Offer details
src/components/OfferCard.tsx - Reminder page
src/app/reminder/page.tsx - Reminder form
src/components/ReminderForm.tsx
Reminder service
- Reminder registration
src/app/api/reminders/route.ts - Reminder database
src/lib/db.ts - Due reminder sender
src/app/api/reminders/send/route.ts
Other components
- Visitor
- PriceRunner / Prisjagt
- Resend email
Connections 13
- Provider scrapers → Scraper utilities: use utilities
- Market price scrapers → PriceRunner / Prisjagt: scrape prices
- Offer catalog → Offer model: maps offers
- Offer listing → Search and filters: requests results
- Search and filters → Offer catalog: filters and sorts
- Search and filters → Offer details: supplies offers
- Visitor → Offer listing: browses offers
- Visitor → Reminder page: requests reminder
- Reminder page → Reminder form: renders form
- Reminder form → Reminder registration: submits reminder
- Reminder registration → Reminder database: stores reminder
- Due reminder sender → Reminder database: reads due; deletes sent
- Due reminder sender → Resend email: sends email