Home/Product/Changelog
← Back to App
Platform Updates
Latest: v0.13.4

Changelog & Releases

Explore the latest features, sensory scoring upgrades, bug fixes, and architectural improvements shipped to CuratedLists.

v0.13.4Latest Release2026-10-21

Showcase Card Detail Action Copy & Interaction

Replaced developer-centric "Inspect modal" copy with "View details →" across all showcase cards and streamlined direct detail navigation.

Changed

•Showcase Card Action Copy & Interaction

  • Replaced "Inspect modal" label with user-friendly "View details →" in CuratedShowcaseCard.
  • Standardized bottom-right action copy across both expanded long-note cards and standard-length cards.
  • Streamlined click handling so "View details →" directly opens the full contender inspection view.
v0.13.32026-10-21

Edit Contender Action on Queue Shelf Cards

Added an inline Edit button to item cards in the Queue shelf and synchronized queue state and counts in real time.

Fixed

•Queue Shelf Item Editing

  • Added an Edit button beside the delete action on each contender card in the inline Queue shelf.
  • Connected to the EditContenderModal for modifying names, brands, curator notes, badges, and images.
  • Synchronized queue state and counts in real time on save without requiring a page reload.
v0.11.82026-10-19

Roster Rating Mode Badge Accuracy & Clickable Card Logos

Fixed roster header badges to accurately display Simple Score instead of Criteria count for simple-scored rosters, and made roster logos and cover banners clickable across all list and card views.

Fixed

•Roster Header Badges & Rating Mode Alignment

  • Updated the roster detail header to display "⚡ Simple Score" (with settings access for owners) when a roster is configured for simple scoring, eliminating the misleading "5 Criteria" badge.
  • Gated the criteria count badge exclusively to rosters with multi-axis radar scoring active ("✨ {N} Criteria").

•Clickable Roster Logos & Cover Banners

  • Fixed My Rosters cards by allowing clicks on the cover art to pass through directly to the roster link rather than being intercepted by the relative wrapper.
  • Wrapped the header cover art on leaderboard cards in an accessible Link so clicking the logo directly opens the roster.
  • Added pointer-events-none and select-none to cover art images and gradients across Explore, Community, and Profile cards to ensure instant, reliable link activation on mobile touches.
v0.11.72026-10-19

Roster Upvote Double-Click Toggle & Likes Count Persistence Fix

Fixed an issue where double-clicking or re-clicking the thumbs-up upvote button failed to clear properly due to a fast-action cooldown, persisted roster likes counters to the database, and fixed optimistic client sync on public explore cards.

Fixed

•Roster Upvote Button Re-Click & Clear Behavior

  • Removed aggressive 2-second rate-limiting throttle on like toggle server actions that prevented users from unvoting/clearing an accidental like immediately.
  • Persisted calculated likes counts directly to the rosters table and invalidated edge caches (explore, leaderboards) on every like/unlike.
  • Fixed client-side RosterUpvoteButton to fetch live user like status on mount for public/cached pages when SSR does not provide explicit like state.
  • Guarded optimistic interaction state against stale parent component prop re-renders.
v0.11.62026-10-19

Profile Community Boards Tab Polish & Arena Legacy Deprecation

Cleaned up public profile pages by hiding redundant filter tabs when curators do not champion community boards, renamed Championed Arenas to Community Boards, and removed legacy arena terminology across the platform.

Changed

•Profile Rosters Filter & Community Boards Alignment

  • Cleaned up curator profile pages by hiding the filter tab bar when the curator has zero championed community boards, avoiding redundant All/Public tabs and empty dead ends.
  • Renamed "Championed Arenas" filter tab and empty state to "👑 Community Boards" across profile views.
  • Renamed "📂 Public Rosters" filter tab to "📂 Personal Lists" when multiple roster types exist.
  • Updated roster card badges from "👑 Community Consensus" to "👑 Community Board".
  • Deprecated legacy "community arena" wording across dashboard headers, contributor tooltips, and badge descriptions in favor of Community Boards.
v0.11.52026-10-19

Curated Showcase Exclusivity & Community Gating

Enforced strict curator exclusivity for Curated Showcases by disabling visitor contender suggestions and hiding community roster suggestions to preserve unranked editorial purity.

Changed

•Curated Showcase Curator Exclusivity

  • Disabled visitor contender suggestions on Curated Showcases across header actions, empty states, and callout banners.
  • Gated the Suggest Community Roster button and promotion modals for Showcases, preserving them as unranked, curator-exclusive personal collections.
  • Updated backend API routes to enforce nomination policy as disabled and reject community suggestions directed to Showcases.
  • Updated platform guide and documentation to differentiate Curated Showcases from crowdsourced Ranked Tier Boards.
v0.11.42026-10-19

Image Compression, Leaderboard Edge Caching & Notification Enhancements

Optimized image compression with hardware acceleration, added eager uploads, eliminated leaderboard delays with SSR pre-rendering, and enhanced notifications with unread default, mobile swipe-to-dismiss, and dismiss all.

Changed

•Notifications Unread Default, Mobile Swipe-to-Dismiss & Dismiss All

  • Re-ordered notification tabs to place Unread first and made it the default view whenever opening notifications.
  • Added native mobile swipe-to-dismiss gesture with fluid touch tracking, red dismissal background, and haptic feedback.
  • Added an always-visible, tap-friendly dismiss button (X) on each notification card for mobile and desktop.
  • Added Dismiss all action in the drawer header and tab strip, backed by clearAllNotifications server action to clear notifications in a single tap.

•Community Leaderboard SSR Pre-Rendering & Multi-Tier Edge Caching

  • Pre-loaded initial curator and roster leaderboard rankings during SSR in LeaderboardPage, streaming fully hydrated rankings to the browser in 0ms.
  • Implemented getCuratorLeaderboard and getRosterLeaderboard with an in-memory L0 isolate cache, Upstash Redis L1 cache with 350ms hard timeouts and awaited writes, and authoritative database fallback.
  • Added in-memory dimension caching in CuratorLeaderboardView and RosterLeaderboardView so switching between dimensions and tabs is instant without re-fetching or flashing skeletons.

•Hardware-Accelerated WebP Compression & Optimized Dimensions

  • Accelerated client-side image compression by adopting native window.createImageBitmap with hardware decoding and downsampling, dropping compression time from ~300ms to ~35ms.
  • Adjusted default bounding box from 1200x1200px to 800x800px at 0.80 quality, cutting WebP file size by >65% (down to ~40-70 KB) while preserving retina card sharpness.

•Eager Background Uploading & Zero-Wait Saves

  • ItemImageUploader now shows local preview blobs immediately (0ms visual feedback) and begins uploading to Supabase Storage in the background while the user fills out the title and description.
  • Automatically promotes local blobs to permanent CDN URLs upon completion, eliminating modal saving delays entirely.
  • Replaced blocking network auth checks with fast in-memory getSession() calls across all contender modals and drawers.
v0.11.32026-10-19

Community Latency Elimination & Schema Fix for Active Boards

Eliminated 13s cold-stream delay on community roster pages with guaranteed Redis timeouts, fast-exit seeding, and fixed column schema errors in Active Community Tier Boards.

Fixed

