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 <slug>/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.