Story 2436: Mailing List Subscription Post Auth#2475
Open
herzog0 wants to merge 1 commit into
Open
Conversation
a2851ad to
a7c3795
Compare
75d904c to
fcfd84e
Compare
a7c3795 to
d4c3e88
Compare
fcfd84e to
6bc71c1
Compare
julioest
approved these changes
Jun 2, 2026
julioest
left a comment
Collaborator
There was a problem hiding this comment.
Works as expected on my end ✅
d4c3e88 to
6a64a43
Compare
c722aa4 to
bd2f4c3
Compare
feat: inject post-auth modal context in HomepageView feat: add PostAuthSubscribeView for post-login modal feat: add post-auth mailing list modal template feat: add post-auth modal CSS feat: wire post-auth modal into v3 homepage fix: correct post-auth modal width, email field, and button padding fix: use $refs for checkbox container to fix unselect all fix: drop only from modal include so CSRF token is available refactor: extract _subscribe_pending helper to remove duplicate sub logic feat: toggle select all / unselect all button based on checked state fix: add missing bottom padding below select/unselect all row fix: title padding fix: correct email field text color and font size to match text field spec fix: revert email field color and font-size to match figma spec fix: colors and radii fix: remove aria-hidden from backdrop links to prevent focus conflict warning
99178e5 to
879e91d
Compare
bd2f4c3 to
abb2720
Compare
Collaborator
|
Works great, approving :) Should the modal be disimissable with Esc key? I noticed that pattern in other modals with aria-label="Close", it does not work here so maybe that attribute that dialog.js uses to bind the Esc key is missing? |
ycanales
approved these changes
Jun 11, 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.
Issue: #2436
Summary & Context
Adds a post-login mailing list subscription modal that appears automatically on the homepage the first (and only) time a user lands there after logging in. The modal pre-fills the user's account email and lets them choose which lists to subscribe to.
Changes
users/signals.py- setrequest.session["show_ml_post_auth_modal"]inuser_logged_inwhen user hasn't seen the modal yet (User.data["ml_post_auth_seen"]falsy)ak/views.py(HomepageView) - pop session flag inget_v3_context_data; mark user as seen immediately; inject modal list contextmailing_list/views.py- addPostAuthSubscribeView(login required); reuses existing subscription + confirmation-email logic; returns empty HTMX fragment to remove modal from DOMmailing_list/urls.py- register/mailing-list/post-auth-subscribe/templates/v3/includes/_mailing_list_post_auth_modal.html- new standalone modal partial; auto-opens via Alpinex-init+ CSS:target; reuses.mailing-list-modal__*classes for checkboxes/list itemsstatic/css/v3/mailing-list-card.css- add.ml-post-auth-modal__*classes for email row, body, footer row, and counttemplates/v3/homepage.html- conditionally include the modal whenshow_ml_post_auth_modalis in contextHow the "seen once" logic works
user_logged_insignal setsrequest.session["show_ml_post_auth_modal"] = True(only ifUser.data["ml_post_auth_seen"]is not set)HomepageView.get_v3_context_datapops the session key and immediately setsUser.data["ml_post_auth_seen"] = Trueon the User recordx-initopens it by setting the URL hashPostAuthSubscribeView, which creates PENDING subscription records and sends the confirmation email, then returns an empty response that HTMX uses to remove the modal from DOMRisks & Considerations
User.dataJSONField is used for theml_post_auth_seenflag - no migration needed since the field already exists and defaults to{}v3flag gate viaHomepageView.get_v3_context_data)Screenshots
Peer-review testing steps
v3flag is enableddocker compose exec web python manage.py shellSelf-review Checklist
Frontend