•Active Community Tier Boards Showcase Restoration

  • Corrected relational query in getActiveCommunityRosters to select valid columns (upvotes_count) instead of non-existent rating/wins columns that were throwing Postgres error 42703.
  • Restored display of active community rosters (including Ya Basic Burger Joints and Buc-ee's Beef Jerky) across the /community directory.
  • Wrapped active community rosters in edge cache with 60s TTL.

•Redis Hard Timeouts & Cloudflare Edge Lifecycle Fix

  • Added 300ms hard timeout wrapper around all Upstash Redis operations to ensure Redis never stalls edge rendering.
  • Awaited cache write operations within request lifetime so Cloudflare Workers isolates flush writes before terminating.
  • Sanitized Upstash Redis environment variables to strip surrounding quotes and whitespace.
  • Added fast-exit check in seedCommunityItemsIfEmpty to skip 10+ redundant fallback queries when contenders already exist.
  • Cached community roster metadata with 300s edge cache so SSR and metadata resolution run in sub-millisecond time.
v0.11.22026-10-18

Community Image Uploader Parity & Roster Speed Optimizations

Integrated ItemImageUploader across all community roster contender workflows and eliminated sequential database/auth waterfalls on personal and community roster pages.

Added

•Community Roster Image Uploader Parity

  • Integrated ItemImageUploader and client-side WebP conversion across Community Tier Board contender inspection/edit modal, Community Catalog modal, and Nominate Contender modal.
  • Supported direct file drop, file selection, clipboard paste, and external URL auto-upload to Edge CDN storage.
  • Protected community hosted CDN artwork from being overwritten by external hotlinks during sync.
Fixed

•Roster Page Load Performance

  • Wrapped Supabase getUser() in React.cache() and fast-pathed non-authenticated requests to eliminate duplicate auth round-trips.
  • Bypassed blocking middleware auth calls on public /@username/slug routes.
  • Removed redundant getPublicRosterBundle waterfall and parallelized personal roster metadata, items, and backlog queries into a single Promise.all.
  • Added Redis throttling to community item sync and parallelized community roster page queries to eliminate 8+ sequential database round-trips.
v0.11.12026-10-18

Edge Caching, Fast-Path Middleware & SSR Parallelization

Performance optimizations across Edge middleware, Cloudflare Worker Cache API streaming, above-the-fold image loading, and parallelized SSR database queries.

Changed

•Fast-Path Middleware & Edge Cache Streaming

  • Skipped Supabase Auth network round-trips in middleware for unauthenticated visitors without sb-* cookies and excluded CDN/OG/proxy routes from middleware execution.
  • Integrated Cloudflare Worker Cache API (caches.default) and zero-buffer stream piping in /cdn/item-images/[...path].
  • Added eager loading, high fetchPriority, and async decoding for above-the-fold Showcase and S-tier cards, and parallelized SSR auth + roster/profile queries.
v0.11.02026-10-18

Cloudflare Edge CDN Proxy & Hotlink Protection

Cloudflare Edge CDN proxy for Supabase item images providing global edge caching, hotlink defense, and elimination of storage egress quotas.

Added

•Edge CDN Storage Proxy & Hotlink Shield

  • Implemented /cdn/item-images/[...path] Edge route to proxy and stream Supabase Storage objects.
  • Enables Cloudflare Hotlink Protection and WAF anti-leeching defense across all uploaded roster images.
  • Serves assets with 1-year immutable edge cache headers, caching images globally on Cloudflare edge and dropping Supabase egress to zero.
  • Updated client uploaders and ingestion surfaces to generate /cdn/item-images/ URLs.
v0.10.122026-10-18

Image Proxy Hotlink & Anti-Leech Protection

Secured image proxy route with strict Origin/Referer validation, dynamic CORS controls, and SSRF prevention against private network probing.

Security

•Image Proxy Hotlink Protection & SSRF Safeguards

  • Locked down /api/image-proxy to authorized deployment domains (curatedlists.app, curatedlists.com, pages.dev, localhost).
  • Rejected cross-site proxy requests and unauthorized embeds with 403 Forbidden.
  • Configured dynamic CORS headers and OPTIONS preflight handling.
  • Blocked private IP subnets, loopbacks, and cloud metadata IP endpoints (169.254.169.254).
v0.10.112026-10-18

Staged Image Save Prompt Improvements

Clearer inline instructions across the image uploader prompting curators to save items to commit staged WebP images permanently to storage.

Changed

•Clearer Save Prompts for Staged Images

  • Updated conversion notice banners to state: "Click Save below to commit it permanently to storage."
  • Enhanced preview badge to read "Staged WebP (Save to commit)".
  • Added explicit save reminder in uploader thumbnail subtext.
v0.10.102026-10-18

Smart Hotlink Auto-Ingestion & JIT WebP Migration

Automatic client-side ingestion of external image links into high-efficiency WebP and Just-In-Time (JIT) storage migration for existing rosters upon editing.

Added

•Smart Hotlink Auto-Ingestion & JIT Storage Migration

  • Automatic conversion of external image links to 1200px WebP via /api/image-proxy with graceful fallback to hotlinks.
  • Just-In-Time (JIT) migration for existing roster hotlinks when editing in drawer or modal surfaces.
  • Added 1-click "Revert to link" control to give curators full choice to retain external direct links.
  • Integrated deferred storage uploads across AddContenderModal and ManualItemDrawer alongside existing drawers.
v0.10.92026-10-18

Hosted Image Uploads, Canvas Compression & Orphan Sweeper

Zero-dependency client HTML5 canvas image compression converting uploads to high-efficiency WebP, dual-mode uploader with hotlink degradation notices, deferred upload on form save, and automated storage garbage collection.

Added

•Client-Side Canvas Compression & Hotlink Safeguards

  • Implemented zero-dependency compressImageToWebP utility enforcing strict MIME type validation and explicit SVG rejection to prevent XSS.
  • Downsizes photos to a 1200x1200px bounding box at 0.82 quality WebP, reducing multi-megabyte camera files down to ~80–180 KB.
  • Introduced ItemImageUploader with tab switcher (Upload File vs External Link), 5MB ceiling, drag-and-drop dropzone, and hotlink degradation warnings.
  • Integrated uploader across CuratedShowcaseDrawer, EditContenderModal, ContenderImageSelector, and InboxItemDrawer.
  • Added "Upload & Save Permanently" in MetadataDiffModal to ingest scraped third-party images into Supabase Storage.

•Deferred Uploads & Automated Orphan Sweeper

  • Deferred uploads stage in-memory WebP blobs and preview URLs, uploading only when the user commits "Save Changes", preventing 100% of abandoned upload bloat.
  • Added get_orphaned_item_images stored procedure and /api/cron/cleanup-orphaned-images route with CRON_SECRET authorization to batch-prune unreferenced storage objects older than 24 hours.
v0.10.82026-10-18

Item Images in Graphic Exporter & CORS Image Proxy

Added item thumbnail images to graphic card exports for both Curated Showcases and Tier Boards, along with an Edge image proxy to ensure cross-origin images never taint the canvas.

Fixed

•Item Images in Graphic Exporter

  • Exported graphic cards now render item image thumbnails across Curated Showcase cards, Tier Board pills, and the #1 Champion spotlight.
  • Added aspect-ratio cover scaling with rounded corners and clean fallback placeholders when images fail to load.
Added

•CORS Image Proxy Fallback

  • Introduced an Edge-runtime image proxy (/api/image-proxy) that attaches CORS headers to external images.
  • Seamlessly handles cross-origin images on the HTML5 canvas, preventing security errors during PNG download and clipboard operations.
v0.10.72026-10-18

Streamlined Share Flow & Private Graphic Card Protection

Cleaned up the Share modal by hiding redundant visibility selectors on public and unlisted lists, added one-click unblocking for private lists, and protected private graphic exports by omitting dead direct links and QR codes.

Changed

•Streamlined Share Modal & Contextual Terminology

  • Public and unlisted lists now display a clutter-free Share modal focusing directly on link copying, quick social sharing, and graphic export.
  • Adapted copy dynamically to display "Share Showcase" and "Showcase Link" when viewing curated showcases.
  • Added status badge in modal header reflecting visibility state at a glance.

•Private List Warning & One-Click Unblocking

  • Private lists now display a focused warning banner alerting creators that viewers will see an access-denied error.
  • Provided instant "Make Unlisted" and "Make Public" actions directly in the modal to immediately unblock sharing without opening full settings.
Fixed

•Private Graphic Card Protection & Watermark

  • Allowed graphic export cards to be downloaded and shared even when a list is set to private.
  • Dynamically replaced broken direct URLs (https://curatedlists.app/@user/slug) and QR codes with platform brand attribution (curatedlists.app • Curated by @user) on private exports.
  • Added live preview cache busting to refresh graphic previews instantly when visibility changes.
v0.10.62026-10-17

Reliable Follower & Social Email Notification Dispatching

Fixed follower and social email notifications not dispatching by awaiting async email handlers in Edge Runtime, initializing Resend dynamically, and adding robust recipient target lookups.

Fixed

•Edge Runtime Awaited Email Dispatching

  • Awaited email dispatching in toggleFollow, toggleRosterLike, and suggestCommunityContender to ensure Cloudflare Pages Edge workers do not prematurely terminate before email requests are handed off to Resend.
  • Wrapped dispatches in safe error boundaries so email network hiccups never block client optimistic UI updates.

•Resend Dynamic Initialization & Fallback Logging

  • Refactored Resend client initialization to evaluate process.env.RESEND_API_KEY dynamically at invocation time rather than statically at module load.
  • Enhanced getNotificationTarget with admin client fallback, broadened email confirmation criteria, and detailed delivery logging.
v0.10.52026-10-17

Cloudflare Pages Edge Runtime Compatibility for Avatar API

Configured the avatar upload and management API route with the Next.js Edge Runtime segment config to ensure seamless deployments on Cloudflare Pages.

Fixed

•Avatar API Route Edge Runtime Config

  • Added export const runtime = "edge" to /api/user/avatar to satisfy Cloudflare Pages next-on-pages build requirements.
  • Passed native ArrayBuffer directly to Supabase storage uploads for standard edge compatibility.
v0.10.42026-10-17

Profile Picture History, Storage Pruning & One-Click Revert

Added the ability to store the most recent profile pictures when removing a photo or switching to a Google account picture, allowing instant one-click revert while capping storage to 2 recent photos.

Added

•Profile Photo History & One-Click Revert

  • Preserved previous custom profile photos (up to 2 most recent) when a user removes their avatar or switches to their Google account photo.
  • Added an interactive "Recent Photos (click to revert)" row in profile settings with instant thumbnail previews and haptic feedback.
  • Provided a delete button on each saved thumbnail to let users permanently purge individual photos from history and storage.

•Automatic Storage Pruning & Delete Route

  • Updated /api/user/avatar to name uploads with unique timestamps and automatically prune older avatar files in Supabase Storage, keeping only the active photo plus at most 2 previous photos.
  • Added a secure authenticated DELETE handler to purge specific avatar files from the avatars bucket.
v0.10.32026-10-17

Showcase Roster Reorder Persistence & Community Icon Polish

Resolved an issue where reordering ranked contenders on Showcase Rosters was not persisting across page refreshes, and retired legacy battle sword relics in favor of collaborative community group icons.

Fixed

•Showcase Roster Custom Reordering & Persistence

  • Fixed reorder changes resetting upon page reload by updating /api/contenders/reorder to synchronize rank_order and sort_order simultaneously.
  • Ensured showcase page item loaders query by rank_order ASC rather than falling back to unranked composite score order.
  • Added automatic roster edge cache invalidation and page revalidation upon drag-and-drop ranking updates.
Changed

•Community Icon & Badge Modernization

  • Replaced legacy battle sword relics (Swords icon and ⚔️ emoji) with collaborative community group icons (Users and 👥 emoji) across explore pills, roster badges, profile consensus links, and notifications.
  • Updated the arena_pioneer badge label to "Community Pioneer".
v0.10.22026-10-17

Avatar Upload Storage Fix, Real-Time Notifications & To-Try Streamlining

Resolved avatar upload RLS errors with a dedicated server-side upload route and avatars bucket policies, ensured cross-user follow notifications deliver reliably via service-role bypass and Redis real-time sync, and streamlined the To-Try wishlist UX in Personal Ranker.

Fixed

•Avatar Upload Storage Bucket & Server Route

  • Resolved "new row violates row-level security policy" errors when uploading profile photos by adding a dedicated /api/user/avatar server upload endpoint and defining avatars bucket RLS policies in Supabase Storage.
  • Added friendly user-facing guidance in AvatarUpload if storage policies or network errors occur.

•Reliable Cross-User Follow Notifications

  • Fixed follow notifications not appearing on the recipient panel by executing notification creation via service-role admin and SECURITY DEFINER RPC functions with Redis real-time fallback.
  • Hydrated follower avatars and display names automatically when viewing notifications.

•Personal Ranker To-Try Wishlist Streamlining

  • Removed "📌 To Try" from cards placed in S–D tiers to prevent ranked contenders from dropping out, replaced with a clear ✕ Unrank button.
  • Eliminated the disconnected bottom wishlist lane so clicking To Try on unranked bench cards toggles in-place with instant toast feedback.
v0.10.12026-10-17

Intuitive Community Board Tier Voting & Live Standing Sync

Added inline S–D tier placement chips alongside 👍 upvotes on Community Consensus Tier Boards, unified community standing calculations across tier votes and upvotes, and enabled automatic consensus syncing from Personal Ranker.

Added

•Inline S–D Tier Placement Chips & Community Ranking Guide

  • Added inline S | A | B | C | D tier placement chips directly alongside the 👍 upvote button on every contender card in the Consensus Tier Board, plus a full tier placement selector inside the Contender Inspection Modal.
  • Added a "How to Move Rankings" guide banner and #Rank standing badges (#1, #2, #3...) on every contender card to make community ranking mechanics transparent at a glance.
Fixed

•Unified Community Standing Calculation & Instant Cache Invalidation

  • Unified ELO/tier placement votes (S: +150, A: +80, B: 0, C: -80, D: -160) with live item upvotes (+25 per 👍) and per-user vote delta tracking so users can update their tier vote anytime without double-counting.
  • Invalidated Redis tierboard cache immediately on every tier vote or upvote and enabled automatic background sync when placing items in My Personal Ranking.
v0.10.02026-10-16

Frictionless Creation & Inline Modal Scoring

Introduced inline Quick Score slider and Curator Notes editing inside the Contender Inspection Modal, deferred backlog roster queries until explicitly requested, and streamlined the Create Roster modal with progressive disclosure.

Added

•Inline Quick Score Slider & Curator Notes Editing

  • Owners can now adjust Simple Mode Quick Scores via an interactive slider and edit Curator Notes directly inside the Contender Inspection Modal with instant saving—no full-page route transition required.
  • Preserved secondary links to the full Multi-Axis Rating Studio for detailed radar polygon scoring.
Changed

•Progressive Disclosure in Create Roster Modal & Deferred Modal Queries

  • Streamlined the Create Roster modal to show Format, Title, Category, and Visibility by default while collapsing optional Description, Cover Image, Layout, and Multi-Axis Scoring settings behind an expandable toggle.
  • Deferred Supabase roster queries in ContenderInspectionModal until the user explicitly clicks Add to "To Try", eliminating redundant network requests on every card click.
v0.9.182026-10-16

Streamlined Discovery Toolbar & Top-3 Card Previews

Consolidated /explore controls into a compact 2-row filter bar, added Top-3 item preview strips to discovery and workspace cards, and simplified personal workspace card footers with instant search.

Added

•Top-3 Item Preview Strips on Roster Cards

  • Added top-ranked item preview chips (thumbnail, item name, and tier badge) directly inside /explore and /roster cards so users can preview list contents before opening.
  • Added instant search filtering across personal lists and item names on /roster.
Changed

•Compact 2-Row Explore Filter Bar & Simplified Card Footers

  • Consolidated the 4 filter rows on /explore into a compact 2-row control bar to bring roster cards above the fold.
  • Replaced competing dual footer links on /roster cards with item count metadata, a conditional +N To Try pill, and a single Open indicator.
v0.9.172026-10-16

Tier Board & Contender Card Visual Polish

Collapsed empty tier lanes for guests, streamlined empty drop targets for owners, unified duplicate score readouts into a single canonical badge, and upgraded contender card thumbnails and footers.

Changed

•Smart Empty Tier Lanes & Compact Drop Zones

  • Collapsed empty tiers into a sleek single-line indicator in read-only mode when a board has items, eliminating empty vertical boxes.
  • Reduced empty tier lane height for owners to a compact 56px drop zone that expands dynamically during drag operations.

•Single Canonical Score Badge & Larger Thumbnails

  • Consolidated duplicate numeric score badges on contender cards and List View rows into a single canonical score readout.
  • Upgraded contender card thumbnails from 40px to 56px (w-14 h-14 rounded-xl) and replaced per-card mini SVG radar charts with a uniform single-line criteria pill summary.
v0.9.162026-10-16

Instant Navigation, Route Skeletons & Concurrent Roster Loading

Added route-level skeleton loading states, restored Next.js Link prefetching on workspace cards, eliminated server data waterfalls on roster detail pages, and throttled window-focus re-fetching.

Added

•Route-Level Skeleton Loading States

  • Added theme-adaptive loading.tsx skeleton screens for /roster, /roster/[slug], /u/[username]/[slug], /explore, and /community to provide instant visual feedback during navigation.
Changed

•Workspace Card Prefetching & Semantic Links

  • Replaced imperative router.push card wrappers in RostersViewClient with semantic Next.js Link overlays for automatic route prefetching and Cmd/Ctrl+Click new-tab support.

•Concurrent Roster Data Fetching & Throttled Focus Refresh

  • Parallelized getPublicRosterBundle and getLinkedCommunityRoster inside Promise.all on roster detail routes to eliminate server data waterfalls.
  • Throttled window focus re-fetching in RosterDetailClient to a 30-second minimum interval to prevent redundant full-table queries when switching tabs.
v0.9.152026-10-16

Reliable Mobile Image Export & Native Web Share

Fixed SABCD tier card image downloads on mobile browsers by introducing client-side blob download handling, exact Content-Length response headers, and native Web Share integration.

Fixed

•Mobile Tier Card Image Download Failure

  • Replaced static anchor download links with client-side blob URL generation, resolving ERR_FILE_NOT_FOUND errors on Android Chrome and mobile browsers.
  • Added explicit Content-Length, Content-Type, and RFC 5987 Content-Disposition headers to /api/og/roster.
  • Added loading spinner state on the download button to indicate image generation progress.
Added

•Native Device Share Sheet for Graphics

  • Added Share Graphic button powered by the Web Share API on supported mobile browsers, enabling direct sharing to social apps or camera roll.
v0.9.142026-10-16

Engineering Audit & Architectural Cleanups

Completed remaining engineering audit tasks: cleaned up legacy code, updated list deletion, and standardized contender ordering.

Changed

•Audit & Refactoring

  • Completed remaining engineering audit cleanups and streamlined contender creation APIs.
v0.9.132026-10-16

Streamlined Roster Detail, Instant Tier Placement, & Tabbed Settings

Decluttered RosterDetailClient controls, eliminated duplicate modals and buttons, introduced instant tier and quick score selection in AddContenderModal without forced page redirects, organized EditRosterModal into clean functional tabs with list deletion, and standardized domain terminology.

Fixed

•Modal & Button De-duplication

  • Removed duplicate RosterShareModal instance in RosterDetailClient.
  • Removed redundant Import from Inbox button and modal in CuratedShowcaseView.
  • Removed redundant full-width Community Bridge banner from RosterDetailClient.
Changed

•Header & Toolbar Control Consolidation

  • Breadcrumb link now routes owners to My Lists (/roster) and visitors to Explore (/explore).
  • Consolidated sharing interfaces into a unified Share & Export button with real-time visibility status.
  • Retained Print Scorecard in toolbar while pruning redundant export buttons and floating action bars.
  • Elevated + Add Item as the unmistakable primary action on the page.

•Instant Tier & Quick Score Selection

  • Updated /api/contenders to accept tier and score directly on contender creation.
  • Added instant S/A/B/C/D tier selection and score slider in AddContenderModal for Tier Boards, bypassing mandatory redirection.
  • Added Open Full Rating Studio option for detailed multi-axis criteria evaluation.
  • Renamed backlog staging action to Save to To Try.

•Tabbed Roster Settings & Danger Zone

  • Organized EditRosterModal into General, Format & Scoring, and Sharing & Advanced tabs.
  • Added Danger Zone with list deletion functionality and confirmation safety checks.

•Terminology Standardization

  • Replaced internal CBI acronym with Score across lists and contender modals.
  • Replaced Edit Product / Enrich Contender with Edit Item.
v0.9.122026-10-16

Streamlined Navigation, Dedicated Workspace, & Badge Clutter Reduction

Refactored top navigation and user menu to prioritize personal workspaces, routed authenticated visits directly into My Lists, replaced stacked roster tabs with clean filter pills, and capped card badges to essential signals.

Changed

•Workspace Navigation & Direct Launch

  • Authenticated users visiting / are now directly routed to their personal workspace at /roster.
  • Primary navigation re-ordered for verified users: My Lists, Inbox, Explore, Community, Leaderboards.
  • Secondary utilities (Tasting Room, How It Works) relocated to UserNav dropdown and footer.
  • UserNav dropdown decluttered of redundant top-level navigation links.

•My Rosters Personal Workspace & Filter Refinement

  • Removed public platform-wide query and discovery switcher from /roster to preserve dedicated personal workspace focus.
  • Replaced stacked tab bars with a single filter pill bar: All My Lists, Public, Private & Unlisted, and Community Boards.
  • Fixed personal public roster visibility checks to exclude non-public and community-championed entries.

•Card Badge & Visual Noise Reduction

  • Capped roster card badges to Format (Showcase vs Tier Board) and Visibility/Category across workspace and explore grids.
  • Removed redundant numbered and scale badge overlays to let cover artwork and titles breathe cleanly.
v0.9.112026-10-16

Dead Action Cleanup, Contender API Mutations, & Core Type Unification

Purged obsolete server actions and scrapers, added DELETE /api/contenders to eliminate direct browser mutations, consolidated TIER_THEMES, and unified domain interfaces in core/types.

Fixed

•Unified Contender API Mutations

  • Added DELETE /api/contenders handler with ownership checks, route revalidation, and Edge cache invalidation.
  • Replaced direct browser Supabase delete, insert, and update queries with standardized /api/contenders calls.
Changed

•Domain Type & Constants Architecture

  • Unified domain interfaces (Roster, Item, Profile, RosterCriteriaSchema) in src/core/types/index.ts and re-exported cleanly through src/types/database.ts.
  • Extracted canonical TIER_THEMES to src/core/constants/tiers.ts and removed duplicate RadarCoordinate declaration.
  • Consolidated URL metadata scraping to /api/metadata/parse-url.
v0.9.102026-10-16

Leaderboard Navigation to My Rosters & Refreshed Splash Screen

Routed leaderboard "YOU" buttons directly to My Rosters and refreshed mobile splash screen assets with updated platform branding.

Changed

•Leaderboard User Destination & YOU Badge

  • Linked the current user’s podium card and ranked row on CuratorLeaderboardView to /roster instead of their public profile.
  • Added YOU badge and /roster navigation for creator attributions on RosterLeaderboardView when viewing rosters created by the current user.

•PWA Splash Screen Assets & Manifest Tagline

  • Updated splash screen graphics across public/splash and public/banners to the refreshed 576x1024 artwork.
  • Updated web app manifest screenshot label to "CuratedLists - Rate, Showcase, Curate".
v0.9.92026-10-16

Security Hardening, Edge Cache Integrity, & SSR Waterfall Elimination

Prevented private roster cache poisoning on Edge Redis, secured community matchups and rating endpoints, unified route resolution with React.cache(), and eliminated multi-query SSR waterfalls.

Security

•Private Roster Cache Poisoning Prevention & Invalidation

  • Gated getPublicRosterBundle so private rosters are never cached or served from shared Edge Redis.
  • Added automatic invalidateRosterEdgeCache and explore:public:v2 purging across all mutating API endpoints (rosters, contenders, reorder, evaluations).
  • Enforced authenticated verification on action === vouch in matchups API and added rate limiting on upvote and guest voting.
  • Secured rate routes with isOwner verification and scoped contender queries with .eq(roster_id, roster.id).
Changed

•Unified Route Resolution Helper

  • Created resolveRosterRoute server helper wrapped in React.cache() to deduplicate generateMetadata and page queries.
  • Standardized previous_slugs HTTP 308 permanent redirects and community redirects across root, /backlog, and /rate sub-routes.
  • Enforced private roster gating on fallback /roster/[slug] routes.
v0.9.82026-10-16

Phase 1B: Complete Removal of Battles & Comprehensive Dynamic Theming

Destructively eliminated all legacy battle features, database fields, API endpoints, and email templates, and systematically updated shared modals, community components, interactive tasting arenas, and admin consoles with dynamic theme design tokens.

Changed

•Destructive Removal of Battles

  • Permanently removed all battle routes, actions, and client components (/battles/[id], /api/battles, BattleArenaClient, BattleRadarOverlay, BattleVotingBar, CreateBattleModal, src/lib/actions/battles.ts).
  • Purged battle queries, tier limits, and vote counts from community/page.tsx and subscription tier definitions.
  • Purged battle notification templates, dispatcher methods, and client triggers (email_battles, battle email dispatchers).
  • Cleaned battle schema types, battle_wins, and badge mappings from database types, core types, user profiles, and badge management modals.

•Comprehensive Dynamic Theming Across Shared, Admin, & Interactive Views

  • Converted hardcoded dark backgrounds, borders, and text colors across shared drawers and modals (PlaceSearchInput, BarcodeScannerModal, ScannedItemDrawer, ManualItemDrawer, EditContenderModal, RosterShareModal, ConfirmDeleteModal, QRCodeSVG).
  • Upgraded community, social, and leaderboard components (FollowButton, CuratorBadgePill, RadarChart, TierBoard, CommunityPersonalRankerView, CommunityTierBoardView, RosterLeaderboardView) to semantic design tokens.
  • Adapted archetype backgrounds (getArchetypeGradient) to render light tinting in light mode and rich saturated glows in dark mode.
  • Standardized accent call-to-action buttons (bg-accent-primary text-stone-950 font-bold) across navigation, roster listings, criteria editors, and settings.
  • Converted interactive tasting live room (/tasting/[code]) and ConsensusBoardView to dynamic tokens with high-contrast SVG radar rings and consensus metric cards.
  • Re-themed full admin suite (/admin/moderation, /admin/users, UserManagementClient, ModerationQueueTable, MergeDuplicateModal, EmailVerificationManager, ManageUserBadgesModal).
v0.9.72026-10-16

Dynamic Theme & Light-Mode Legibility Across Core Roster Views

Replaced hardcoded dark classes with semantic theme design tokens across root error boundary, roster detail breadcrumbs, backlog manager, rating studio, and user profiles.

Fixed

•Core Roster Views Light-Mode Adaptivity

  • Fixed invisible white text and dark error box in error.tsx.
  • Fixed breadcrumb bar and header badges in RosterDetailClient.tsx.
  • Converted BacklogClientList.tsx to semantic surface and border tokens.
  • Converted RateItemClient.tsx across simple and multi-axis evaluation modes.
  • Fixed breadcrumb text and owner preview button contrast on public profile view.
v0.9.62026-10-14

Curator Badge & Notes Alignment Across Contender Ingestion

Harmonized the Curator Badge selector and curator notes across Add Contender, Edit Contender, and Manual Ingestion drawers, with persistent API storage and inspection modal support.

Added

•Unified Curator Badge System

  • Defined shared BADGE_PRESETS (Top Pick, Best Value, Daily Driver, Essential, Grail) in src/lib/constants/badges.ts.
  • Added badge selector with quick presets and custom 20-character input to AddContenderModal, EditContenderModal, and ManualItemDrawer.
  • Updated /api/contenders POST and PATCH handlers to persist curator_badge and curator_note to the items table.
  • Rendered badge pill and curator verdict notes in ContenderInspectionModal.
Changed

•Ingestion Form Label Alignment

  • Standardized showcase cover image label to "Item Photo / Cover Image" and external link to "Retail / Product Link".
  • Updated detailed mode prompts to reflect badge and review fields.
v0.9.52026-10-14

Idempotent Community Syncing & Personal Ranking UX Polish

Eliminated duplicate button confusion by designating My Personal Ranking as the single definitive entry point, and implemented signature-based idempotency on community ranking syncs with an intuitive In Sync button state.

Added

•Rankings Signature & Idempotency Lock

  • Added deterministic ranking signature hashing (itemId:tier) to prevent gaming or repeated Elo inflation without actual ranking changes.
  • Saved 90-day sync signature state in Upstash Redis and localStorage to block duplicate identical submissions.
  • Enforced a 10-second burst lock to eliminate double-click race conditions.

•In Sync Button State (Option B)

  • Implemented a calm, disabled [ ✓ In Sync ] button state across CommunityTierBoardView and CommunityPersonalRankerView when personal placements match the community board.
  • Dynamically lights up [ 🔄 Sync Changes ] as soon as the curator modifies any tier placement or ranks a new contender.
Changed

•Community Board Navigation Simplification

  • Removed redundant [ ✨ My Take ] button from the consensus tier board toolbar, resolving mobile cramping and eliminating duplicate entry points.
  • Standardized terminology across sandbox headers and forked rosters to "My Personal Ranking".
v0.9.42026-10-14

Curated Showcase Ingestion Hardening, Barcode Scanner Dropdown Fix & Explore Polish

Resolved database schema mismatches when adding and editing showcase items, tailored contender addition workflows for showcases, unclipped the barcode scanner dropdown menu, fixed explore card format misclassification, and removed the redundant collection pill.

Fixed

•Showcase Database Schema Alignment

  • Fixed PostgREST 400 error ("Could not find normalized_score column of items") by removing obsolete score columns from quick-add inserts in CuratedShowcaseView.tsx and communityMatchups.ts.
  • Fixed PostgREST 400 error ("Could not find title column of items") by mapping item title to the name column on insert and update in CuratedShowcaseView.tsx.
  • Resolved Next.js Server Action mismatch in ImportFromInboxModal.tsx by switching to direct Supabase client queries.

•Roster Header & Barcode Scanner Menu Stacking

  • Removed overflow-hidden from the header card container in RosterDetailClient.tsx so the split barcode scanner dropdown (z-50) floats freely above lower sections without being clipped or hidden.
  • Safely applied rounded-2xl overflow-hidden directly to the backdrop image containers.

•Explore Card Format Resolution & Banner Cleanliness

  • Refined normalizeRoster() to accurately identify legacy ranked lists by checking rating configuration, preventing them from being misclassified as showcases.
  • Removed the redundant "Collection" pill on showcase cards and unified banner badges inside a single flex-between container to eliminate badge collision with archetype labels.
  • Bumped edge cache key to explore:public:v2 to bust stale cached explore results.

•Showcase Modal & UI Tailoring

  • Hid irrelevant rating configuration (scale, granularity, simple/multi-axis mode, recalculation) in EditRosterModal for showcases, surfacing layout and numbering options instead.
  • Tailored AddContenderModal and ManualItemDrawer to bypass rating redirection and show showcase-appropriate copy ("Add to Showcase", "Curator Notes / Verdict").
  • Hidden the collaborative Tasting Room button from the toolbar when viewing showcases.
v0.9.32026-10-14

Why CuratedLists? Differentiator Experience, Homepage Reordering & UI Polish

Launched the interactive Why CuratedLists? manifesto page (/why) with live 3-way head-to-head comparison against notes apps and static tier makers, reordered homepage feature tiles, modernized barcode scanner menus with Phase 15 semantic tokens, and made nomination policies dynamic for showcases.

Added

•Interactive Differentiator Preview (WhyDifferentPreview.tsx)

  • Implemented 3-way top tab switcher comparing Raw Notes App (unformatted text & broken links), Static Tier JPEG (unclickable raster export), and live CuratedLists.
  • Interactive 2026 EDC dataset with functional badges, 1-sentence curator verdicts, and real-time upvoting client state.
  • Live interactive controls: [ # Numbered: OFF / ON ] countdown toggle and [ ⊞ Grid / ☰ Stack ] layout morphing.
  • Embedded compact differentiator preview on the unauthenticated homepage directly below the main hero CTA block.

•Dedicated Manifesto & Comparison Page (/why)

  • Comprehensive comparison manifesto contrasting CuratedLists against Apple Notes, TierMaker, Reddit threads, and SEO affiliate blogs.
  • Deep dive on Differentiator 1: "One List, Every Format" / The Polymorphic Engine with 308 redirect permanent vanity links.
  • Deep dive on Differentiator 2: "Solo Curation Meets Live Group Consensus" with community upvotes and real-time blind tastings.
  • Added bottom conversion card triggering the polymorphic CreateRosterModal.

•Global Navigation & Footer Links

  • Added "Why CuratedLists?" navigation link to Header (desktop & mobile drawer) for unauthenticated visitors alongside Explore.
  • Added "Why CuratedLists?" link to Footer navigation.
Changed

•Homepage Dashboard Tile Reordering

  • Reordered authenticated homepage tiles to prioritize Your Rosters & Showcases at the top, followed by Quick Scanner, and Curator Inbox below them.
  • Removed confusing internal [ UNIVERSAL ] tag from Curator Inbox & Scratchpad tile.
Fixed

•Scanner Popup & Drawer Theme Parity

  • Fixed BarcodeScannerController dropdown popup rendering hardcoded dark slate styles in light mode by applying Phase 15 semantic tokens (bg-surface, border-subtle, text-primary).
  • Modernized ScannedItemDrawer modal containers, inputs, and buttons with semantic tokens.
  • Rendered dual distinct action buttons ([ |||| Scan to Inbox ] and [ ✎ Manual Entry ]) on /inbox.

•Dynamic Nomination Policy Copy in EditRosterModal

  • Updated community nomination settings and sync notices to dynamically reflect Curated Showcases vs. Tier Boards ("items" vs. "contenders" and "showcase" vs. "tier board").
  • Removed stale internal milestone comment tags.
v0.9.22026-10-14

Comprehensive How-To Guide, Modernized Homepage & Showcase Polish

Refactored the interactive How-To Guide and public landing page with 6 comprehensive enthusiast pillars, dual format showcases vs. tier boards, Curator Inbox quick access, and removed legacy milestone tags.

Changed

•Interactive How-To Guide Updates (/how-to)

  • Section 1: Curated Showcases vs. Tier Boards, #1–#N countdowns, Grid/Stack layouts, drag-and-drop card reordering, and vanity URLs.
  • Section 2: Universal Ingestion, Global Curator Inbox (/inbox), batch moves, Import from Inbox, and SSRF metadata scraper.
  • Section 5: Granular privacy, velocity rate limiter, vanity slug redirects, and dynamic Edge OG previews.

•Homepage & Authenticated Dashboard Polish

  • Expanded value pillars from 4 legacy cards to 6 modern pillars covering Showcases, Tier Boards, Inbox, Scraper, Radar, and Vanity URLs.
  • Added visual dual-format featurette previewing an editorial Curated Showcase Top Pick alongside an S-Tier contender.
  • Added Curator Inbox & Scratchpad quick-access tile to the logged-in dashboard and modernized button styling.
Fixed

•Create Roster Modal Header

  • Removed internal development milestone badge ("Phase 17 Creation Engine") from CreateRosterModal header.
v0.9.12026-10-14

Global Curator Inbox & Universal Scratchpad

Dedicated central scratchpad hub (/inbox) for rapid capture from barcodes, URLs, and notes before organizing into rosters.

Added

•Curator Inbox Hub (/inbox)

  • Row-level secured curator_inbox_items table with move_inbox_item_to_roster and batch_move RPCs.
  • Full-text search, selection checkboxes, floating batch action bar, and item drawer with SSRF metadata scraper.
  • Integrated 1-tap stash to inbox across camera barcode scanner and manual entry drawers.
  • Added Import from Inbox bridge modal in showcase and tier board views.
v0.9.02026-10-13

Curated Showcases, SSRF Metadata Scraper & Vanity Routing

Zero-pressure curated gear showcases, single-screen morphing creation modal, SSRF-safe metadata scraper, and vanity routing with automatic redirects.

Added

•Curated Showcases & Countdowns

  • Support for unranked gear kits, EDC collections, and #1–#N countdown lists with live drag-and-drop card reordering.
  • Responsive 2–3 column Grid Cards and single-column Editorial Stack layouts.
  • Curator badges (Top Pick, Best Value, Daily Driver, Essential, Grail) and outbound retail link click tracking.

•SSRF-Safe Metadata Scraper & Quick-Add

  • Private IP blocklist and 3500ms timeout protection on /api/scrape-metadata.
  • Selective MetadataDiffModal for merging scraped product photos while preserving personal titles.
  • Plaintext quick-add bar with zero mandatory fields.

•Vanity Routing & Automatic Redirects

  • Next.js middleware rewrite for /@[username]/[slug] to /u/[username]/[slug].
  • Automatic HTTP 308 permanent redirects preserving previous list slugs.
v0.8.42026-10-13

Community Roster Auth Flow & Complete Battle UI Retirement

Gated community roster creation behind authentication with automated draft recovery, and fully retired remaining battle terminology and leaderboard dimensions across feeds and moderation tools.

Added

•Community Roster Auth Prompt & Auto-Save

  • Clicking "Start Community Roster" while unauthenticated immediately prompts the unified AuthPromptModal.
  • Drafted community board configuration is preserved in sessionStorage across OAuth and magic link redirections, auto-publishing once authentication is verified.
  • Added informative authentication notice banner within StartCommunityRosterModal for unauthenticated visitors.
Changed

•Complete Retirement of Battle References

  • Removed "Top Battler" / "Battle Wins" ranking dimension from Curator Leaderboards and API query builder.
  • Removed "Battles" filter tab, battle cards, and battle queries from the community activity feed.
  • Corrected moderation queue quick preview link to target canonical roster routes.
  • Sanitized matchup validation copy from battle language to neutral comparison terms.
v0.8.32026-10-13

Light Mode Parity for Pricing & Leaderboards, Universal Category Examples

Adapted Compare Plans (pricing matrix, plan cards, FAQ), Curator Leaderboards filter pills, and Terms of Service to Phase 15 design system tokens for high-contrast light mode readability. Broadened landing page examples beyond food to highlight audio gear, video games, sneakers, and EDC tech.

Fixed

•Pricing & Capability Matrix Light Mode

  • Replaced hardcoded white and dark slate text in pricing/page.tsx and PricingClient.tsx with semantic tokens (text-primary, text-secondary).
  • Adapted Early Access Preview banner, plan cards, and FAQ cards with high contrast borders and backgrounds.
  • Themed feature comparison table with semantic borders, headers, and alternating row backgrounds.

•Curator Leaderboard Filter Pills & Terms Page

  • Fixed dark slate filter dimension pills in CuratorLeaderboardView.tsx to dynamically adapt to light mode.
  • Updated Section 01 dark badge and main text inheritance on terms/page.tsx.
  • Removed legacy showdown references from leaderboard header copy.
Changed

•Universal Versatility Category Examples

  • Diversified homepage category showcases to feature Headphones & Audio, Video Games & RPGs, Sneakers, Everyday Carry & Tech, Movies, and Books alongside coffee and craft dining.
v0.8.22026-10-13

Light Theme System Tokens & Legacy Showdown Deprecation

Refactored authentication screens, Taste Alignment cards, and community creation modals to use Phase 15 design system tokens for flawless light mode support. Removed obsolete head-to-head showdown buttons and legacy arena terminology.

Fixed

•Editorial Light Mode Parity

  • Converted login form (LoginForm.tsx) from hardcoded dark slate to Phase 15 semantic design tokens (bg-surface, text-primary, text-secondary, border-subtle).
  • Adapted Taste Alignment Engine card (TasteAlignmentCard.tsx) to render crisp light backgrounds in light mode while keeping dark gradients in dark mode.
  • Updated community creation and sharing modals (StartCommunityRosterModal.tsx, ShareableTierCardModal.tsx) to dynamically adjust to light and dark themes.
Changed

•Roster Header & Terminology Simplification

  • Removed obsolete "Showdown" button and CreateBattleModal launcher from roster header toolbars.
  • Updated community bridge banner copy to focus on crowdsourced upvoting and consensus tier boards.
  • Replaced remaining Swords battle icons with Users and ChevronUp badges across explore and community feeds.
v0.8.12026-10-13

Unified Upvoting Architecture & Social Simplification

Streamlined social interactions into a single universal currency: 1-tap Upvoting (▲) across both contenders and rosters. Eliminated competing Like and Promote buttons for clean, zero-friction discovery and democratic tier ranking.

Changed

•Unified Universal Upvotes (▲)

  • Consolidated RosterSocialBar and RosterUpvoteButton to standardize on a single ChevronUp (▲) upvote interaction across roster headers and cards.
  • Removed dual Like and Promote buttons to eliminate user confusion and redundant actions.
  • Added informative desktop hover tooltips and accessible aria-labels explaining the ranking benefits of upvoting rosters vs contenders.
  • Updated Public Landing Page, Explore feeds, and User Guide to showcase unified upvoting.
Changed

•Codebase Simplification & Performance

  • Removed over 270 lines of dual-reaction state tracking and redundant styling.
  • Optimized client bundle and synchronized optimistic toggle responsiveness.
v0.8.02026-10-13

Lightweight Social Layer & Matchmaking Engine Purge

Purged legacy matchmaking and duel arena engines in favor of a minimalist, high-speed social layer featuring roster Likes and Promotes, contender 1-tap upvotes, and upvote-driven catalog and tier board sorting.

Added

•Lightweight Social Layer (Likes & Promotes)

  • Integrated RosterSocialBar with wine-tinted Likes and fiery amber Promotes.
  • Added optimistic client updates with error rollback, haptics, and server state synchronization.
  • Created roster_reactions and item_upvotes tables in Supabase with RLS policies and performance indexes.

•Contender 1-Tap Upvoting

  • Deployed minimalist ItemUpvoteButton across tier board cards, catalogs, and contender inspection drawers.
  • Added real-time increment/decrement with optimistic feedback and authentication prompts for guests.

•Catalog & Tier Board Default Sorting

  • Configured default sorting across community tier boards and catalogs to Most Upvoted (upvotes_count DESC).
  • Added seamless toggle to Recently Added (created_at DESC) and removed all legacy Elo rating sorts.
Changed

•Matchmaking Engine & Calibration Purge

  • Permanently removed CommunityMatchupArena, ShowdownGauntletModal, win-streak trackers, and daily cap checks.
  • Removed client-side Elo calculation utilities, calibration shelves, and uncalibrated contender banners.
  • Sanitized item queries in utils/supabase/queries.ts and app/actions/roster.ts by stripping rating, wins, and match_count.
v0.7.62026-10-10

Editorial Light Mode Fix & Complete Semantic Token Migration

Eliminated hardcoded dark backgrounds across all route wrappers, tier boards, discovery directories, and live tasting views, restoring high-contrast Editorial Light mode and seamless switching with Sommelier Dark.

Fixed

•Semantic Token Migration for Route Wrappers

  • Replaced hardcoded bg-slate-950 and bg-slate-900 wrappers with bg-canvas and bg-surface.
  • Updated typography and borders to text-primary, text-secondary, and border-subtle.
  • Ensured proper contrast and full theme responsiveness in landing page, explore, community, and user profile views.

•Tier Board & Contender Card Light Mode Support

  • Migrated TierBoard lane containers and contender cards from dark zinc/slate to semantic elevated surfaces.
  • Preserved rich tier color accents (Gold, Ruby, Terracotta, Malt, Peppercorn) across both light and dark backgrounds.
v0.7.52026-10-10

Unified Theming Engine & Culinary Brand Overhaul

Transitioned UI away from cold terminal colors to Sommelier Dark (warm espresso charcoal + amber honey) and Editorial Light (warm Michelin parchment + crisp card surfaces) with semantic CSS tokens and next-themes.

Added

•Semantic CSS Token Architecture & next-themes Integration

  • Defined custom tokens under :root and .dark for canvas, surfaces, text, borders, and culinary accents.
  • Created polished ThemeProvider and ThemeToggle with hydration guards.

•Culinary Tier System & Radar Chart Recoloring

  • Updated SABCD badges to Warm Gold, Cabernet Ruby, Spiced Terracotta, Toasted Malt, and Slate Peppercorn.
  • Recolored radar chart personal palate and group consensus overlays to warm culinary accents.
v0.7.42026-10-10

Conversion Funnel & Value-Driven Sign-in Nudges

Introduced context-aware, value-first authentication prompts, persistent auth intent recovery, guest voting milestones, backlog and fork interceptors, and post-tasting radar score claims without disrupting guest exploration.

Added

•Auth Intent Preservation Hook & Global Consumer

  • Implemented useAuthIntent managing curated_pending_auth_intent in localStorage across OAuth and magic link roundtrips.
  • Global AuthIntentConsumer automatically executes pending actions (add_to_try, fork_roster, claim_tasting_score) post-login and displays success toasts.
  • Created dedicated Edge API endpoints /api/rosters/fork and /api/tasting/claim.

•Reusable Value-Driven Nudge Modal

  • Built ValueNudgeModal with dark zinc styling, amber value badge, contender preview, and guest dismiss.
  • Integrated with Matchup Arena, Tier Board inspection, and Personal Ranker views.

•Matchup Arena Milestone Nudge & Guest Voting

  • Allowed guest visitors to cast arena votes with instant elo calculation.
  • Presented an inline milestone card on the 3rd cast vote prompting users to save their palate fingerprint.

•Post-Tasting Radar Claim Flow & Exploration Pill

  • Added palate preservation banner in ConsensusBoardView to save multi-judge radar analysis upon sign-up.
  • Deployed GuestDiscoveryPill at bottom-right on public exploration routes with a 7-day dismissal cooldown.
v0.7.32026-10-10

Edge Performance & Latency Optimization

Reduced Time to First Byte (TTFB) and query roundtrips using consolidated PostgreSQL RPC bundles, Upstash Redis Edge caching with SWR, Cloudflare Cache-Control headers, and Next.js Image optimization.

Added

•Upstash Redis Edge Caching Layer

  • Implemented resilient fetchWithEdgeCache with write-through SWR and authoritative database fallback.
  • Cached public explore directory (explore:public:v1, TTL 300s) and community tier boards (TTL 60s).
  • Added invalidateRosterEdgeCache hooks for automatic cache purging upon contender creation, edits, or privacy updates.

•Consolidated Public Roster Bundle RPC

  • Created get_public_roster_bundle RPC consolidating roster metadata, creator profiles, scored items, win rates, and backlog counts into a single database roundtrip.
Changed

•Edge Runtime & Cache Header Standardization

  • Enforced export const revalidate = 60 across public explore, community, and vanity tier board routes.
  • Added Cloudflare Edge Cache-Control headers (s-maxage=60, stale-while-revalidate=300) to public GET route handlers.

•Image Delivery & Layout Shift Elimination

  • Configured next.config.ts with WebP/AVIF formats, deviceSizes, and remotePatterns for external CDNs.
  • Replaced raw <img> elements in tier board cards with next/image using responsive sizes and layout containers.
v0.7.22026-10-10

Visual Polish & Custom Scrollbar Architecture

Eliminated clunky desktop browser scrollbars with a cross-browser minimalist 6px scrollbar design, transparent tracks, rounded slate thumbs, and utility classes across all horizontal trays and modal viewports.

Added

•Custom Scrollbar Engine & Utility Classes

  • Standard Firefox thin scrollbar styling and WebKit 6px transparent track scrollbar rules in globals.css.
  • Created .no-scrollbar (and .scrollbar-none) utilities for clean trackless touch scrolling.
  • Added .custom-scrollbar utility class for explicit embedded tray styling.
Changed

•Horizontal Viewport & Drawer Polish

  • Cleaned up horizontal navigation and category tab trays in How-To, Explore, and Feed.
  • Ensured full visibility of cards and avatars in Backlog, Tier Board, and Tasting Room views without system scrollbars encroaching on content.
v0.7.12026-10-09

Collaborative Tasting Rooms Guide in How-To

Added comprehensive Section 8 to the interactive How-To user guide covering collaborative tasting flights, blind mode veiling, presence judge tracking, synchronized radar scoring, and consensus radar overlays.

Added

•Section 8: Collaborative Tasting Rooms Guide

  • Detailed visual guide covering room code setup, live QR invites, and blind mode veils.
  • Join hub instructions for both registered curators and guest taster nicknames.
  • Sensory radar evaluation walkthrough with two-way synchronized vertex dragging and criterion sliders.
  • Consensus reveals guide with multi-judge radar overlays, group consensus average, CBI scoring, and flight leaderboards.
v0.7.02026-10-09

Real-Time Collaborative Tasting Rooms, Blind Reveals & Consensus Board

Host real-time collaborative blind tasting flights with live radar vertex scoring, collision-resistant room codes, interactive Presence panels, dual-layer consensus radar overlays, and ranked flight standings.

Added

•Room Code Generation & Edge Session Creation

  • Edge route (/api/tasting/create) generating collision-resistant 6-character alphanumeric codes with ambiguous characters excluded.
  • Automated session initialization and host participant registration.

•Tasting Join Hub & Setup Modal

  • Direct 6-character room code input with auto-formatting and QR camera scanner at /tasting/join.
  • Host modal with configurable title, blind mode veil toggle, live SVG QR invite code, and copyable invite link.

•Live Session Arena & Host Control Console

  • Supabase Realtime channel with Presence avatars, online judges tracking, and live submission progress.
  • Host controls for starting flights, revealing consensus, advancing rounds, and completing sessions.
  • Blind Mode mystery sample veils and Open Mode contender displays.
  • Interactive sensory radar evaluator with two-way synchronized vertex dragging and sliders.

•Consensus Board & Multi-Radar Overlay

  • Unmasks true contender identity with reveal animation upon consensus reveal.
  • Multi-participant radar chart overlay with bold white line for group consensus average.
  • Calculated metrics: Group Raw Average, Consensus CBI (0-100), Tier placement (S/A/B/C/D), and high/low criteria.
  • Flight standings leaderboard tracking live rankings across all completed rounds.
v0.6.82026-10-09

Dynamic Edge OG, Graphic Export Engine & Enhanced Social Sharing

Export high-resolution tier cards (Landscape, Square, Story) with embedded QR stamps, printable sensory scorecards, dynamic Edge OG with radar overlays, and expanded social sharing (Threads, Bluesky, Telegram, Instagram & TikTok).

Added

•Canvas 2D Graphic Export Engine

  • Generate downloadable PNG cards directly in browser with zero server latency.
  • Preset formats: Landscape (1200×630 for OG/X/LinkedIn), Square (1080×1080 for feeds), and Story (1080×1920 for Instagram & TikTok).
  • Crisp high-DPI rendering with S-Tier champion spotlight, criteria radar preview, live QR stamp, curator watermark, and native mobile share blob.
  • Dedicated Instagram Story and TikTok guidance cards.

•Dynamic Cloudflare Edge OG Generation Overhaul

  • Upgraded /api/og/roster edge route with prominent #1 champion showcase banner and score badge.
  • Integrated SVG radar chart geometry overlay powered by Satori for tier distributions in rich previews.
  • Curator avatar and attribution resolution.

•Printable Sensory Scorecard

  • Print-ready (@media print) tasting rubrics with criteria checklists and contender notes.
  • Supports Pre-filled Contenders mode and Blank Blind Tasting mode with live vector SVG QR codes.

•Zero-Dependency ISO/IEC 18004 QR Generator

  • Custom QR matrix engine with Reed-Solomon error correction for fast Canvas & SVG stamping.

•Enhanced Social Sharing Suite

  • Added 1-click sharing to Threads, Bluesky, and Telegram alongside existing platforms.
  • Added 1-click Instagram Story and TikTok graphic generation shortcuts.
v0.6.72026-10-04

Public Rosters & Championed Community Arenas Filtering

Seamlessly view and organize personal public rosters and championed community arenas with dedicated segmented filters across My Rosters and curator profile pages.

Added

•My Rosters Public & Championed Filter Tabs

  • Added segmented filter tabs ("All", "📂 Public Rosters", and "🛡️ Championed Arenas") with live count badges.
  • Dynamically adjusted dashboard headers and empty state copy based on active filter.
  • Ensured community roster cards link directly to /community/[slug] instead of private curator paths.

•Curator Profile Tabbed Rosters Section

  • Added responsive tab filters to curator profile pages to separate personal public rosters from championed community arenas.
  • Highlighted championed arenas with official 🛡️ Champion Arena badges and streamlined exploration actions.
v0.6.62026-10-04

Barcode Scanner for Community Contender Nominations

Seamlessly scan UPC/EAN barcodes directly within Community Rosters to auto-fill contender names, brands, and photos, backed by documentation updates.

Added

•Community Add Contender Barcode Scanning

  • Enabled camera-powered UPC and EAN barcode scanning directly inside the Community nomination modal.
  • Auto-resolves packaged goods, snacks, beverages, and books with metadata and product photos from Open Food Facts and Google Books.
  • Intelligently contextual: active for packaged items, merchandise, and books, hidden for location and venue rosters.

•Platform User Guide Updates

  • Documented barcode ingestion workflows under Community Matchups & Elo Arena in the Interactive User Guide.
  • Aligned terminology with standardized "Add Contender" naming across all community views.
v0.6.52026-10-04

Personalized Category Quick-Picks & Searchable Dropdown

Dynamically adapts 1-tap category chips to the curator’s personal roster creation history, paired with a compact searchable catalog dropdown.

Added

•Personal History Quick-Picks

  • Queries previous user rosters to display their top most frequently used categories as instant 1-tap chips, eliminating scrolling friction.
  • Includes smart fallback presets for new users (Food & Snacks, Dining, Coffee, Gaming, Music).

•Searchable Preset Catalog & Custom Input

  • Compact dropdown input with real-time search across emojis, names, and category descriptions.
  • Seamlessly preserves custom category typing and syncs contender archetypes automatically.
v0.6.42026-10-03

Streamlined Category & Archetype Controls

Reduced mobile cognitive overload by converting category chips to a 1-row scroll tray and collapsing the archetype grid into an expandable smart summary.

Changed

•Horizontal Category Tray

  • Replaced 7-row block of 13 wrapped chips with a sleek 1-row horizontal carousel, reducing form height on mobile by ~70%.
  • Consistent streamlined layout across both Create Roster and Edit Roster modals.

•Collapsible Archetype Studio

  • Collapsed the 8-button archetype grid into a smart summary badge that auto-derives from the category selection.
  • Maintained full granular control via a clean "Change ▾" expandable disclosure for power users.
v0.6.32026-10-03

Community Contender Editing & Deletion Management Suite

Introduced direct inline editing and deletion controls for community roster champions and admins, preserving rating integrity and cascading matchup history cleanly.

Added

•Inline Community Contender Editing

  • Enabled champions and admins to edit Title, Subtitle (Brand/Region), and Image URL directly from the Tier Board inspection drawer and Leaderboard table.
  • Preserves 100% of accumulated Elo ratings, win/loss stats, match histories, and community reputation upon update.

•Direct Contender Deletion & Veto Management

  • Added direct permanent delete confirmation dialogs with automatic cascading across reports and showdown votes.
  • Retained curator veto controls with immediate real-time synchronization across views.

•Collaborative Terminology Standardization

  • Unified collaborative community prompts from "Suggest a Contender" to an active and intuitive "Add Contender" across hero views, boards, arenas, and dialogs.
v0.6.22026-10-03

Food & Snacks and Music Presets & Roster Settings Usability

Introduced popular Food & Snacks and Music & Albums category presets with tailored criteria routing, added suggested category chips to Edit Roster, adapted visitor suggestion copy to match decoupled matchups, and streamlined footer version navigation.

Changed

•Suggested Category Presets Expansion

  • Added high-demand "Food & Snacks" preset with dedicated sensory crunch, flavor impact, and craveability criteria routing.
  • Added "Music & Albums" preset with songwriting, production, vocal performance, album flow, and replay value criteria.
  • Removed niche "Hot Sauce & Condiments" from default category preset chips.

•Roster Settings & Navigation Usability

  • Added quick suggested category chips to Edit Roster Details modal, dynamically auto-selecting corresponding Contender Archetypes on click.
  • Updated nomination policy copy on personal rosters to clearly distinguish between Visitor Contender Suggestions (for personal tier boards) and Community Showdown Nominations.
  • Streamlined footer version badge into a direct clean hyperlink to /changelog and removed redundant navigation link.
v0.6.12026-10-03

Centralized Community Matchups & Arena Bridge

Decoupled pairwise showdown matchups from personal rosters to eliminate fragmented voting silos. Established Community Rosters as the exclusive home for community showdowns, and introduced the Community Arena Bridge and Platform Contributor recognition.

Changed

•Decoupled Matchups from Personal Rosters

  • Removed the siloed pairwise matchup arena and "Community Matchups" tab from personal rosters (/@username/[slug] and /roster/[slug]).
  • Personal rosters are now 100% focused on personal curation, criteria scoring, and SABCD tier curation (Tier Board and List View).
  • Updated visitor contender suggestion banner copy to clearly reflect suggesting items for the curator to evaluate on their personal Tier Board.
Added

•Community Arena Bridge & Platform Contributor Recognition

  • Added getLinkedCommunityRoster server action to automatically discover matching or linked Community Rosters by category or explicit slug.
  • Added sleek Community Arena Bridge Banner on personal rosters inviting visitors to participate in official community showdowns and consensus tiers.
  • Added header badges for linked Community Arenas and a "Platform Contributor" badge for curators who championed the arena.
  • Added automatic redirect from /roster/[slug] and /@username/[slug] to /community/[slug] for official community rosters (is_community: true).
  • Added automated community_champion milestone badge (🛡️) in badge evaluator honoring curators who launched or championed a community arena.
  • Profile roster cards (/@username) now feature a ⚔️ Community Arena badge and link directly to /community/[slug].
v0.6.02026-10-02

Multi-Dimensional Community & Board Leaderboards

Introduced competitive leaderboards across 6 curator dimensions and 4 roster performance dimensions with sub-millisecond Upstash Redis edge caching.

Added

•Multi-Dimensional Community & Board Leaderboards

  • Unified /leaderboard page featuring top-level segmented toggle between Top Curators and Top Rosters & Boards with URL query parameter synchronization (/leaderboard?tab=...&dim=...).
  • Curator Leaderboards: 6 competitive ranking dimensions (Most Followers, Most Liked, Most Curated, Most Rosters, Trending (7d), Top Battler) with Gold, Silver, and Bronze podium cards.
  • Roster & Board Leaderboards: 4 ranking dimensions (Trending (48h), All-Time Liked, Deepest Rosters, Most Active (30d)) with rank badges, cover banners, and archetype indicators.
  • Edge Caching with Upstash Redis: Edge API endpoints (/api/leaderboard/curators and /api/leaderboard/rosters) with 1-hour Redis L1 cache revalidation and fallback to Supabase PostgreSQL rollup views.
  • Platform Navigation Integration: Added Leaderboards link with Trophy icon to top navbar and mobile drawer.
v0.5.142026-10-02

Community Roster Card Cover Banners

Added full-width cover image banners and archetype fallback gradients across community roster cards.

Added

•Active Community Roster Card Cover Banners

  • Rendered full-width cover image banners on community roster cards under "Active Community Rosters & Arenas" at /community.
  • Added smooth hover zoom effect (group-hover:scale-105) with dark gradient overlays.
  • Added floating category and community arena badges over the cover banner.
  • Extracted shared getArchetypeGradient helper for consistent fallback gradients.
v0.5.132026-10-02

Ambient Backdrops & Profile Privacy Choice Cards

Enhanced visual depth on community rosters with ambient blurred backdrop banners and added side-by-side profile privacy choices.

Added

•Community Roster Cover Art & Ambient Backdrop

  • Rendered custom cover picture as a prominent rounded thumbnail on /community/[slug] with an ambient blurred backdrop.
  • Added OpenGraph and Twitter card image metadata for community roster pages.
  • Added direct Support & Feedback mailto link in the platform footer.
  • Replaced binary toggle with side-by-side interactive choice cards for Public vs. Private profile visibility.
v0.5.122026-10-02

Dedicated Public vs. Community Categories on Explore

Separated Public Curated Rosters from collaborative Community Rosters on Explore with URL parameter synchronization.

Added

•Dedicated Public vs. Community Categories on Explore Page

  • Implemented top-level primary category toggle separating Public Curated Rosters from collaborative Community Rosters.
  • Added URL search parameter synchronization (?category=community vs ?category=public).
Fixed

•Archetype Tab Count Discrepancy & Share Links

  • Scoped archetype filter pill counts strictly within the selected category scope.
  • Fixed card share button on explore cards to generate canonical /community/[slug] links for community rosters.
v0.5.112026-10-02

Accurate Community Tier Placement & Sync Rate Limiting

Calibrated Elo cutoffs for small contender sets and added 1-hour Redis rate limiting with cooldown badges for community sync.

Fixed

•Accurate Community Tier Placement for Small Contender Sets

  • Removed artificial forced rank distribution, ensuring contender tiers strictly follow calibrated Elo rating cutoffs.
  • Upgraded uncalibrated contenders with creator baseline stats upon ingestion.
Added

•Sync Rating Rate Limiting & Cooldown Guards

  • Added 1-hour Redis rate limiting per user per roster on syncUserPersonalRatingsToCommunity.
  • Created useSyncCooldown hook for client-side localStorage synchronization without render purity violations.
v0.5.102026-10-02

Sync Personal Rankings to Community Elo

Added the ability to batch-sync personal sandbox rankings directly to community consensus Elo standings.

Added

•Sync Personal Rankings to Community Elo

  • Added dedicated "Sync to Community" action in CommunityPersonalRankerView.
  • Implemented syncUserPersonalRatingsToCommunity, converting tier placements into weighted Elo deltas on the user behalf.
  • Added "Sync Ratings" quick button on the CommunityTierBoardView toolbar.
v0.5.92026-10-02

Auto-Populate Creator Rankings & Calibrated Standings

Pre-populated champion evaluations on community sandboxes and seeded creator tier ratings into baseline Elo standings.

Added

•Auto-Populate Creator Rankings on Community Rosters

  • Automatically queries and loads the creator personal evaluations from items when viewing /community/[slug].
  • Seeded creator personal tier rankings and composite scores into baseline community Elo standings (S: 1700, A: 1600, B: 1500, C: 1400, D: 1300).
  • Promoted New Contenders • Needs Votes section to the very top of the tier board.
v0.5.82026-10-02

Community Roster Suggestions & Promotion Flow

Enabled visitors to suggest turning public rosters into collaborative community boards with notifications and 1-click promotion.

Added

•Community Roster Suggestion Flow

  • Added "Suggest Community" option on public rosters with anti-spam 7-day rate limiting.
  • Added in-app notifications and email alerts notifying curators of community interest.
  • Added 1-click Community Promotion Prompt modal to upgrade lists to collaborative hubs.
v0.5.02026-10-01

Crowdsourced Community Rosters & 5-Clash Gauntlet

Launched first-class collaborative community rosters, consensus S/A/B/C/D tier boards, 5-clash showdown gauntlets, and interactive personal ranker sandboxes.

Added

•Crowdsourced Community Rosters & Consensus Tier Boards

  • Introduced first-class collaborative routes at /community/[slug] with champion attribution.
  • Dynamic Consensus Tier Board automatically projecting community Elo into S/A/B/C/D tiers.
  • Interactive Personal Tier Ranking Sandbox with live consensus comparison overlay and 1-click "Save as My Roster".
  • 5-Clash Showdown Gauntlet with rapid-fire pairwise clashes and guest voting.
  • Taste Alignment Engine calculating % match and highlighting spiciest disagreements with the crowd.
  • HTML5 Canvas export generating 1200x630 shareable graphic tier cards.