247 lines
11 KiB
Python
247 lines
11 KiB
Python
"""Built-in talent templates for OPC Market.
|
|
|
|
These ensure the marketplace is never empty, even before a user imports
|
|
any external talent repository. Each template maps to roles in the
|
|
architecture blueprints exposed by ``architecture_registry.py``.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
BUILTIN_TALENT_TEMPLATES: list[dict[str, Any]] = [
|
|
# ── Management ─────────────────────────────────────────────────
|
|
{
|
|
"id": "ceo-strategist",
|
|
"name": "CEO Strategist",
|
|
"description": "Executive leader who sets product vision, makes strategic decisions, and coordinates cross-functional teams.",
|
|
"category": "management",
|
|
"domains": ["strategy", "leadership", "product-vision"],
|
|
"tags": ["executive", "decision-maker", "coordinator"],
|
|
"emoji": "\U0001F454",
|
|
"color": "#2c3e50",
|
|
"vibe": "Think big, decide fast, deliver value",
|
|
},
|
|
{
|
|
"id": "account-manager",
|
|
"name": "Account Manager",
|
|
"description": "Client-facing relationship manager who scopes projects, tracks deliverables, and ensures client satisfaction.",
|
|
"category": "management",
|
|
"domains": ["client-relations", "project-scoping", "delivery"],
|
|
"tags": ["client-work", "communication", "agency"],
|
|
"emoji": "\U0001F91D",
|
|
"color": "#e67e22",
|
|
"vibe": "The client's voice inside the team",
|
|
},
|
|
{
|
|
"id": "product-manager",
|
|
"name": "Product Manager",
|
|
"description": "Defines feature specs, writes user stories, prioritizes backlog, and bridges business and engineering.",
|
|
"category": "product",
|
|
"domains": ["product-strategy", "user-stories", "prioritization"],
|
|
"tags": ["roadmap", "specs", "stakeholder"],
|
|
"emoji": "\U0001F4CA",
|
|
"color": "#3498db",
|
|
"vibe": "Ship the right thing, not just any thing",
|
|
},
|
|
|
|
# ── Engineering ────────────────────────────────────────────────
|
|
{
|
|
"id": "cto-architect",
|
|
"name": "CTO / Tech Architect",
|
|
"description": "Technical leader who designs system architecture, makes technology choices, and mentors engineering teams.",
|
|
"category": "engineering",
|
|
"domains": ["architecture", "tech-leadership", "system-design"],
|
|
"tags": ["technical", "architecture", "leadership"],
|
|
"emoji": "\U0001F4BB",
|
|
"color": "#2980b9",
|
|
"vibe": "Build it right, scale it further",
|
|
},
|
|
{
|
|
"id": "fullstack-engineer",
|
|
"name": "Full-Stack Engineer",
|
|
"description": "Versatile developer handling frontend, backend, databases, and deployment. Ships features end-to-end.",
|
|
"category": "engineering",
|
|
"domains": ["frontend", "backend", "database", "deployment"],
|
|
"tags": ["full-stack", "implementation", "coding"],
|
|
"emoji": "\u26A1",
|
|
"color": "#f1c40f",
|
|
"vibe": "Code it, ship it, fix it, repeat",
|
|
"preferred_external_agent": "claude_code",
|
|
},
|
|
{
|
|
"id": "devops-engineer",
|
|
"name": "DevOps / Platform Engineer",
|
|
"description": "Infrastructure specialist managing CI/CD pipelines, cloud architecture, Kubernetes, and deployment automation.",
|
|
"category": "engineering",
|
|
"domains": ["infrastructure", "ci-cd", "kubernetes", "cloud"],
|
|
"tags": ["devops", "automation", "infrastructure"],
|
|
"emoji": "\u2699\uFE0F",
|
|
"color": "#27ae60",
|
|
"vibe": "Automate everything, trust nothing",
|
|
"preferred_external_agent": "claude_code",
|
|
},
|
|
{
|
|
"id": "security-engineer",
|
|
"name": "Security Engineer",
|
|
"description": "Security specialist performing audits, vulnerability scanning, compliance checks, and threat modeling.",
|
|
"category": "engineering",
|
|
"domains": ["security", "compliance", "vulnerability", "audit"],
|
|
"tags": ["security", "compliance", "audit"],
|
|
"emoji": "\U0001F6E1\uFE0F",
|
|
"color": "#c0392b",
|
|
"vibe": "Assume breach, verify everything",
|
|
},
|
|
{
|
|
"id": "sre-lead",
|
|
"name": "SRE Lead",
|
|
"description": "Site reliability engineer managing SLOs, incident response, monitoring, and system resilience.",
|
|
"category": "engineering",
|
|
"domains": ["reliability", "monitoring", "incident-response", "slo"],
|
|
"tags": ["sre", "oncall", "observability"],
|
|
"emoji": "\U0001F5A5\uFE0F",
|
|
"color": "#16a085",
|
|
"vibe": "Keep the lights on, measure everything",
|
|
},
|
|
|
|
# ── Design ─────────────────────────────────────────────────────
|
|
{
|
|
"id": "ui-ux-designer",
|
|
"name": "UI/UX Designer",
|
|
"description": "Creates user interfaces, prototypes, and conducts user research. Bridges user needs and visual design.",
|
|
"category": "design",
|
|
"domains": ["ui-design", "ux-research", "prototyping", "figma"],
|
|
"tags": ["design", "user-experience", "visual"],
|
|
"emoji": "\U0001F3A8",
|
|
"color": "#e74c3c",
|
|
"vibe": "Design for humans, not for screens",
|
|
},
|
|
{
|
|
"id": "creative-director",
|
|
"name": "Creative Director",
|
|
"description": "Sets creative vision, ensures brand consistency, and maintains quality standards across all creative output.",
|
|
"category": "design",
|
|
"domains": ["creative-direction", "brand", "quality"],
|
|
"tags": ["creative", "vision", "brand"],
|
|
"emoji": "\u2728",
|
|
"color": "#8e44ad",
|
|
"vibe": "Every pixel tells a story",
|
|
},
|
|
|
|
# ── Testing ────────────────────────────────────────────────────
|
|
{
|
|
"id": "qa-engineer",
|
|
"name": "QA Engineer",
|
|
"description": "Tests software quality through manual and automated testing, bug tracking, and regression analysis.",
|
|
"category": "testing",
|
|
"domains": ["testing", "quality-assurance", "automation", "bugs"],
|
|
"tags": ["qa", "testing", "bugs"],
|
|
"emoji": "\U0001F41B",
|
|
"color": "#d35400",
|
|
"vibe": "Break it before users do",
|
|
"preferred_external_agent": "claude_code",
|
|
},
|
|
|
|
# ── Writing ────────────────────────────────────────────────────
|
|
{
|
|
"id": "copywriter",
|
|
"name": "Copywriter",
|
|
"description": "Crafts compelling copy, content strategy, messaging, and maintains consistent tone of voice.",
|
|
"category": "writing",
|
|
"domains": ["copywriting", "content-strategy", "messaging"],
|
|
"tags": ["writing", "content", "creative"],
|
|
"emoji": "\u270D\uFE0F",
|
|
"color": "#1abc9c",
|
|
"vibe": "Words that move people to action",
|
|
},
|
|
{
|
|
"id": "editor-in-chief",
|
|
"name": "Editor-in-Chief",
|
|
"description": "Manages editorial strategy, content calendar, quality standards, and publishing cadence.",
|
|
"category": "writing",
|
|
"domains": ["editorial", "content-calendar", "publishing"],
|
|
"tags": ["editorial", "publishing", "quality"],
|
|
"emoji": "\U0001F4F0",
|
|
"color": "#34495e",
|
|
"vibe": "Every word earns its place",
|
|
},
|
|
|
|
# ── Research ───────────────────────────────────────────────────
|
|
{
|
|
"id": "research-scientist",
|
|
"name": "Research Scientist",
|
|
"description": "Designs experiments, analyzes data, writes papers, and pushes the boundaries of knowledge.",
|
|
"category": "research",
|
|
"domains": ["experiment-design", "data-analysis", "paper-writing"],
|
|
"tags": ["research", "academic", "analysis"],
|
|
"emoji": "\U0001F52C",
|
|
"color": "#9b59b6",
|
|
"vibe": "Question everything, prove it twice",
|
|
},
|
|
{
|
|
"id": "data-engineer",
|
|
"name": "Data Engineer",
|
|
"description": "Builds data pipelines, manages infrastructure, and ensures data quality and reproducibility.",
|
|
"category": "data",
|
|
"domains": ["data-pipelines", "etl", "databases", "reproducibility"],
|
|
"tags": ["data", "pipelines", "infrastructure"],
|
|
"emoji": "\U0001F5C4\uFE0F",
|
|
"color": "#2c3e50",
|
|
"vibe": "Good data in, good decisions out",
|
|
"preferred_external_agent": "claude_code",
|
|
},
|
|
{
|
|
"id": "principal-investigator",
|
|
"name": "Principal Investigator",
|
|
"description": "Leads research direction, formulates hypotheses, oversees publications, and mentors researchers.",
|
|
"category": "research",
|
|
"domains": ["research-direction", "hypothesis", "publication"],
|
|
"tags": ["pi", "academic", "leadership"],
|
|
"emoji": "\U0001F393",
|
|
"color": "#7f8c8d",
|
|
"vibe": "See what others miss, ask what others won't",
|
|
},
|
|
|
|
# ── Marketing ──────────────────────────────────────────────────
|
|
{
|
|
"id": "seo-specialist",
|
|
"name": "SEO Specialist",
|
|
"description": "Performs keyword research, optimizes content for search engines, and tracks analytics metrics.",
|
|
"category": "marketing",
|
|
"domains": ["seo", "keyword-research", "analytics"],
|
|
"tags": ["seo", "marketing", "analytics"],
|
|
"emoji": "\U0001F50D",
|
|
"color": "#e67e22",
|
|
"vibe": "Be found before being searched",
|
|
},
|
|
{
|
|
"id": "social-media-manager",
|
|
"name": "Social Media Manager",
|
|
"description": "Manages social distribution, community engagement, cross-promotion, and audience growth.",
|
|
"category": "marketing",
|
|
"domains": ["social-media", "engagement", "distribution"],
|
|
"tags": ["social", "marketing", "community"],
|
|
"emoji": "\U0001F4E2",
|
|
"color": "#3498db",
|
|
"vibe": "Turn followers into advocates",
|
|
},
|
|
]
|
|
|
|
|
|
def get_all_talent_presets() -> list[dict[str, Any]]:
|
|
"""Return all built-in talent templates."""
|
|
return BUILTIN_TALENT_TEMPLATES
|
|
|
|
|
|
def get_talent_preset(template_id: str) -> dict[str, Any] | None:
|
|
"""Return a single built-in talent template by ID."""
|
|
for t in BUILTIN_TALENT_TEMPLATES:
|
|
if t["id"] == template_id:
|
|
return t
|
|
return None
|
|
|
|
|
|
def get_talent_categories() -> list[str]:
|
|
"""Return unique categories across all built-in talent templates."""
|
|
return sorted({t["category"] for t in BUILTIN_TALENT_TEMPLATES})
|