Changelog

What's shipped, newest first

v1.4.0

2026-07-13
  • AI image moderation — every uploaded photo (and every Glen label scan) is screened for inappropriate content before it's stored or sent to AI. Flagged images are rejected while clean ones are kept, and nothing objectionable reaches storage #521
  • Report an image + admin takedown — a "Report this image" control on public bottle photos notifies the admin, who can review and remove or dismiss reports from a new admin queue; serial reporters are flagged #520
  • Terms of Service & Privacy Policy overhaul — enumerated Acceptable Use policy, a DMCA/copyright takedown process, named third-party processors (AWS, Anthropic, Stripe, Namecheap), and disclosure that images are stored and AI-processed. Acceptance is now recorded at signup (#518, #519)
  • Re-acceptance gate — when the Terms/Privacy version changes, users are prompted to re-accept before continuing; a remember-me session can't skip it #525

v1.3.0

2026-07-10
  • Glen's Recommendations redesign — per-bottle recommendations now open in a right-side drawer with a sticky, confirm-before-overwrite Refresh, a loading state on refresh, and state-aware card copy ("Ask Glen" vs "View Picks") (#515, #508)
  • Fewer hallucinated recommendations — directional vs. actual-bottle picks are clearer, and the FAQ explains the distinction #485
  • CSV / XLSX bottle import — generic importer with column mapping, plus a WhiskeyShelf import path and free-tier limit enforcement #477
  • Bottler & Barrel Pickers columns added to CSV/JSON export #476
  • Promo codes supported on Stripe checkout (monthly plan)
  • Pro-friendly inactivity handling — Pro accounts are exempt from idle-account cleanup, and the inactivity clock resets when a subscription lapses #511
  • Security & correctness hardening (holistic audit, #487–#501) — escaped flash messages and Select2 labels, fixed a user-enumeration vector and a DEBUG leak, corrected Stripe renewal-date handling, and shared decorators / Claude helper refactors

v1.2.0

2026-07-06
  • Glen's Picks for You — collection-wide AI recommendations based on your highest-rated bottles, with 7-day refresh and full pick history
  • Recommendations storage refactored from JSON to relational tables (recommendation_session, recommendation_pick)
  • Glen's Picks history page with week-grouped table, Add to Wish List, and delete with confirmation
  • "In Wish List" state persists across page refreshes — no duplicate adds
  • Glen's Picks for You added to My Lists navbar dropdown (Pro users with history)
  • FAQ updated with Glen's Picks for You questions

v1.1.0

2026-07-02
  • AI-powered bottle recommendations based on a bottle's distinctive traits
  • Pro users get persistent recommendations cached per bottle (7-day cooldown)
  • Free users see recommendations with a permanent dismiss option
  • Scan whiskey labels to auto-populate bottle details
  • Unlimited scans for Pro users; limited for free users
  • Wish List: track bottles you want to try
  • Custom Lists (Pro): create and share curated collections
  • Visual breakdown of your collection by bottle type, ABV distribution, and more
  • Authenticated users redirected from `/` to their home page
  • Consistent whiskey type colors across pills and charts
  • Empty-state layout fixed on all list pages
  • "My Bottles" button label consistency on bottle detail page

v1.0.0

2026-06-11
  • Stripe-powered Pro subscription (monthly and annual)
  • Unlimited bottles and Glen scans for Pro users
  • Collection Insights page — charts and stats for your collection (Pro only)
  • Stripe customer portal — manage or cancel your subscription from your account page
  • Bottle list grouping — bottles with the same name/type are grouped with aggregate stats
  • Bottle list filtering, sorting, and pagination
  • Full-page PNG export of Collection Insights
  • iOS smart quote fix — apostrophe search now works on mobile
  • Add Bottle page no longer gates on having distilleries; shows a nudge with bulk-add option instead
  • Bulk add distilleries from the Add Bottle page via HTMX — no page reload
  • Mobile navbar dropdown fixed (no longer opens off-screen)
  • iOS Safari auto-zoom on input fields fixed
  • Expanded bulk distilleries list (80 → 121 distilleries)
  • Passkey support (register and sign in with a passkey)
  • Account page with plan info, preferences, data export, and danger zone
  • Email change with confirmation flow
  • Private account toggle
  • PostgreSQL on AWS RDS
  • Images on AWS S3
  • Gunicorn on EC2

v0.4.0

2026-06-07
  • Added `is_pro` flag to User model with admin toggle
  • Full-resolution image retention for pro users (stored in separate S3 prefix)
  • AI label scan: pro users can upload bottle images and have Claude automatically fill in name, distillery, type, ABV, size, and vintage years
  • Full user management dashboard at `/admin/users`
  • Sortable columns and bottle count in admin user table
  • S3 orphaned image audit command (`flask audit-orphaned-images [--delete]`)
  • Fixed `delete_bottle` leaving images behind in S3 (wrong extension + missing full-res bucket cleanup)
  • Images section moved to top of Add Bottle form
  • Homepage headline updated
  • Removed "Made with" tech stack section from homepage

v0.3.6

2026-06-06
  • Passkey support — sign in with Touch ID / Face ID / hardware keys as an alternative to password #373
  • Home page redesign — new stats band, pour-bar chart, and two-column hero layout on the design token system #381
  • Account page redesign — profile, security, preferences, and danger zone cards #381
  • Changelog page — in-app release notes with two-column section layout (#360, #370)
  • Redirect after login — returns you to the page you were trying to reach #362
  • Barrel pickers in bottle popover — hover cards on bottle lists now include barrel picker names #361
  • Bottle detail visual refresh — type-hue accent colors throughout the detail page #368
  • ABV/Proof column populated on distillery, bottler, and barrel picker bottle lists #375
  • Type filter now applied on the main bottle list page #377
  • Trix rich-text editor styles now respect dark themes #382
  • Error pages use correct CSS classes (#379, #380)
  • "Remember me" login persistence #78
  • Form pages wrapped in card layout with section labels #383
  • Hardcoded color values replaced with design tokens throughout #384
  • Playwright end-to-end test suite (27 browser tests, runs on every PR) #355
  • Production server migrated to uv #366
  • Shared "cannot delete" modal extracted into a reusable macro #320

v0.3.5

2026-05-13
  • Sort indicators: active column shows a directional arrow (↑/↓), inactive columns show a faint bidirectional hint (↕) #348
  • Fixed column widths — no more layout shift when switching sort columns (Type column was the main offender: "Rye" vs "American Light Whiskey") #348
  • Bootstrap tooltip on SB/Private column headers fixed for HTMX — no more stuck tooltips after sorting #348
  • Empty stars in Cellar theme: increased contrast so placeholder stars are visible #348
  • Type pills: bumped from 0.72rem → 0.82rem to balance visually with proof/ABV values #348
  • Private bottle count hint: owners see "N bottles · M private" in the list summary line #348
  • Header stripped to status badges only (Single Barrel, Private) — Type, ABV/Proof, and Distillery pills removed since they duplicated the spec tiles and Details section #345
  • Name row kept in Details table, with external-link icon when a bottle URL is set #345
  • VR divider always shown before "My List" on desktop #345
  • Rich text: bullet list indentation fixed (wrapped lines align with text, not bullet); paragraph spacing tightened #345

v0.3.0

2026-05-12
  • Login rate limiting, failed login tracking, and alerting #302
  • Google reCAPTCHA on password reset form #303
  • Email alert on login from unrecognized IP address #304
  • Update email address with confirmation flow #306
  • Account privacy toggle #306
  • Change Password moved out of Danger Zone into Account Settings #306
  • Server-side image resizing on upload — removes file-size rejection #308
  • Export enhancements: format choice, filters, JSON, and image zip #307
  • Rich-text hover card with image preview #330
  • Automated cleanup of inactive user accounts via Flask CLI #310
  • Local dev HTTPS via mkcert #309
  • Upgraded python-dotenv (CVE-2026-28684) and urllib3 (CVE-2026-44432)

v0.2.0

2026-05-10
  • 3-theme system: Barrel Room, Modern Cellar, The Vault
  • CSS design tokens and Google Fonts foundation
  • Theme switcher in navbar
  • Reskinned bottle list with grouped rows, type badges, single barrel indicators, killed bottle styling
  • Reskinned bottle detail, distillery/bottler list and detail pages, add/edit bottle form
  • Navbar logo with SVG icon and themed text treatment
  • Markdown support for bottle descriptions and notes
  • Bottle descriptions shown as hover tooltips in the list
  • Success flash messages link to the saved item
  • Filter List button hidden when only one bottle type is present
  • Show killed bottles toggle
  • Proof/ABV column toggle
  • Per-page pill buttons (25/50/100/All) persisted in cookie
  • Random Bottle button
  • My Account: Danger Zone — Change Password and Delete Account (with full S3 + DB cleanup)
  • Disable new user registration
  • Updated form field types (EmailInput, etc.)
  • Table and theme polish: rating stars, chevrons, icons
  • Aligned bottler/distillery list table styling with bottle list