Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 12 additions & 6 deletions docs/annual-conference-plan.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

**Plan status:** Active planning; Overview and Work plan available

**Last updated:** 2026-07-26
**Last updated:** 2026-08-03

**Maintainers:** DevCongress organizers; Angela (`angelateyvi@gmail.com`) manages new task creation

Expand Down Expand Up @@ -64,29 +64,35 @@ Organizer Console
The first operational workspace slice is now in place:

- the primary organizer navigation exposes **Annual Conference**, not a global Volunteer Hub;
- `/organizer-console/annual-conference/2026` is the active-edition overview;
- `/organizer-console/annual-conference/:year` is an edition-scoped overview, with 2026 as the initial edition;
- the provisional date is **19 December 2026**;
- Work plan is live at `/organizer-console/annual-conference/2026/work-plan`, seeded once from `DevCongress 2026 — Event Checklist.xlsx`;
- Volunteers is nested at `/organizer-console/annual-conference/2026/volunteers`;
- Overview, Work plan, and Volunteers are interactive today; future modules remain visible as planned structure rather than empty routes;
- Overview, Work plan, Timeline, and the 2026 Volunteers workflow are interactive today; future modules remain visible as planned structure rather than empty routes;
- the former organizer volunteer paths redirect to the new workspace;
- the existing public form, QR link, campaign ID, submission API, and stored applications are unchanged.
- each accountable owner or collaborator can edit their assigned tasks; the edition planning owner can edit every task, add tasks, manage phases, and create the next edition;
- 2026 has fixed **Phase 1** (1–31 August) and **Phase 2** (1 September–19 December); 12 confirmed kickoff tasks are assigned to Phase 1 and the remaining 15 tasks stay in **No phase** until organizers classify them;
- future editions can define any number of non-overlapping phases, select a planning owner or inherit the previous edition's owner, and reorder, rename, redate, or delete phases without deleting tasks;
- task target dates remain nullable but are prioritized by the conference-health dashboard; an assigned task's target date cannot exceed its phase end date;
- owners and organizers can add an authenticated user with the **Volunteer** role from People & Access;
- volunteer sessions land in Annual Conference, see only tasks where their email is accountable or collaborating, and can update only those task statuses;
- volunteer access is enforced at both the organizer router and API boundary; Events, hubs, access management, applicant records, task creation, task reassignment, task-detail editing, and organizer-only internal notes remain unavailable;
- every authenticated organizer can edit every task, while only `angelateyvi@gmail.com` can add a task;
- Work plan and Timeline are phase-scoped by default: they open on the current phase, or the next available phase outside an active window, and recalculate every metric and task section when organizers switch to another phase, **No phase**, or the entire conference;
- conference health keeps objective completion, elapsed phase time, overdue/blocked pressure, due-soon counts, and planning confidence visible at a glance; planning confidence measures task coverage across dates, phases, and accountable owners;
- the first named spreadsheet owner is accountable and the remaining names are collaborators; `All`, `TBD`, and blank owners remain unassigned;
- new owner and collaborator selections use active organizer emails as stable identities, while the UI shows organizer names and preserves unchanged legacy spreadsheet assignments;
- finance is deferred to a later restricted module, and reminders are not part of this release.

The work plan uses relational `annual_conference_editions` and `annual_conference_tasks` Supabase tables in production, with a local JSON fallback for development. The one-time seed contains 26 tasks: 24 Not started and 2 Done.
The work plan uses relational `annual_conference_editions`, `annual_conference_phases`, and `annual_conference_tasks` Supabase tables in production, with a local JSON fallback for development. The initial plan contains the 26 imported checklist tasks plus the new Volunteer recruitment task: 25 Not started and 2 Done.

### Annual workspace modules

