CoolFace
Apppublic

shabs-ch/automotive-reskill

sourceHugging Faceupdated 4mo agoView on Hugging Face
0likes
App README

πŸš— Automotive Reskill

AI-powered career transition tool for German automotive engineers moving into AI roles.

Live Demo

[Try it here β†’](https://huggingface.co/spaces/shabs-ch/automotive-reskill) | [GitHub β†’](https://github.com/shabs-ch/automotive-reskill)

Paste your CV, get matched AI roles, understand your skill gaps, and receive a personalised learning roadmap with real, cited courses β€” including Bildungsgutschein-eligible options.


Why I built this

The German automotive industry is under significant disruption. Engineers with 10-20 years of experience in embedded SW, testing, systems engineering, and program management are facing displacement β€” but their skills transfer strongly to AI roles that most tools and recruiters can't see.

I built this to make those invisible skills visible, and to give engineers a concrete, personalised path forward.


What it does

Paste CV
↓
Extract skills + classify profile into AI role families
↓
Match against 60 curated job ads (semantic search, ChromaDB)
↓
Analyse skill gaps for chosen role (ontology + mappings + Claude)
↓
Generate month-by-month learning roadmap (RAG, cited courses only)
↓
Show Bildungsgutschein-eligible courses + application guidance

Architecture

src/skill_extractor.py     β†’ CV β†’ structured skills JSON (Claude)
src/profile_classifier.py  β†’ classify profile into 4 role families (Claude)
src/role_matcher.py        β†’ semantic search against job corpus (ChromaDB)
src/gap_analyzer.py        β†’ gap report: have / transfers / need (Claude)
src/roadmap_generator.py   β†’ RAG roadmap citing real courses (Claude)
src/bg_checker.py          β†’ Bildungsgutschein guidance (data lookup)
src/agent.py               β†’ fixed-sequence orchestrator, state management
src/chroma_client.py       β†’ auto-detects local vs ChromaDB Cloud

Key design decisions

Classifier before retrieval β€” semantic search alone fails for management profiles. A Claude-based classifier routes profiles to the right role families before ChromaDB retrieval.

RAG for roadmap grounding β€” the roadmap generator retrieves courses from a 108-course corpus and passes them to Claude. Claude can only cite courses that actually exist β€” hallucination rate is zero on test cases.

Weighted course scoring β€” course quality (provider reputation) and skill match take priority over Bildungsgutschein eligibility. A €49 Coursera course from Andrew Ng outranks a mediocre free German course.

Static YAML over vector DB for knowledge — skill ontology, automotive→AI mappings, and course corpus are stored as YAML files, not embedded in ChromaDB. Rationale: these are structured, tagged datasets where keyword + metadata filtering is more precise than semantic similarity. YAML is human-readable, version-controllable, and directly inspectable. ChromaDB is used only for job ads where semantic similarity search genuinely adds value.

Prompted Claude over fine-tuning β€” evaluated QLoRA fine-tuning for CV reframing. Chose prompted Claude with few-shot examples instead. Insufficient training data (<50 examples), and prompted approach produces equivalent quality at this scale. Would revisit at >500 labelled examples.

Static corpus for eval reproducibility β€” 60 curated job ads and 108 courses kept static for v1. Live API integration (Bundesagentur fΓΌr Arbeit) is a documented v2 priority.


Evaluation

Built a 15-case hand-graded eval framework across 6 engineer archetypes. Temperature=0 for deterministic results.

MetricScore
Profile classification accuracy87% (13/15)
Gap analysis accuracy87% (13/15)
Cost per full pipeline run$0.10 – $0.15 (varies by CV length and roadmap complexity)
Hallucinated course names0 (5 test scenarios)

Retrieval quality was evaluated qualitatively β€” retrieved courses consistently matched identified skill gaps across all 5 integration test scenarios. Formal IR metrics (Recall@K, MRR) are a v2 priority.


User Research

  • β€”6 user interviews conducted before building (Week 1)
  • β€”Profiles: PMO Lead, Systems Requirements Lead, Technical PM, SW Requirements Lead, SW Test/Validation Lead, SW Project Manager
  • β€”Top pain: "I can't see how my automotive skills transfer to AI roles"
  • β€”Key finding: 4/6 prefer automotive-adjacent transition over full domain switch β€” shaped the domain preference filter

Stack

ComponentTechnology
LanguagePython 3.14
UIStreamlit
LLMAnthropic Claude (claude-sonnet-4-6)
Vector DBChromaDB Cloud
EmbeddingsBAAI/bge-m3 (multilingual DE+EN)
DeploymentHuggingFace Spaces
KnowledgeCustom skill ontology (130 skills) + automotive→AI mappings (30 entries)
Course corpus108 courses, 23 Bildungsgutschein-eligible
Job corpus60 curated job ads, 4 role families

Setup (local)

bash
git clone https://github.com/shabs-ch/automotive-reskill
cd automotive-reskill
python -m venv .venv
source .venv/Scripts/activate  # Windows Git Bash
pip install -r requirements.txt

Create .env:

ANTHROPIC_API_KEY=your_key
CHROMA_API_KEY=your_chroma_key      # optional β€” uses local ChromaDB if not set
CHROMA_TENANT=your_tenant_id
CHROMA_DATABASE=automotive-reskill
Never commit your .env file. It is gitignored by default.
bash
# Embed job ads into ChromaDB (first time only)
python src/embed_jobs.py

# Run the app
streamlit run app.py

Limitations and future work

v1 is deliberately scoped. Known limitations and v2 priorities:

  • β€”Job corpus β€” 60 static curated ads. v2: live Bundesagentur fΓΌr Arbeit API integration
  • β€”BG eligibility β€” 23 confirmed, 16 unknown. v2: AZAV database cross-reference
  • β€”Retrieval metrics β€” quality validated qualitatively. v2: Recall@K, MRR measurement
  • β€”Language β€” English UI only. v2: German localisation
  • β€”No user accounts β€” session state only, no persistence across visits
  • β€”CV upload β€” text paste only. v2: PDF upload via document parsing
  • β€”Mobile experience is limited β€” optimised for desktop use

These improvements are well-defined and implementable β€” deferred by choice to broaden AI engineering exposure across multiple projects.


Project notes

All architectural decisions, engineering learnings, and product decisions are documented in:

notes/decisions.md      β†’ every non-obvious architectural choice
notes/learnings.md      β†’ running engineering learnings log
notes/feedback_round1.md β†’ user feedback and fixes
notes/future.md         β†’ v2 ideas and backlog
docs/architecture.md   β†’ detailed component architecture + design decisions

License

MIT