• Python 48.2%
  • HTML 33.8%
  • JavaScript 17.4%
  • CSS 0.6%
Find a file
2026-02-03 04:41:44 +08:00
.github/workflows
.vscode
blueprints Fixed event detail retrieval in limited circumstances 2026-01-30 23:28:24 +08:00
helpers
migrations
providers Shift event timezones to UTC 2026-01-30 22:09:59 +08:00
slack_blocks Shift event timezones to UTC 2026-01-30 22:09:59 +08:00
static Fix workflow card layout 2026-02-03 04:38:49 +08:00
tasks
templates Fix workflow card layout 2026-02-03 04:38:49 +08:00
util Add day labels to contribution graphs 2026-01-31 02:26:26 +08:00
.gitignore
.gitmodules
.pre-commit-config.yaml
.python-version
api_test_client.py
app.py Reorganise templates 2026-01-30 22:55:57 +08:00
auth.py Change status code for unauthenticated requests 2026-01-30 22:10:43 +08:00
celery_app.py
celeryconfig.py
CHANGELOG.md Update changelog, bump to 0.8.3 2026-02-03 04:41:44 +08:00
config.py
docker-compose.yml
generate_pwa_icons.py
gunicorn.conf.py
log_config.py Add volunteering stats 2026-01-28 00:24:55 +08:00
maintenance_tasks.py
models.py
nav.py Fix fact logic, add test nav, fix travel wording 2026-01-29 13:56:18 +08:00
pyproject.toml Update changelog, bump to 0.8.3 2026-02-03 04:41:44 +08:00
README.md
run_server.py
shared_cache.py
sonar-project.properties
uv.lock Update changelog, bump to 0.8.3 2026-02-03 04:41:44 +08:00

Member Portal

TODO

URL Routes

Main Portal Routes

/

  • Description: Home page/index page
  • Authentication: Optional (logged out users see a prompt to log in)
  • Features: N/A

/privacy

  • Description: Privacy policy page
  • Authentication: Public (accessible without login)
  • Features: Displays privacy policy