| Module | Responsibility | Initial scope |
| --- | --- | --- |
| Overview | One operational picture of the active edition | Key decisions, milestones, owners, blockers, readiness, and cross-workstream status |
| Work plan | Replace the shared spreadsheet | Workstreams, tasks, owners, deadlines, dependencies, priority, status, and activity history |
| Timeline | Judge delivery health and schedule confidence | Phase completion, time versus work, schedule signals, phase windows, and a paginated planning-gap table whose goal is zero rows |
| Programme | Build what happens on stage and in rooms | CFP, reviews, keynotes, speakers, talks/workshops/panels/demos, rooms, technical needs, and run of show |
| Volunteers | Move from interest to useful assignments | Intake, review, roles, teams, shifts, assignments, briefing, and status |
| Registration | Manage the attendee journey | Registration/ticketing, capacity, attendee communication, check-in, badges, cancellations, and refunds where applicable |
Expand Down Expand Up @@ -139,7 +145,7 @@ The intended result is one December 2026 volunteer dataset regardless of which v
| --- | --- | --- | --- | --- |
| Exact date or dates | Done | Unassigned | 19 Dec 2026 | 19 December 2026 is the provisional starting point; confirmation remains a later decision |
| Conference theme | Not started | Unassigned | TBD | Gates keynote outreach, CFP framing, programme, sponsorship deck, and creative |
| Venue | Not started | Angela | TBD | UPSA and Accra Digital Centre are the current candidates; Elijah and Elvis collaborate |
| Venue | Not started | Elijah | TBD | UPSA and Accra Digital Centre are the current candidates; Elvis collaborates |
| Attendance target | Not started | Unassigned | TBD | Needed for capacity, ticketing, catering, badges, swag, connectivity, and budget |
| Keynote speaker or speakers | Not started | Elijah | TBD | Patrick G. Awuah is preferred; the original shortlist also mentioned the NSMQ quiz mistress |
| Ticketing approach | In progress | Unassigned | TBD | Paid registration is confirmed for December; choose the payment provider and define payment, refund, reconciliation, and failure ownership after the free monthly flow is proven |
Expand Down
9 changes: 6 additions & 3 deletions docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,8 +108,9 @@ Public API evolution is additive: archive list and detail payloads expose `archi
- `[adminBase]/events` — event management overview
- `[adminBase]/website-preview/events` — authenticated preview of the exact public meetup collection contract
- `[adminBase]/website-preview/events/[slug]` — authenticated website-shaped preview of one public meetup DTO
- `[adminBase]/annual-conference/2026` — active annual-edition overview
- `[adminBase]/annual-conference/2026/work-plan` — shared annual-conference task plan
- `[adminBase]/annual-conference/[year]` — selected annual-edition overview and future-edition creation
- `[adminBase]/annual-conference/[year]/work-plan` — shared annual-conference task plan with phase assignment
- `[adminBase]/annual-conference/[year]/timeline` — phase management and target-date timeline
- `[adminBase]/annual-conference/2026/volunteers` — December volunteer intake operations
- `[adminBase]/events/new` — create event form
- `[adminBase]/attendance` — monthly attendance ledger and cross-month insights
Expand All @@ -133,7 +134,9 @@ Public API evolution is additive: archive list and detail payloads expose `archi
- `/api/auth/session`, `/api/auth/admin/exchange`, `/api/auth/admin/callback`, `/api/auth/logout` — Google OAuth and app-owned organizer session lifecycle
- `/api/admin/organizers*` — owner-only organizer email allowlist management
- `/api/admin/audit-log` — owner-only audit ledger for organizer sign-ins and successful admin mutations
- `/api/annual-conference/[year]/work-plan` — organizer-only annual edition/task reads, named-organizer task creation, and all-organizer task edits
- `/api/annual-conference/editions` — organizer-only edition list and planning-owner-restricted next-edition creation
- `/api/annual-conference/[year]/work-plan` — organizer-only annual edition/phase/task reads, edition-owner task creation, and all-organizer task edits
- `/api/annual-conference/[year]/phases` — edition planning-owner phase creation, editing, ordering, and deletion
- `/api/attendance/monthly` — admin-only monthly attendance ledger, import coverage, and cross-month insights
- `/api/events` — all events, create event
- `/api/events/[eventId]` — event detail, status update, and admin-only removal
Expand Down
2 changes: 2 additions & 0 deletions docs/auth.md
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,8 @@ Required setup:

