Heirloom
Institutional memory for student clubs, powered by Gemini.
The Story Behind It
Problem Statement
Student organizations run entirely on the undocumented memory of whoever currently holds the officer titles: which sponsors actually paid out, how the flagship event hit its attendance number, which vendor to avoid, why last year's budget ballooned. That knowledge lives in people, not systems. Every spring, leadership graduates, and it all leaves with them.
What's left behind is a scattered paper trail: a Google Drive folder of PDFs nobody opens, a Slack workspace nobody re-reads, a sponsorship deck from two years ago that nobody remembers exists. Incoming officers have no way to ask "have we tried this before?" or "who actually said yes last time?" So clubs repeat the same sponsorship mistakes, re-discover the same event-logistics failures, and quietly lose leverage with sponsors because nobody can prove the relationship's history. This isn't an edge case; it's the default lifecycle of nearly every student organization, and it compounds every single year the knowledge isn't captured.
Heirloom treats a club's own documents (meeting minutes, budgets, sponsorship decks, event retrospectives, Slack exports) as an institutional memory that should survive graduation, and puts a research assistant on top of it that reasons across all of it at once.
Solution Overview
Officers drag their club's paper trail into Heirloom. Each record is read by the Gemini API, automatically sorted into an operational folder (Finance, Sponsorship, Events, Meetings, Recruitment, Communications, Operations, Other), and given a one-line summary - no manual filing. Officers then ask the Archivist, a Gemini-backed persona, natural-language questions:
- "How did we get 200 attendees at PM Day?"
- "Which sponsors ghosted us last year?"
- "Draft an AWS sponsorship proposal based on our previous decks."
The Archivist streams back a grounded answer with inline citations to the exact record each claim came from: click a citation and the source document opens in a preview pane, full text visible.
Architecturally, Heirloom deliberately skips the typical RAG / vector-database pipeline. Because Gemini's context window is large, every record in a session is assembled directly into the prompt, numbered, and the model is instructed to cite by number as it answers. This is a conscious tradeoff: it gives up some raw scale (very large archives are truncated to fit the context budget) in exchange for zero retrieval infrastructure and, critically, perfect fidelity in what the model can see when it answers, since nothing is chunked or approximately-matched.
Key Features
- AI auto-categorization — Gemini reads each upload and files it into a folder with a one-line summary; if the model is rate-limited or unavailable, it falls back instantly to a keyword-based guess, so uploads never hang waiting on the AI.
- Cited, grounded answers — every claim the Archivist makes links back to a specific record via a footnote-style citation chip and a "Pulled from" strip beneath the answer.
- Record preview — click any record (or any citation) to read its full extracted text in place, with its folder and metadata.
- Live streaming chat — answers render token-by-token over a custom NDJSON stream with a typewriter caret, instead of a long blocking wait.
- Per-session privacy — each browser gets an isolated, cookie-scoped archive. On a shared deployment, one visitor's uploads are never visible to another.
- Multi-format ingestion — PDF, Markdown/plain text, CSV budgets, and Slack JSON exports (flattened into readable "user: message" transcripts).
- A fully keyless demo mode — the entire UI is clickable and returns a realistic canned answer even with zero Gemini API key configured, so the experience is never blocked on setup during a demo.
Technologies Used
- AI: Google Gemini API (
gemini-flash-latest) via the official@google/genaiNode.js SDK, used two ways: (1) structured JSON generation for per-record categorization and summarization, and (2) streaming generation (generateContentStream) for the primary chat/reasoning endpoint, with a custom system-instruction persona ("the Archivist") and a citation protocol enforced through prompt design. - Backend: Node.js + Express 5,
multerfor multipart file uploads,pdf-parsefor PDF text extraction. - Frontend: Vanilla JavaScript with no framework or build step. Hand-rolled markdown renderer for streamed answers, a custom canvas-based "ink cursor" interaction layer, and a from-scratch design system ("Chartered," a study-notebook/almanac aesthetic).
- Deployment: Google Cloud Run, containerized via a Node 20
Dockerfile, deployed with a one-shotdeploy.shscript.--max-instancesis capped to bound cost exposure if the deployed link is shared publicly, and the service scales to zero when idle. - Data handling: A session-scoped in-memory record store (mirrored to disk for local persistence). Deliberately ephemeral, with no database, so nothing persists across users or server restarts.
Target Users
Officers and general members of student organizations, clubs, and other volunteer-run groups with regular leadership turnover; the people who show up in September needing to know what worked last year and have no searchable record of it. It's built around a specific persona: an incoming sponsorship or events chair inheriting a role with zero handoff.
Impact Statement
Heirloom turns a club's scattered paper trail into a living institutional memory that survives graduation. The people it helps most are the ones who inherit a role with no handoff: a new sponsorship chair who can finally see which companies to re-approach and what they gave last time instead of starting cold, a new events lead who can ask what broke last year before planning instead of discovering it the hard way again. Multiply that across the thousands of clubs that lose most or all of their leadership every year, and the value compounds: less repeated failure, stronger long-term sponsor relationships, and less of a club's hard-won knowledge disappearing the moment someone walks the stage.
The Team (Me, Myself, and I...)
Gauri Menon



Log in or sign up for Devpost to join the conversation.