Projekty

Open Source

Wiki Scraper Newsletter

Go
Nuxt
Scraping
Docker
Open Source

Publiczny przykład aplikacji full-stack — scraper Wikipedii (chromedp), panel Nuxt 4, filtry stron, subskrypcje Basic/Premium, example payment i powiadomienia e-mail.

browser Nuxt 4 /dashboard/ Nginx :8080 Go API Gin · JWT · Redis Go scraper chromedp · wikipedia.pl Go notify cmd/notify · email PostgreSQL shared by API · scraper · notify Redis RabbitMQ MailHog (API + notify) filters: Basic 3 · Premium 10 POST /order/ · example PSP page_notification → email Docker Compose · each worker reads/writes PostgreSQL Wiki Scraper Newsletter Nuxt 4 · Go · PostgreSQL · RabbitMQ

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).