/training

  • Description: Training tracker page
  • Authentication: Requires tidyhq.linked permission (data is currently sourced from TidyHQ)
  • Features:
    • Displays machine training status by category
    • Shows training progress charts
    • Lists all machines and user's training status
  • Segments:
    • #verify-tool-{tool_id} - Open a modal that indicates whether a user can use the tool
    • `#doc-{tool_id} - Open a modal with attached training documentation if present
    • #{category} - Expand the accordion section for a specific category (e.g., #3D, #laser)

/invoices

  • Description: Invoice management page
  • Authentication: Requires tidyhq.linked permission
  • Features:
    • Lists outstanding invoices
    • Shows paid invoices
    • Displays deductible invoices by financial year
    • Calculates total outstanding and overdue amounts

/membership

  • Authentication: Requires tidyhq.linked permission
  • Description: Membership information page
  • Features: Displays user's membership details and subscriptions

/slack

  • Authentication: Requires slack.linked permission
  • Description: Slack channels page
  • Features:
    • Lists available Slack channels
    • Shows channel join buttons with interaction tokens
    • Displays channel messages

/pledges

  • Authentication: Requires tidyhq.linked permission
  • Description: Donation projects listing page
  • Features:
    • Lists approved donation projects
    • Shows project statistics and funding progress
    • Displays user's donations to each project
    • Sorts projects (incomplete first, then by date)
  • Segments:
    • #pledge-{project_id} - Expand the details section for a specific project

/pledges/<project_id>

  • Authentication: Requires tidyhq.linked permission
  • Description: View project details page
  • Parameters: project_id (UUID) - The project ID
  • Features:
    • Good when you want to promote a specific project
    • Shows project details
    • Displays funding statistics
    • Shows user's donation history
    • Allows making/updating donations

/events

  • Authentication: Requires login (any authenticated user)
  • Description: Events listing page
  • Features: Displays upcoming events

/tokens

  • Authentication: Requires tidyhq.linked permission
  • Description: Volunteer hours and tokens page
  • Features:
    • Displays stats about personal volunteering across the workshop

Authentication Routes (/auth)

/auth/login/select

  • Description: Provider selection page for login
  • Features: Shows available OAuth providers (Slack, TidyHQ, GitHub, Facebook, Apple, Google) if configured
  • Description: Link additional OAuth providers to existing account
  • Authentication: Requires login
  • Features: Shows provider selection for linking accounts

/auth/profile

  • Description: User profile page
  • Authentication: Requires login
  • Features: Displays user's linked accounts and profile information

Committee Portal Routes (/committee)

/committee/

  • Description: Committee portal index page
  • Authentication: Requires volunteer or committee group
  • Features: Dashboard for committee members/volunteers

/committee/tokens

  • Description: Committee volunteer hours overview
  • Authentication: Requires volunteer or committee group
  • Features:
    • Overall volunteer statistics
    • Top volunteers list
    • Volunteer badge streaks
    • Volunteers with debt
    • Charts and analytics

/committee/training

  • Description: Committee training management page
  • Authentication: Requires tidyhq.committee or slack.group_trainers permission
  • Features: Training overview and management for committee
  • Segments:
    • #contact-{contact_id} - Open and scroll to a specific contact in the contacts tab
    • #category-{category_name} - Switch to tools tab and open the category modal for a specific category
    • #induction-{category}-{machine_id} - Switch to tools tab, open the category modal, and scroll to a specific machine/induction

/committee/induction-docs

  • Description: Searchable list of all training documentation
  • Authentication: Requires tidyhq.committee or slack.group_trainers permission

/committee/induction-docs/{tool_id}

  • Description: Individual page for a single tool induction
  • Authentication: Requires tidyhq.committee or slack.group_trainers permission

/committee/pledges

  • Description: Committee donation projects management page
  • Authentication: Requires tidyhq.committee permission
  • Features:
    • Lists all projects (including pending and denied)
    • Shows project statistics
    • Allows project approval/denial
    • Invoice generation
  • Segments:
    • #pledge-{project_id} - Scroll to and open the modal for a specific project

/committee/pledges/<project_id>/audit-log

  • Authentication: Requires tidyhq.committee permission
  • Description: View audit log for a project
  • Parameters: project_id (UUID) - The project ID
  • Features: Shows project modification history

/admin/tidyhq

  • Description: TidyHQ contacts administration page
  • Authentication: Requires tidyhq.committee permission
  • Features: Main admin interface for managing TidyHQ contacts
  • Segments:
    • #contact-{contact_id} - Search for and open the contact modal for a specific contact

/admin/tidyhq/contact/<contact_id>/memberships

  • Authentication: Requires tidyhq.committee permission
  • Description: View contact's memberships
  • Parameters: contact_id (string) - TidyHQ contact ID
  • Features: Displays all memberships for a specific contact

/admin/tidyhq/contact/<contact_id>/invoices

  • Authentication: Requires tidyhq.committee permission
  • Description: View contact's invoices
  • Parameters: contact_id (string) - TidyHQ contact ID
  • Features: Displays all invoices (outstanding, paid, and deductible) for a specific contact

/admin/tidyhq/contact/<contact_id>/invoices/<invoice_id>

  • Authentication: Requires tidyhq.committee permission
  • Description: View specific invoice details
  • Parameters:
    • contact_id (string) - TidyHQ contact ID
    • invoice_id (string) - Invoice ID
  • Features: Displays detailed invoice information for a specific contact

Authentication & Permissions

Permission Groups

  • tidyhq.linked - User has linked TidyHQ account
  • slack.linked - User has linked Slack account
  • tidyhq.committee - User is a committee member (TidyHQ group)
  • slack.group_trainers - User is in Slack trainers group

Authentication Flow

  1. User visits protected route
  2. If not logged in, redirected to /auth/login/select
  3. User selects OAuth provider
  4. Redirected to provider's OAuth page
  5. Provider redirects back to /auth/callback/<provider>
  6. System creates/links account and sets session
  7. User redirected to originally requested page