shabs-ch/automotive-reskill
π 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 CloudKey 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.
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
Setup (local)
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.txtCreate .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.# Embed job ads into ChromaDB (first time only)
python src/embed_jobs.py
# Run the app
streamlit run app.pyLimitations 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 decisionsLicense
MIT
