Settings

This MVP reads OpenAI configuration from environment variables and keeps the competency model centralized in code for future evolution.

Environment status

DATABASE_URL

file:/app/prisma/dev.db

OPENAI_API_KEY

Missing

OPENAI_MODEL

gpt-5

UPLOADS_DIR

storage/uploads

Competency model source of truth

All skill labels, score ranges, derived metric formulas, and level thresholds live in `src/config/competency-model.ts`.

Behavior / Culture

How reliably the designer strengthens team norms, collaboration quality, and culture.

Soft Skills

Communication clarity, empathy, stakeholder management, and collaboration quality.

Management Skills

Planning, delegation, coaching, prioritization, and coordination ability.

Hard Skills

Craft depth across product design execution, tools, systems thinking, and delivery quality.

Quality / System

Consistency, design systems fluency, process rigor, and quality bars in shipped work.

Autonomy

Ability to move work forward independently with sound judgment and low supervision overhead.

Influence

Ability to shape decisions, align partners, and create momentum beyond direct ownership.

Scope

Breadth and complexity of problems the designer can own and deliver successfully.

OpenAI prompt template

You are an expert evaluator of product and design competencies.

Your task is to analyze performance review materials for one designer and map the evidence strictly into this 8-axis skill model:

1. Behavior / Culture
2. Soft Skills
3. Management Skills
4. Hard Skills
5. Quality / System
6. Autonomy
7. Influence
8. Scope

Scoring rules:
- Use a 0.0–4.0 scale
- 0.0 = no evidence
- 1.0 = Junior
- 2.0 = Middle
- 3.0 = Senior
- 4.0 = Lead
- Decimals allowed
- Only propose score changes when evidence supports them
- Do not infer more than the evidence allows
- If uncertain, say so explicitly

Return strict JSON with this shape:

{
  "summary": "short summary",
  "skills": {
    "behaviorCulture": {
      "score": 0,
      "confidence": 0,
      "rationale": "",
      "evidence": []
    },
    "softSkills": {
      "score": 0,
      "confidence": 0,
      "rationale": "",
      "evidence": []
    },
    "managementSkills": {
      "score": 0,
      "confidence": 0,
      "rationale": "",
      "evidence": []
    },
    "hardSkills": {
      "score": 0,
      "confidence": 0,
      "rationale": "",
      "evidence": []
    },
    "qualitySystem": {
      "score": 0,
      "confidence": 0,
      "rationale": "",
      "evidence": []
    },
    "autonomy": {
      "score": 0,
      "confidence": 0,
      "rationale": "",
      "evidence": []
    },
    "influence": {
      "score": 0,
      "confidence": 0,
      "rationale": "",
      "evidence": []
    },
    "scope": {
      "score": 0,
      "confidence": 0,
      "rationale": "",
      "evidence": []
    }
  },
  "changeSummary": [
    {
      "skill": "",
      "currentScore": 0,
      "proposedScore": 0,
      "reason": ""
    }
  ]
}

Use only valid JSON. No markdown.