I built ListWorth: an offline-first cinema diary and A-List tracker. Looking for feedback on the build

Wait 5 sec.

The problem: I have AMC's A-List subscription and kept a spreadsheet of what each movie saved me against the monthly fee. It was tedious, and I wanted something that felt more like a diary than a ledger. ListWorth (https://alist-tracker.vercel.app) is the result: forward an AMC confirmation email and the ticket is added. You get savings per billing cycle, format breakdowns (Standard / Dolby / IMAX / 3D), "hours in the dark", top directors with portraits, and shareable monthly Wrapped cards sized for Stories. It's free, has no ads, and works without an account. Stack Next.js 16 (App Router), React 19, Tailwind 4, shadcn on base-ui, Serwist for the PWA Offline-first: state lives in localStorage; a Supabase outbox pushes changes and merges a pull on sign-in. Queued changes are never dropped, and a pull can only remove tickets the server previously had Inbound email: a Cloudflare Email Worker feeds a pure processInboundEmail() with injected storage, so the same code runs in the worker and in tests Wrapped cards are drawn client-side with Canvas 2D (1080x1920), no server rendering TMDB for posters, runtimes and director portraits, proxied through route handlers so the key stays server-side Tests run the schema and RLS policies in PGlite (in-process Postgres) Things that bit me The receipt parser is plain parsing with fixtures, no LLM. AMC's format badges (IMAX, Dolby) are images with no alt text, so detection partly depends on the badge images and the auditorium names. The email footer advertises IMAX and Dolby on every receipt, so I never read it. Showtimes are stored as theatre-local wall-clock strings, never UTC. Converting them made a midnight showing land in the wrong billing cycle. On iOS, navigator.share has to run inside the tap, so each card is rendered ahead of time and the share handler just uses the ready blob. What I'd like feedback on: the onboarding (it asks three questions, then lets you view demo data), whether the Wrapped card is something you'd actually post, and anything in the email-forwarding flow that feels untrustworthy. Forwarded emails are read once and not stored, only the ticket details are kept, and there's a one-tap "Clear import history". The data policy is in the app. Limits: it's AMC-only, built by one person, unofficial, and not affiliated with AMC.   submitted by   /u/Charming-Eggplant946 [link]   [comments]