Organizer access still depends on `admin_memberships`. A successful Google login does not grant organizer permissions unless the verified email is active in the allowlist.

Only owners can change an existing member between the Organizer and Volunteer roles. The People & Access directory exposes this as an inline role selector only to owners, the API repeats the owner check, and a successful role change revokes the member's existing app sessions so the narrower or broader access takes effect on their next sign-in.

For local development, keep Google OAuth pinned to `http://localhost:5173`. The login screen blocks Google sign-in on other local ports or `127.0.0.1` so Supabase does not fall back to the deployed Site URL.

## Local Development
Expand Down
50 changes: 50 additions & 0 deletions docs/changelog.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,58 @@
# Changelog

## 2026-08-03 — Phase-first work planning

- Made the active delivery phase the primary scope for Work plan and Timeline, defaulting to Phase 1 during its window and allowing organizers to switch to another phase, No phase, or the entire conference.
- Recalculated task status, completion, ownership gaps, schedule health, and planning gaps from the selected phase instead of mixing a phase-filtered ledger with conference-wide statistics.
- Made the timeline runway selectable, changed its countdown to the selected phase end, scoped planning gaps to the selected phase, and preselected the active phase when creating a task from its work plan.
- Consolidated phase context, completion, status, owner filtering, and filter clearing into one Work Plan control panel and removed the separate task search strip.
- Replaced the ledger's internal scrolling with six-row pagination so larger phase plans stay bounded without extending the task table down the page.
- Teleported the phase and owner dropdown menus outside the merged panel so its rounded overflow boundary cannot clip open options.
- Removed the Timeline's workstream-progress, delivery-threat, and upcoming-deadline panels, leaving phase summary, runway, and planning gaps as its focused operating view.
- Replaced the Timeline's planning-gap card lanes with one compact eight-row table showing each task, owner, status, phase, and target date, with missing values highlighted in place, direct editing, and simple pagination.

## 2026-08-03 — Initial Phase 1 responsibilities

- Assigned the confirmed keynote, venue, website/registration, sponsorship, graphics, media coverage, and conference-call work to Phase 1 without adding duplicate umbrella tasks.
- Moved Venue accountability to Elijah, left graphics and call ownership unassigned where requested, and retained the existing specific design, media, and call tasks.
- Added Volunteer recruitment as a separate unassigned Phase 1 task for finding new volunteers and promoting the volunteer call.

## 2026-08-03 — Conference health layout refinement

