O projekcie
Publiczny przykład aplikacji do scrapowania Wikipedii z panelem użytkownika, filtrami stron i modelem subskrypcji. Powstał jako adaptacja prywatnego repozytorium autora (newsletter-scraper) na domenę Wikipedia Page — zachowano architekturę (Docker + Go API + scraper + Nuxt + panel), przepisano modele i UI pod strony Wikipedia.
Repozytorium: github.com/kopolot/example-wikipedia-scraper
Architektura
Przeglądarka (Nuxt 4) → Nginx :8080 → Go API
→ Go scraper (chromedp)
→ Go notify (cmd/notify)
PostgreSQL · Redis · RabbitMQ · MailHog
W dev wszystko stoi za jednym reverse proxy (localhost:8080): dashboard, API, MailHog, Adminer, RabbitMQ management.
Stack
| Warstwa | Technologie |
|---|---|
| Backend | Go 1.25, Gin, GORM, golang-migrate, JWT, idempotency (Redis) |
| Scraper | chromedp, pula przeglądarek, proxy per-site, retry przy 403/rate-limit |
| Frontend | Nuxt 4, Vue 3, i18n PL/EN |
| Infra | Docker Compose, Nginx, PostgreSQL 17, RabbitMQ, MailHog |
Kluczowe elementy
Scraper
Worker zapisuje nowe pages z notified = false. JS scrapers w app/resource/scraper/js/, konfiguracja sites_to_scrape (domyślnie wikipedia.pl).
Panel użytkownika
Rejestracja → weryfikacja e-mail (MailHog) → logowanie JWT. CRUD filtrów na /panel/wanted_filters — wymaga aktywnej subskrypcji.
| Plan | Limit filtrów |
|---|---|
| Basic | 3 |
| Premium | 10 |
Subskrypcje i płatności
Flow: panel → wybór planu → POST /order/ → redirect na example payment (stub PSP) → RabbitMQ przedłuża subscription_level i subscription_expiration.
Notifier (cmd/notify)
Dopasowuje filtry użytkowników z aktywną subskrypcją do nowych stron, kolejka page_notification, maile HTML (PageNotificationEmail).
Jakość i pochodzenie
Migracje 000001–000009 (users, pages, filtry, orders, seed Basic/Premium). Projekt powstał iteracyjnie z Cursorem — diff między repozytoriami, adaptacja DTO/migracji, świadome pominięcie elementów spoza domeny (Grafana, produkcyjne PSP).