JOBSPRINT - TECHFEST HACKATHON 2026

JobSprint is an end-to-end career companion platform that helps users discover jobs, understand skill gaps, plan learning, and track applications in one integrated workflow.

It combines a web app (Next.js), a backend API (Spring Boot + PostgreSQL), a data ingestion pipeline (Python fetchers + backend ingestion endpoints), and an AI chatbot service (FastAPI) for job-aware Q&A and roadmap generation.

1. Login and authorization (User stories)

  • As a user, I want to register and log in so that my skills, saved jobs, and applications are private.
  • As a user, I want my session to stay valid so I don’t log in every time.
  • As an admin, I want to manage dictionary and ingestion actions securely.

Technical design (high level)

  • JWT based auth (access token)
  • Role based authorization (USER, ADMIN)
  • Protect endpoints using Spring Security filters

2. User profile skill management (list, add, batch add, remove) + resume upload parsing to auto add skills (User stories)

  • As a user, I want to add skills from a list so job matching becomes personal.
  • As a user, I want to add many skills quickly (batch add) so setup is fast.
  • As a user, I want to upload my resume so the app can detect and add skills automatically.

Technical design (high level)

  • Use skill dictionary as the source of truth
  • Store user skills as a simple set: user has skill or not (no level)
  • Resume parsing extracts text then matches against skill dictionary

3. Jobs browsing (search with keyword/location filters) + job detail (User stories)

  • As a user, I want to search jobs by keyword so I find relevant roles.
  • As a user, I want to filter by location or remote so results fit me.
  • As a user, I want job detail to show full description and extracted skills.

Technical design (high level)

  • Store jobs in job_posting
  • Use Postgres search for MVP (simple, no extra infra)
  • Return job skills from job_skill (extracted from description)

4. Skill gap analysis (User stories)

  • As a user, I want to see which skills I’m missing for a job so I know what to learn.

Technical design (high level)

  • Compare job’s extracted skills vs user’s skills
  • Output missing and matched

5. Courses recommended based on skill gap (User stories)

  • As a user, I want course recommendations to close my missing skills quickly.

Technical design (high level)

  • Maintain a course catalog
  • Map courses to skills they teach
  • Recommend courses for missing skills first

6. Applications tracker (create, update, status, history, timestamps) + saved jobs (User stories)

  • As a user, I want to save jobs for later so I can apply when ready.
  • As a user, I want to track applications and statuses so I don’t lose progress.
  • As a user, I want to see history so I remember what happened and when.

Technical design (high level)

  • Treat “Saved” as an application status (simplifies data model)
  • Every status change writes a history row

7) Recommendations (personalized job recommendations based on skills) with paging + sorting best matchUser stories

  • As a user, I want the app to recommend jobs that match my skills so I spend less time searching.
  • As a user, I want results sorted by best match and pageable.

Technical design (high level)

  • Score jobs by skill overlap:
    • score = count of matched skills between job_skill and user_skill
  • Return ranked jobs with reasons (matched skill names)

8. AI chatbot to recommend key skills and course recommendations (User stories)

  • As a user, I want to chat and get guidance on what skills to learn and which courses to take.
  • As a user, I want the chatbot to use my profile and job gap, not generic advice.

Technical design (high level)

  • Chat endpoint calls an LLM (Gemini or similar)
  • The LLM is given structured context from your database:
    • user skills
    • target job skills and gap
    • course list for missing skills
  • Use “tool calls” pattern (LLM asks the backend for gap and courses)

9. Job ingestion from job boards once per day + manual ingestion, parser (User stories)

  • As a user, I want the app to have fresh jobs every day.
  • As an admin, I want to run ingestion manually when needed.
  • As a developer, I want parsers per source that output the same internal job format.

Technical design (high level)

  • Ingestion runner calls one parser per source (mycareersfuture)
  • Each parser returns standardized JobPosting objects
  • Save jobs idempotently by (source, source_job_key)
  • After saving, run skill extraction to populate job_skill

Built With

Share this project:

Updates