Track: Campus Impact

Inspiration

I'm a graduate student at Syracuse. For the past year and a half I've been emailing professors trying to find research to work on. A few wrote back. I got lucky.

But I remember the guessing — department pages full of names with no context, bios that never said what someone works on now, emails that probably looked like the forty others in that inbox.

The hard part was never the work. It was finding out who to ask.

It isn't easier on the other side. Faculty get emails from students who clearly haven't read their research, with no way to tell which ones are real. Both sides want the same thing. Neither has the information to find the other.

So I built what I needed eighteen months ago.

What it does

Coauthor @ SU maps Syracuse's research output into named themes, then places students and faculty in the same space.

A student writes one sentence. The system shows which theme it lands in, then returns ranked faculty, research groups, and other students — each match naming the specific paper behind it.

Short ideas get expanded by an LLM into research language before matching, so two words still land somewhere real. And when an idea is still too thin to place, the system says so instead of guessing.

Faculty see the mirror: student ideas that overlap their actual work, ranked, plus one toggle for whether they're open to students this semester.

Three matches, one engine:

  • Student to faculty — theme fit and recent publication activity
  • Student to group — co-authorship clusters, because research happens in labs, not with lone professors
  • Student to student — shared theme, complementary skills, because two people who want the same job aren't a team

How I built it

Data. The intended source was Experts@Syracuse, the university's Pure portal. Its routes sit behind a Cloudflare challenge. I chose not to bypass it, and fell back to the OpenAlex public API.

Raw ingestion returned 6,658 Syracuse-affiliated authors. That number is wrong in an interesting way: it counts anyone on any paper, including thousand-author physics collaborations that flood the corpus with people who touched Syracuse once. A documented cleaning pass dropped works with more than 50 authors, then kept only researchers with three or more works, a publication since 2023, at least one first or last authorship, and a plausibly parsed name.

1,512 active Syracuse researchers. 10,779 publications.

Understanding. Publications embed into a 384-dimension sentence-transformer space (all-MiniLM-L6-v2), so a query matches on meaning rather than shared vocabulary. Sixty themes from spherical k-means with k-means++ seeding, each named by an LLM from its own top papers — so the categories come from the data, not from a list I wrote first. 204 research groups from weighted label propagation over the real co-authorship graph, filtered so one paper from 2016 can't pass as an active lab. Student queries run through an LLM expansion step before they're embedded, which turns a two-word idea into the kind of language that actually appears in publication titles.

Product. A Next.js app and a deployed Streamlit version reading the same index. Mobile-first, no signup, populated on first open.

Challenges I ran into

The best feature wasn't real. I planned to rank faculty by active funding — the strongest possible signal that someone can take a student. OpenAlex returns grant records, so it looked easy. Then I read them: funder acknowledgements scraped off publications, not sponsored projects. Foreign funders on papers where a Syracuse author was one of thousands. Every end date null.

I cut it. Every grant date and funding claim came out of the ranking and the interface. It was the most useful signal in the design, and it wasn't real.

Knowing what I could claim. Public data tells you what a professor works on. It never tells you they want a student. So the system shows evidence and lets people conclude — and the only place intent enters is the faculty toggle, where a professor says it themselves.

Short queries broke the matching. "Global Warming" landed in a children's fitness theme. Two words carry very little signal even in an embedding space, so the match was close to arbitrary. That's what the LLM expansion step and the too-short guard exist to fix.

The rest. Cloudflare on the primary source. A 141MB binary blocking every push. Clustering that produced keyword soup until the naming step worked. A Streamlit bug regenerating button keys every rerun, which made every link in the app silently dead.

Accomplishments I'm proud of

The data is real. 1,512 actual Syracuse researchers and their actual published work — not a mockup, not a sample, not placeholder names.

The themes came out of the corpus, not out of my head. "Supernovae and Black Hole Formation," "Urban Ventilation and Building Energy," "Cell Mechanics and Immune Signaling." Sixty of them, clustered and named from the papers themselves.

Every match explains itself. No black-box similarity score — each result names the specific paper that produced it, with a link to the source record so anyone can check.

It admits when it can't answer. A query too thin to place gets told so, rather than handed a confident wrong match.

I cut a feature rather than fake it, and the README documents exactly what the corpus does and doesn't cover.

It's deployed. A judge can open it on a phone right now.

What I learned

The most impressive-sounding feature is often the one to cut. "This data couldn't support the claim" is a stronger position than shipping the claim.

6,658 becoming 1,512 isn't a loss. The filtering is the work.

Building both sides is harder than building one, and it's the reason this could actually work.

What's next for Coauthor @ SU

The faculty are real. The students are the synthetic half — 15 hand-written posts. Real students posting real ideas is the next step, and it's when student-to-student matching stops being a good idea and starts working, because it needs a pool.

Then: Syracuse's own Pure data instead of reading around Cloudflare, which adds department affiliations and real sponsored projects. Then advisors, who currently have no map of who works on what across college lines.

What I want most is three students with adjacent ideas finding each other and approaching a professor as a team. A scoped idea from three people gets a yes far more often than one cold email does.

I built this for the version of me sending those emails eighteen months ago. I hope it saves someone a semester.

Built With

Share this project:

Updates

Submission history