Shipped
A log of shipped work@illscience
7 projects · 77 entries · since 2025Auto-logged by agents · synced 1m ago
SneakStream-ClaudeCode
TypeScript · Kotlin · Swift
Overview
Started Oct 2025

SneakStream is a coordinated livestreaming platform for nightclub and DJ events, built around the bet that live music venues need broadcast-style synchronized playback, pay-per-view monetization, and a social layer — not just a generic video host.

The system spans a Convex-backed web client, a React Native mobile app (iOS and Android), and an admin layer covering broadcast playlist control, live auction bidding on track crates, VIP guest lists, Stripe and Apple IAP payment verification, and Mux webhook-driven recording ingest with full deduplication. A party photo capture loop — shoot, live rail, gallery wall, QR landing page, with HEIC transcoding for iPhone uploads — was added to extend the platform to event photography. Recent work has been almost entirely iOS-native: a full Dynamic Island Live Activity covering all six states, automatic brownout recovery, always-on activity startup, and frame-accurate replay-position sync between the player and the island widget.

32 shippedWeb · iOS · AndroidProduction
Jul 2, 2026
Claude Code
feature
iOS Dynamic Island Live Activity — Feed Treatment
The app now shows a persistent Live Activity in the Dynamic Island and on the lock screen whenever the app is open: a live ticker with DJ name, heart count, chat preview, and elapsed timer during a live set, or a synced replay-position timer (matched frame-accurately to the in-app player) when off-air. Neither state was possible before — the module was silently no-op'd due to a CocoaPods autolinking version gate that has now been resolved.
Jul 2, 2026
Claude Code
feature
iOS Dynamic Island Live Activity — live + replay always-on
The app now drives an ActivityKit Live Activity from the moment it opens: compact island shows a live timer with a pulsing dot during a set, then flips in-place to a ticking replay position when the stream ends. Expanded island and lock-screen banner surface DJ name, chat, like count, and logo across all iOS 16.2+ devices without any user action required.
Jul 2, 2026
Claude Code
feature
Dynamic Island Live Activity — always-on Feed treatment
The Dynamic Island now starts automatically on app open and flips in place between On Air and Replay without restarting the activity — live timer, replay position, and stream title all update from content state. Previously the activity was manual-start only and required a full teardown to switch modes.
Still
Jul 2, 2026
Claude Code
feature
Dynamic Island Live Activity — always-on + live↔replay swap
The activity now starts automatically on app open and switches between On Air and Replay modes in place, updating title and timer without restarting. Clipping against the island's rounded mask is fixed with safe insets and auto-scaling digits.
Still
Jul 2, 2026
Claude Code
feature
Dynamic Island Off Air replay position timer
When a live set ends, the Dynamic Island compact view now ticks the listener's current replay position in real time instead of showing a frozen set-duration stamp. The widget anchors to the app's sync globals and advances natively, requiring no per-second pushes from the app.
Still
Jul 2, 2026
Claude Code
feature
Dynamic Island Live Activity: real logo, likes-only footer
The app now shows its actual logo (correctly sized for Live Activities) and a likes-only footer across compact, expanded, lock-screen banner, and non-island fallback — where it previously showed a placeholder and a viewer count. Verified across Dynamic Island and non-island devices.
Still
Jul 2, 2026
Claude Code
feature
Dynamic Island Live Activity — all 6 states
The app now surfaces a Live Activity through all six Dynamic Island states: compact, expanded, and lock screen for both On Air and Off Air. Viewers get a live timer and stream stats while on air, then a frozen recap with a 'Notify me' CTA the moment the set ends.
Still
Jun 29, 2026
Claude Code
feature
Mobile video: automatic brownout recovery
Mobile video players now detect network brownouts and automatically retry playback without user intervention. A watchdog hook monitors stall state and network quality, stepping through a backoff-and-reconnect sequence until the stream recovers or a hard failure is declared.
Still
Jun 27, 2026
Claude Code
feature
In-app account deletion (Apple Guideline 5.1.1v)
Users can now permanently delete their account and all associated data directly from the Profile tab without emailing support. The flow purges Convex records first, then removes the Clerk identity, retaining purchase rows anonymously for accounting.
Still
Jun 23, 2026
Claude Code
feature
Reply action in chat message long-press menu
Long-pressing any chat message now shows a Reply option that pre-fills the composer with a quote target and scrolls to it, in addition to the existing Report/Block actions. Users can reply to their own messages too, since Report/Block stays gated to other people's messages.
Still
Jun 20, 2026
Claude Code
feature
UGC safety screens: report, block, terms gate
Users can now report content, block other users, and must accept terms before participating in chat — satisfying Apple App Store Guideline 1.2 for user-generated content. None of these moderation flows existed before this PR.
Still
Jun 13, 2026
Claude Code
feature
On-demand HEIC-to-JPEG transcode for web party photos
iOS HEIC uploads now display correctly in the web photo rail, lightbox, and OG previews via a new /api/heic transcoding route — no re-upload or mobile change needed. Responses are immutable-cached so each image is converted only once.
Still
Jun 12, 2026
Claude Code
feature
On-demand HEIC-to-JPEG transcode for web photo views
Party photos shot on iPhone and uploaded as HEIC now render correctly in the web rail, wall, lightbox, and landing page via a new /api/heic transcoding endpoint. No re-upload or mobile-side change required; transcoded responses are immutably CDN-cached so conversion only happens once per image.
Still
Jun 12, 2026
Claude Code
feature
Photo landing: mini-player top bar + Get-the-app CTA
The photo share page now opens with a mini-player bar showing the stream thumbnail (or a gradient fallback on 404) and party name, giving guests immediate context before they see the photo. The primary CTA now points to the TestFlight beta instead of a dead App Store stub.
Still
Jun 12, 2026
Claude Code
feature
Camera shoot → review → Done flow
After taking a photo or recording a clip, the camera now holds on a review screen so you can retake before anything is submitted. Matches the existing library-picker flow instead of posting immediately on capture.
Still
Jun 11, 2026
Claude Code
feature
Party Photos growth loop: capture → live rail → wall → QR landing
Photographers can now shoot at a party, see clips appear live in a floor rail and full Party Wall gallery, and hand guests a QR code that opens a public per-photo landing page with a mobile mini-player. None of that flow existed before this PR.
Still
Jun 8, 2026
Claude Code
feature
Apple IAP: tips & PPV unlocks with server-side JWS verification
Mobile users can now send tips and unlock pay-per-view content via Apple in-app purchases, with prices derived server-side and receipts verified against Apple's signed JWS before any entitlement is granted. Plugged three bypass paths: free PPV via direct intent completion, client-supplied prices, and environment-claim spoofing.
Still
Apr 21, 2026
Claude Code
feature
24/7 Deterministic Radio Station + Audio-Reactive EQ
The site now streams a continuous, clock-synced radio station with a live schedule page so visitors can see what's playing and what's next. The homepage player also gained an audio-reactive EQ visualizer that animates in real time to the audio output.
Still
Apr 2, 2026
Claude Code
feature
Past shows duplicate recording deduplication
The recent recordings query now collapses duplicate uploads of the same show (matched by upload date and duration) into a single entry, preferring the PPV-visibility copy when one exists. Previously, re-uploaded or duplicate recordings would appear multiple times in the past shows list.
Still
Mar 3, 2026
Claude Code
feature
@mention autocomplete + fullscreen landscape layout fix
Mobile chat now surfaces a live user search popup when you type @, letting you tap to insert a mention without guessing spellings. The fullscreen video modal also correctly reflows its button layout when the phone rotates to landscape.
Still
Mar 2, 2026
Claude Code
feature
Mobile chat: replies, likes, fullscreen video, AirPlay
Mobile users can now reply to messages, like with avatar previews (with a sign-in prompt if logged out), and watch video fullscreen with mute, double-tap heart, and AirPlay support. Reply rendering for tip messages is also fixed on both web and mobile.
Still
Mar 1, 2026
Claude Code
feature
React Native mobile app with iOS and Android targets
The project now has native iOS and Android apps built with React Native and Expo, complete with auth and sign-in support. Users can install and run the app on mobile devices instead of being limited to the web client.
Still
Mar 1, 2026
Claude Code
feature
React Native mobile app with guest clip creation
A full Expo/React Native app now ships alongside the web client, bringing live playback, chat with GIFs and image paste, emotes, PPV purchase, and hearts to mobile. Clip creation no longer requires sign-in, so signed-out users can create and share clips directly.
Still
Feb 19, 2026
Claude Code
feature
Live stream and VOD clip capture with sharing
Viewers can now grab a 15-second clip from any point in a live stream or VOD and share it directly, including to Instagram. Neither live nor recorded video had any clip or share capability before.
Still
Feb 19, 2026
Claude Code
feature
Live stream & VOD clip capture with sharing
Users can now grab a 15-second clip from any live stream or VOD video and share it directly from the player. Previously there was no way to capture or distribute a moment from a stream or recorded video.
Still
Feb 18, 2026
Claude Code
feature
VIP Guest List with PPV Bypass
Admins can now search for users and grant VIP status, giving them automatic access to all PPV content without individual entitlements. A new admin panel section lists current VIPs and lets admins add or revoke that status in one click.
Still
Feb 17, 2026
Claude Code
feature
Notifications System with Inline Drawer
Users now receive real-time notifications for @mentions, replies, follows, and go-live events, surfaced via a bell icon with an inline drawer in the nav. Notifications mark themselves as read on drawer close, and reply context threads back into live chat.
Still
Feb 14, 2026
Claude Code
feature
Idempotent recording ingest with authoritative session linking
The Mux webhook handler and stream-end flow now deduplicate asset records on every retry path, so a single live session can never produce duplicate video rows regardless of webhook replay or race conditions. All ingest decisions are traced end-to-end with a debug trace mode for reproducing and diagnosing duplicates locally.
Still
Feb 8, 2026
Claude Code
feature
Live auction bidding system for track crate purchases
Viewers can now place bids on track crates during a livestream, with admins opening and closing sessions from a new bidding control panel. Stripe payment verification, Mux webhook-driven download state, and deep links from crate items to recording timestamps are all wired up end to end.
Still
Feb 4, 2026
Claude Code
feature
Server-side download state via Mux webhooks
Video master-download status is now tracked in Convex and updated by Mux webhooks instead of long-polling the Mux API for up to 30 minutes. The download endpoint immediately returns a preparing or ready status, and the UI reflects progress without blocking a server-side loop.
Still
Oct 24, 2025
Claude Code
feature
Broadcast-style playlist system with admin controls
Admins can now queue videos into a shared playlist with Play Now and Play Next controls, and the player auto-advances to the next item when a video ends. Previously every viewer was on their own with no coordinated queue.
Still
Oct 23, 2025
Claude Code
feature
Admin page with nightclub visibility control + avatar queue
Admins can now toggle nightclub simulation visibility and manually drive the avatar queue through a dedicated admin page. The system also shares a pooled avatar backlog and generates varied AI selfie prompts to cut generation costs.
Still
compact
Overview
Started Jul 2026

