Skip to content
Architecture

Architecture

System Overview

                    +-----------+
                    |  Sources  |  (RSS feeds, blog scraping)
                    +-----+-----+
                          |
                    +-----v-----+
                    |  Scanner  |  internal/scanner
                    +-----+-----+
                          |
                    +-----v-----+
                    | Clustering |  internal/cluster
                    +-----+-----+
                          |
              +-----------v-----------+
              |      AI Pipeline      |  internal/ai
              |  Generator -> Critic  |
              |  -> Revision -> Score |
              +-----------+-----------+
                          |
                    +-----v-----+
                    |  Images   |  internal/images
                    | Search +  |
                    |  Scoring  |
                    +-----+-----+
                          |
              +-----------v-----------+
              |   Article Manager     |  internal/article
              | (status, revisions)   |
              +-----------+-----------+
                          |
              +-----------v-----------+
              |      Web Server       |  internal/web
              | Public + Admin + API  |
              +-----------+-----------+
                          |
              +-----------v-----------+
              |   SQLite Database     |  internal/db
              +-----------------------+

Key Components

PackageDirectoryPurpose
Scannerinternal/scannerFetches RSS feeds and scrapes blog pages on configurable intervals
Clusteringinternal/clusterGroups raw articles about the same topic using content similarity
AI Pipelineinternal/aiGenerates articles, runs dual-critic verification, handles revisions
Article Managerinternal/articleManages article lifecycle (draft, pending, approved, rejected) and revisions
Web Serverinternal/webHTTP server with public pages, admin dashboard, and JSON API
Databaseinternal/dbSQLite database with WAL mode, migrations, and model definitions
Schedulerinternal/schedulerCron-based job scheduling for scanning, newsletter, and maintenance
Imagesinternal/imagesMulti-source image search and two-phase AI scoring
Metricsinternal/metricsPrometheus metrics for monitoring (critic scores, image search, pipeline)
Newsletterinternal/newsletterDaily newsletter generation and email delivery
Configinternal/configYAML configuration loading with environment variable interpolation
Votesinternal/voteReader voting system with anomaly detection alerts

Database Tables

The application uses SQLite with the following tables:

TablePurpose
sourcesBlog sources with RSS URLs and scrape selectors
raw_articlesScraped articles with content-hash deduplication
generated_articlesAI-generated articles with status, metadata, and structured fields
article_sourcesMany-to-many link between generated and raw articles
verification_resultsCritic scores and check results per revision
admin_feedbackAdmin or email feedback on articles
article_revisionsRevision history with before/after content
article_votesReader upvote/downvote records (IP-hashed)
newslettersGenerated newsletter records with send status
subscribersEmail subscribers with double opt-in confirmation
admin_sessionsSession tokens with expiry
reference_pagesCurated reference pages (credit cards) with structured sections

Tech Stack

LayerTechnology
LanguageGo
DatabaseSQLite (WAL mode) via modernc.org/sqlite
AI ModelsNVIDIA API (Nemotron, Llama 70B, Llama Vision)
HTTPGo standard library net/http
TemplatesGo html/template
RSS Parsinggofeed
HTML Scrapinggoquery
Schedulingrobfig/cron
Emailgomail (SMTP), go-imap (IMAP)
MetricsPrometheus client
HostingOCI ARM (free tier), Caddy reverse proxy, systemd