<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Bits Documentation</title><link>/</link><description>Recent content on Bits Documentation</description><generator>Hugo</generator><language>en-US</language><atom:link href="/index.xml" rel="self" type="application/rss+xml"/><item><title>Phase 2 Platform Architecture</title><link>/docs/phase2-architecture/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/phase2-architecture/</guid><description>&lt;h1 id="phase-2-platform-architecture"&gt;Phase 2 Platform Architecture&lt;a class="anchor" href="#phase-2-platform-architecture"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This page describes the three shared platform pieces that landed in Stage 15
of the Phase 2 plan and that every subsequent V2 stage (Groups, Mentorship,
Chapter Events, Search/Recommendations, Marketplace) consumes. Source of
truth for behaviour is &lt;code&gt;plans/BITSAPP-PHASE2-PLAN.md&lt;/code&gt; §0; this page is the
architectural overview that the plan&amp;rsquo;s §0.3 DoD item calls for.&lt;/p&gt;
&lt;p&gt;As of the Phase 2 GA cut, all three components run unconditionally — the
Stage 15-era &lt;code&gt;BITS_PHASE2_ENABLED&lt;/code&gt; gate has been removed.&lt;/p&gt;</description></item><item><title>Phase 2 Architecture — Dependency Graph &amp; Citations</title><link>/docs/phase2-architecture-dependencies/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/phase2-architecture-dependencies/</guid><description>&lt;h1 id="phase-2-architecture--dependency-graph--citations"&gt;Phase 2 Architecture — Dependency Graph &amp;amp; Citations&lt;a class="anchor" href="#phase-2-architecture--dependency-graph--citations"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This page is the companion to &lt;code&gt;phase2-architecture.md&lt;/code&gt;. The other page describes &lt;strong&gt;what&lt;/strong&gt; the Stage 15 platform pieces (membership facade, job runner, search infrastructure) are. This page describes &lt;strong&gt;how&lt;/strong&gt; every Phase 2 surface depends on them, with file-path citations so a new contributor can find the source quickly.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;re reading this for the first time, start with &lt;code&gt;phase2-architecture.md&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-the-platform-pieces-recap"&gt;1. The platform pieces (recap)&lt;a class="anchor" href="#1-the-platform-pieces-recap"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Package&lt;/th&gt;
 &lt;th&gt;Schema&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Membership facade&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;backend/internal/membership/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;schema/memberships/&lt;/code&gt; (&lt;code&gt;memberships_membership&lt;/code&gt; table)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Background job runner&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;backend/internal/jobs/runner/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;schema/jobs_queue/&lt;/code&gt; (&lt;code&gt;jobs_queue_job&lt;/code&gt; table)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Search infrastructure&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;backend/internal/search/&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;schema/search/&lt;/code&gt; (&lt;code&gt;search_document&lt;/code&gt;, &lt;code&gt;recommendation_signal&lt;/code&gt;, &lt;code&gt;recommendation_candidate&lt;/code&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;All three components run unconditionally as of the Phase 2 GA cut; the Stage 15-era &lt;code&gt;BITS_PHASE2_ENABLED&lt;/code&gt; gate has been removed.&lt;/p&gt;</description></item><item><title>Campus Tab &amp; Chapter Events</title><link>/docs/campus-tab-and-chapter-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/campus-tab-and-chapter-events/</guid><description>&lt;h1 id="campus-tab--chapter-events"&gt;Campus Tab &amp;amp; Chapter Events&lt;a class="anchor" href="#campus-tab--chapter-events"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This page covers the user-facing surfaces introduced in Stage 18 of the
Phase 2 plan: the &lt;strong&gt;Campus&lt;/strong&gt; tab on &lt;code&gt;/app/feed&lt;/code&gt;, chapter events surfaced
from the existing calendar onto each chapter&amp;rsquo;s group page, and the
per-category announcement subscription model that lets you mute one
announcement bucket without losing the rest.&lt;/p&gt;
&lt;p&gt;The Campus tab is one of the &lt;strong&gt;default landing surfaces&lt;/strong&gt; for every
authenticated stakeholder — students, alumni, faculty, parents, and
staff. It&amp;rsquo;s where time-sensitive announcements (recess windows,
chapter meetups, placement results) and chapter activity surface for
the people in scope.&lt;/p&gt;</description></item><item><title>QA &amp; Testing — Three-Layer Strategy</title><link>/docs/qa-and-testing/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/qa-and-testing/</guid><description>&lt;h1 id="qa--testing--three-layer-strategy"&gt;QA &amp;amp; Testing — Three-Layer Strategy&lt;a class="anchor" href="#qa--testing--three-layer-strategy"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This page documents how we systematically verify that every page of the Bits
webapp renders, every button has a working handler, and no critical user flow
is broken. The strategy is &lt;strong&gt;layered&lt;/strong&gt; so each layer catches a different
class of bug at a different cost-per-test.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Layer&lt;/th&gt;
 &lt;th&gt;What it catches&lt;/th&gt;
 &lt;th&gt;Effort&lt;/th&gt;
 &lt;th&gt;Run time&lt;/th&gt;
 &lt;th&gt;Source of truth&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;A — Page-render smoke&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Dead routes, missing imports, broken role guards, console errors on mount&lt;/td&gt;
 &lt;td&gt;Auto-generated&lt;/td&gt;
 &lt;td&gt;~20 s for ~70 pages&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;webapp/e2e/smoke-pages.spec.ts&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;B — Click-sweep&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Click handlers that throw, dialogs that render blank, broken event wiring, undefined-prop crashes&lt;/td&gt;
 &lt;td&gt;Auto-generated&lt;/td&gt;
 &lt;td&gt;~30 s for ~600 click attempts&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;webapp/e2e/click-sweep.spec.ts&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;C — Critical-path scenarios&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Multi-step business flows: onboarding, donations, ticket purchase, moderation decisions&lt;/td&gt;
 &lt;td&gt;Hand-written&lt;/td&gt;
 &lt;td&gt;varies&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;webapp/e2e/&amp;lt;feature&amp;gt;.spec.ts&lt;/code&gt; (one per feature)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Layers A + B are &lt;strong&gt;safety nets&lt;/strong&gt; — cheap to run on every PR, cover the entire
surface area, fail fast when a page is broken or a button stops working.
Layer C verifies that the business logic on top still does the right thing.&lt;/p&gt;</description></item><item><title>Admin — Phase 2 Admin Surfaces</title><link>/docs/role-guides/admin/phase2-admin-overview/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/role-guides/admin/phase2-admin-overview/</guid><description>&lt;h1 id="admin--phase-2-admin-surfaces"&gt;Admin — Phase 2 Admin Surfaces&lt;a class="anchor" href="#admin--phase-2-admin-surfaces"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A pointer-page for platform admins to find every Phase 2 admin surface and the handbook that goes with it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who this is for&lt;/strong&gt;: anyone with the platform &lt;code&gt;admin&lt;/code&gt; role.&lt;/p&gt;
&lt;h2 id="where-things-live"&gt;Where things live&lt;a class="anchor" href="#where-things-live"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Surface&lt;/th&gt;
 &lt;th&gt;Admin route&lt;/th&gt;
 &lt;th&gt;Operational handbook&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Groups + chapters&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/admin/groups&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="../../handbooks/group-admin-handbook.md"&gt;Group admin handbook&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Mentorship programmes&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/admin/mentorship&lt;/code&gt;, &lt;code&gt;/admin/mentorship/programmes/new&lt;/code&gt;, &lt;code&gt;/admin/mentorship/programmes/&amp;lt;id&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="../../handbooks/mentorship-operations-guide.md"&gt;Mentorship operations guide&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Marketplace deals&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/admin/marketplace/deals&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;a href="../../handbooks/marketplace-partner-onboarding.md"&gt;Marketplace partner-onboarding workflow&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Marketplace partners&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/admin/marketplace/partners&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;(same)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Staff leave queue&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/admin/staff/leave-requests&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;This page (see below)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;CMS announcements&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/admin/cms/announcements&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;documentation/campus-tab-and-chapter-events.md&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Audit logs&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;/admin/audit-logs&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;(Phase 1)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="admin-capabilities-phase-2"&gt;Admin capabilities (Phase 2)&lt;a class="anchor" href="#admin-capabilities-phase-2"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;backend/internal/auth/capabilities.go&lt;/code&gt; defines four named capabilities used by Phase 2 services:&lt;/p&gt;</description></item><item><title>Alumni — Chapters &amp; Interest Groups</title><link>/docs/role-guides/alumni/chapters-and-groups/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/role-guides/alumni/chapters-and-groups/</guid><description>&lt;h1 id="alumni--chapters--interest-groups"&gt;Alumni — Chapters &amp;amp; Interest Groups&lt;a class="anchor" href="#alumni--chapters--interest-groups"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The Phase 2 Groups surface is the place where alumni keep in touch with their cohort and with peers who share an interest. Two flavours live behind one feature: &lt;strong&gt;alumni chapters&lt;/strong&gt; (one per batch year, plus one per major city — both seeded automatically) and &lt;strong&gt;interest groups&lt;/strong&gt; (member-created, free-form). Both share a common posts/members/events shell.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who this is for&lt;/strong&gt;: anyone whose primary role is &lt;code&gt;alumni&lt;/code&gt; (verified). Some flows below are also available to students and faculty when a group&amp;rsquo;s visibility allows it; this page is written from the alumni point of view.&lt;/p&gt;</description></item><item><title>Faculty — Groups, Events &amp; Announcements</title><link>/docs/role-guides/faculty/groups-and-events/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/role-guides/faculty/groups-and-events/</guid><description>&lt;h1 id="faculty--groups-events--announcements"&gt;Faculty — Groups, Events &amp;amp; Announcements&lt;a class="anchor" href="#faculty--groups-events--announcements"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Faculty use the Phase 2 surfaces mostly to read — chapter events for outreach, announcements to stay current, occasional posting in interest groups. This guide covers what you&amp;rsquo;ll actually do.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who this is for&lt;/strong&gt;: anyone whose primary role is &lt;code&gt;faculty&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="reading-the-campus-tab"&gt;Reading the Campus tab&lt;a class="anchor" href="#reading-the-campus-tab"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;/app/feed&lt;/code&gt; → &lt;strong&gt;Campus&lt;/strong&gt; tab is your default landing surface for institute-wide updates. It shows pinned announcements (sorted by &lt;code&gt;pin_until&lt;/code&gt; so the soonest-to-expire is at the top) plus the recent published-announcement stream visible to you.&lt;/p&gt;</description></item><item><title>Parents — Campus, Announcements &amp; Marketplace</title><link>/docs/role-guides/parents/campus-and-announcements/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/role-guides/parents/campus-and-announcements/</guid><description>&lt;h1 id="parents--campus-announcements--marketplace"&gt;Parents — Campus, Announcements &amp;amp; Marketplace&lt;a class="anchor" href="#parents--campus-announcements--marketplace"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The Phase 2 surfaces parents touch are read-only: announcements scoped to parents, the Campus tab digest, and any marketplace deal that explicitly carries a &lt;code&gt;public&lt;/code&gt; audience scope.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who this is for&lt;/strong&gt;: anyone whose primary role is &lt;code&gt;parent&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="where-to-find-it"&gt;Where to find it&lt;a class="anchor" href="#where-to-find-it"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Campus feed: &lt;code&gt;/app/feed&lt;/code&gt; → &lt;strong&gt;Campus&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Notification preferences: &lt;code&gt;/app/profile/notifications&lt;/code&gt; — &lt;code&gt;cms.announcement.&amp;lt;category&amp;gt;&lt;/code&gt; toggles.&lt;/li&gt;
&lt;li&gt;Marketplace: &lt;code&gt;/app/marketplace&lt;/code&gt; (filtered to &lt;code&gt;public&lt;/code&gt; deals only — institute, alumni, and chapter scopes are not visible to parents).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="what-you-can-read"&gt;What you can read&lt;a class="anchor" href="#what-you-can-read"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Campus tab shows announcements that:&lt;/p&gt;</description></item><item><title>Staff — Leave &amp; Payroll</title><link>/docs/role-guides/staff/leave-and-payroll/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/role-guides/staff/leave-and-payroll/</guid><description>&lt;h1 id="staff--leave--payroll"&gt;Staff — Leave &amp;amp; Payroll&lt;a class="anchor" href="#staff--leave--payroll"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The Stage 21 Staff HR surface gives staff a self-service flow for leave requests, payroll-view, and payslip download.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who this is for&lt;/strong&gt;: anyone whose primary role is &lt;code&gt;staff&lt;/code&gt;. Managers approving leave on behalf of a team see the admin queue surface — that&amp;rsquo;s covered separately.&lt;/p&gt;
&lt;h2 id="where-to-find-it"&gt;Where to find it&lt;a class="anchor" href="#where-to-find-it"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Submit/track leave: &lt;code&gt;/app/staff/leave&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Payroll breakdown: &lt;code&gt;/app/staff/payroll&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Payslip list + download: &lt;code&gt;/app/staff/payslips&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Source: &lt;code&gt;backend/internal/hr/service.go&lt;/code&gt;, &lt;code&gt;webapp/src/routes/app/staff/&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="leave-requests"&gt;Leave requests&lt;a class="anchor" href="#leave-requests"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="submitting"&gt;Submitting&lt;a class="anchor" href="#submitting"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;/app/staff/leave&lt;/code&gt; opens a form with:&lt;/p&gt;</description></item><item><title>Students — Mentorship (as Mentee)</title><link>/docs/role-guides/student/mentorship-as-mentee/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/role-guides/student/mentorship-as-mentee/</guid><description>&lt;h1 id="students--mentorship-as-mentee"&gt;Students — Mentorship (as Mentee)&lt;a class="anchor" href="#students--mentorship-as-mentee"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The Mentorship surface pairs you with an alumni mentor for a time-boxed cohort. Matching is driven by a transparent skills + audience-fit score, with both sides consenting before the relationship starts.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who this is for&lt;/strong&gt;: students and early-career alumni applying for a mentor through a Bits programme.&lt;/p&gt;
&lt;h2 id="where-to-find-it"&gt;Where to find it&lt;a class="anchor" href="#where-to-find-it"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Browse open programmes: &lt;code&gt;/app/mentorship&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Apply as mentee: &lt;code&gt;/app/mentorship/programmes/&amp;lt;id&amp;gt;/apply-mentee&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Your matches: &lt;code&gt;/app/mentorship/matches&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A specific match: &lt;code&gt;/app/mentorship/matches/&amp;lt;id&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="how-matching-works"&gt;How matching works&lt;a class="anchor" href="#how-matching-works"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A mentorship programme is a cohort. Admins open a programme; mentors and mentees apply during the &lt;em&gt;open&lt;/em&gt; window. When the admin runs matching, an algorithm produces deterministic mentor↔mentee proposals scored by skill overlap, audience fit, and remaining mentor capacity. Mentors accept or decline first; only after a mentor accepts do you (the mentee) see the proposal. Both sides must accept to activate the match.&lt;/p&gt;</description></item><item><title>Alumni — Mentoring (as Mentor)</title><link>/docs/role-guides/alumni/mentorship-as-mentor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/role-guides/alumni/mentorship-as-mentor/</guid><description>&lt;h1 id="alumni--mentoring-as-mentor"&gt;Alumni — Mentoring (as Mentor)&lt;a class="anchor" href="#alumni--mentoring-as-mentor"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The Mentorship surface lets alumni offer their time to current students and early-career alumni through programme-driven matching. This guide covers the mentor side of the lifecycle.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who this is for&lt;/strong&gt;: alumni who want to mentor through a Bits-run programme. If you are a student looking for a mentor, see &lt;code&gt;mentorship-as-mentee.md&lt;/code&gt; under the student role guide.&lt;/p&gt;
&lt;h2 id="where-to-find-it"&gt;Where to find it&lt;a class="anchor" href="#where-to-find-it"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Browse open programmes: &lt;code&gt;/app/mentorship&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Apply as mentor: &lt;code&gt;/app/mentorship/programmes/&amp;lt;id&amp;gt;/apply-mentor&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Your matches: &lt;code&gt;/app/mentorship/matches&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A specific match: &lt;code&gt;/app/mentorship/matches/&amp;lt;id&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="how-matching-works-in-one-paragraph"&gt;How matching works (in one paragraph)&lt;a class="anchor" href="#how-matching-works-in-one-paragraph"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A mentorship programme is a time-boxed cohort. Admins open a programme; mentors and mentees apply during the &lt;em&gt;open&lt;/em&gt; window. When the admin runs matching, the engine produces deterministic mentor↔mentee proposals scored by a transparent weighted formula: &lt;code&gt;2*skills_overlap + 1*audience_fit + 0.5*capacity_remaining&lt;/code&gt;. You as the mentor accept or decline first; only after you accept does the mentee see the match. Once both sides accept, the match enters the &lt;em&gt;active&lt;/em&gt; state and you can schedule sessions.&lt;/p&gt;</description></item><item><title>Students — Groups &amp; Search</title><link>/docs/role-guides/student/groups-and-search/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/role-guides/student/groups-and-search/</guid><description>&lt;h1 id="students--groups--search"&gt;Students — Groups &amp;amp; Search&lt;a class="anchor" href="#students--groups--search"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;A short guide for students using the Phase 2 group surface and the new global search.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who this is for&lt;/strong&gt;: verified students. Most flows here also work for alumni, faculty, and staff; this page covers the bits that matter most to students.&lt;/p&gt;
&lt;h2 id="joining-interest-groups"&gt;Joining interest groups&lt;a class="anchor" href="#joining-interest-groups"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Students can join &lt;code&gt;public&lt;/code&gt; and &lt;code&gt;institute&lt;/code&gt;-visibility groups. &lt;code&gt;alumni&lt;/code&gt;-only groups are off-limits even if you can see them in search results. Open &lt;code&gt;/app/groups&lt;/code&gt;, browse the &lt;strong&gt;All&lt;/strong&gt; or &lt;strong&gt;Recommended&lt;/strong&gt; tab, click into a group, and &lt;strong&gt;Join&lt;/strong&gt;.&lt;/p&gt;</description></item><item><title>Alumni — Marketplace</title><link>/docs/role-guides/alumni/marketplace/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/role-guides/alumni/marketplace/</guid><description>&lt;h1 id="alumni--marketplace"&gt;Alumni — Marketplace&lt;a class="anchor" href="#alumni--marketplace"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Curated deals (coupons + partner-site links) from vetted partners, scoped to the BITS community. Phase 2 launches with ~20 seeded deals across categories.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who this is for&lt;/strong&gt;: alumni (and verified students/faculty/staff for deals scoped to the wider institute). Deal visibility honours each deal&amp;rsquo;s &lt;code&gt;audience_scope&lt;/code&gt;, so you only see deals targeted at audiences you belong to.&lt;/p&gt;
&lt;h2 id="where-to-find-it"&gt;Where to find it&lt;a class="anchor" href="#where-to-find-it"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Deal grid: &lt;code&gt;/app/marketplace&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;A deal card opens a modal in-place; deals are not on their own URL today.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="browsing"&gt;Browsing&lt;a class="anchor" href="#browsing"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The grid surfaces:&lt;/p&gt;</description></item><item><title>Alumni — Search &amp; Recommendations</title><link>/docs/role-guides/alumni/search-and-recommendations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/role-guides/alumni/search-and-recommendations/</guid><description>&lt;h1 id="alumni--search--recommendations"&gt;Alumni — Search &amp;amp; Recommendations&lt;a class="anchor" href="#alumni--search--recommendations"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Phase 2 ships a single global search box and per-user recommendation rails on the home page. Both are built on the same &lt;code&gt;search_document&lt;/code&gt; index and the same audience-tag filter so what you see in search and what you see in recommendations honour the same scoping rules.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who this is for&lt;/strong&gt;: every authenticated user. This guide is filed under alumni because chapter/batch affinity makes the recommendations more useful for alumni out of the box; the surface itself is universal.&lt;/p&gt;</description></item><item><title>Group &amp; Chapter Admin Handbook</title><link>/docs/handbooks/group-admin-handbook/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/handbooks/group-admin-handbook/</guid><description>&lt;h1 id="group--chapter-admin-handbook"&gt;Group &amp;amp; Chapter Admin Handbook&lt;a class="anchor" href="#group--chapter-admin-handbook"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This handbook is the operational reference for the people who run a group day-to-day: the group&amp;rsquo;s admin and moderators. It covers the create flow, membership management, post moderation, chapter event creation, and broadcast announcements.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who this is for&lt;/strong&gt;: anyone with &lt;code&gt;MembershipRole = admin&lt;/code&gt; or &lt;code&gt;moderator&lt;/code&gt; on a group (interest or chapter). The platform-admin lens is in &lt;code&gt;documentation/role-guides/admin/phase2-admin-overview.md&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Source of truth&lt;/strong&gt;: &lt;code&gt;backend/internal/groups/service.go&lt;/code&gt;, &lt;code&gt;backend/internal/groups/store.go&lt;/code&gt;, &lt;code&gt;backend/internal/groups/types.go&lt;/code&gt;. RPC contract: &lt;code&gt;protos/bits/groups/v1/groups.proto&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Mentorship Programme Operations Guide</title><link>/docs/handbooks/mentorship-operations-guide/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/handbooks/mentorship-operations-guide/</guid><description>&lt;h1 id="mentorship-programme-operations-guide"&gt;Mentorship Programme Operations Guide&lt;a class="anchor" href="#mentorship-programme-operations-guide"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This handbook is the operational reference for the people who run a mentorship programme: typically platform admins or staff with the &lt;code&gt;mentorship.match&lt;/code&gt; capability. It covers programme setup, mentor onboarding, the match lifecycle, quality signals from the dashboard, and escalation paths when things go wrong.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who this is for&lt;/strong&gt;: anyone with the platform admin role (and by extension &lt;code&gt;mentorship.match&lt;/code&gt;). The mentor and mentee guides are at &lt;code&gt;documentation/role-guides/alumni/mentorship-as-mentor.md&lt;/code&gt; and &lt;code&gt;documentation/role-guides/student/mentorship-as-mentee.md&lt;/code&gt;.&lt;/p&gt;</description></item><item><title>Marketplace Partner-Onboarding Workflow</title><link>/docs/handbooks/marketplace-partner-onboarding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/handbooks/marketplace-partner-onboarding/</guid><description>&lt;h1 id="marketplace-partner-onboarding-workflow"&gt;Marketplace Partner-Onboarding Workflow&lt;a class="anchor" href="#marketplace-partner-onboarding-workflow"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This handbook covers the end-to-end workflow for bringing a partner onto the Bits marketplace: from initial application through deal authoring, audience scoping, redemption monitoring, and payout settlement.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Who this is for&lt;/strong&gt;: anyone with the platform admin role and the &lt;code&gt;marketplace.curate&lt;/code&gt; capability. The user-facing marketplace guide is at &lt;code&gt;documentation/role-guides/alumni/marketplace.md&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Source of truth&lt;/strong&gt;: &lt;code&gt;backend/internal/marketplace/&lt;/code&gt;. RPC contract: &lt;code&gt;protos/bits/marketplace/v1/marketplace.proto&lt;/code&gt;. Admin webapp: &lt;code&gt;webapp/src/routes/admin/AdminMarketplace*.tsx&lt;/code&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="1-partner-application-out-of-platform"&gt;1. Partner application (out-of-platform)&lt;a class="anchor" href="#1-partner-application-out-of-platform"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;V2 does not provide a self-service partner-application form. The application is handled out-of-platform — typically email, contract, then a Bits admin manually mints the partner record. This is intentional: marketplace is a curated surface and uncurated partner sign-ups would dilute trust.&lt;/p&gt;</description></item><item><title/><link>/docs/feature-inventory/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>/docs/feature-inventory/</guid><description>&lt;h1 id="bits-webapp--feature-inventory-v3--mechanically-extracted"&gt;BITS Webapp — Feature Inventory (v3 — mechanically extracted)&lt;a class="anchor" href="#bits-webapp--feature-inventory-v3--mechanically-extracted"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;Generated mechanically from &lt;code&gt;/Users/alevsk/Development/bits/webapp/src/&lt;/code&gt; at commit &lt;code&gt;048f716&lt;/code&gt;.&lt;/strong&gt; Every &lt;code&gt;data-testid&lt;/code&gt; occurrence in &lt;code&gt;.ts&lt;/code&gt;/&lt;code&gt;.tsx&lt;/code&gt; source is enumerated below, grouped by source file. This is the authoritative input set for integration test design — every interactive feature that has a stable testid is in here. Re-run &lt;code&gt;make test-artifacts&lt;/code&gt; (or &lt;code&gt;python3 scripts/extract_testids.py &amp;gt; documentation/feature-inventory.md&lt;/code&gt;) to refresh.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="summary"&gt;Summary&lt;a class="anchor" href="#summary"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Source files with testids: &lt;strong&gt;137&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Unique testids: &lt;strong&gt;1257&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Total testid occurrences (file × testid): &lt;strong&gt;1261&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Extraction commit: &lt;code&gt;048f716&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="pattern-legend"&gt;Pattern legend&lt;a class="anchor" href="#pattern-legend"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Kind&lt;/th&gt;
 &lt;th&gt;Source pattern&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;static&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;data-testid=&amp;quot;literal&amp;quot;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;template&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;data-testid={`prefix-${var}`}&lt;/code&gt; (rendered as &lt;code&gt;prefix-{var}&lt;/code&gt;)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;slotprop&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;slotProps={{ htmlInput: { 'data-testid': 'value' } }}&lt;/code&gt; (MUI v9)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;drilled&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Child testId=&amp;quot;value&amp;quot; /&amp;gt;&lt;/code&gt; (prop drilled into a wrapper)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;drilledTemplate&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;&amp;lt;Child testId={`prefix-${var}`} /&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="per-file-inventory"&gt;Per-file inventory&lt;a class="anchor" href="#per-file-inventory"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Files are grouped by their parent directory in &lt;code&gt;webapp/src/&lt;/code&gt;. Within each file, rows are sorted by line number. Templated testids are shown with &lt;code&gt;{var}&lt;/code&gt; placeholders for their interpolation points; actual rendered testids substitute the variable&amp;rsquo;s value at runtime.&lt;/p&gt;</description></item></channel></rss>