diff --git a/.gitignore b/.gitignore index 7803749..fdba633 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,13 @@ vars.fish vars.sh +# GIT_HASH is rewritten by setup.py at install time via +# `git rev-parse --short HEAD`. Tracking it just produced churn: +# every feature commit was followed by a "bump GIT_HASH to X" commit +# whose value was always one commit behind HEAD (because the new +# bump commit itself shifted HEAD again). setup.py owns this file. +make_post_sell/GIT_HASH + *.egg *.egg-info *.pyc @@ -13,6 +20,7 @@ coverage.xml build/ dist/ data/ +data*/ src/ .tox/ nosetests.xml @@ -30,8 +38,10 @@ test *.dkim.key caddy +.claude monero-wallet-cli.log monero-wallet-rpc.log monero-wallet-rpc.log* + diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 9e13111..99546c7 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -24,7 +24,10 @@ build: - cp -pr env/static static - tar -zcf static.tar.gz static # Clean up the directory outside of the gitlab-runner filesystem. - - rm -rf /opt/make_post_sell/env + # rm -rf can race with background processes on build runners — verify removal. + - rm -rf /opt/make_post_sell/env; for i in 1 2 3; do [ ! -d /opt/make_post_sell/env ] && break; sleep 2; rm -rf /opt/make_post_sell/env; done; [ ! -d /opt/make_post_sell/env ] + # Ensure bin/python symlink exists (Python 3.12 venv may only create python3). + - test -f env/bin/python || ln -sf python3 env/bin/python # Clone the virtualenv with virtualenv-clone into the desired location. - virtualenv-clone -vvv $PWD/env /opt/make_post_sell/env # Create a tarball of the virtualenv. @@ -62,6 +65,11 @@ pypi-twine: - python3 -m venv twine_env - source twine_env/bin/activate - pip install --upgrade pip - - pip install twine build + # Pin twine <6 — newer twine auto-detects GitLab CI and refuses to + # fall back to ~/.pypirc on the runner, requiring PYPI_ID_TOKEN + # (Trusted Publishing OIDC). Until we migrate to Trusted Publishing, + # stick with the classic ~/.pypirc auth on the build runner. + - pip install "twine<6" build - python3 -m build - - twine upload dist/* + - twine check dist/* + - twine upload --non-interactive dist/* diff --git a/CHANGELOG.rst b/CHANGELOG.rst new file mode 100644 index 0000000..ee3919e --- /dev/null +++ b/CHANGELOG.rst @@ -0,0 +1,154 @@ +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 ``
`` +* 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 ``