
MiniHack
Last week I competed in the Alto Defense Hackathon with Junction. I didn't know anything about defense tech going in. Just 24 hours, a vague problem statement, and a lot of caffeine.
By the end, I'd learned more about embedded AI, drone autonomy, and shipping under constraints than I had in months of reading online. It was brutal and brilliant.
That's when it hit me: hackathons are the best learning tool I've found. You pick a real problem, you build something, someone judges your work. No theory. Just tension → execution → feedback.
But here's the problem: I can't go to a hackathon every week. And I shouldn't have to.
So I built minihack — a solo hackathon platform where you pick a real company's challenge, code for 24 hours, and get scored by AI.

Minihack
minihack is a solo hackathon platform where you pick a real company's challenge, build something in 24 hours, and get scored by AI.
The concept
Instead of made-up hackathon prompts, minihack generates briefs grounded in real tensions actual companies face — specific products, real workflows, genuine pain points. Every brief is unique and time-boxed to 24 hours.
The full stack
Frontend: React + Vite, all styles as inline JS objects with CSS custom properties
Backend: Flask (Python), fully in-memory state
Zero paid APIs — the entire pipeline runs free:
DuckDuckGo (
ddgspackage) for company researchGroq (
llama-3.3-70b-versatile) for brief generation and judginggitingest for reading submitted GitHub repos
How challenge generation works
Week-based industry rotation — 10 themes (Defense & Aerospace, FinTech, Gaming & Web3, HealthTech, etc.) cycle by ISO week number, so everyone gets the same theme that week
Company selection via DDG scoring — for each theme, 3 pools of companies (Finnish, European, Global) are scored by searching DuckDuckGo and rating result quality: +3 if the company appears in a headline, +2 for recency signals (2025/2026), +1 for funding/launch keywords. Top scorer per region wins.
Two-pass brief generation:
Pass 1 (small Groq call): extracts a sharp "X BUT Y" tension — e.g. "Vercel's Edge Runtime delivers sub-1ms cold starts BUT has no filesystem APIs, so any stateful middleware destroys the latency advantage you paid for"
Pass 2 (full Groq call): writes the complete brief grounded in that locked tension — specific product names, measurable success criteria with real numbers, and copy-paste sandbox data a developer can start coding against immediately
How judging works
You submit a GitHub repo URL. The backend reads the entire codebase via gitingest (truncated to 20k chars to stay within Groq's free tier limit), then Groq scores it on creativity, execution quality, and relevance to the brief. Scores are computed mathematically and returned with written feedback.
The UX flow
Home (landing) → Login → Challenges (3 compact cards, one per region) → Modal (full brief with tension, problem, constraints, success criteria, grounded hint, sandbox data) → Submit (GitHub URL) → Results (AI scores + feedback)

Interesting engineering decisions
Free-tier pipeline was the core constraint — every design decision optimised around staying within Groq's 12k tokens-per-minute free limit
Two-pass generation was the key quality unlock — locking in a specific tension before writing the brief forces specificity and prevents the model from producing generic outputs
Content-aware DDG scoring (not just result counts) genuinely differentiates active companies from dormant ones in the same industry pool
Fixed a silent breaking change: the
duckduckgo_searchPython package was renamed toddgsand was returning zero results without any error
