Inspiration
Every developer I know has fifty repos and no idea what story they tell. The startup they should be building isn't on Twitter or in a YC essay — it's already in their git history. They just can't read it from the inside.
So I built the reader.
BLUEPRINT looks at any GitHub like a literary critic looks at a body of work: not to summarize one repo, but to spot the obsession running through all of them. Then it tells you the company you are already, slowly, accidentally building.
What it does
Four modes, one editorial pipeline.
/Decode — drop a GitHub username. Get back an archetype (one of ten), a builder score across four axes, a signature pattern, and a real, named next-startup idea tied to repos you actually wrote. Two alternative paths and a closing line worth screenshotting./matchFounder Match — two GitHubs in, one verdict out. Compatibility 1–10, where you'd agree, where you'd fight, the complementary edges. Should you cofound or quietly compete./teamTeam Scan — 2–6 builders. Composite archetype mix, collective score, single biggest capability, shared blind spot, and the cofounder you're missing./archive— every builder we've decoded, browsable. Filter by archetype or language.
Every report has a custom Open Graph image so shared links render as a designed object on X / LinkedIn / Slack.
How I built it
- Frontend — Next.js 16 (App Router, Turbopack, async
params/searchParams), React 19.2, Tailwind v4 with@theme inline, Fraunces variable serif for display, framer-motion for stagger animations on every report section. - AI — Claude Sonnet 4.6 via
@anthropic-ai/sdk, structured outputs viaoutput_config.format(json_schema), system-prompt caching across three editorial prompts (decode, match, team). One single-pass call per mode, no thinking,effort: "low"— chosen because demo latency kills wow factor and the prompt engineering is what makes the output shareable, not the reasoning depth. - Storage —
ReportStoreinterface with two adapters. In-memory by default. Neo4j adapter ready: setNEO4J_URI/NEO4J_USER/NEO4J_PASSWORDand the app auto-switches to AuraDB at boot. The Cypher schema creates a(:Builder)node per scan witharchetype,score,languages, full JSON payload. Match similarity is computed in pure JS; the graph is the persistence layer. - OG images —
next/ogImageResponse rendering 1200×630 share cards on/r/[username]/opengraph-imageand/match/[a]/[b]/opengraph-image. Same editorial palette, served at request time. - Hosting — Railway, deployed via
railway up. Pre-warmed with 8 builder reports so the archive is never empty on first visit.
The whole thing is a single Next.js app — no separate backend, no client/server split beyond what App Router gives you, no database for v1.
Challenges I ran into
- Next.js 16 dropped during the build.
paramsandsearchParamsbecame Promises;temperature/top_p/top_kgot removed on Claude Opus 4.7; assistant-message prefills started returning 400s on the 4.6 family. I rewrote the routes to await params, dropped sampling params, and switched the structured-output strategy from prefill tooutput_config.formatwith a JSON schema. - Designing a system prompt that doesn't produce AI slop. The default "summarize this GitHub" output is corporate, generic, and forgettable. Getting to lines like "You've written the thesis three times in three different repos — at some point that stops being research and starts being avoidance." required several iterations on tone rules, banned-word lists, archetype taxonomy, and structural rules ("each strength is one sentence, max 14 words, references an actual repo").
- Latency vs. quality. Opus 4.7 with
effort: "high"produced beautiful reports in ~32 seconds. Sonnet 4.6 witheffort: "low"andthinking: "disabled"matches the quality at ~15–20 seconds. For a live demo, that delta is the difference between a wow moment and a judge getting bored. I picked Sonnet. - Cold-start archive problem. The "structurally compatible builders" section at the bottom of each report depends on having other builders cached. Solved with a pre-warm script that hits 8 popular usernames after every deploy, so the archive is always populated.
Accomplishments I'm proud of
- Built the whole v1 + v2 surface in under 24 hours of focused build time. Around 4,000 lines, 50+ files, four product modes.
- The output is actually shareable. Real example for Dan Abramov's GitHub: "You are not a React developer. You are the writer React happened to need." For sindresorhus: "You've deposited 824,000 stars into an account you've never made a withdrawal from — it might be time to open a checking account."
- One pipeline, four products. Decode → Match → Team → Archive all share the storage layer, prompt caching, and editorial design system.
- Storage abstraction with a working Neo4j adapter — flip three env vars and the in-memory cache becomes a persistent graph. No application code changes.
- Clean editorial aesthetic — Fraunces serif, ink/paper/accent palette, magazine-cover OG cards.
What I learned
- Prompt engineering is product engineering. The system prompt is the single most load-bearing artifact in the codebase.
- Editorial voice > corporate voice for any LLM-generated text product. Banned-word lists work.
- Storage abstractions pay off even when you don't know yet if you'll need persistence. The hour spent building the
ReportStoreinterface unlocked the Neo4j track angle without a single rewrite. - For demo-driven products: optimize for latency before quality. A 15-second answer that's 90% as good wins against a 30-second answer that's 95% as good. Every time.
What's next for BLUEPRINT
/u/[login]/matches— a top-N similar-builders page driven by the graph instead of the in-memory list.- Privacy & opt-in. Public archive becomes opt-in so it's safe to scan strangers without surfacing their report by default.
- BLUEPRINT for orgs — point at a GitHub organization, get a composite team report + missing-cofounder profile. Paid tier.
- Per-IP rate limiting (Cloudflare Turnstile) before going wide. Each scan costs $0.03–0.05 in Anthropic credits and the OG images get hit by bots.
Built With
- anthropic
- claude-sonnet-4.6
- framer-motion
- fraunces
- github-api
- neo4j
- next.js
- railway
- react
- tailwindcss
- typescript
- vercel-og
Log in or sign up for Devpost to join the conversation.