fix(web): show launch times in local and UTC with explicit labels - #322
Merged
Conversation
🔍 Quality Check Results
🎉 All quality checks passed! This PR is ready for review. Triggered by commit af315ef • View Details |
This was referenced Aug 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Reported by a site visitor: launch times on
/launch/upcoming/carry no timezone label and appear to alternate between UTC and viewer-local. They missed launches because of it.Cause
django-tz-detectactivates the session timezone only from the second page view onward — its own README states "Django's timezone awareness will not be available on the first page view." So the first view renders UTC, later views render viewer-local, and an expired session or blocked JS silently reverts to UTC. Nothing on the page said which.Change
All launch times now render client-side from a UTC ISO-8601 instant through one shared
{% launch_time %}tag: local time primary, UTC beneath, both labeled.launch-time.jsis left with a single unconditional path.#datewas emitted empty for JS to fill.Also fixed
#datewas empty in all three branches and the only code filling it was commented out, passing{{ launch.net }}where a precision ID belongs.index,index_mobileandappeach overwrote#dateviadateFormat(...), which would have clobbered the new markup.LaunchListViewgainedselect_related— the new NET column readsnet_precision, and that page already N+1'd on its other FK columns.Removed
django-tz-detect,moment-timezone.min.js(~180KB),dateFormat.js, and three verbatim copies ofgetDateFormat.moment.min.jsstays — the datetimepicker needs it.Side benefit: dropping per-session timezone activation makes these pages cacheable again.
Verification
Locally: 11/11 new launch-time tests pass, ruff clean across
src/, all edited templates parse,poetry check --lockclean.Docker was unavailable locally, so the DB-backed regression tests and the rest of the suite run here in CI for the first time.
Spec:
docs/superpowers/specs/2026-08-11-launch-time-display-design.md🤖 Generated with Claude Code