Skip to content

Multi-chapter board: UCLA hub at /board/ucla and UCLA submission emails - #97

Merged
getvindicated2day merged 1 commit into
mainfrom
board-ucla
Oct 12, 2026
Merged

getvindicated2day merged 1 commit into
mainfrom
board-ucla

Conversation

@getvindicated2day

@getvindicated2day getvindicated2day commented Oct 12, 2026 •

Copy link
Copy Markdown
Collaborator

PR 1 of 2. Calendar invites come in PR 2, on top of this.

What changes

Multi-chapter board

  • Chapters: Berkeley stays at /board, and UCLA is at /board/ucla. Both run the same pages and components; nothing is forked.
  • Database: every board table gets a chapter column, and existing rows become Berkeley's. Every read, insert, update and delete is scoped to the signed-in user's chapter. A Berkeley admin can't edit a UCLA row even by its id.
  • Config:
    • lib/board/chapters.ts (sent to the browser) has teams, labels, Projects content, quick links, key dates and the rule text.
    • lib/board/chapter-server.ts (server only) has each chapter's password variables, cookie name and submission recipients.
  • Sign-in per chapter:
    • Each chapter has its own cookie and checks only its own variables.
    • UCLA: BOARD_UCLA_ADMIN_PASSWORD opens the admin view and BOARD_UCLA_PASSWORD opens the member view.
    • A Berkeley password never opens UCLA's hub, or the reverse.
    • Existing Berkeley sign-ins keep working.
  • Rounds: a new board_rounds table holds each round or week and its due date, replacing Berkeley's hardcoded round constants.

UCLA hub, seeded from docs/board-ucla-preview.html

  • Home: one row of six board cutouts, 130px tall and 80px on phones, shrinking instead of wrapping. The images are public/board/ucla/board-1…6.webp, extracted from the prototype. Also quick links, key dates, at-a-glance, and announcements with an admins-only option. Members never receive Finances.
  • Board: Fiona at the top, Will and Ayat under her, and the columns Data, Research, App Dev, Design, Technical Writing and High School. Members come in through the admin "Import members" box, and no member data is committed.
  • Projects: Project Crosscheck, the three research projects, and the 10-week timeline. Week 4 (Oct 11–17) is open now.
  • Assignments:
    • Exactly Fiona's Oct 11 tasks for 9 people, due Sun, Oct 18. There's no proof field and no rule box, and everyone starts at Not submitted.
    • The Oct 4 week is archived with its tasks and no status column.
    • Admins can add, edit and remove tasks per person, set each person's status (Not submitted, Submitted, Missing, Excused), change the due date, and start a new week.
    • A new week archives the current one and carries over anyone not marked Submitted or Excused.
  • Events: the seven from the prototype, including "Day TBD", with On campus and Online filters. Only admins can edit them.
  • Meetings: Oct 11, Oct 4 and Sep 27 with attendance. Admins add and remove meetings: date, absent, notes, recording.

UCLA submission emails

  • Recipients: To Fiona Wangsawidjaja and William Prawira, Cc Rana. Rizwaan Bana is added to To when the submitter's team is App Dev or Data. The lists live in lib/board/chapter-server.ts.
  • Email details: the subject is [VINdicated UCLA] <name>: <task>, and reply-to is the submitter's email on file. If there isn't one, the form asks for it and uses it only for that email.
  • The form: shows "This goes to Fiona and Will" before sending and "Sent to Fiona, Will and Rizwaan" after.
  • Berkeley's submissions are unchanged.

Both chapters

  • My page tab, with a "Viewing as" picker remembered in the browser.
    • It shows your tasks this week, your lead, what your team is working on, and what's coming up.
    • The picker is isolated in one hook, useViewer, so it can be replaced with the signed-in person once per-person sign-in exists.

Railway variables to set

  • BOARD_UCLA_ADMIN_PASSWORD: for Fiona and Will.
  • BOARD_UCLA_PASSWORD: for everyone else on the UCLA board.

Both are blank in .env.example. No password is in the code, tests, seed data or docs.

Tested locally (production build, local Postgres, a stand-in for Brevo's API)

  • Sign-in:
    • Each UCLA password opens the right view.
    • Each chapter's password returns 401 on the other chapter.
    • A Berkeley cookie shows UCLA's sign-in box, and the reverse.
    • A Berkeley cookie from before this change still works on /board.
  • Permissions:
    • For a UCLA member and for a Berkeley admin, every UCLA write returns 404: announcements, events, week, person status.
    • Patching a UCLA event by id from a Berkeley session returns 404 and changes nothing.
    • Members' page data has no Finances; the admin's does.
  • Submissions:
    • Data member (Nhi): To Fiona, Will and Rizwaan, Cc Rana, reply-to Nhi, with the file attached.
    • Research member (Jared): To Fiona and Will, Cc Rana, without Rizwaan.
    • Ayat, with no email on file, is asked for one.
    • Berkeley (Chloe): to Rana only, unchanged.
  • Weeks:
    • Changing the due date updates the week and its tasks.
    • Excused, Missing and Submitted set per person.
    • "Start a new week" made week 3, due Oct 26, and carried over everyone but the submitted and excused.
  • Upgrade: a copy of the live Berkeley-only database (old schema, 20 members) gets chapter columns, keeps all Berkeley rows, and is seeded with UCLA's data.
  • Berkeley regression: same headings, rule, proof lines, Unassigned group, archive and socials filters, plus the new My page.
  • tsc, lint and build pass. No sideways scrolling on any UCLA tab at 390px.

Generated by Claude Code

- Every board table gets a chapter column; existing rows are Berkeley's.
  All reads and writes are scoped to the signed-in user's chapter.
- Sign-in per chapter: own cookie, own passwords (BOARD_UCLA_ADMIN_PASSWORD,
  BOARD_UCLA_PASSWORD). Neither chapter's passwords open the other hub.
  Existing Berkeley sessions stay signed in.
- Chapter config (lib/board/chapters.ts) drives teams, labels, Projects,
  quick links, key dates and the rule; server-only config holds password
  variables and submission recipients.
- UCLA hub seeded from the prototype: Oct 11 deliverables due Oct 18 with
  no proof, the Oct 4 week archived without status, events, announcements
  (Finances admins only), meetings with attendance, and six board photos.
- Weeks: admins change the due date, set each person's status (Not
  submitted, Submitted, Missing, Excused) and start a new week, which
  carries over anything not submitted or excused.
- UCLA submissions go to Fiona and Will, Cc Rana, plus Rizwaan for App Dev
  and Data; reply-to is the submitter, asked for when none is on file.
- My page for both chapters, with a Viewing as picker kept in the browser.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QzNDQSmhjgKE63rwUnwcMq
@getvindicated2day
getvindicated2day merged commit 34d090c into main Oct 12, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants