feat: member profiles, per-viewer display config, and tracks owning the schedule - #73
Merged
Conversation
…e collection is off
…m's question layout
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
🚅 Deployed to the nexus-pr-73 environment in nexus
|
ethnjs
marked this pull request as ready for review
September 8, 2026 04:38
11 tasks
ethnjs
added this pull request to stack #75
September 11, 2026 06:02
1 task
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.
Summary
Three interlocking features, in the order they had to be built:
Breaking: the tournament loses its own location, dates, and divisions.
Closes #69, #71, #72
What changed
Backend
Models and migrations
is_primary,start_date/end_date,university_idorlocation, anddivision. (eb2e5d683865)track_id, backfilled from the tournament's primary track. (eb2e5d683865)tournament_event_tracksjoin table, replacing track derivation through shifts. (eb2e5d683865)e38f3f7cddb9,657302df78d5)datefortrack_id; event preferences gaintrack_idand dropkey. (eb2e5d683865)start_date,end_date,university_id,location, anddivision. (eb2e5d683865)start_timeandend_time— an event's schedule is now the days its shifts fall on. (eb2e5d683865)eb2e5d683865)tournamentstotournament_membershipsrather than being fanned out. Everyone starts from defaults. (c7d1e93a5b02,d3f8a1c74b26)Schemas and routes
fieldsquery with named groups (field_groups.py), collapsing the slim/full response split into one base schema./members/mefor self-reads.manage_members.manage_membersormanage_roles.Logic
Members and consent
Tracks
Forms and field keys
Display config
Frontend
Member profile
PanelField,SectionHeading, and shared field primitives.Tracks
Display config and roster
useDisplayConfigDrafthook.localStorageinto display config; the events tab still useslocalStorage.Shared UI
PillMenu,MasonryGrid,FloatingEditButton,TrackFields/TrackDayPicker/TrackEditSection.RadioList/CheckboxList, and aRadioCirclethat stays round in any layout.Out of scope
Test plan
pytestpasses locallyAutomated
test_display_config.py— lenient reads, strict writes, per-viewer isolation, filter round-trip.core/test_field_groups.py— thefieldsquery groups.test_memberships.py— consent gating, self-service edit routes, field selection, server-side filters.test_tracks.py— primary/cosmetic rules, delete vs pending-delete, auto-purge.test_shifts.py,test_events.py— track scoping, event/track links, dropped time bounds.test_forms.py,test_form_validation.py,test_form_write_through.py— track-keyed presets, one event-preference question per track, re-scoped write-through.test_join.py,test_audit.py,test_roles.py,test_core.py.Manual