Skip to content

Repository files navigation

🚀 PulseDigest

Architected & Developed by Dominik

Headless batch application that collects tech news from 16 sources twice a week (Mon/Thu), scores items with GPT-4o, detects cross-source signals (the same topic surfacing in Science + Code + Business = 🔴 Critical Trend), tracks per-source health, and delivers a tier'd, prioritized digest to your inbox — with a must-know hero block, deals & tools, critical trends, top picks, and signals.

Java 26 Spring Boot 4.1 Spring AI 2.0 Supabase Architecture Quality Gate Coverage

🧠 The Vision: Signal over Noise

In the era of AI-driven information overload, this tool is my personal solution to maintain situational awareness without manual scrolling. Every collected item gets a 1–10 score and a category; only what clears the threshold reaches the digest, and a topic surfacing in unrelated sources within the same run is flagged as a trend. It's not just a scraper — most of what it collects never reaches the inbox.

How it works

Twitter/X             ──┐
Hacker News             ┤
GitHub                  ┤
RSS feeds (30)          ┤
Reddit (8 subs)         ┤
arXiv                   ┤
GitHub Releases         ┤
Hugging Face Hub        ├─► MarketResearchService ─► GPT-4o synth ──► Supabase save ─► Resend email
Product Hunt            ┤   (parallel fetch,         (score 1-10,
GitHub Advisories       ┤    URL canonicalization,    category, type,
OpenJDK JEP             ┤    2-10 day window)         editorial, PL)
CNCF Landscape          ┤
Tech Radar              ┤
YouTube Conferences     ┤
AI-lab announcements    ┤
Social (Bsky/Mastodon)  ┘

Each stage, the full source list, the two-dimensional classification and the reader model are described in docs/how-it-works.md.

Documentation

  • What the pipeline doesdocs/how-it-works.md — stages, sources, scoring and categorization, and the reader model that adapts over time.
  • What lands in the inboxdocs/digest-email.md — the anatomy of the digest and the 👍/👎 feedback loop that feeds back into scoring.
  • Tuning itdocs/configuration.md — every key under the report: prefix, and which ones accept an environment override.
  • Running and shipping itdocs/running-locally.md — tech stack, local setup, Flyway migrations and the GitHub Actions workflow.
  • Design decisionsADR-0002 (hexagonal architecture) · ADR-0006 (virtual threads over WebFlux) · ADR-0007 (Result<T,E> over exceptions) · all ADRs.

Prerequisites

  • JDK 26 (Oracle EA or Temurin)
  • Twitter API v2 Bearer Token
  • OpenAI API key (GPT-4o + GPT-4o-mini for the tech-demand narrative)
  • Resend account + API key
  • Supabase project (free tier — Postgres for report history)
  • Docker Desktop (for Testcontainers when running ./gradlew test)
  • (Optional) Product Hunt developer token, YouTube Data API key — without them the respective adapters degrade gracefully (return empty list, log warn, pipeline keeps running)

Build commands

./gradlew clean build      # full build
./gradlew check            # Checkstyle + tests + ArchUnit + JaCoCo coverage gate
./gradlew compileJava      # compile only
./gradlew bootJar          # production JAR → build/libs/
./gradlew test             # unit + integration tests
./gradlew sonar            # SonarCloud analysis (needs SONAR_TOKEN; run after test + jacocoTestReport)
./run.sh                   # run locally (sources .env automatically)

License

MIT

About

Headless Java and Spring Boot batch application that collects tech news on a fixed schedule, scores items with an LLM, detects the same topic surfacing across unrelated sources, tracks per-source health and emails a prioritised digest.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages