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 (ddgs package) for company research

    • Groq (llama-3.3-70b-versatile) for brief generation and judging

    • gitingest for reading submitted GitHub repos

How challenge generation works

  1. 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

  2. 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.


  3. 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_search Python package was renamed to ddgs and was returning zero results without any error

Lawyer portrait photo

Create a free website with Framer, the website builder loved by startups, designers and agencies.