Zach Gulick

Things I've built.

Product manager in Dublin. On the side I build data products and automations. Each one below covers what it is, the problem it solves, how it works and how I built it.

HypeTorch

Combines podcast mentions and talk time with Wikipedia views, Google News and Google Trends into one influence score, JORDN. Two companion scores, RODMN and PIPN, build on it to measure sentiment and popularity relative to social media reach.

Problem

Influence is still measured with old-school counts: impressions, likes, follows. Those show reach, not how much people actually care about someone.

How it works

Podcasts + Wikipedia + Google News + Trends → weekly pipeline → JORDN · RODMN · PIPN → REST API

HypeTorch home page: Moneyball for off-court performance
Status
Live
Role
Solo
Stack
Python · FastAPI · Postgres

Mandatory Timeout

Every WNBA story, video and podcast in one feed, pulled from 45 sources, tagged by player and team, with HypeTorch influence scores built in.

Problem

The WNBA is exploding, but newsrooms haven't caught up. Most outlets have two or three WNBA writers at most, so fans end up following 20 different sites, podcasts and channels.

How it works

45 sources → tag by player/team → one feed + HypeTorch scores

Mandatory Timeout front page with today's WNBA stories and the Heat Check leaderboard
Status
Live
Role
Solo
Stack
Next.js · Postgres · Vercel

Products

RareLanguages

An app for learning Gheg Albanian, the dialect spoken in Kosovo, with AI-generated lessons and translations.

Problem My wife's family speaks Gheg, but every online Albanian course teaches Tosk. So I built my own.

Lesson topic → OpenAI lesson + Gheg translations → validated → in-app lesson

Live · Solo · Next.js · Postgres · OpenAI API

ProofTimeline

Turns piles of unstructured documents into a timeline of key events, using semantic search.

Problem Law firms, consultancies and other regulated industries spend hours combing documents for key facts and dates.

Documents → semantic search → key events → timeline

Private beta · Solo · Next.js · MongoDB Vector Search · GPT-4o

Automations

Weekly family meal planner

Takes a baby-weaning menu and does all the prep: finds the recipes, builds a step-by-step cooking plan covering baby and adult meals, and fills the Tesco basket.

Problem Starting my son on solids meant cooking two sets of meals. Planning took hours, and batch cooking ate whole weekends.

Weaning menu → recipes → step-by-step plan (baby + adult) → Tesco basket

Runs weekly · Solo

Dog-Ear

My own read-it-later service. Bookmark an article, it gets an AI summary, and a weekly email rounds them up so I can mark them read.

Problem Pocket shut down and left me with no good way to save articles for later.

Bookmark → AI summary → Google Sheet → weekly digest email → mark as read

In use · Solo · n8n · Google Sheets

← All projects
LiveData product

HypeTorch

Influence scores for athletes and public figures that go beyond likes and follows.

Role
Solo: product, design, build
Timeline
Feb 2025 to present
Stack
Python · FastAPI · Postgres · Next.js
Built with
Claude Code
HypeTorch home page

The problem

Influence is still measured with old-school counts: impressions, likes, follows. Those show reach, not how much people actually talk about and care about someone.

What I built

A weekly pipeline that combines podcast mentions and talk time with Wikipedia views, Google News and Google Trends into a JORDN influence score. RODMN and PIPN build on it to measure sentiment and popularity relative to social media reach. Results are stored in Postgres and served through a versioned REST API, which also powers Mandatory Timeout. It started with the WNBA; a hospitality vertical followed in 2026.

How it works

  1. CollectPodcasts and web signals

    Podcast and YouTube transcripts, plus Wikipedia views, Google News and Google Trends.

  2. ClassifyWhat each mention is about

    Four signals vote on the context: zero-shot BART, sentence embeddings, linguistic rules and GPT.

  3. ScoreJORDN, RODMN, PIPN

    Every week: JORDN for influence, then RODMN for sentiment and PIPN for popularity relative to social reach.

  4. StorePostgres

    Scores are kept week by week, so trends and history stay queryable.

  5. ServeVersioned REST API

    Keyed and rate-limited. Powers the HypeTorch dashboard and Mandatory Timeout.

Key decisions

  • Evaluation harness first. Before tuning anything I built a harness to set the quality bar and catch regressions when prompts or models change.
  • An ensemble, not one model. Deciding what a mention is about uses four signals (zero-shot BART, sentence embeddings, linguistic rules and GPT), with confidence scores and quality gates on the output.
  • No manual step. GitHub Actions ingests, scores and publishes every Sunday, unattended.
  • API first. Versioned endpoints plus a partner API with keys, rate limits and tenant isolation, so Mandatory Timeout consumes scores the same way an outside customer would.

What's next

  • API Gateway integration
  • Public data dictionary
  • Data provenance policy
← All projects Next: Mandatory Timeout →
← All projects
LiveMedia product

Mandatory Timeout

Every WNBA story, video and podcast in one feed, with HypeTorch's first live integration built in.

Role
Solo: product, design, build
Timeline
Apr 2026 to present
Stack
Next.js · TypeScript · Drizzle · Postgres
Built with
Claude Code
Mandatory Timeout front page

The problem

The WNBA is exploding, but newsrooms haven't caught up. Most outlets have two or three WNBA writers at most, so fans end up following 20 different sites, podcasts and channels to keep up.

What I built

The Wire pulls articles, podcasts and YouTube videos from 45 sources (17 outlets, 9 podcasts and 19 channels) into one newest-first feed. Every item is tagged by player and team and links straight back to the publisher. Heat Check shows each player's weekly JORDN and PIPN scores from the HypeTorch partner API, and player pages bring the scores and the coverage together.

