Inspiration

Every resume says "Proficient in Python" or "Experienced with Java", and nobody can tell if it's true. Recruiters have to guess, and candidates from smaller colleges or self-taught backgrounds have no famous name to vouch for them. We wanted to replace "I claim I know this" with "here is the evidence." That became SkillProof: proof over pedigree.

What it does

SkillProof lets candidates prove their skills with real assessments.

  • Sign in with Google or email and password.
  • Choose from four skill assessments: Python, Java, Data Structures and Algorithms, and Front-end Development.
  • Each assessment has 25 questions: 8 Easy, 10 Medium and 7 Hard, mixing 15 multiple-choice questions with 10 hands-on coding problems.
  • Coding problems run in an in-browser editor and are checked against visible and hidden test cases.
  • Every assessment is scored out of 100 and feeds a Skill Passport that shows the candidate's verified skills.
  • A public landing site introduces the product, while the assessments sit behind an authentication gate.

How we built it

  • Server and frontend: a TypeScript Express server with a public landing site and a private app, built with Vite and prototyped in Google AI Studio.
  • Authentication: Firebase Authentication (Google and email/password), with signed, httpOnly session cookies and a gate that protects every private route.
  • Data: Cloud Firestore with default-deny security rules, so users can only reach their own data.
  • Coding challenges: the Monaco editor for writing code and the onlinecompiler.io API to run it against test cases on the server.
  • Question bank: 75 hand-designed questions in total. Each coding problem comes with starter code, 5 to 7 test cases (the first two visible, the rest hidden), a reference solution and an explanation. We ran every reference solution against its own test cases in Java, Python and Node to confirm that all of them pass.
  • Hosting: Google Cloud Run.

Scoring weights each question by difficulty, with $w_{\text{Easy}}=1$, $w_{\text{Medium}}=2$ and $w_{\text{Hard}}=3$. An assessment has $8\cdot 1 + 10\cdot 2 + 7\cdot 3 = 49$ possible points, so:

$$ \text{Score} = \operatorname{round}\left(\frac{\sum_{i=1}^{25} w_i \, p_i}{49} \times 100\right) $$

where $p_i \in {0,1}$ for a multiple-choice question, and $p_i$ is the fraction of test cases passed for a coding problem. Scores are computed on the server, and correct answers and hidden test cases never reach the browser, so results can't be faked from the page.

Challenges we ran into

  • Authentication in a managed environment. The Firebase project that AI Studio created behind the scenes wasn't visible in our own Firebase account, so we couldn't authorize our domains and sign-in kept failing with unauthorized-domain errors. We solved it by moving the app to a Firebase project we control, and by adding clear in-app messages instead of raw error codes.
  • Sessions inside an iframe. Cookies behave differently in an embedded preview, so the session flow needed careful design.
  • A pivot under deadline pressure. We first built automatic CV analysis, where an AI reads a resume and creates tests for each detected skill. The extraction chain was unreliable close to the deadline, so we made a hard call: ship fixed, thoroughly tested assessments now and keep personalized CV analysis as a "coming soon" feature.
  • Getting the questions right. Wrong answer keys would ruin the product, so we wrote the problems ourselves and verified every reference solution by running it.
  • Deploying to Cloud Run. Our first deployment crashed on startup. We made the server listen immediately, never crash on a missing setting, and load development tools only outside production, then confirmed it boots with no optional settings.

What we learned

  • Authentication is mostly configuration. Matching projects, domains and providers matters as much as the code.
  • Cutting scope early is a skill. A smaller feature that works beats a bigger one that almost works.
  • Content you can test is content you can trust. Running every solution against its tests caught problems before users could.
  • Good error messages are a feature. A clear "add this domain here" saves hours.

What's next

  • Personalized CV analysis that detects a candidate's skills and suggests matching tests
  • A demo mode so anyone can try an assessment without signing in
  • Shareable, verifiable Skill Passport links for recruiters
  • A recruiter dashboard to search and compare verified candidates
  • More languages and skill areas, and proctoring features to reduce cheating

Built With

Share this project:

Updates

Submission history