0.2.53 (2026-02-26) ------------------- Example project ~~~~~~~~~~~~~~~ - Added a bootstrap script to rebuild the example DB, create demo content, and ensure a superuser exists. - Added a `Procfile.dev` + `just dev` shortcut to run Django and Vite dev servers together. - Documented the Bootstrap5 theme setup, demo data bootstrap, and dev server workflows. - Added a full-page theme selector for non-HTMX requests in the example app. - Ensure the Bootstrap5 example navbar loads the real theme selector via HTMX. - Ensure the Bootstrap4 example navbar loads the theme selector so switching back works. - Ensure the Plain example theme includes the theme selector for switching. Developer tooling ~~~~~~~~~~~~~~~~~ - Added ``CAST_ENABLE_DEV_TOOLS`` as the primary gate for dev-only views (styleguide, components, theme-compare, dev-health), with ``CAST_ENABLE_STYLEGUIDE`` kept as a deprecated compatibility alias. - Added dev-only routes at ``/cast/components/``, ``/cast/theme-compare/``, and ``/cast/dev-health/`` (with ``X-Robots-Tag: noindex``). - Added ``ensure_reference_site`` management command to create/update demo blog and podcast content used for theme verification. - Added Playwright utility script plus just wrappers: ``just screenshot``, ``just screenshot-all``, ``just check-page``, ``just compare-page``. - Standardized agent/dev workflow around ``just dev-tmux``, ``just dev-logs``, ``just dev-logs-dir``, ``just dev-status``, and ``just dev-open``. - Added ``cast.W001`` Django system check and ``just verify-assets`` CLI check for stale built frontend assets. Documentation ~~~~~~~~~~~~~ - Rewrote search documentation to accurately describe available filter parameters, validation rules, and facet behavior. - Updated API docs for `/api/facet_counts/` and `/api/facet_counts/{id}/` with accurate legacy and `mode=modal` response shapes. - Clarified development visual testing workflow: use `/cast/styleguide/` for component preview and `/styleguide-blog/` for end-to-end search/filter/facet checks. - Clarified `CAST_FILTERSET_FACETS` defaults and how it controls modal facet groups. - Added a concise architecture section describing the search/filter/facet data flow across blog pages and facet APIs. - Corrected older API reference mismatches (auth URL examples, serializer response examples, theme update payload key, multipart upload field names, and `pageSize` pagination parameter naming). - Added explicit docs for conjunctive vs disjunctive facet counting, including practical URL examples and rationale for legacy vs `mode=modal` behavior. Developer data helpers ~~~~~~~~~~~~~~~~~~~~~~ - `create_user` now reuses existing users to avoid duplicate-username errors during demo setup. - `create_audio` now populates an m4a file by default for example content. Styleguide ~~~~~~~~~~ - Added a theme-aware styleguide route with demo data, theme switching, and fallback handling. - Added dedicated gallery/audio/video sections and seeded threaded comments for better visual coverage. - Added a styleguide-only CSS layer to clarify section spacing without touching production templates. - Added optional remote media settings for pulling real-world images and transcripts into the styleguide. - Reduced the default transcript excerpt length to a few segments for a more compact preview. - Allow the styleguide to reference a remote video URL without downloading the file. - Added a management command to prefetch styleguide demo media and renditions. - Added a toggle to skip styleguide rendition generation during page render. - Reduced the default number of transcript segments shown in the styleguide. - Fixed the Bootstrap4 styleguide gallery modal by filtering remote gallery blocks to theme-specific markup and tightening the gallery click handling. - Added styleguide templates and example settings to preview the cast-vue theme when installed. - Allowed Wagtail API pages requests to override template base dir and render-for-feed flags for the cast-vue styleguide preview. - Ensure styleguide-rendered galleries generate missing renditions even when remote gallery HTML is unavailable. - Ensure the styleguide media post renders gallery thumbnails by generating missing renditions. - Refresh styleguide media post renditions in the repository so Bootstrap5 gallery thumbnails render correctly. Feeds ~~~~~ - Add a feed detail page at ``/feed/`` that lists blog RSS, podcast feeds (4 audio formats in RSS + Atom), and an Apple Podcasts subscribe link. - Navbar RSS icon now links to the feed detail page via a new ``feed_detail`` follow-links key; ``rss`` key is preserved pointing to the raw XML feed. - Custom themes without ``feed_detail.html`` fall back to the plain theme. - Add ``apple_podcasts`` as a supported key in ``CAST_FOLLOW_LINKS`` settings. Themes ~~~~~~ - Allow `?theme=` or `?template_base_dir=` to temporarily override the active theme for a request. - Add staged theme template enforcement: discovery now distinguishes strictly required templates from soft-required templates that emit ``DeprecationWarning`` when missing. - Render the theme selector in Bootstrap4 navigation and pass selector context from blog pages. - Populate gallery prev/next attributes so the cast-vue theme can navigate between gallery images. - Ensure Podlove players initialize against per-instance hosts to avoid collisions when the same audio appears multiple times. - Add theme-aware Podlove player configuration tokens with optional light/dark overrides. - Always render the Bootstrap5 theme selector and consolidate color mode selection into a single dropdown. - Add follow-link support and Bootstrap5 navbar icons for RSS/social profiles. - Introduce Bootstrap5 spacing tokens for list/detail rhythm and apply them to list/detail templates. - Store theme choices cache as an immutable tuple and return a fresh list copy to prevent accidental mutation. - Fix double DB hit in the theme context processor by passing the site default as a fallback. - Narrow context processor exception handling to DB/lookup errors instead of blanket ``Exception``. - Error handlers now gracefully fall back to Django's default 400/403/404/500 pages when a theme-specific error template is missing. - Fix Podlove player dark-mode loading flashes by forcing dark player config in dark mode and applying dark iframe/container fallback colors while the iframe bootstraps. Pagination ~~~~~~~~~~ - Fix scroll position landing mid-content after htmx pagination swap by changing ``show:top`` to ``show:window:top``. - Add View Transitions API support (``transition:true``) for paginating, using explicit ``#paging-area`` keyframes with graceful fallback in unsupported browsers. Animation is disabled for users who prefer reduced motion. - Add ``hx-sync="#paging-area:replace"`` to pagination links so rapid clicks cancel in-flight requests instead of racing. - Switch pagination history updates from ``hx-replace-url`` to ``hx-push-url`` so browser back/forward steps through paginated pages. - Update bundled htmx from 2.0.0-beta4 to 2.0.8. - Scroll to top before HTMX view-transition snapshots for ``#paging-area`` swaps so paginated content does not overlap behind sticky navigation during the fade. - Disable root view-transition animation so only ``#paging-area`` cross-fades, preventing full-page overlap artifacts around sticky navigation. - Switch pagination transition from old/new cross-fade to new-only fade-in by hiding the old ``#paging-area`` snapshot, removing mid-transition double exposure artifacts. - Skip View Transition animation for deep-scroll pagination clicks and fall back to instant HTMX swap + top scroll, avoiding the last visible jump under the sticky navbar on long pages. Images ~~~~~~ - Gallery and image templates now link to optimized Wagtail renditions instead of original uploads, avoiding multi-megabyte downloads when users click through. - Keep the Bootstrap gallery modal responsive on click while reserving image space and showing a loading indicator to prevent placeholder wobble.