Dev guide
How to test Attend.
Three demo orgs, each with its own cast. Login is per-subdomain (ADR 0023) — sign in on the host shown on each card. The dev-tools modal (press Escape) scopes its quick-login list to the host you're on.
Seed users
Created by mix run priv/repo/seeds.exs
(idempotent). Passwords are dev-only.
Supervisor
role: :supervisor
- supervisor@attend.test
- Password
- supervisor-pw-123456
- Log in on
- sportal.attend-staging.com
- Lands at
- /supervisor/dashboard
Cohort picker, cohort detail (weeks + attachments), and the global resource library. Enrolled as supervisor on both rehearsal-2026 and 2026-2027.
Second supervisor
role: :supervisor
- second-supervisor@attend.test
- Password
- second-supervisor-pw-123456
- Log in on
- sportal.attend-staging.com
- Lands at
- /supervisor/dashboard
Second supervisor enrolled on rehearsal-2026. Useful for verifying the director dashboard shows different supervisor names per pair when one of the trainees is assigned to a different supervisor.
Owner (Keith)
role: :owner
- keith@attend.test
- Password
- keith-pw-123456
- Log in on
- admin.attend-staging.com
- Lands at
- /owner
Platform owner — belongs to no org. Logs in on the admin host (admin.attend.test). Owner is admin-capable, so the /admin template tools and dev tools stay accessible.
Supervisee
role: :supervisee
- Handle
- moss-owl
- Password
- supervisee-pw-123456
- Log in on
- sportal.attend-staging.com
- Lands at
- /supervisee
Original trainee account, now keyed on its anonymous color-noun handle (no email on the user row). Not enrolled on any cohort — lands on the "Nothing this week" fallback. Sign in via the **Supervisee** tab on /users/log-in.
Rehearsal trainee
role: :supervisee
- Handle
- sage-fox
- Password
- rehearsal-trainee-pw-123456
- Log in on
- sportal.attend-staging.com
- Lands at
- /supervisee
Enrolled on the rehearsal-2026 cohort (30 weeks: fall + winter + spring; fall is in the past and its checkpoint already happened; today lands in winter week 5, four weeks past the fall checkpoint; spring sits entirely upcoming). Use this account to exercise the post-checkpoint trainee view — and sign in as the supervisor to see the fully populated side-by-side rating comparison at /supervisor/trainees/:id/rating/fall.
Live trainee
role: :supervisee
- Handle
- clay-heron
- Password
- live-trainee-pw-123456
- Log in on
- sportal.attend-staging.com
- Lands at
- /supervisee
Enrolled on the 2026-2027 cohort (30-week arc from Sep 28, 2026). Useful for eyeballing term rollover + break-week rendering on the supervisor cohort detail page.
Rehearsal trainee — idle pair
role: :supervisee
- Handle
- slate-wolf
- Password
- rehearsal-trainee-pw-123456
- Log in on
- sportal.attend-staging.com
- Lands at
- /supervisee
Second supervisee on rehearsal-2026. Seeded with no recent activity so the director dashboard surfaces the 14-day idle signal for this pair.
Rehearsal trainee — clean pair
role: :supervisee
- Handle
- ochre-hummingbird
- Password
- rehearsal-trainee-pw-123456
- Log in on
- sportal.attend-staging.com
- Lands at
- /supervisee
Third supervisee on rehearsal-2026 — recent activity, fall checkpoint ratings submitted by both sides and awaiting director sign-off. The control case in the director's relationship panel.
Rehearsal director
role: :director
- rehearsal-director@attend.test
- Password
- rehearsal-director-pw-123456
- Log in on
- sportal.attend-staging.com
- Lands at
- /director/dashboard
Program director enrolled on the rehearsal-2026 cohort. Lands on the cohort overview with one flagged action note awaiting acknowledgement, one active remediation plan, one idle pair, and a pending sign-off placeholder.
Second director
role: :director
- second-director@attend.test
- Password
- second-director-pw-123456
- Log in on
- sportal.attend-staging.com
- Lands at
- /director/dashboard
Second program director on the rehearsal-2026 cohort. Useful for verifying that the director surface supports more than one named acknowledger (per iteration-2 brief).
Birchwood supervisor
role: :supervisor
- birchwood-supervisor@attend.test
- Password
- birchwood-pw-123456
- Log in on
- birchwood.attend-staging.com
- Lands at
- /supervisor/dashboard
Supervisor at Birchwood University — a second :university org (sage branding). Log in on birchwood.attend.test to see the real app re-branded per host (white-labeling).
Birchwood director
role: :director
- birchwood-director@attend.test
- Password
- birchwood-pw-123456
- Log in on
- birchwood.attend-staging.com
- Lands at
- /director/dashboard
Program director at Birchwood University. Log in on birchwood.attend.test. Demonstrates the director surface re-branded per host (sage).
Birchwood trainee
role: :supervisee
- Handle
- fern-wren
- Password
- birchwood-trainee-pw-123456
- Log in on
- birchwood.attend-staging.com
- Lands at
- /supervisee
Anonymous trainee at Birchwood University, keyed on a color-noun handle (no email). Log in via the Supervisee tab on birchwood.attend.test. Not enrolled on a cohort yet — lands on the "Nothing this week" fallback, re-branded sage.
Willow supervisor (individual)
role: :supervisor
- willow-supervisor@attend.test
- Password
- willow-pw-123456
- Log in on
- willow.attend-staging.com
- Lands at
- /supervisor/dashboard
Solo supervisor at Willow Counseling — an :individual org (clay branding). Log in on willow.attend.test; the individual-track surface is the /individual stub.
Willow trainee
role: :supervisee
- Handle
- reed-finch
- Password
- willow-trainee-pw-123456
- Log in on
- willow.attend-staging.com
- Lands at
- /supervisee
Anonymous trainee at Willow Counseling (the individual org), keyed on a color-noun handle (no email). Log in via the Supervisee tab on willow.attend.test. Lands on the "Nothing this week" fallback, re-branded clay.
Route map
Scopes are wired with role gates; feature LiveViews populate them later.
-
/— public landing. -
/users/log-in— email + password + magic link. Google sign-in gated on:google_login_enabled(dev: on; prod: off). -
/users/settings— logged-in users only. 15-minute inactivity timeout applies. -
/supervisor/dashboard— Dashboard composition (TermRiver + WeeklyOverview + per-week Resources + URL-addressable modals). Lands here on log-in as supervisor; cohort gate via dropdown when no cohort is selected. All URL state in query params:?cohort_id=N,?supervisee_id=N(selected trainee — adds goals card, shared agenda inline, real engagement / submission state),?week=ID,?panel=…,?modal=…. -
/supervisor/cohorts/:slug— terms + weeks grid with per-week resource attachment. -
/supervisor/cohorts/:slug/edit— term editor: add/remove Fall/Winter/Spring terms with date ranges. Saving a term auto-generates itsCohortWeekrows from the date range. Reached after submitting the cohort-create modal (?modal=new-cohorton the dashboard). -
/supervisor/trainees/new— provision an anonymous trainee. Generates a color-noun handle + one-time password and emails both to the supplied delivery address. Success page previews the handle (no password). Reached via the "+ Add trainee" affordance in the picker row. -
/supervisor/resources— global resource library + "add resource" inline form. -
/supervisee— trainee weekly home (current week + attachments + forms to fill). -
/supervisee/forms/:slug— fill + submit a form. Slice 1 seedsboundary-vignettes. -
/supervisee/rating/:term_kind— checkpoint rating (trainee side). Nine CSWE 2022 EPAS competencies seeded with 1–5 named levels (ADR 0010; #4 and #5 carry contextual notes). Reachable any time by URL; a card on/superviseesurfaces it during checkpoint weeks. -
/supervisor/trainees/:id/rating/:term_kind— checkpoint rating (supervisor side). Respects cohortblind_before_submit+rating_reveal_policy; renders a discrepancy summary once both sides have rated. -
/admin/forms— admin-only form-template index + metadata editor. Section + field authoring stays in seeds for now. -
/director/dashboard— program-director cohort overview: 30-week ribbon scoped to the cohort + relationship status panel (one row per supervisor↔trainee pair, with idle / flagged-note / remediation / sign-off / next-checkpoint signals). Lands here on log-in as:director;?cohort_id=N,?drawer=flagged_notes&membership_id=N, and?drawer=remediation&plan_id=Nare the URL state. Director can ack a flagged note inline; no reply (per program-director-view brief). Evaluation sign-off ships in a follow-up slice. -
/owner,/individual,/hours,/director/curriculum,/feedback— work-in-progress stub areas (inert "coming soon"). Compiled into every build but gated at runtime byAttend.Features(:owner_panel,:individual_orgs,:hour_logging,:curriculum_builder,:feedback_system): all on in staging/dev, all off in production./owneralso requires the:ownerrole;/director/curriculumthe:directorrole. -
/healthz— returnsokfor Render's health check. -
/dev/*— gated bydev_routesconfig flag (plus admin role in prod): kitchen sink (now tabbed — Design, Components, Email with side-by-side previews), guide (this page), mockups, LiveDashboard, mailbox.
What's not built yet
Slice 1 landed the cohort spine, resource library, form engine,
first worksheet, session policy, and a free-now HIPAA posture.
Everything below is queued for Slices 2–5 (see docs/spec.md
and NEXT_STEPS.md).
-
Dashboard-as-SPA cutover (in progress).
The new
/supervisor/dashboard(with?supervisee_id=Nquery param for trainee selection) renders the new composition (TermRiver + WeeklyOverview + per-week Resources LC + SharedAgenda LC + URL-addressable modals). Trainee landing (/supervisee) still on the oldHomeLiveuntil engagement-tier filtering + reflection-bridge-to-agenda + cadence-gated forms are ported into the modal LC. Self-rating / supervisor-rating modals are kitchen-sink-only for v1; checkpoint affordance chips render visual-only. - Weekly reflection (7 optional prompts, engagement-tier gated) + agenda builder + Alliance Check-In rollout + link-preview worker + in-portal notifications (Slice 2).
-
Supervisor admin UI for per-week ethics principle editor (
cohort_weeks.ethics_principle_ref— schema in place per ADR 0012; the inline editor on/supervisor/cohorts/:slugis pending) (Slice 3). -
Per-submit blind/visible toggle on the supervisor rating surface (overrides the cohort-level
blind_before_submitdefault viacompetency_ratings.metadata.blind_override— schema in place per ADR 0010; the UI toggle is pending) (Slice 3). -
Admin per-question wording editor for Alliance Check-In, Feedback Orientation Check-In, Weekly Reflection, and competency anchors (
form_templates.current_versionbumps on edit and stampsform_submissions.template_version_at_submit— the template-metadata editor lives at/admin/formstoday; field-level editing is still deferred) (Slice 4). -
Section + field editing inside a template (metadata lives at
/admin/formsnow; authoring still via seeds) (Slice 3+). - Progress dashboard + exports + deletion tooling + offboarding workflow + satisfaction survey + PHI-read audit + 50–100 item import (Slice 4).
- Admin UI for editing form templates + form-template CRUD (Slice 3).
- Invite-acceptance UX (supervisors currently provision via seeds).
-
Google OAuth end-to-end (button hidden via
:google_login_enabled = falsein prod; dev needs real credentials inconfig/dev.secret.exsto exercise).