- Removed the standalone Phase Health panel and placed delivery threats and upcoming deadlines in its column as two stacked, action-oriented panels beside workstream progress.
- Removed presentation-only task examples from those panels, limited each to two live tasks, prevented near-term tasks from repeating in later deadlines, and added 30-second plus window-focus work-plan refresh so organizer updates automatically change the visible rows.
- Made the Accra-local day value refresh every minute and whenever the window regains focus, keeping the conference countdown, Today marker, overdue state, due-soon state, and preview dates current across midnight.
- Simplified annual-conference owner and collaborator selectors to display organizer names while preserving email-backed values, summarized longer selections as “+N more” without a duplicate count badge, and replaced yellow/black multi-select checks with soft pink selected rows and pink check controls.
- Kept the collaborator menu within the task drawer's content inset by sizing it to its field instead of forcing it wider toward the left edge.
- Joined adjacent selected collaborators into a single softly divided selection group, removing the scalloped corners between consecutive rows while retaining rounded outer edges.
- Consolidated the duplicated annual-conference edition label and selector into one compact header control, moved workspace navigation to a dedicated row, and restyled future-edition creation as a secondary action.
- Fixed the shared date picker so its teleported calendar opens above task drawers and other application overlays instead of appearing unresponsive behind them.
- Replaced the long planning-gap repair list with a bounded three-lane exception board for tasks missing both fields, a phase, or a target date; each lane has independent scrolling and pagination, a header-level status filter, direct editing, and organizer display names instead of raw email labels. Removed the search bar and decorative lane labels/colors, and made the empty-board goal explicit.
- Made planning-gap lane titles self-contained and upgraded each clickable card with status, workstream, ownership, collaborator count, phase, target date, and conditional dependency context, plus restrained hover, focus, movement, and reduced-motion states.
- Simplified planning-gap cards by removing priority badges, animated left rails, accent hover borders, dependency side borders, and all card movement; hover motion is limited to the **Open task** arrow while keyboard focus remains explicit.
- Consolidated conference completion, countdown, current phase, planning confidence, overdue, blocked, and due-soon signals into one responsive summary, removing the six duplicate statistic cards and the repeated no-phase count.
- Tightened the conference summary into a clearer metric, status, progress, facts, and countdown hierarchy, and replaced planning-lane count pills with circular number-only counters.
- Kept the shared annual-conference navigation spatially fixed when switching between Overview, Work Plan, Timeline, and Volunteers by replacing the whole-page directional movement with a short opacity-only transition.
- Reserved a stable scrollbar gutter on the desktop application scroll container, preventing route content from changing width when switching between pages with and without vertical overflow.
- Replaced the oversized volunteer application cards with a compact, horizontally scrollable table for names, email addresses, X handles, Slack names, and sign-up times.
- Stabilized the pre-JavaScript workspace loading screen with system fonts so webfont loading cannot resize its message, reduced the loading headline's scale and weight, and softened the shared application heading/display weights from 700/800 to 600/700.

## 2026-08-02 — Edition-scoped conference phases and timeline

- Added a dynamic annual-conference edition switcher and planning-owner-controlled future-edition creation, with the next owner selected from active organizers or inherited from the previous edition.
- Added fixed 2026 Phase 1 and Phase 2 windows, unlimited phases for later editions, safe phase editing/reordering/deletion, and a No phase state that preserves all existing tasks.
- Added task phase assignment, target-date attention, and server/database validation preventing assigned dates from exceeding phase end dates.
- Added a conference-health Timeline with overall and workstream completion, planning confidence, phase time-versus-work comparisons, overdue/blocked/due-soon signals, upcoming deadlines, and a proportional phase runway.
- Kept unclassified and undated work actionable in a fixed-height planning-repair queue with search, status filtering, explicit missing-field labels, direct task editing, and ten-item pagination so planning gaps never lengthen the whole page.
- Refined the dashboard to a light app-native treatment without dark or yellow feature panels, sorted workstreams by completion percentage, replaced the native status select with the shared dropdown, and added clearly labelled non-persistent example rows to otherwise empty attention and deadline panels.

## 2026-08-03 — Assigned-work access for Annual Conference volunteers

- Added **Volunteer** to People & Access so owners and organizers can grant conference-only sign-in without organizer-wide privileges.
- Redesigned People & Access around a compact member directory, a focused side-panel invite form, concise role definitions, name-first rows, and a matching bounded loading skeleton.
- Added Navii avatars, hid directory emails by default, limited the email reveal control to signed-in owners, and made display names mandatory in both client and server validation.
- Added an owner-only inline role selector for switching active members between Organizer and Volunteer, with server-side owner enforcement, audit logging, and session revocation after a change.
- Removed the redundant global Annual Conference navigation tab and organizer-only ownership-gap counter from volunteer views, restricted full task editing to the edition planning owner or the task's accountable owner/collaborators, and replaced the black In progress badge with a restrained teal treatment.
- Routed volunteer sessions directly into Annual Conference and limited navigation to the edition overview and work plan.
- Filtered volunteer work-plan responses to tasks where their email is accountable or collaborating, removed organizer-only internal notes, and added a clear no-assignment state.
- Allowed volunteers to update only the status of assigned tasks while keeping Events, hubs, access management, applicant records, task creation, reassignment, and task-detail changes server-denied.
Expand Down
Loading