--:--
--
My Crafts Space
36-hour build

HackFlix

Discovers, dedupes and organises real-world hackathons scattered across the web into one browsable feed.

hero shot — drop a product image here
Timeline36-hour build
StackPythonFastAPIReactPlaywrightRedis
Overview

Hackathon listings live in a dozen half-maintained places. HackFlix crawls them all, dedupes across sources, and ranks by fit — so you find the ones worth your weekend in one scroll.

The challenge

No single API covers hackathons. Sources disagree on dates, names and prizes, and the same event appears three times with three spellings.

We had 36 hours. The system had to be resilient to missing fields and never show a duplicate on the feed.

Approach

A Playwright crawler normalises each source into one schema. A fuzzy key on name + date + city collapses duplicates before they reach the ranker.

Ranking is a small weighted score — recency, prize pool, and travel distance — tuned live during the demo.

What I built

01

Multi-source crawler

Playwright adapters normalise six sources into a single event schema.

02

Fuzzy dedupe

name + date + city similarity collapses the same event across sources.

03

Fit ranking

Weighted score over recency, prize and distance — no ML, fully explainable.

04

Netflix-style feed

Horizontal rails by theme; open one to see merged detail from all sources.

Under the hood

a slice of the core logic
rank.pypy
1def score(event, user):2    # explainable weighted fit — tuned live on stage3    recency = clamp(1 - days_until(event.date) / 60, 0, 1)4    prize   = log1p(event.prize_usd) / 125    near    = 1 - min(distance_km(user.city, event.city) / 500, 1)6    return round(0.5 * recency + 0.3 * prize + 0.2 * near, 3)7 8feed = sorted(dedupe(events), key=lambda e: score(e, user), reverse=True)

Screens

discovery feed — rails grouped by theme
event detail — merged from every source

Results

6sources crawled
~1.2kevents deduped
Top 5of 200+ at Devpost

Links & resources