compact is an experiment harness built around the problem of accurately capturing and grading discrete units of shipped work, with the bet that clean deduplication and multi-granularity aggregation can surface a reliable signal from noisy, redundant source data.

The core system ingests work entries at multiple granularities (commit, PR, weekly) and grades them; the recent focus has been a post-hoc merge pass that collapses duplicate beat descriptions across source units before re-grading survivors. Shipping that deduplication layer revealed a 34% duplicate rate at commit granularity — confirming the problem was real — while PR and weekly granularities were already largely clean at 7% and 0% respectively.

1 shippedCLIExperimental
Jul 1, 2026
Claude Code
feature
Deduplication layer for experiment harness
The harness now runs a post-hoc merge pass that collapses entries describing the same beat across source units, then re-grades the survivors. Commit granularity dropped from 50 to 33 entries (34% dup rate exposed); PR and weekly granularities were already cleaner at 7% and 0%.
Still
SwingAnalyzer
Swift · TypeScript
Overview
Started Jun 2026

SwingAnalyzer bets that vision-capable LLMs can reliably evaluate athletic swing mechanics—the project exists to benchmark which models are actually useful for that task and to build the evaluation infrastructure needed to find out.

The core shipped work is a multi-model evaluation harness that runs a two-pass locate-then-refine vision pipeline across any OpenRouter-hosted model, generates a 3×3 contact sheet per model/video pair, and feeds those sheets to an independent LLM judge that scores each one 0–10. Results are collected into a markdown leaderboard and a structured results.json in a single run, making model comparison repeatable and auditable.

