Case study · EdTech / Developer tools
Repo DiveA daily training system for reading production code
Repo Dive recommends one open-source repository a day, matched to what a developer wants to learn and what they have already read — with a written reason, one thing to focus on, the files to open in order, and three questions to answer afterwards.

The challenge
Developers who want to learn from real-world code have no structured way to do it. Browsing GitHub Trending is easy to skip, and an early version of the product picked repositories at random, so what someone had already studied never changed what came next.
The solution
A deterministic eight-signal ranking model (relevance, novelty, health, readability, documentation, diversity, maturity, and difficulty fit) chooses each dive. No language model is involved, so every recommendation can explain itself and every regression shows up in tests.
What we built
- Daily dive plan: why this repository, a learning focus, difficulty, estimated time, key files in reading order, and three comprehension questions
- A learning record built on a closed vocabulary of around 55 concepts, with a progress page and suggested next step
- Feedback that changes future picks ("knew this already", "too hard", "too easy")
- Snapshots archived to a private repository on the user's own GitHub account
- Daily, weekly-digest, and re-engagement emails; streaks with recovery
- A statically prerendered marketing site and learning guides
Architecture
- Application
- Next.js 16 (App Router), React 19, Tailwind CSS v4
- Data
- Supabase Postgres and Auth, with versioned SQL migrations
- Integrations
- GitHub via Octokit (content source and user archive), Resend for email
- Operations
- Vercel hosting, GitHub Actions cron for daily dives, digests, and re-engagement
Engineering challenges
- Idempotent daily jobs: at-least-once cron delivery can never archive or commit the same dive twice
- GitHub tokens encrypted with AES-256-GCM in a table no client-facing role can read
- Column-level grants on top of row-level security, so users cannot write server-owned fields such as streaks
- Pure, database-free modules for scoring, streaks, and scheduling, tested with the Node test runner


