Work/2026
kamiru.art
Portfolio CMS, Instagram analytics platform and private operator console for a working artist, live in production on Cloudflare.

0framework JS shipped to visitors (~18 KB vanilla total)
50subrequest budget each cron run fits inside
7/28/90dderived engagement windows
A block-based portfolio site an artist edits herself from a visual admin, plus a brand-facing media kit powered by her real Instagram data and a private operator console (web and desktop) to run it all. The public site ships no framework JavaScript: about 18 KB of vanilla JS in total; React exists in the tree but hydrates only inside the admin preview, via a custom Astro client directive. Heavy media lives in object storage; a scheduled Worker turns the Meta Graph API into verifiable audience metrics.
Highlights
- Medallion architecture on Cloudflare. Bronze (raw, replayable JSON in R2) → silver (normalized multi-tenant tables in D1) → gold (derived 7, 28 and 90-day metrics: engagement by reach, growth, virality), fed by cron Worker runs that fit inside the free plan’s 50-external-subrequest budget (~45 used on the worst day) with backoff and pagination.
- The invisible ceiling. The harder limit was 1,000 internal subrequests per invocation: every statement in a D1 batch counts, so one sync step sat dead on “Too many subrequests” for weeks while every earlier step reported healthy. Chunked multi-row INSERTs cut ~900 statements per run to ~140.
- Ephemeral data capture. Story insights vanish 24 hours after posting, so a frequent run captures them with COALESCE upserts that never overwrite real values with nulls, plus anomaly quarantine and per-endpoint sync state so silent API failures surface in the dashboard.
- Staleness that can’t lie. A freshness flag baked at ingest time froze at “fresh” for 13 days when the cron silently stopped; freshness is now recomputed per request against a 48-hour ceiling, so a dead pipeline becomes visible instead of trusted.
- Honest, gated reporting. The media kit is served behind signed magic links (watermarked per brand) or email + Turnstile, entirely server-side, and never displays a number Meta doesn’t actually provide — skip-rate columns stay NULL by design and pinned markets never reorder real shares.
- Media engineering on the frontend. Videos are their own posters (preload=“none”, no poster files): clips load four at a time within a 400px margin under a hard budget of 8 live decoders, and eviction paints the last decoded frame onto a canvas so nothing ever flashes grey.


