Alumni — Chapters & Interest Groups#
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: alumni chapters (one per batch year, plus one per major city — both seeded automatically) and interest groups (member-created, free-form). Both share a common posts/members/events shell.
Who this is for: anyone whose primary role is alumni (verified). Some flows below are also available to students and faculty when a group’s visibility allows it; this page is written from the alumni point of view.
Where to find it#
- Discover:
/app/groups— tabs Recommended | All | Chapters | My groups. - Group home:
/app/groups/<slug>— tabs Posts | Members | Events | About. - Create an interest group:
/app/groups/new. - Notifications preferences:
/app/profile/notifications—groups.*topics.
Your alumni chapter (auto-seeded)#
When the seed fixtures run, one chapter group is created per batch year plus one per major city sourced from Profile.City. As an alumnus you will normally already be eligible to join your batch’s chapter — the Recommended tab on /app/groups surfaces it via the Stage 19 recommender (the rationale comes from a chapter_match reason on the candidate row).
To join: open the chapter’s group page → Join. Public and alumni-visibility chapters accept you immediately; private chapters surface a Request to join button instead. See Joining a private group below.
Once you are a member, the chapter:
- Appears under My groups.
- Posts you make there appear on members’ Campus tab (
/app/feed→ Campus) on top of the global feed. - Chapter events (created by chapter admins) flow through to your
/app/calendaronce you are subscribed (see Events tab toggle).
Interest groups#
Interest groups are member-created. Any verified user can create one; that user becomes the first admin. To create:
/app/groups/new→ fill in name, slug, kind (interest), visibility, description, optional avatar/banner.- Submit. The slug must be unique across all groups (
ErrSlugCollisionreturns 409 if you collide). The validator enforces 1–120 chars, lowercase alphanumerics with-/_.
Visibility lattice (from backend/internal/groups/types.go):
| Visibility | Who can see the group | Who can read posts |
|---|---|---|
public | anyone with a Bits account | anyone with a Bits account |
institute | verified institute users | members + verified institute users |
alumni | alumni only | alumni members |
private | members only | members only |
Interest groups default to public; chapters default to alumni.
Posting in a group#
Open a group → Posts tab → composer at the top. The composer is the same RichPostComposer you already know from the regular feed. Three post kinds:
text— default.link— composer detects pasted URLs and renders a link card.announcement— only available to group admins/moderators; pinned at the top of the Posts tab and treated as higher priority by notifications.
The body cap is 10 000 chars (groups.BodyMaxPost). Reactions and threaded comments work the same as the main feed.
Joining a private group#
Private and (sometimes) alumni-visibility chapters require an approval step:
- Open the group page → Request to join.
- Fill in an optional message (≤ 1 000 chars).
- The group’s admin or any moderator gets a
groups.request.receivednotification. - They approve or decline on
/app/groups/<slug>→ Members tab. - You receive a notification of the decision.
Re-requesting after a decline is allowed; re-requesting after a ban is not (the API returns PermissionDenied).
Following chapter events#
Chapter events live on the calendar (kind chapter). On a chapter group’s Events tab you’ll see a list of upcoming events scoped to that chapter. Toggle Subscribe to chapter events to opt into:
- A digest entry on
/app/calendarfor every published chapter event. - Notifications via the
cms.announcement.chaptertopic for any chapter-category announcement attached to the event.
Note: chapter event creation is a chapter-admin/moderator action. See
documentation/handbooks/group-admin-handbook.md.
Common issues#
- “I can’t see a chapter I should be in” — chapter membership is not auto-assigned. The Recommended rail surfaces the chapter you should join, but you must click Join explicitly. If even Recommended is empty, your
Profile.batch_yearorProfile.cityis likely missing — fix it on/app/profile/edit. - “My slug is rejected” — slugs must match
^[a-z0-9][a-z0-9_-]*[a-z0-9]$|^[a-z0-9]$. No leading or trailing punctuation, no upper case, no consecutive separators are allowed beyond the regex’s tolerance. - “I requested to join but nothing happened” — the request is queued; it stays in
pendinguntil a group admin/moderator decides. There is no SLA for approvals — chapters with absentee admins do happen. Reach out to the admin in DMs or escalate to a platform admin. - “I was banned and can’t even see the group anymore” — banned members are hidden from the group page entirely for
private/alumnivisibilities. Contact the group admin to lift the ban; there is no self-service un-ban flow.