1 shippedCLI · Swift · TypeScriptExperimental
Jun 20, 2026
Claude Code
feature
Multi-model swing eval harness with LLM judge
Runs the two-pass locate-then-refine pipeline across any OpenRouter vision models, renders a 3×3 contact sheet per model/video pair, and has an independent vision judge score each sheet 0–10. Outputs sheets, a markdown leaderboard, and results.json in one shot.
Still
OpenParent
TypeScript · Python
Overview
Started May 2026

OpenParent is a household behavior-management system that uses an AI judge to score observed interactions between parents and children, automatically applying or flagging consequences against a configurable rubric and policy — betting that transparent, rule-governed feedback loops are more consistent than ad-hoc parental judgment.

The core stack is a TypeScript/Convex backend with a Python edge layer for audio and LLM work: the judge ingests transcribed kitchen exchanges, scores them against a versioned YAML rubric, and routes every consequence through a deterministic safety rail enforcing magnitude clamps, rate limits, and daily caps before anything touches the ledger. Recent work closed the full parent review loop — a pending-proposals inbox, per-event drill-down with Apply/Skip actions, a browser-based simulate console for rubric testing without hardware, and an on-device speaker-verification pipeline using cosine similarity on Resemblyzer embeddings. The test harness now covers the consequence rail, ledger idempotency, and proposal queries entirely in-memory with no live secrets required.

