Skip to content

Badges — catalog and progress

Single source of truth for what badges exist, what data they need, and which are shipped.

Implementation tickets live on the org project board under the [badges] prefix. Mockups in iu-alumni-frontend/mockups/.

Status legend

  • ☐ Not started
  • ◐ In progress
  • ☑ Shipped
  • ⛔ Blocked on new feature (see "Blocked badges" section)

Shipped & active (P1 — work against current schema)

Backend iu-alumni-backend#98 ships the schema + evaluator + API + triggers. Mobile iu-alumni-mobile#125 ships the badges section on the profile screen.

StatusBadgeTierHow to earn
PioneerspecialAmong the first 100 alumni to pin their location on the map (i.e. flip show_location = true).
Local LegendgoldMost events attended in a single city in a given year. Awarded once per city per year by a yearly job. Catalog row + leaderboard strategy stub shipped; yearly cron deferred to a follow-up PR (ticket #6).
Founding HostgoldCreated the first event in a city. Repeats per city via extra: {city} metadata.
NetworkerbronzeAttended 5+ alumni events.
Host with the mostsilverOrganized 3+ events in different cities.
RainmakersilverAn event you created had 20+ attendees.
Cross-city commuterbronzeAttended an event in a city different from your home city.
Innopolis OGgoldGraduated from one of the first cohorts (2014–2019).
Open Source ContributorsilverContributed to the platform's open-source codebase. Manual admin award. Catalog row shipped; admin-award endpoint deferred to a follow-up PR (ticket #9).
Profile ProbronzeCompleted all profile fields: photo, location, biography, graduation year, Telegram.
Badge CollectorgoldEarned 10+ badges. Recursive trigger guarded against self-loop.
Suggestion BoxspecialSubmitted a badge or feature idea that got implemented. Manual admin award. Catalog row shipped; admin-award endpoint deferred to a follow-up PR (ticket #9).

Blocked badges (P2 — need new infrastructure)

Each row notes the minimum new data/feature needed before the badge can ship. Once the dependency lands, the badge itself is a ~2-hour add on top.

StatusBadgeTierHow to earnBlocked on
Last minute herobronzeJoined an event less than 1h before it started.Recording join timestamp when user is added to events.participants_ids (currently no timestamp stored).
BS ClubbronzeReflects a Bachelor's degree from Innopolis. Only highest-degree badge shows on main profile.alumni.highest_degree enum (bachelor / master / phd).
MS ClubsilverReflects a Master's degree. See BS Club note.Same as BS Club.
PhD CirclegoldReflects a PhD. See BS Club note.Same as BS Club.
Startup FoundergoldAdded a company you founded to your profile.New user_companies table (or equivalent) with is_founder flag.
Streak StarsilverLogged into ALUMAP for 14 days straight.user_daily_activity tracking table + auth-middleware upsert.
StarsilverYour profile was viewed by other alumni 50+ times.profile_views table (idempotent per viewer per day) + denormalized counter.
PaparazzisilverUploaded event photos from 2+ different alumni meetups.Event photo upload feature (does not exist).
ReminiscencebronzeUploaded a photo from Innopolis University days.Same as Paparazzi.
New Year's Drunk Dialspecial seasonalLogged in on Jan 1st.user_daily_activity (same as Streak Star) + seasonal evaluation strategy.
Bug SpotterbronzeFirst bug report submitted.In-app bug-report system (does not exist).
Verified Reportersilver3 confirmed bug reports accepted by the dev team.Same as Bug Spotter.

Caveats on the doable badges

These are pragmatic interpretations that ship now and can be refined later.

  • Location is a free-text string, not an FK to the cities table. Local Legend, Founding Host, and Cross-city commuter all use exact-match string comparison (lowercased + trimmed). Future improvement: link events.location to cities.
  • No events.created_at, so "Founding Host" uses the earliest events.datetime (the event's scheduled date) as a proxy for "first event in city."
  • "Pioneer" = first 100 alumni to flip show_location = true, since that's the closest existing field to "pinned on map."

How to update this page

When a badge ships:

  1. Move the row from .
  2. Add a link in the row to the merged PR(s) that shipped it.
  3. If shipping a previously-blocked badge: move it from the Blocked table into the Shipped & active table, and note the dependency PR that unblocked it.

When adding a new badge to the catalog:

  1. Add the row in the right table (shipped vs. blocked).
  2. Add the implementation ticket to the org project board with the [badges] prefix.

Design references

  • Profile screen with badges + projects (v2 layout): iu-alumni-frontend/mockups/06-profile-v2-combined.png
  • Locked badges row: iu-alumni-frontend/mockups/11-badges-locked.png
  • Badge earned popup: iu-alumni-frontend/mockups/10-badge-earned-popup.png
  • Profile viewed as another user (with Follow): iu-alumni-frontend/mockups/09-profile-v6-plus-follow.html

IU Alumni Platform Documentation