-
Notifications
You must be signed in to change notification settings - Fork 3
Pages
This document describes the current page routes, behavior, and data flow in Teambuilder.
Primary routes are defined by files in pages, and sidebar navigation is configured in components/Navbar.vue.
Current primary nav links:
- Projects
- Partners
- Students
- Generate Teams
- Teams
- Demographics (newDemographics route)
- S.C.I.P.E. Bot
- GitHub Bot
- Home redirect: pages/index.vue
- Projects: pages/projects.vue
- Partners: pages/partners.vue
- Students: pages/students.vue
- Generate Teams: pages/generate-teams.vue
- Teams: pages/teams.vue
- Legacy Demographics: pages/Demographics.vue
- New Demographics: pages/newDemographics.vue
- S.C.I.P.E.: pages/SCIPE.vue
- GitHub Bot: pages/github.vue
File: pages/index.vue
Behavior:
- Immediately redirects to the Projects page.
- Uses a 301 redirect to /projects.
File: pages/students.vue
Purpose:
- Manage student roster, CSV import workflows, filtering, editing, deletion, and export.
Current behavior:
- On mount, loads students and semesters from:
- GET /api/students
- GET /api/semesters
- Displays a filterable DataTable with derived full name and day tabs:
- All
- Wednesday
- Thursday
- Supports row selection with a modal for details and editing.
- Saves edits via PUT to student endpoint by id.
- Supports single student delete and bulk clear of all students.
- Supports CSV export of visible students.
Upload flows:
- Merge upload
- POST /api/students with transformed CSV rows
- Replace upload
- DELETE /api/students (optionally by meeting day), then POST /api/students
- Bid response CSV upload path
- Detects bid response columns and posts to POST /api/bids
- Supports day-forced uploads (Wednesday or Thursday variants).
Additional controls:
- Download template CSV
- Clear students
- Clear entire database button path exists in page logic and calls POST /api/database/reset
File: pages/projects.vue
Purpose:
- Manage project list, project metadata, semester views, meeting-day filtering, bulk updates, CSV import/replace, and deletion.
Current behavior:
- On mount, loads:
- GET /api/projects
- GET /api/semesters
- Supports view by semester and day tab filtering.
- DataTable filters for name, partner, meeting day, status, and type.
- Row click opens project detail modal.
- Edit modal saves via PUT to project endpoint by id.
Bulk actions:
- Multi-select projects in table.
- Bulk assign meeting day via multiple PUT calls.
- Bulk assign project type via multiple PUT calls.
Upload flows:
- Merge upload
- POST /api/projects with mapped CSV data and semester context
- Replace upload
- Full replace path: DELETE /api/projects, then POST /api/projects
- Day-specific replace path handles BOTH-day downgrades and selective deletes before POST
- Wednesday/Thursday forced upload variants are supported.
Other controls:
- Delete single project
- Clear entire database (POST /api/database/reset)
- Download project template CSV
File: pages/partners.vue
Purpose:
- Manage partner organizations and contact info.
Current behavior:
- On mount, loads:
- GET /api/partners
- GET /api/semesters
- Displays filterable table with partner name, contact, and linked project names.
- Row selection opens modal for edit.
- Saves edits via PUT to partner endpoint by id.
- Supports delete of single partner.
Upload flows:
- Merge upload
- POST /api/partners
- Replace upload
- DELETE /api/partners, then POST /api/partners
Other controls:
- Download partner template CSV
- Clear entire database (POST /api/database/reset)
File: pages/generate-teams.vue
Purpose:
- Three-step workflow to create semester, activate projects, and generate teams.
Current behavior:
- On mount, loads:
- GET /api/semesters
- GET /api/projects
- GET /api/students?choices=true
- Composes three cards:
Step 1: New semester
- Creates semester with POST /api/semesters.
Step 2: Activate projects for semester
- Uses pick-list inactive/active model.
- Activates selected projects by creating teams:
- POST /api/teams
- Deactivates selected projects:
- DELETE /api/teams
Step 3: Generate teams
- Configurable algorithm options (min/max team size, returning-student priority, 3200 priority, diversity and matching toggles).
- Generates per day:
- POST /api/teams/generate with semesterId, day, and config
- Stores generated payload in local storage for Teams page continuity.
- Navigates to /teams after generation.
Validation warnings shown before generation:
- Projects missing partner assignment.
- Students with no valid project choices for selected day.
File: pages/teams.vue
Purpose:
- Display and manage team assignments by semester/day, export CSV, and manual member adjustments.
Current behavior:
- Loads semesters via GET /api/semesters.
- On semester change, loads assignments from:
- GET /api/teams?semesterId=...
- Builds table rows from assignment map plus team metadata.
- Supports day tabs (All, Wednesday, Thursday).
- Shows assignment metrics overlay (top-choice percentages, under-min teams, etc.).
Editing behavior:
- Team modal supports member move between teams and member removal.
- Persists changes with POST /api/teams/assign.
CSV behavior:
- Export teams via POST /api/teams/export.
- Replace teams from CSV path:
- If no teams exist, bootstraps teams from CSV project names via POST /api/teams.
- Replaces assignments after parsing and resolving students/projects.
File: pages/newDemographics.vue
Purpose:
- Componentized demographics dashboard prototype using composables and chart wrapper components.
Current behavior:
- Uses composables from demo-composables for filters, time period, upload, and chart rendering.
- Calls GET /api/demographic with query params built from sidebar selections.
- Renders chart via demo chart component and local chart composable.
- Sidebar interaction and chart update are functional, but this remains a demo-oriented implementation.
File: pages/SCIPE.vue
Purpose:
- Discord bot operations panel for team infrastructure management.
Current behavior:
- Bot and channel operations:
- POST /api/discord/update-channels
- POST /api/discord/delete-channels
- Role operations:
- POST /api/discord/assign-project-roles
- POST /api/discord/delete-roles
- Diagnostics:
- GET /api/discord/diagnostics
- Semester list for role assignment scope:
- GET /api/semesters
- Shows detailed success/error output blocks and diagnostics summaries.
File: pages/github.vue
Purpose:
- GitHub integration management for repo creation/sync by semester.
Current behavior:
- Connection status and session controls:
- GET /api/github/status
- POST /api/github/connect
- POST /api/github/disconnect
- Semester/project selection:
- GET /api/semesters
- GET /api/teams?semesterId=... (to derive team/project options)
- Create or sync repositories:
- POST /api/github/create-repos with semesterId and optional projectIds
- Displays per-team operation results including links and errors.
Navigation component:
Current navigation behavior:
- Sidebar is collapsible on mobile and static on larger viewports.
- Active-route highlighting is implemented.
- Logo links are external images in sidebar; route links are text menu items.
- Several pages still include direct alert/confirm flows and local console logging patterns.
- Generate Teams workflow depends on semester activation state and valid student choices.
- Team editing and CSV replacement logic is complex and should be regression-tested when refactoring.
Wiki
Website Functionality
Demographics Workflows
Project Plans
- [S25] Team Formation Plan
- [S25] Demographics Plan
- [F24] Team Formation Plan
- [F24] GitHub/Discord Plan
- [F24] Demographics Plan
Resources