8 shippedWeb · Self-hosted · EdgeExperimental
May 29, 2026
Claude Code
feature
On-device target-speaker verification via cosine similarity
The system can now enroll a reference voice from audio clips and verify whether a new clip matches that speaker — entirely on-device using Resemblyzer embeddings. Validated against real clips with clean separation (0.852 match vs 0.51–0.63 impostor) at a 0.75 cosine threshold.
Still
May 28, 2026
Claude Code
feature
Simulate Console — run judge from browser without hardware
Admins can now paste any kitchen exchange into /admin/simulate and run it through the live judge, active rubric, and consequence rail entirely from the browser. Scorable events land in the ledger and leaderboard exactly as real captures do, with latency, token cost, and reasoning shown inline.
Still
May 27, 2026
Claude Code
feature
Versioned policy.yaml editor (admin + Convex backend)
Admins can now edit, save, and roll back config/policy.yaml versions through the admin UI instead of a read-only view. The active version is served to the iPad controller via a public Convex query, and a shared YamlVersionEditor component eliminates duplicated logic with the rubric editor.
Still
May 27, 2026
Claude Code
feature
Rubric Editor with Versioning + Live Edge Pickup
Admins can now edit, save, and roll back the judge rubric from the dashboard with live YAML validation and full version history. The edge fetches the active rubric from Convex before each judge call, so changes take effect immediately without a redeploy.
Still
May 27, 2026
Claude Code
feature
Pending-proposals inbox on admin overview
The /admin page now surfaces every unresolved proposed consequence in one place, with inline Apply/Skip buttons that reactively drop items as they're resolved. Backed by a new proposals.listPending query that joins event and subject data, with 32 convex-test cases covering it.
Still
May 27, 2026
Claude Code
feature
Event detail drill-down with Apply / Skip actions
Parents can now open any flagged event to see full context—proposed change, confidence, rubric version—and apply or skip it directly, closing the review loop. A 'Show transcript' button proxies the raw source from the local machine on demand and degrades gracefully to 'evidence offline' when unreachable.
Still
May 27, 2026
Claude Code
feature
No-secrets Convex test harness + SessionStart hook
Backend mutations and queries now run against an in-memory Convex DB via Vitest—19 tests covering the full consequence rail, rate limits, ledger idempotency, and leaderboard—no live deployment or secrets required. A SessionStart hook auto-installs workspace deps on web sessions so the suite is runnable from the first prompt.
Still
May 26, 2026
Claude Code
feature
Deterministic consequence rail (Phase 3 safety gate)
The judge now routes every scorable event through a pure decision layer that enforces single-event magnitude clamps, hourly rate limits, and daily net caps before anything touches the ledger. Small high-confidence rewards auto-apply; punishments and quiet-hours events gate on a parent-approval proposal instead of writing through.
Still
vibe-debugAgent-friendly debugger CLI and MCP server.
Python
Overview
Started May 2026

vibe-debug bets that coding agents produce better fixes when given real runtime state rather than static source inference — the project exists to wire a full DAP-backed Python debugger into the MCP tool-call layer so agents can observe live execution instead of guessing.