How it works

  1. Collect45 sources

    17 news outlets, 9 podcasts and 19 YouTube channels.

  2. IngestGitHub Actions

    RSS every 30 minutes, YouTube once a day to stay inside the API quota.

  3. TagPlayer and team

    Each item is matched to the players and teams it mentions.

  4. StorePostgres

    Items and tags via Drizzle, plus HypeTorch scores synced in weekly.

  5. ServeNext.js on Vercel

    The Wire, Heat Check and player pages.

Key decisions

  • Accurate tags over more tags. Team nicknames are everyday words (Dream, Sky, Sun), and early tagging was about 45% wrong: the alias "AT" alone tagged 2,364 items as Alyssa Thomas when 41 were about her. Short aliases now match case-sensitively, and a city name never counts on its own.
  • Ingestion off Vercel Cron. A full RSS pass takes about 10 minutes, far over the 60-second function limit. It now runs on GitHub Actions: RSS every 30 minutes, YouTube daily to stay inside the API quota.
  • A front page no single source can take over. Team channels post in bursts. The front page caps each source and content type while keeping date order, and relaxes the caps in a set order when it runs short.
  • Syncs that check themselves. The weekly HypeTorch sync fails if more than 10% of players can't be matched, then re-checks every stored score against the API. A separate CI check compares the schema against the live database.

What's next

  • Stats layer: box scores and season stats (pipeline built, not yet live)
  • Natural-language questions over stats and coverage
← All projects Next: RareLanguages →
← All projects
LiveLearning app

RareLanguages

Learn Gheg Albanian, the dialect that every Albanian course skips.

Role
Solo: product, design, build
Timeline
2025
Stack
Next.js · TypeScript · Postgres · OpenAI
Built with
Claude Code
RareLanguages home page

The problem

My wife's family speaks Gheg, the Albanian dialect spoken in Kosovo. Every online Albanian course teaches Tosk, the standard dialect, and big platforms don't cover languages this small at all.

What I built

A course for Gheg made of skill units and lessons: vocabulary, dialogue, grammar, pronunciation and exercises. The content comes from an offline pipeline that prompts OpenAI for each lesson, validates what comes back and loads it into Postgres. The site itself is read-only, so no AI call happens while someone is learning. It went from a fuzzy idea to a working product in weeks.

How it works

  1. PlanLesson topic

    Each skill unit is broken into lesson topics.

  2. GenerateOpenAI, offline

    Vocabulary, dialogue, grammar, pronunciation and exercises in Gheg.

  3. CheckValidate

    Output is checked before it goes anywhere near a learner.

  4. StorePostgres

    Courses, skills and lessons, with skills shared across levels.

  5. ServeRead-only Next.js app

    No AI calls while someone is learning.

Key decisions

  • Generate offline, not live. Lessons are produced and checked before anyone sees them, which keeps quality reviewable, pages fast and running costs near zero.
  • Read-only by design. The API only has GET routes, and a test fails the build if a write route appears.
  • Reusable skills. Skills link to courses through a join table, so one unit can appear at several levels without duplicate content.
  • Only show what's ready. Languages switch on only when they have lessons.

What's next

  • Welsh and Croatian: set up in the database, waiting on lesson content
← All projects Next: ProofTimeline →
← All projects
Private betaDocument AI

ProofTimeline

Turns a pile of messy documents into a timeline of what happened and when, with every event traced back to its source.

Role
Product, design, build
Timeline
2026
Stack
Next.js · MongoDB Atlas · VoyageAI · GPT-4o
Built with
Claude Code

The problem

Law firms, consultancies and other regulated industries spend hours combing documents for key facts and dates. When two documents disagree about when something happened, someone has to notice.

What I built

Upload 10 to 50 documents (PDFs, Word files, CSVs, social media exports). ProofTimeline stores, converts and indexes them in the background. One click on "Analyse" pulls out dated events, assembles them into a timeline and flags gaps and contradictions. Every event links back to the document and page it came from. The rule is "extract, don't interpret": it never scores or gives a verdict, so people make the judgement.

How it works

  1. UploadDocuments

    10 to 50 PDFs, Word files, CSVs or social media exports.

  2. IngestStore and index

    Saved to R2 with a SHA-256 fingerprint, converted to text and embedded for vector search.

  3. ExtractDated events

    GPT-4o pulls out events. Long documents are narrowed by vector search first.

  4. AssembleTimeline

    Gaps and contradictions flagged, every event linked to its source page.

  5. ReviewEdit and export

    Confirm, edit or delete events, then export a PDF report.

Built on DocVault

ProofTimeline runs on DocVault, a platform I built so several document products could share one backend. A shared core handles sign-in and multi-tenant organisations, file storage with integrity checks, vector search and the extraction engine; a shared UI kit keeps the apps consistent. The same core powers ScreenR, a due-diligence tool for private equity, and RFP Reader.

One app, several industries

Configuration rather than separate code adapts ProofTimeline to immigration law, construction, franchise monitoring and general chronology. Each industry gets its own terminology, extraction schemas and features.

Key decisions

  • Analyse on demand, not per upload. Files are processed as they arrive, but events are only extracted when the whole set is in, so the timeline sees everything at once.
  • Two extraction modes. Short documents go straight to the model. Long ones go through vector search first, so only the relevant passages are sent.
  • Same documents, same timeline. Early runs gave different timelines for identical inputs. Fixed with temperature 0, a fixed seed and a stable document order.
  • Tamper-evident evidence. Every document joins a SHA-256 hash chain that records upload order and chain of custody.

What's next

  • Candidate portal: an outside party uploads their own documents, with social media exports filtered in the browser so private messages never leave their device
  • Drone flight data as a timeline source (designed)
← All projects Next: HypeTorch →