Inspiration

The idea came from today's competitive internship search. Most of us end up with 200+ applications spread across a spreadsheet, continuously checking our Gmail inbox, and a fixed resume. Deadlines get missed not because we don't care, but because they're buried deep in an email thread. Interview prep becomes "read some generic questions off a list" instead of actually preparing for that company and that role.

We looked at existing tools and found two categories: spreadsheets and general job-search trackers. However, nothing was built for the actual shape of this problem. So we built it.

What it does

UrTurnIntern is a single workspace that replaces the spreadsheet-plus-inbox-checking routine:

A kanban pipeline (Wishlist → Applied → OA → Interview → Offer, plus Rejected/Ghosted) for every application, with deadlines synced to an in-app calendar and, optionally, Google Calendar. An AI resume engine that scores your resume against a specific job description with an actual judgment call on each requirement, remembering your accepted and rejected decisions so re-scoring after an edit doesn't relitigate things you've already resolved. Gmail auto-detection that scans for application-related replies and suggests moving your card the moment a recruiter responds, instead of you manually checking. AI interview practice that generates questions specific to the company and role you're about to interview for, then scores your answers and gives you concrete feedback on what a stronger answer would look like. An analytics dashboard that shows where your pipeline is actually stuck and which role and platform should you focus on.

How we built it

React, Vite, and TypeScript on the frontend with Tailwind for styling; Node/Express on the backend; Supabase for Postgres and auth, with row-level security isolating every user's data. AI features run through Gemini, called only from the backend, never directly from the client.

For the resume-scoring architecture, instead of re-judging a resume from scratch on every edit (slow, expensive, and inconsistent), we built a ledger that tracks the user's accept/reject verdict on each requirement alongside the evidence it was judged against. When the resume changes, the server can tell whether a requirement's evidence is still present and skip re-judging it, only spending an AI call on what actually changed, making the live-feeling re-scoring as you type affordable instead of a quota-draining feature.

For the Google integrations, we deliberately scoped OAuth down to the minimum: calendar.app.created + calendar.freebusy for Calendar (the app can't read your personal events), and read-only Gmail (the app can't send or delete on your behalf). Automation without asking for more trust than the feature needs.

We also put real thought into the visual identity, every design choice was made by asking how it would actually feel to a stressed-out student staring at this dashboard at 1am. That user-first lens is why we moved away from a generic, default SaaS look toward something more considerate, which is a calmer colour palette and typography that feels less like another dashboard and more like a tool built to help you breathe, not add to the noise.

Challenges we ran into

Jaydon:system design, engineering the LLM with deterministic guardrails (evidence grounding, score-stability, rate-limit pacing), deployment Chloe: When it came to assigning work, I wanted them to work on features independently at their own time but the app functions as one connected system, so features that looked independent on a task board turned out to share data, state, or UI in ways that only became obvious once people were actually building. That meant the plan I made at the start didn't hold, and I had to revisit and re-cut it almost every week rather than set it once and let the team run. Mas: Stale OAuth state was causing silent failures because when users reconnect to google calendar, a new calendar was created but old interview events still pointed at the old google calendar, causing the call to 404 and the whole sync failed. Google testing mode token expires every 7 days forcing users to reconnect to google calendar every week. Jerryl: Brainstorming creative and distinctive features that give our app a competitive advantage over similar apps. And also, Refining each feature to ensure it delivers value to our users. Yi Jie: Different job websites use different page structures, so populating the extension reliably required multiple layers of checks and fallback handling. Also, merging code across different features was challenging because we had to manage conflicts while keeping the app stable and consistent.

Accomplishments that we're proud of

Jaydon: architected an LLM-powered (Google Gemini) résumé-JD matching pipeline with retrieval-grounded evidence verification, hallucination guardrails, deterministic score-stability ratchets, and a rate-limit-aware request governor for cross-process AI orchestration — learning about output validation, and reliability engineering for non-deterministic AI systems in production. Chloe: Coming up with the kanban board idea to organise applications such that the user can visualise how the application is being moved through stages. I also emphasised heavily on the visuals of the app, creating custom theming, deliberate typography, and smooth interaction polish. Mas: We are able to ship a privacy-first Google Calendar integration end-to-end using encrypted refresh tokens using FreeBusy query. Users can safely add/update/remove events on their kanban board which automatically updates their personal google calendar without peeking into their personal events. Jerryl: Architected an LLM-powered interview practice feature using Google Gemini that generates personalized mock interview sessions based on historical interview questions from a user's target company, while tailoring the experience to the specific role they are applying for, helping users prepare more effectively for interviews. Yi Jie: We integrated external tools such as browser assistance, Gmail and LLMs to improve user experience and better support users throughout the internship process.

What we learned

Jaydon: system architecture, deployment, working with LLMs, how code interacts within a full stack development environment Chloe: UX and information architecture, design systems and theming, frontend animation and interaction design, accessibility and cross-theme consistency Mas: Google Cloud Console, OAuth, designing for privacy, verifying designs to ensure it works Jerryl: Working with LLMs, how code interacts within a full stack development environment, developed a product mindset by evaluating the business viability and market potential of proposed features Yi Jie: We learned how to integrate multiple tools and services into one product, including OAuth, LLM APIs and the browser extension.

What's next for UrTurnIntern

Now that we're deploying it, the first priority is getting it in front of real students and learning from actual usage, the rough edges you only find at scale, not from a handful of test accounts. Beyond that we hope to expand our AI interview practice towards mock spoken interviews, more inbox integrations (Outlook), and a lightweight way for mentors or career-center advisors to review a student's pipeline and leave feedback directly on an application.

Built With

Share this project:

Updates