The core deliverable is an MCP server that exposes debugger operations (launch, set breakpoints, step, inspect locals) as structured tool calls, backed by the Debug Adapter Protocol. On top of that, an npx shim removes the Python toolchain prerequisite for agent registration, a stream-JSON formatter renders Claude debugging sessions as human-readable output, and a standalone CLI mode with an auto-written skill file lets agents discover and invoke the debugger without MCP at all. The consistent focus is reducing friction at every integration point — installation, invocation, and observability.

4 shippedCLI · MCP serverAgent tool
May 7, 2026
Claude Code
feature
Agent-friendly debugger CLI skill
The debugger can now run as a plain CLI command without MCP, letting coding agents invoke it directly from a shell with breakpoints and expression evaluations. An init command also writes a project-level skill file so agents automatically discover and trigger the CLI on reproducible Python bugs.
Still
May 7, 2026
Claude Code
feature
Claude progress formatter for stream-json output
Piping `claude --output-format stream-json` through `mcp-debugger claude-progress` now prints human-readable lines (MCP status, tool calls, local variables) instead of raw JSON. Previously there was no way to watch a Claude debugging session without grepping JSONL by hand.
Still
May 7, 2026
Claude Code
feature
npx wrapper for mcp-debugger
The debugger server can now be launched directly via `npx -y github:illscience/mcp-debugger` without any Python tooling on the user's PATH. A Node.js shim locates and spawns the Python backend, making one-line Claude Code registration possible.
Still
May 7, 2026
Claude Code
feature
Codex Debugger MCP Server
Exposes a full DAP-backed Python debugger as an MCP server so coding agents can set breakpoints, step through execution, and inspect live locals instead of guessing from source. Agents can now launch a repro script, hit a breakpoint, and read real runtime state via structured tool calls.
Still
AllyBi
TypeScript
Overview
Started Apr 2026

AllyBi is a video-statement platform built for both web and mobile, aiming to let authenticated users record and retrieve personal video content tied to a verified identity.

The web app received a complete Clerk-backed auth layer — eight screens covering sign-in, sign-up, MFA, SSO, and invite flows — with server-side userId stamping on uploads and an anonymous upload fallback. The mobile app followed with its own Clerk FAPI integration: secure-store JWTs, route-level auth gating, Google and Apple OAuth with browser-session handling, an OAuth phone-collection screen for incomplete sign-ups, and an SMS OTP second-factor screen to close out the MFA flow. Recent work has been focused on closing every dead-end in the mobile auth path and converging both platforms on a shared authenticated video feed gated by real Clerk JWTs.

6 shippedWeb · MobileProduction
May 3, 2026
Claude Code
feature
SMS OTP second-factor screen for sign-in
Users with 2FA enrolled can now complete sign-in by entering a 6-digit SMS code instead of hitting a dead-end error. Both password and OAuth sign-in paths route to the new MFA screen when Clerk returns needs_second_factor.
Still
May 2, 2026
Claude Code
feature
OAuth phone collection screen for Google/Apple sign-up
Users who sign up via Google or Apple OAuth are now routed to a dedicated screen to supply their phone number when Clerk reports it missing, then flow straight into OTP verification. Previously the app hit a dead end with a buried error message and no path forward.
Still
May 2, 2026
Claude Code
feature
Mobile Google/Apple OAuth via Clerk FAPI
Users can now sign in or sign up on mobile using Google or Apple OAuth — the app drives the full FAPI dance, opens the browser session, and handles the transferable-to-sign-up fallback. Previously the buttons existed but silently errored.
Still
May 2, 2026
Claude Code
feature
Authenticated /api/videos/me feed (mobile + web)
Signed-in users now see only their own videos in the My Statements feed, gated by a real Clerk JWT rather than anonymous local IDs. A shared authedXhrFetch wrapper handles token injection and 401 retries across all API calls in both apps.
Still
May 2, 2026
Claude Code
feature
Mobile auth foundation: FAPI provider, sign-in screen, AuthGate
The mobile app can now authenticate users via phone + password through a custom Clerk FAPI client backed by secure-store JWTs, with a route-level AuthGate that redirects unauthenticated users to sign-in and keeps signed-in users out of public screens.
Still
Apr 28, 2026
Claude Code
feature
Clerk auth flows — 8 screens + SSO + session-stamped uploads
The app now has a full auth layer: sign-in, sign-up, email verify, MFA, forgot/reset password, invite-accept, and OAuth SSO callback, all in brand-correct screens with a responsive split layout. Video uploads stamp the Clerk userId on new records server-side, with anonymous uploads still allowed and a listByUser query ready for a future 'my videos' view.
Still
WineMail
Python · TypeScript
Overview
Started Jul 2025

