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_TOOLSas the primary gate for dev-only views (styleguide, components, theme-compare, dev-health), withCAST_ENABLE_STYLEGUIDEkept as a deprecated compatibility alias.Added dev-only routes at
/cast/components/,/cast/theme-compare/, and/cast/dev-health/(withX-Robots-Tag: noindex).Added
ensure_reference_sitemanagement 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, andjust dev-open.Added
cast.W001Django system check andjust verify-assetsCLI 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_detailfollow-links key;rsskey is preserved pointing to the raw XML feed.Custom themes without
feed_detail.htmlfall back to the plain theme.Add
apple_podcastsas a supported key inCAST_FOLLOW_LINKSsettings.
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
DeprecationWarningwhen 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:toptoshow:window:top.Add View Transitions API support (
transition:true) for paginating, using explicit#paging-areakeyframes 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-urltohx-push-urlso 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-areaswaps so paginated content does not overlap behind sticky navigation during the fade.Disable root view-transition animation so only
#paging-areacross-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-areasnapshot, 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.