Inspiration

Job hunting tools felt fragmented: one place to browse, another to track, another to prep. We wanted one workflow that connects match → apply → practice so every step leads to the next.

What it does

  1. Ranks jobs by fit and shows a clear “why”
  2. Tracks applications with a one-click “Applied”
  3. Generates targeted practice from your skill gaps for jobs you actually applied to

How we built it

  1. Flask backend + templates UI
  2. AI matching v2 (app/ai_matching_v2.py): a. Build structured embedding text for the user + chunked text for each job (context/requirements/summary) b. Output matched skills, missing skills, constraint flags + deterministic explanation c. Speed via SQLite embedding cache (hash of model+text) + concurrent embedding calls

Challenges we ran into

  1. Making rankings feel stable and “not random” (fixed with structured inputs + chunking + hybrid scoring)
  2. Performance (fixed with SQLite caching + parallel embedding requests)
  3. Explainability without hallucinations (deterministic explanations, optional LLM rephrase with fallback)

Accomplishments that we're proud of

  1. A matching engine that is explainable, tunable, and fast
  2. A clean end-to-end flow where tracking an application automatically powers practice
  3. A UI that surfaces scores + reasons instead of hiding the logic

What we learned

  1. “AI features” only matter if they’re reliable and actionable
  2. Structure + caching + fallbacks are what make AI usable in real apps
  3. Product value comes from connecting user actions to next steps

What's next for T-53_LinkedOut.AI

  1. Feedback loop (thumbs up/down) to improve ranking quality over time
  2. Better skill normalization/synonyms (e.g., Postgres vs PostgreSQL)
  3. Offline evaluation metrics for ranking (precision@k, nDCG)
  4. Stronger persistence + analytics as usage grows

Built With

  • flask
  • html/jinja2-templates
  • javascript
  • python
  • sqlite
  • tailwind-css-(cdn)
  • the-ollama-http-api-(embeddings-and-optional-generation)
  • the-requests-library
Share this project:

Updates