Building "Dev Wrapped" in 3 Days: A daily.dev Hackathon Project (API + LLM + OG Images)

Leader posted 1 min read

daily.dev ran a 3-day hackathon (May 20–23, 2026) opening up their Public API. I built Dev Wrapped — Spotify Wrapped, but for your daily.dev reading history. This post walks through how I shipped it, what choices I made, and what I'd do differently.

Live demo: https://hackathon-one-eta.vercel.app

The product
Paste your daily.dev Personal Access Token → get back a shareable card showing:

Total articles read in the timeframe
Top 5 tags with article counts
Top 3 sources
Reading rhythm (peak day / peak month)
An AI-generated "developer persona" — a 2–4 word archetype name with a one-sentence blurb
A permalink with a dynamic OG image for social sharing

The architecture
The whole thing is intentionally simple, because 5-day projects fall apart when you over-engineer:
User → React/TypeScript frontend (PAT input)

 → Vercel serverless function (generate)
       → daily.dev Public API (fetch reading history)
       → Stats engine (compute top tags, sources, rhythm)
       → Groq LLM (generate persona, JSON-constrained output)
       → Store result keyed by short ID
 → Redirect to /wrapped/{id}
 → Dynamic OG image rendered server-side
 → Share button (pre-filled tweet)

No database in the traditional sense. No auth system. No user accounts. PAT in → result out → never stored.
Design decisions worth talking about
PAT auth eliminates 80% of the work. The user brings their own daily.dev credential. I never have to build login, sessions, OAuth, or a user table. One API call uses their PAT, then it's discarded. This pattern is wildly underused for demo and hackathon projects.
Strict JSON output from the LLM. The persona prompt ends with: "Return ONLY valid JSON in this exact format, no markdown, no preamble." The schema is { personaName, personaBlurb }. Two upsides: trivial parsing with JSON.parse(), and the output structure is enforced. If the LLM fails to return valid JSON (rare), I fall back to a generic persona rather than crashing.

More Posts

How I Built a React Portfolio in 7 Days That Landed ₹1.2L in Freelance Work

Dharanidharan - Feb 9

I’m a Senior Dev and I’ve Forgotten How to Think Without a Prompt

Karol Modelskiverified - Mar 19

Everyone says DeepSeek is cheaper, but I got tired of guessing the exact math. So I built a calculat

abarth23 - Apr 27

TypeScript Complexity Has Finally Reached the Point of Total Absurdity

Karol Modelskiverified - Apr 23

Sovereign Intelligence: The Complete 25,000 Word Blueprint (Download)

Pocket Portfolio - Apr 1
chevron_left

Related Jobs

View all jobs →

Commenters (This Week)

2 comments
1 comment

Contribute meaningful comments to climb the leaderboard and earn badges!