Added configurable platform timezone handling across Jekyll campaign state, browser countdowns, Worker lifecycle automation, campaign-runner reports, dashboard settings, and Worker config mirroring. The default remains America/Denver for compatibility, and super admins can choose from supported IANA timezones.
Added upcoming-campaign launch reminders with a slim public signup form, Cloudflare Turnstile verification, campaign/email dedupe, signed unsubscribe links, bounded KV dispatch jobs, and Resend delivery through the existing shared email module.
Reduced baseline Workers KV write usage by changing the minute-level scheduler heartbeat to persist hourly instead of every minute, preserving cron health visibility while keeping the free-tier write budget available for real mutations.
Updated local development so _config.local.yml can hide launch reminder Turnstile widgets the same way local admin sign-in can hide its Turnstile widget.
Extended the Podman media optimizer image and wrappers with optipng and gifsicle so local PNG/GIF source compression uses the same repository media workflow as responsive image and video derivative generation.
Added a mobile PageSpeed performance pass for campaign pages: YouTube hero videos now render as local poster/play facades and load the remote iframe only after play intent, avoiding the initial YouTube JavaScript/CSS cost.
Added responsive hero-image preloads and a 640w WebP derivative rung so mobile campaign pages can choose smaller browser assets between the existing 480w and 960w variants.
Updated the media optimizer to skip generated responsive WebP derivatives during source optimization, keeping generated browser assets up to date without recursively re-encoding them.
v1.0.2 - 2026-06-01
Added public-page performance fixes from the PageSpeed review: remote-video campaign pages no longer preload hidden fallback hero images, tier images opt into lazy/async decoding, default brand logos reserve their intrinsic dimensions, and public pages avoid eager Stripe preconnects before cart intent.
Extended the dashboard media optimization pipeline to generate responsive WebP image variants for PNG, JPEG, and GIF source images, so public campaign templates can serve smaller browser assets while keeping original uploads as source-of-truth fallbacks.
Added a manual scope=all option to the Optimize dashboard media workflow so existing campaigns can be reprocessed through the same media pipeline used for new dashboard uploads.
Updated campaign, tier, card, gallery, and content-image templates to use generated responsive variants when they exist without changing visible page structure or campaign Markdown references.
v1.0.1 - 2026-05-29
Added actual Stripe balance transaction fee/net capture for newly charged pledges and a super-admin backfill path for older charged pledge records.
Updated dashboard Analytics to prefer stored actual Stripe fees when available, keep estimated fees only where needed, and label mixed/estimated values clearly.
Added admin content-editor media uploads for campaign and diary content blocks, with immediate local previews and publish-time upload into the correct campaign asset directories.
Added the dashboard media optimization pipeline: npm run media:optimize, npm run media:optimize:check, and a GitHub Actions workflow that losslessly compresses uploaded images, generates high-quality WebM video derivatives, and rewrites literal campaign/config video references after derivatives exist.
Kept dashboard uploads source-preserving in the Worker while documenting the external optimization step for operators and forks.
Made Supporters and Analytics return empty read-only views for campaigns without pledge indexes instead of blocking new or empty campaign dashboards.
v1.0.0 - 2026-05-26
Added the private admin dashboard as the supported browser editing and operations surface at /admin/ and /es/admin/.
Added role-scoped magic-link admin authentication for super admins and campaign users, with cookie-backed sessions, CSRF/origin checks, and browser-safe admin APIs that do not expose ADMIN_SECRET.
Added admin sign-in challenge protection support for Cloudflare Turnstile-compatible deployments while keeping local/test bypasses explicit.
Added dashboard tabs for Settings, Add-ons, Campaigns, Analytics, Reports, Supporters, Marketing, Users, Secrets & credentials, and Runtime diagnostics.
Replaced the Pages CMS editing model with the dashboard-driven workflow while keeping _config.yml and campaign Markdown as the reviewable fork-facing source of truth.
Added WYSIWYG block editing for campaign content and diary entries, including media settings, link editing, Markdown-style inline formatting, mobile previews, local drafts, and publish-state tracking.
Added dashboard editing for campaign settings, tiers, support items, campaign add-ons, stretch goals, ongoing items, diary entries, decisions, platform add-ons, and platform settings.
Added dashboard upload handling for campaign media, brand assets, add-on images, and hero videos using convention-based asset directories and slug-style filenames.
Added dashboard Users management backed by Worker KV at admin-users:v1, separate from GitHub-backed publish flows.
Added notification emails for newly created dashboard users when Resend is configured; user edits do not resend invitations.
Added dashboard Marketing tools for referral/UTM URL building, saved referral codes, reusable embed-builder UI, and copyable launch snippets.
Fixed Marketing embed previews for campaigns with YouTube or Vimeo hero media so progress bars, milestones, and stretch-goal labels stay contained.
Added role-scoped dashboard Analytics, Reports, and Supporters views with sortable/filterable tables, exact-cent dollar display, and CSV downloads; report previews/downloads do not send email or write sent markers.
Preserved the Cloudflare Workers KV free-tier target by keeping normal dashboard reads, previews, filters, analytics, and local drafts at zero KV writes.
Aligned pledge email sender configuration with the authorized Resend sender domain and documented sender-domain setup for forks.
Made GitHub Pages deploy permissions explicit for the production deploy workflow.
Added admin dashboard accessibility, i18n, SEO/noindex, security, mobile/tablet responsiveness, and DRY UI passes, plus focused unit, Playwright, Podman smoke, and KV-write-budget coverage.
Updated release metadata to 1.0.0.
v0.9.5 - 2026-05-03
Aligned local Worker development with GitHub Actions by moving the Podman Worker image to Node 24.
Updated Worker compatibility_date to 2026-05-03 so Wrangler 4 / Miniflare starts cleanly under Node 24.
Updated host and Podman test wrappers to prefer Node 24, with Node 22 as the minimum Wrangler 4 fallback.
Switched the Podman Worker dependency bootstrap to npm ci so local container starts do not rewrite worker/package-lock.json.
Expanded creator launch documentation with add-ons, hosted embeds, tax/shipping fallback expectations, free-shipping decisions, report recipients, and fulfillment handoff.
Added a Spanish creator checklist route for fork and creator onboarding.
Verified the full merge gate, including security suite, host smoke, Podman mutable-pledge smoke, and headless E2E.
v0.9.4 - 2026-05-02
Previous milestone for campaign-runner reports, deployment hardening, creator checklist work, and Worker deployment compatibility updates.