Changelog
=========

All notable changes to this project will be documented in this file.

2026-02-09
----------

DJ Crossfade
~~~~~~~~~~~~

* 7-second audio + visual crossfade starts before current video ends
* Volume ramps down on outgoing, ramps up on incoming simultaneously
* Opacity crossfade dissolves between videos during transition
* Countdown overlay shows during crossfade with Play Now / Cancel controls
* User-initiated transitions (click related item, queue) also get visual crossfade
* Falls back to standard countdown when preloaded data isn't ready or media types differ

Footer & Links
~~~~~~~~~~~~~~

* Fixed apex domain link to use ``www.makepostsell.com`` in shop footer
* Added Source Code (GitLab) and PyPI links to shop footer

2026-02-08
----------

Watch Mode v2
~~~~~~~~~~~~~

* Continuous playback with crossfade transitions between media
* Discovery ring: deterministic content traversal precomputed per shop
* Up Next sidebar with compact rows, numbered index, and queue management
* Countdown overlay (7s) as frosted-glass bottom bar between items
* Queue system: add/remove items, reorder playback
* Autoplay toggle switch inline with Up Next heading
* Two-phase preload: fast JSON fetch, then buffer media 30s before end
* Recently-played tracking: filter items from Up Next for 4 hours
* Support for video, audio, and static content (PDFs, images) with auto-advance
* Sticky video on desktop scroll (offset below ribbon)
* ``watch.js`` — new standalone JS module for all watch mode logic

Pop-out Media Player
~~~~~~~~~~~~~~~~~~~~

* Draggable pop-out window with prev/next navigation
* Keyboard shortcuts and responsive controls
* Auto-advance for images/PDFs (60s timer, reset on scroll)
* ``player.js`` — new standalone JS module
* ``/random`` and ``/tv`` endpoints for media playback

Lazy Cart Creation
~~~~~~~~~~~~~~~~~~

* Anonymous session carts are now in-memory until a product is added
* Prevents bots and crawlers from creating empty cart rows in the database
* UUID stays stable across requests via session cookie
* Transient cart guard in authentication merge flow

AJAX Comments
~~~~~~~~~~~~~

* Comment form submits via fetch when JS is available
* Preserves media playback — no page reload interrupts
* Falls back to normal POST + redirect without JS
* ``comments.js`` — new standalone JS module

Email Subscriptions
~~~~~~~~~~~~~~~~~~~

* Email digest subscriptions with configurable frequency
* @mentions in comments notify mentioned users
* RSS and Atom feed autodiscovery in ``<head>``
* Subscribe link in shop nav bar

Related Content
~~~~~~~~~~~~~~~

* Jaccard similarity for related content ranking
* Related content thumbnails in sidebar

Feeds & SEO
~~~~~~~~~~~~

* Sitemap generation (``/sitemap.xml``)
* RSS (``/rss.xml``) and Atom (``/atom.xml``) feeds
* Google site verification meta tag support
* Feeds served as ``application/xml`` for browser rendering
* Feed links open in new window

Adyen Integration
~~~~~~~~~~~~~~~~~

* Added Adyen as a payment processor
* Per-shop enable/disable toggle
* See ``docs/ADYEN.md`` for details

Stripe Improvements
~~~~~~~~~~~~~~~~~~~

* Payment tracking and webhook resilience
* Per-shop Stripe enable/disable

UI & Layout
~~~~~~~~~~~

* Sticky ribbon + logo/nav on desktop scroll
* Footer pushed to bottom of viewport on short pages
* Product media uses viewport-relative sizing (``max-height: 42vh``)
* Reduced heading font sizes for tighter layout
* Product/content dates toggle (``show_dates`` shop setting)
* Inline video playback on thumbnail click (replaced pop-up)

Infrastructure
~~~~~~~~~~~~~~

* ``/version`` endpoint with baked git hash for deploy verification
* ``GIT_HASH`` tracked in repo, baked at install time
* Removed jQuery — all vanilla JavaScript
* Replaced JS toggles with pure CSS ``<details>`` elements
* Pinned ``setuptools<81`` for Python 3.12+ compatibility

2025-12-22 (2:30 PM)
--------------------

PayPal Integration
~~~~~~~~~~~~~~~~~~

* Added PayPal as a payment processor alongside Stripe and crypto payments
* New ``PayPalUserShop`` model for saved payment methods
* Invoice model extended with ``paypal_order_id`` and ``paypal_capture_id`` columns
* Shop settings now include PayPal client ID and secret configuration
* Checkout page supports PayPal payment option when enabled
* Added PayPal saved payment methods (vault) support
* Added ``/billing/disconnect-paypal`` route for users to manage saved PayPal
* See ``docs/PAYPAL.md`` for details

CSS Grid Lanes
~~~~~~~~~~~~~~

* Added toggleable CSS Grid Lanes (masonry layout) setting per shop
* New ``grid_lanes_enabled`` column on Shop model

Video Thumbnails
~~~~~~~~~~~~~~~~

* Added play button overlay on video thumbnails for unlocked content
* Styled video play overlay with red tint and click-to-play text

Meta Tags
~~~~~~~~~

* Added Twitter card meta tags for proper link unfurling on Matrix/Discord
* Increased meta description truncation to 500 chars
