Back to work

Accessible matching · public source

AI Internship Recommendation Engine

A mobile-oriented recommendation application that turns a candidate profile into a focused shortlist of PM Internship Scheme opportunities using explicit, explainable weighted matching.

Full-stack developerPublic source · two-commit build
architectureReact profile form → FastAPI scoring → ranked shortlist → SMTP or download

20

sample opportunities

4

explicit matching dimensions

Top 5

ranked results per profile

2

result-retention paths

The system

From operational problem to reliable workflow.

Problem

Large opportunity catalogs create decision overload, especially for first-generation applicants and users with limited digital confidence. The product needed a short, explainable result rather than a search interface that simply moved the filtering burden to the applicant.

Approach

A React profile flow collects education, skills, sector interest, and location. Harshitha migrated the recommendation logic to a Python FastAPI backend, scores all 20 sample opportunities, returns the top five with a score breakdown, and supports HTML email delivery with a client-side download fallback.

Outcome

The project demonstrates an end-to-end profile-to-shortlist flow, explicit ranking logic, server validation, responsive presentation, official application links, and two ways to retain the result.

Architecture

System architecture

The application is an explainable recommendation prototype for the PM Internship Scheme. It uses a deliberately small local opportunity dataset and deterministic scoring so a reviewer can understand why an internship ranks above another. It is not an opaque learned recommendation model.

Candidate experience

Collects name, email, education, selected skills, sector interest, and preferred location with required-field and email-format validation.

React · TypeScript · Vite · React Router

Recommendation API

Validates the candidate profile, scores every opportunity, sorts descending, and returns the top five internships with per-dimension breakdowns.

FastAPI · Pydantic · Python

Opportunity catalog

Provides 20 sample internships with scheme IDs, education rules, skill requirements, sector, state, duration, stipend, and application context.

Typed in-memory records

Result delivery

Formats the shortlist for the responsive results page, sends an HTML email through configured SMTP, or allows a local file fallback.

SMTP · MIME HTML · browser download

Execution model

End-to-end execution

  1. 01

    Capture the profile

    The form requires contact information, education, at least one skill, sector, and location before navigating to recommendations.

  2. 02

    Validate at the API boundary

    Pydantic models validate the email and the shape of candidate and internship data before scoring runs.

  3. 03

    Score every opportunity

    Education contributes up to 30 points, skills up to 40, sector 20, and location 10; an `Any Degree` or `Any Location` match receives partial credit.

  4. 04

    Rank and explain

    The API sorts all 20 records by total score, returns the top five, and includes matching skills plus the dimension breakdown.

  5. 05

    Present or retain the shortlist

    The UI highlights matched skills and application details; the user can request an HTML email or save a fallback file.

Implementation

What Harshitha implemented

  • Built the multi-page React flow and client-side profile persistence between form and recommendation routes.
  • Implemented required-field and email-format checks before a profile can be scored.
  • Created FastAPI models for candidate profiles, internship records, recommendation responses, and email requests.
  • Ported the scoring engine to Python with explicit caps and partial-credit rules rather than an uninspectable model call.
  • Added health, recommendation, catalog, sector, state, and send-recommendation endpoints.
  • Built responsive recommendation cards with scheme IDs, stipends, location, duration, eligibility, required skills, and matched-skill highlighting.
  • Generated personalized HTML email output with profile context, internship cards, and application actions.

Contribution summary

  • Built the React/Vite applicant journey from scheme introduction through validated profile capture and ranked recommendations.
  • Moved the recommendation engine from TypeScript to a Python FastAPI service with Pydantic request and response models.
  • Implemented explainable scoring across education, skills, sector, and location and sorted all opportunities into a top-five shortlist.
  • Added SMTP-backed HTML recommendation emails and retained a text-download fallback when email delivery is unavailable.
  • Designed for mobile use, large touch targets, simple language, and low digital-literacy contexts.

Failure design

Reliability engineering

R01

Risk

An incomplete profile produces meaningless ranking.

Control

The client requires all ranking dimensions and the API validates typed request fields independently.

R02

Risk

Email configuration is missing or delivery fails.

Control

The API returns explicit configuration/delivery errors and the interface retains a local download fallback.

R03

Risk

A result feels arbitrary to the applicant.

Control

The engine uses fixed weights, returns score components, and highlights matched skills in the UI.

R04

Risk

A large list recreates the original decision burden.

Control

The backend deliberately limits results to the top five after ranking the complete sample catalog.

Tradeoffs

Technical decisions

Use deterministic scoring

For a small prototype dataset, explicit rules are easier to explain, test, and tune than branding a model call as AI without evidence.

Move scoring to FastAPI

A typed backend centralizes ranking and email delivery and prevents recommendation rules from being duplicated across browser clients.

Optimize for a short list

The target user benefits more from three to five actionable options than from another filter-heavy catalog.

Credibility

Evidence and scope

Attribution boundary

This is a portfolio prototype using a curated 20-record sample catalog and deterministic weighted matching. It should not be represented as a deployed government system, a learned recommendation model, or a production integration with the official PM Internship Scheme database.

Technology

ReactTypeScriptVitePythonFastAPIPydanticSMTPTailwind CSS