WineMail is a personal wine management tool that treats the inbox as a primary data source — parsing merchant emails, order PDFs, and bottle photos to keep a cellar inventory, tasting diary, and live shop search in one place.

The core build covers merchant email ingestion with LLM-backed offer analysis, PDF order parsing into structured inventory records, AI image generation for wine profiles via FAL flux models, and a daily wine recommendation engine with food-pairing and label-photo input. Recent work has pushed outward: an MCP server exposes inventory data to external AI assistants (Claude Desktop, ChatGPT), dual-protocol support adds OpenAI Apps SDK widget rendering inside conversations, and a batch image generation pipeline with an admin control panel brings AI bottle art to the full inventory automatically.

25 shippedWeb · MobileProduction
Dec 7, 2025
Claude Code
feature
Batch bottle image generation with admin control panel
The app can now automatically generate AI bottle images for all inventory items that lack one, either triggered on upload or kicked off manually from a new admin page. An admin dashboard tracks progress, shows the current item being processed, and displays a grid of the 24 most recently generated images.
Still
Dec 1, 2025
Claude Code
feature
Dual-Protocol MCP: JSON-RPC + OpenAI Apps SDK Widgets
The server now speaks both Claude's JSON-RPC 2.0 MCP protocol and OpenAI's Apps SDK protocol from a single shared service layer, exposing 9 read-only wine tools. ChatGPT Apps can now render interactive card-grid widgets showing bottle images, prices, and tasting notes directly inside conversations.
Still
Nov 4, 2025
Claude Code
feature
Redis cache + logging for email analysis workflow
Email analysis results are now stored in Redis so repeated inbox loads skip redundant AI calls. Shop purchase links are also surfaced directly on sorted wine analysis cards.
Still
Oct 20, 2025
Claude Code
feature
MCP Server — expose wine data to AI assistants
The app now speaks Model Context Protocol, letting AI assistants like Claude Desktop and ChatGPT query a user's wine inventory, diary entries, merchant offers, and favorites directly via JSON-RPC 2.0. None of that data was accessible to external AI tooling before.
Still
Sep 28, 2025
Claude Code
feature
Tonight Quick Picks: photo upload + food pairing + S3/Celery
Users can now upload photos of their wine labels to get instant Tonight quick-pick recommendations, and describe a dish to re-rank those picks via an async OpenRouter pairing flow. Photos are stored in S3 and analysis runs as a background Celery task so the UI stays responsive.
Still
Sep 27, 2025
Claude Code
feature
Inventory vintage highlights + inline shop buttons on shop page
Shop readiness cards now surface drink-now vintage recommendations powered by OpenRouter/Kimi K2, and inventory rows gain inline shop buttons so a wine can be searched at merchants directly from the cellar list.
Still
Sep 25, 2025
Claude Code
feature
Shop shortcuts for notable inbox wines
Notable wines flagged in the inbox now show direct shop links, letting users jump straight to live merchant listings without navigating to the diary first. The shop results page also gained a vintage switcher and preserves the correct back-navigation context depending on where the search was launched from.
Still
Sep 25, 2025
Claude Code
feature
Tonight: dynamic spotlights (6 lenses)
The Tonight page now generates contextual spotlight modules — iconic vintages, regional picks, vertical flights, crowd-pleasers vs. nerd bottles, ready-to-drink vs. patience required, and weeknight vs. splurge — alongside the existing card rows. Previously none of these curated lenses existed.
Still
Sep 24, 2025
Claude Code
feature
Bottle image generation via fal flux-pro
Wine profiles can now auto-generate a product-style bottle photo using a dedicated fal flux-pro model, separate from the general image pipeline. The canvas utility also switched from letterboxing to crop-fill so bottle shots always land at the exact target dimensions.
Still
Sep 22, 2025
Claude Code
feature
GPT-5 support via centralized OpenAI model registry
A new `openai_models.py` module centralises all model name constants (TEXT_MODELS, IMAGE_MODELS, TEXT_MODEL_SEQUENCE) so every call site pulls from one source of truth instead of hardcoded strings. The wine expert, ranking helpers, and backfill scripts now resolve their model at runtime, making a GPT-5 upgrade a one-line config change.
Still
Sep 16, 2025
Claude Code
feature
S3-backed cross-worker video label extraction
Uploaded videos are now staged to S3 temp storage so Celery workers on separate containers can download and process them without a shared filesystem. Temp objects are automatically deleted after processing completes or fails.
Still
Sep 15, 2025
Claude Code
feature
Tonight's Pick — daily wine recommendation feature
Users can now open a dedicated 'Tonight' page that picks a wine from their inventory for the evening, with filters for color, champagne, and deterministic-per-day randomness so the pick stays consistent throughout the day.
Still
Sep 15, 2025
Claude Code
feature
Tonight's Pick wine recommendation page
Users can now get a personalized wine recommendation from their cellar for any given evening, filtered by color and whether champagne is included. The pick is deterministic per day so it stays consistent throughout the night.
Still
Sep 10, 2025
Claude Code
feature
FAL-powered bottle photo editing + drag-and-drop Image Lab
Users can now upload their own wine bottle photo (including HEIC) and have it AI-edited via FAL flux-context-pro, replacing the generate-only flow. Image Lab gained a drag-and-drop dropzone and all outputs are letterboxed to an exact 1024×1536 canvas before saving.
Still
Sep 7, 2025
Claude Code
feature
Read-only viewer mode with token-gated access
A token-based URL now lets anyone browse a specific account's wine data without logging in. All write operations return 403 while AI features like ranking and image lab remain fully functional.
Still
Sep 6, 2025
Claude Code
feature
Read-Only Viewer Mode
A token-gated URL now lets anyone browse a specific account's wine data without logging in. All write operations return 403 while AI features stay fully functional.
Still
Sep 2, 2025
Claude Code
feature
Google Images panel on wine profile pages
Wine profile pages now display a 'Found on Google' image grid pulled via Custom Search API, searching by producer, designation, and vintage. SafeSearch is off, size floor is medium, and results show as portrait cards with source domain captions.
Still
Sep 1, 2025
Claude Code
feature
Image Lab: async per-card AI image generation
Each wine profile card can now generate or regenerate its image independently via Celery background tasks, with live per-card spinners and polling. Previously all generation was synchronous and blocking with no isolated card control.
Still
Sep 1, 2025
Claude Code
feature
Image Lab: async FAL image generation with per-card regenerate
Wine profile images can now be generated in parallel via Celery workers using FAL (flux models), with each card independently regeneratable without disturbing the others. Previously no image generation pipeline existed in this environment.
Still
Aug 30, 2025
Claude Code
feature
Wine Order Tracking via PDF Extraction
Uploaded order PDFs are now parsed to extract order metadata (merchant, bottles, appellation) and stored in Supabase with duplicate detection and inventory linking. A backfill CLI can retroactively infer missing appellations and merchants across existing records.
Still
Aug 17, 2025
Claude Code
feature
Mobile-friendly shop results layout
The shop results page now renders as stacked cards on small screens instead of a wide table that overflowed. Size, Location, and Availability columns were dropped to keep the layout tight on both mobile and desktop.
Still
Aug 16, 2025
Claude Code
feature
Wine Shop Discovery via AI Deep Research
Users can now search for active retail listings of any wine and vintage directly from the app, with prices, merchants, and neighbor-year comparisons returned via a Celery-backed OpenAI web search flow. Previously there was no way to find where to buy a wine without leaving the app.
Still
Jul 15, 2025
Claude Code
feature
Logged-out landing page with app screenshots
Unauthenticated visitors now see a dedicated landing page showcasing the app with real mobile and desktop screenshots instead of being dropped straight into the login form. The root route serves the landing page; a separate /login route keeps the plain login form accessible.
Still
Jul 13, 2025
Claude Code
feature
Wine Inbox: inline AI analysis replaces offer extraction
The wine inbox now displays all merchant emails with on-demand AI analysis buttons (notable wines, price check, sorting) rendering results inline above each email. Pre-processing and automatic offer extraction have been removed in favor of this triggered, LLM-backed approach.
Still
Jul 4, 2025
Claude Code
feature
Async merchant email loading via Celery
Merchant email refresh and offer extraction now runs as a Celery background task instead of blocking the request. The UI polls for status and shows a spinner while processing, matching the pattern already used on the ranking page.
Still