HACKFAM

Teammate matching for hackathons, CTFs and game jams, event by event.

Try the prototype (opens in a new tab)

Role
Sole developer: product, design, Flutter app, Next.js web app, Supabase backend and tests
Dates
Oct 2026 – present
Status
Prototype live · building
Stack
Flutter, Next.js, Supabase
HACKFAM’s current Flutter Events screen, with sample upcoming events and crews; development build. HACKFAM’s current Flutter Discover screen with a sample builder and explainable teammate fit; development build. HACKFAM’s current Flutter profile screen with sample skills and event preferences; development build.
  • HACKFAM’s Flutter Discover screen, showing a sample builder, complementary roles, event overlap and Pass or Interested actions.
  • HACKFAM’s Flutter Events screen with a sample Kuala Lumpur build weekend and the member’s crews.
  • HACKFAM’s Flutter profile screen with sample skills, interests, languages and preferences.

Technical decisions

DecisionWhat I choseInstead of
Event-specific relevance matching over global discoveryEvent-specific pools and complementary roles, with a separate Anyone scope for future teammatesA global feed of nearby builders or generic professional networking connections

Results

database tests at the last run
995
edge-function tests
186
mutations caught
117

From the 21 October 2026 handoff, not re-run. The product is not released.

Full engineering notes

7 sections, about 3 minutes to read

Summary

HACKFAM is an event-first teammate-matching app for hackathon, CTF and game-jam builders. You choose an event, discover builders by complementary roles, and work toward a team. An Anyone scope supports finding future teammates outside one event. I am building the Flutter app, Next.js web app and Supabase backend. By 26 October, Flutter Events, onboarding, sign-in, You, Settings and Discover screens were implemented, alongside web Discover and contract-aligned data layers. Teams, chats, remaining web screens and end-to-end integration are still in progress. The public clickable prototype uses mock data; the product is not released.

The problem

Hackathon teams form in chat threads and on luck, and the people best placed to fill a team’s gap rarely find each other.

  • A team that needs a designer or a backend developer has no way to search for that gap at one event.
  • Teammate apps borrow dating-app patterns that suit nobody who just wants a working team.
  • Showing who is in a small pool can expose people, so small pools must stay hidden.
  • Matching should explain itself, so you can see why someone fits.

My role

What I owned

  • The product: event-first pools, role slots, complementary ranking with explainable scores, an “Anyone” scope for future teammates and purpose-first onboarding with GitHub connect.
  • The backend core on Supabase: Postgres 17 with row-level security, Realtime, pgvector, edge functions and a contract package that generates both TypeScript and Dart types.
  • The design system in both apps: a phone tab bar, an iPad rail and a desktop sidebar, light and deep-dark themes, one typeface (Mona Sans).
  • Flutter feature screens for Events, onboarding, sign-in, You, Settings and Discover, web Discover, and client data layers aligned to the shared backend contract.
  • The interactive prototype and the showcase.

What I did not own

  • Flutter, Next.js, Supabase and the other open-source tools it is built on.
  • Teams, chats, remaining web screens and complete integration are still in progress. Screenshots distinguish development screens with sample data from the interactive design prototype.
  • No public app deployment or store release is claimed. The public clickable prototype is a separate design demonstration.

Why I made each decision

Event-specific relevance matching over global discovery

Because

A team at a hackathon or CTF needs complementary roles for that event. Event discovery therefore uses event context and role gaps to explain a match. Anyone provides a separate scope for future collaborators, while onboarding keeps the purpose centred on building together.

Trade-off

The product must explain which scope a person is browsing and why a builder fits, without exposing membership in small pools.

Testing

The 21 October handoff records 995 database and 186 edge-function tests passing, plus 117 caught mutations. The 26 October handoff reports additional Flutter feature and web Discover checks, but full backend and app integration is still in progress. Counts below retain their original scope and date; they are not a fresh end-to-end pass claim.

pgTAP database tests
995
Edge-function tests
186
Mutations the tests catch
117

Results in detail

  • A prototype anyone can click

    The interactive prototype opens on an event, shows ranked builders, a match and a filled team, with mock data (a demo event and a demo match). It is a design prototype, not the shipped app.

  • Feature screens now implemented

    Flutter Events, onboarding, sign-in, You, Settings and Discover now exist in the application, together with web Discover and client data layers. Teams, chats, remaining web screens and backend integration are still in progress. Development screenshots use sample data and do not represent a released service.

Stack and release record

  • Platforms

    Mobile (Flutter: iPhone, iPad, Android): in development, Web (Next.js): in development, Interactive design prototype in the browser

  • Built with

    Flutter, Riverpod, Next.js 16, React 19, TypeScript, Supabase (Postgres 17, PostGIS, pgvector, row-level security, Realtime, Storage), Deno edge functions, pgTAP, A shared contract package generating TypeScript and Dart types

  • Status in full

    In development and unreleased. The public design prototype is available. Flutter Events, onboarding, sign-in, You, Settings and Discover screens, plus web Discover and client data layers, are built. Remaining screens, backend work and end-to-end integration are still being completed; there is no public app deployment or store release.

Hiring interns for January 2027?

I’m available full-time from 25 January to 23 April 2027.