DEV Community

Cover image for Rekindle: your abandoned side project misses you 🔥
Dan Mercede
Dan Mercede

Posted on

Rekindle: your abandoned side project misses you 🔥

This is a submission for Weekend Challenge: Passion Edition

What I Built

Every developer has one: the side project you started with real love, pushed afew passionate commits to, and then... life. The tab closed. The flame wentquiet. Mine is spark, an intentionsetting app I started for my partner and me as the new year turned. One commit.190 days of silence.

Rekindle is a coach for exactly that repo. Paste a dormant GitHub projectand it gives you three things:

  1. A diagnosis: why the flame died, read honestly from your commit cadenceand the gap between README ambition and what got built.
  2. A rekindle plan: three steps, the first one deliberately small enough todo in under 15 minutes tonight.
  3. A corner speech: a roughly 90-word hype speech about YOUR project, byname, delivered out loud like a cornerman between rounds.

The theme is passion. This is the tool for the week after the passion: the onethat gets you to open the project again.

Demo

Live app: https://rekindle-sooty.vercel.app

Try it on any public GitHub repo you've gone quiet on. If you just want to seea result instantly, this linkrenders a frozen real result (a live run against my abandoned spark repo,with the real ElevenLabs audio). Everything else is computed live per request.

Code

GitHub logo OrionArchitekton / rekindle

Your abandoned side project misses you. Gemini diagnoses why the flame died; ElevenLabs delivers the comeback speech. DEV Weekend Challenge: Passion Edition.

🔥 Rekindle

Your abandoned side project misses you.

Paste a dormant GitHub repo. Rekindle reads its README, recent commits, and top-level files, then delivers three things:

  1. A diagnosis: why the flame died, read honestly from the commit cadence and the gap between README ambition and reality.
  2. A rekindle plan: three steps, the first one small enough to do in under 15 minutes tonight.
  3. A corner speech: a roughly 90-word hype speech about YOUR project, by name, spoken out loud like a cornerman between rounds.

Built for the DEV Weekend Challenge: Passion Edition because passion is also the love that fuels late-night side projects, and every developer has one whose flame went quiet.

How it works

GitHub URL --> GitHub API (README, commits, tree)
                 |
                 v
          Gemini 2.5 Flash (temperature 0, JSON output)
                 |  diagnosis + embers + plan + hype speech
                 v
          ElevenLabs TTS --> your
…

How I Built It

Next.js 16 (App Router) with two server routes and a deliberately smallsurface:

GitHub URL --> GitHub API (README, last commits, file tree)
                 |
                 v
        Gemini 2.5 Flash (temperature 0, JSON output, thinking off)
                 |   diagnosis + embers + plan + hype speech
                 v
        ElevenLabs TTS --> the corner speech, out loud
Enter fullscreen mode Exit fullscreen mode

Google AI does the reading. /api/rekindle snapshots the repo (metadata,README excerpt, last 10 commits, top-level files) and hands it to Gemini 2.5Flash with temperature: 0, responseMimeType: application/json, and thinkingdisabled, so output is fast, stable, and cheap. The interesting part wasthe failure I hit first: with thinking enabled, Gemini's reasoning tokens countagainst maxOutputTokens, so my 2048 cap silently truncated the JSON mid-fieldand my parser (correctly) rejected it. Thinking off + a bigger cap fixed it.The model output is schema-validated and length-clamped server-side; anythingmalformed renders as an error, never as half-parsed UI.

ElevenLabs does the believing. The hype speech only lands when you hear it.One catch: a public TTS endpoint on a server-side key is a free-for-all walletdrain, so /api/rekindle HMAC-signs the speech text it generates and/api/speak refuses anything unsigned (I verified the refusal with aforged-token test, and rate limits sit on both routes). Nobody gets to use mykey as a generic text-to-speech proxy.

Honest demo mode. /?demo=1 server-renders a frozen result so the demo isdeterministic. The frozen content is a real captured output from a live run,checked in with its matching real audio, and the page discloses it.

Unit tests cover the pure core (URL parsing, prompt build, defensive JSONparse). Built end-to-end in a Claude Code session (Claude Fable 5); the committrailers carry the co-author record, and I made the calls on idea, scope, andsubmission.

Prize Categories

Best Use of Google AI and Best Use of ElevenLabs: Gemini 2.5 Flashreads the repo and writes the diagnosis, plan, and speech as strict JSON;ElevenLabs (eleven_multilingual_v2) turns the speech into the voice in yourcorner. The two are chained: what Gemini writes about your specific repo isexactly what ElevenLabs says out loud.

Thanks for reading. Now go run npm install on the one you know I'm talkingabout. 🔥

Top comments (0)