Skillster ist ein privates, lokal laufendes Orientierungstool für Jobcoaching: Persönlichkeit und Arbeitsstil (HOW) plus Interessen und Berufsfelder (WHAT) — ohne Cloud-Pflicht, ohne Diagnose-Anspruch.
Produktregeln, Bias-Guards und Teststufen: docs/GUIDELINES.md.
| Ebene | Inhalt | Quelle |
|---|---|---|
| HOW | Denk- und Verhaltensmuster entlang der VIST-Achsen (E/I, S/N, T/F, J/P) in Alltagssprache | Eigene bildgestützte Items + 16 VIST-Profiltexte (owned) |
| WHAT | RIASEC-Interessen → passende Felder und Top-Berufe | O*NET-Interessenvektoren, optional ESCO-DE-Titel |
| Qualität | Zwischenprofile, Coverage-Chip, Bias-Heuristiken | web/src/lib/bias.ts — keine normierte Psychometrie |
Alle MVP-Bilditems sind validationStatus: "unvalidated". Ergebnisse sind Orientierung für Coaching, keine klinische oder validierte Eignungsdiagnose.
cd web
npm install
npm run dev # http://localhost:3000Tests & Build:
cd web
npm test # Soft- + Hard-Guidelines (Vitest)
npm run test:hard # Nur Hard-Assertions (Guidelines §6)
npm run build
npm run lintDaten aktualisieren (Repo-Root):
# 16 VIST-Profile aus PDF → web/data/profiles/
python3 scripts/extract_profiles.py
# O*NET (+ optional ESCO-DE) → web/data/occupations/occupations.json
python3 scripts/import_occupations.py --limit 280
# optional: python3 scripts/import_occupations.py --limit 280 --fetch-esco
cd web && npm run buildDetails: web/data/occupations/README.md, web/data/stimuli/README.md.
Landing (/) → Assessment (/assessment, bildgestützt) → Ergebnis (/ergebnis) → PDF/Druck
↓
sessionStorage (Antworten nur lokal)
- Landing: Marke Skillster, CTA „Jetzt starten“, mobil tauglich.
- Assessment: Zwei Bildkarten pro Frage (
VisualCard+ SVG-Motive inpublic/stimuli/core/); Sticky-Fortschritt, Doppel-Tap-Schutz, „Neu starten“ mit Bestätigung, Reload setzt fort. - Ergebnis: Qualitäts-Chip, HOW in Alltagssprache, RIASEC-Felder + ≤3 Berufe, Tipps, Ausschlüsse („Was wir nicht messen“), Details eingeklappt.
- PDF: Clientseitig (
skillster-profil-<rolle>.pdfvia jsPDF) oder Browser-Druck.
Profil-Referenz: /profile und /profile/<code> (16 VIST-Codes).
- VIST / HOW: Nested Weights auf Achsen
E_I,S_N,T_F,J_P(+ Big-Five-Hilfsgewichte). Bei|Achse| < 18→ Zwischenprofile in Worten („teils …, teils …“), keine Buchstabensuppe in der Hauptansicht. - RIASEC / WHAT: Realistic, Investigative, Artistic, Social, Enterprising, Conventional — aus Interessen-Items und Abgleich mit
occupations.json. - Bias-Guards: Acquiescence, niedrige Coverage, fehlende Module, Absolutismen-Sanitizer, feste Trait-Ausschlüsse — siehe Guidelines §3.
- Scoring: Pure Function
scoreAssessment— primär client-seitig auf/ergebnis; Server-Spiegel für Tests.
Scoring & Types: web/src/lib/README.md.
Skillster/
├── docs/GUIDELINES.md # Produkt- & Testregeln
├── scripts/ # PDF-Profile, O*NET-Import
├── skillster_daten-komprimiert.pdf # Quell-PDF (VIST)
└── web/ # Next.js App (App Router, DaisyUI classical UI)
├── data/
│ ├── items/mvp-pictorial.json # ~32 Bildfragen
│ ├── profiles/ # 16 Ergebnisprofile
│ ├── occupations/ # RIASEC-Berufe
│ ├── stimuli/index.json # Motiv-Katalog
│ └── licenses/sources.json
├── public/stimuli/core/*.svg # CC0-artige Kernmotive
└── src/lib/ # Scoring, Bias, PDF, Session
Stack: Next.js 16, React 19, DaisyUI 5 + Tailwind 4 (theme skillster), Tabler icons, Motion, Vitest.
Mehr zur Web-App: web/README.md.
| Template | DaisyUI Next.js Landing Page Template (TypeScript) |
| URL | https://github.com/robbins23/landing-nextjs-ts-template |
| Lizenz | MIT (LICENSE) |
| Komponenten | Offizielle DaisyUI-Klassen (MIT) — navbar, hero, card, badge, btn, footer, steps, progress, modal, collapse, alert |
Seiten-Mapping: Landing / → hero + feature cards · Assessment /assessment → steps-Wizard + choice cards · Ergebnis /ergebnis → summary/detail cards + collapse · Profile /profile → card grid · Shell → navbar (SiteHeader) + footer (AppShell).
Kein Paid-Theme. DaisyUI selbst: MIT.
Projekt-MCP .cursor/mcp.json enthält context7 als primären Docs-Server mit Bearer Authorization: Bearer ${env:CONTEXT7_API_KEY} (Key nur in .env.local / Shell-Env — siehe .env.example). Alternative ohne Key: OAuth-URL https://mcp.context7.com/mcp/oauth.
# Key lokal (nicht committen):
cp .env.example .env.local # CONTEXT7_API_KEY=ctx7sk-…
export CONTEXT7_API_KEY="$(grep ^CONTEXT7_API_KEY= .env.local | cut -d= -f2-)"
# Optional Setup-CLI:
# npx ctx7 setup --cursor --mcp --project -y --api-key "$CONTEXT7_API_KEY"
# Docs ohne Key (CLI):
npx ctx7 library daisyui
npx ctx7 docs /websites/daisyui "navbar progress steps modal"
npx ctx7 docs /vercel/next.js "App Router layout"
npx ctx7 docs /websites/tailwindcss "@plugin @theme v4"Nach Setup: Cursor neu laden und Context7 MCP einmal authentifizieren. Regel/Skill liegen unter .cursor/rules/context7.mdc und .cursor/skills/context7-mcp/.
Zusätzlich in derselben MCP-Datei: figma-mcp-go (npm) — kein Figma-API-Key, keine Rate-Limits (Plugin-Bridge statt REST).
- Cursor neu starten (MCP lädt nur beim Start).
- Figma Desktop öffnen → Plugins → Development → Import plugin from manifest →
manifest.jsonaus dem plugin.zip Release. - Plugin in einer Datei starten, dann im Chat Design lesen/bauen lassen.
Offizielle Figma-Dev-Mode-MCPs brauchen oft bezahlte Kontingente — deshalb bewusst die freie Variante.
| Layer | Beispiele | Lizenz / Hinweis |
|---|---|---|
| core | IPIP-nahe Items (eigene pictorial weights), O*NET CC BY, ESCO, generierte SVG-Stimuli | Verkaufbar mit Attribution |
| owned | VIST-Profilnarrative aus PDF | Eigentum, im Footer genannt |
| extra | PSE-Motive, OASIS-Affekt (NC) | Feature-Flag, vor Commercial-Ship austauschen |
Register: web/data/licenses/sources.json. PSE/OASIS: Katalog-Slots unter web/data/stimuli/ — siehe web/data/stimuli/README.md.
| Route | Methode | Zweck |
|---|---|---|
/api/health |
GET | Liveness |
/api/items |
GET | Item-Katalog-Meta (ohne Weight-Dump) |
/api/score |
POST | Body { "answers": { "<itemId>": "<choiceId>" } } → AssessmentResult |
Jede Assessment-Option verknüpft visual.motif → Eintrag in web/data/stimuli/index.json → SVG unter /stimuli/core/. Fallback: inline-Motive in VisualCard.tsx.
| Dimension | Kontrast in Motiv & Copy |
|---|---|
| E/I | Gruppenenergie vs. ruhiger Fokus |
| S/N | Detail/Fehler vs. Muster/Gestalt |
| T/F | Fakten/Logik vs. Menschen/Werte |
| J/P | Plan/Struktur vs. Flexibilität |
| RIASEC | R–C typische Szenen (Werkstatt, Labor, Studio, …) |
| Stress | Plan/strukturieren vs. Pause/Atem |
Item-Texte: web/data/items/mvp-pictorial.json (label, hint — kurzes Deutsch für Laien).
| Befehl | Bedeutung |
|---|---|
npm test |
Vollsuite inkl. Struktur-, Katalog-, Scoring-, Bias-, UX-Smoke-Tests |
npm run test:hard |
Hard-Guidelines + Modul-Coverage — darf nicht brechen |
Soft vs. hard: Guidelines §6 (inkl. 6 Test-Stufen Warmup→Abschluss). Browser-E2E: web/e2e/README.md (Playwright-CI noch Backlog).
Manueller Smoke (nach npm run dev):
/,/assessment,/ergebnis,/profile,/profile/enfj→ HTTP 200- Assessment durchklicken → Ergebnis + PDF; Teilantworten → „Weiter im Test“
Priorisiert in docs/GUIDELINES.md §7, u. a.:
- ESCO-DE-Berufstitel kuratiert
- PSE/OASIS strikt hinter Feature-Flag
- Normierung / Validierung der pictorial Items
- Playwright E2E in CI
- CC0-Illustrations-Packs (Open Peeps / Humaaans) unter
stimuli/core/
Ergebnis- und PDF-Texte: Orientierung für Jobcoaching. Keine Diagnose, keine IQ-/Gesundheits-/Schutzmerkmals-Claims. Footer: Core- + Owned-Attribution.