shark-movies.net
a curated database of shark cinema — the classics, the rip-offs, the straight-to-streaming disasters — designed and built end to end as a solo project.
- role
- design and build, self-initiated
- scope
- product, data pipeline and interactive features
- astro 6
- typescript
- tailwind v4
- cloudflare workers
- d1
- drizzle
- github actions
- tmdb
- turnstile
01 the idea
not another movie listing. a reference site that claims a category and defends it — a published methodology page setting out what counts as a shark movie, and a catalogue sorted into the ones that hold up, the ones that are gloriously bad, and the documentaries that are somehow worse.
02 the look
a bespoke retro-broadcast design system in tailwind v4, carried across roughly 22 components: self-hosted display and mono faces, scanline and glow treatments, an on-screen-display clock, custom logo and favicon.
03 the data
a cloudflare d1 database with drizzle as the schema source of truth, over eight versioned migrations. a scheduled github actions job ingests from tmdb each week — discovery by keyword, watch providers, trailers — so streaming links stay current without me touching anything. slugs are permanent (/movie/jaws-1975) with 301s from legacy ids, so urls survive title edits and any future change of data provider.
04 curation as code
threat levels, shark screen time and curator notes are editorial, not facts, so they live in version-controlled json the weekly ingest can never overwrite. an ai-assisted workflow drafts the curation for each new title and opens a review pr — nothing reaches the site unreviewed, and the two kinds of data never contaminate each other.
05 no accounts, no tracking
the tribunal is a public vote on whether contested titles even count as shark movies, with objections and atomic aggregate counters, one vote per browser on the honour system. there's a watchlist and a survival record too. all of it works with no sign-up, no cookies and no analytics — the interesting features didn't need to know who anyone is.
06 speed and hardening
astro ssr on cloudflare workers, with hot pages served from the edge cache and the heavy listing page pre-rendered from a committed data dump to keep worker cpu down. hardened security headers, iframe sandboxing, bearer-auth admin endpoints and turnstile on the contact and newsletter forms; json-ld, open graph images and a dynamic sitemap for the search engines and answer engines.
07 the constraint
tmdb's free tier forbids making money from the site, so every monetisation idea is explicitly parked behind a planned move to a commercially-licensed data provider — written down as a roadmap rather than shipped now and unpicked later.