Inspiration

Applying for internships often means sending the same résumé to hundreds of roles. The frustrating part is that students often have the right experience, but it is buried in a course, project, research role, or old résumé.

Early-career résumés are usually one page, so students cannot list everything. For every application, they need to choose the few courses and projects that clearly match that posting, and remove what does not. Repeating that work by hand is exhausting. We wanted to make the evidence a student already has easier to find, select, and defend.

What it does

InternHub turns coursework, projects, experience, and skills into structured evidence. It finds internship postings, extracts their requirements, scores a student's fit, and creates a tailored one-page résumé with the most relevant evidence.

Every generated claim is tied back to the course, project, experience, or skill that supports it. The student gets a clear table of opportunities, fit scores, missing skills, concrete next steps, and application documents they can review line by line.

How we built it

We used DataHub as InternHub's system of record. Student evidence, job postings, and generated documents are DataHub datasets. Courses, projects, requirements, and résumé claims are schema fields. Skills are shared DataHub glossary terms, and résumé claims have column-level lineage to the evidence behind them.

Seven agents run the workflow: profiler, scout, enricher, matcher, résumé writer, cover letter writer, and analyst. The app writes metadata through the DataHub Python SDK. The matcher and analyst read the graph through DataHub MCP, allowing them to query requirements, evidence, glossary terms, and lineage before making a recommendation.

The backend is FastAPI, the frontend is Next.js and React, and résumé PDFs are rendered from LaTeX. The sample profile is synthetic, and uploaded résumé and transcript text is extracted locally.

Challenges we ran into

The hardest technical problem was making lineage meaningful rather than adding it after the fact. We had to model each source of evidence and each generated claim as fields that DataHub could connect. We also had to validate every evidence key, so an unsupported generated bullet is discarded instead of becoming a broken lineage edge.

MCP reliability was another challenge. The rest of the app should remain useful if the MCP server is unavailable, but the analyst must not invent a graph-based answer. The matcher falls back to local evidence when necessary, while the analyst clearly declines when it cannot query DataHub.

Accomplishments that we're proud of

We built an end-to-end workflow that goes beyond generating résumé text. A judge can open a generated résumé in DataHub and trace a claim back to the exact course or project that supports it.

We are also proud that the matcher and analyst use DataHub MCP for real graph reads. The analyst can identify the skill gap that blocks the most opportunities and show which coursework is contributing to applications. Those conclusions are backed by the entities and lineage it queried.

What we learned

We learned that a metadata catalog changes what an AI application can safely do. When evidence and requirements are structured, agents can select, compare, and explain instead of relying on an oversized prompt and a keyword match.

We also learned that provenance is most useful when it is part of generation. Treating an unsupported claim as a broken lineage edge gives us a concrete check for a vague AI failure mode.

What's next for InternHub

Next, we want to test InternHub with real students and improve the evidence review flow before a document is exported. We also plan to add more job sources, better application tracking, and analytics that show the long-term return on a course, project, or newly learned skill.

On the DataHub side, we want to deepen the workflow lineage for every agent run and add more graph-driven recommendations, such as identifying the single project that would make the greatest number of roles attainable.

Built With

Share this project:

Updates