docs(milestone): complete v0.1-nextcraft-ui-prototype
---ci--- phase: 7 milestone: v0.1 status: complete requirements: covered: [REQ-001, REQ-002, REQ-003, REQ-004, REQ-005, REQ-006, REQ-007, REQ-008, REQ-009, REQ-010, REQ-011, REQ-012, REQ-013, REQ-014, REQ-015, REQ-016, REQ-017, REQ-018, REQ-019, REQ-020, REQ-021, REQ-022, REQ-023, REQ-024, REQ-025, REQ-026, REQ-027, REQ-028] partial: [] ---/ci--- Milestone v0.1 (nextcraft-ui-prototype) complete. Summary: - 7 phases (P0 pre-execution + P1-P6 execution + P7 final review) - 28 requirements covered (all complete) - 4 surfaces: Learner (7 pages), Marketplace (5), Employer Dashboard (4), Admin (4) - 19 routes, 104 TypeScript files - Shared component library (5 primitives + design tokens) - Mock data: 5 competency stacks (70 competencies), 20 jobs, 15 candidates, 10 employers - Tech: Next.js 15, Tailwind CSS v4, lucide-react, recharts, @xyflow/react, Inter font - Storybook with 6 stories - Dark mode, breadcrumbs, role switcher, responsive design - Build passes, typecheck passes, Storybook build passes Phases: P0 pre-execution → v0.0.1 P1 project-scaffolding → v0.0.2 P2 learner-surface → v0.0.3 P3 marketplace-surface → v0.0.4 P4 employer-dashboard → v0.0.5 P5 admin-surface → v0.0.6 P6 polish-integration → v0.0.7 P7 final-review-ship → v0.1.0 (milestone release)
This commit is contained in:
@@ -0,0 +1,470 @@
|
||||
/**
|
||||
* Nextcraft — Admin Surface Mock Data
|
||||
*
|
||||
* Mock data for the admin surface only: platform metrics, activity feed,
|
||||
* system health, learner roster (admin view), and marketplace moderation
|
||||
* queues. Pure prototype data — no backend, no business logic.
|
||||
*/
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Platform metrics (REQ-022)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export interface PlatformMetric {
|
||||
id: string;
|
||||
label: string;
|
||||
value: number;
|
||||
/** Rendered suffix (e.g. "%" or ""). */
|
||||
suffix: string;
|
||||
/** Trend vs previous period, in percentage points (signed). */
|
||||
trendPct: number;
|
||||
/** Lucide icon name (resolved by the page). */
|
||||
icon: string;
|
||||
/** Tailwind color token used for the icon chip. */
|
||||
tone: 'indigo' | 'emerald' | 'amber' | 'rose' | 'cyan' | 'violet';
|
||||
}
|
||||
|
||||
export const platformMetrics: PlatformMetric[] = [
|
||||
{
|
||||
id: 'metric-learners',
|
||||
label: 'Total Learners',
|
||||
value: 1247,
|
||||
suffix: '',
|
||||
trendPct: 4.2,
|
||||
icon: 'Users',
|
||||
tone: 'indigo',
|
||||
},
|
||||
{
|
||||
id: 'metric-employers',
|
||||
label: 'Total Employers',
|
||||
value: 89,
|
||||
suffix: '',
|
||||
trendPct: 1.8,
|
||||
icon: 'Building2',
|
||||
tone: 'emerald',
|
||||
},
|
||||
{
|
||||
id: 'metric-placements',
|
||||
label: 'Active Placements',
|
||||
value: 312,
|
||||
suffix: '',
|
||||
trendPct: 6.5,
|
||||
icon: 'Briefcase',
|
||||
tone: 'amber',
|
||||
},
|
||||
{
|
||||
id: 'metric-completion',
|
||||
label: 'Completion Rate',
|
||||
value: 38,
|
||||
suffix: '%',
|
||||
trendPct: 2.1,
|
||||
icon: 'GraduationCap',
|
||||
tone: 'violet',
|
||||
},
|
||||
{
|
||||
id: 'metric-nps',
|
||||
label: 'NPS Score',
|
||||
value: 47,
|
||||
suffix: '',
|
||||
trendPct: -1.2,
|
||||
icon: 'ThumbsUp',
|
||||
tone: 'cyan',
|
||||
},
|
||||
];
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Activity feed (REQ-022)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export interface ActivityEvent {
|
||||
id: string;
|
||||
message: string;
|
||||
/** Relative-time label shown to the user (kept static for the prototype). */
|
||||
relativeTime: string;
|
||||
/** Lucide icon name. */
|
||||
icon: string;
|
||||
/** Tailwind color token used for the icon chip. */
|
||||
tone: 'indigo' | 'emerald' | 'amber' | 'rose' | 'cyan' | 'violet';
|
||||
}
|
||||
|
||||
export const activityFeed: ActivityEvent[] = [
|
||||
{
|
||||
id: 'act-001',
|
||||
message: 'New learner registered: Sarah Chen joined AI Orchestration Engineer stack',
|
||||
relativeTime: '5 min ago',
|
||||
icon: 'UserPlus',
|
||||
tone: 'indigo',
|
||||
},
|
||||
{
|
||||
id: 'act-002',
|
||||
message: "Competency mastered: Marcus Lee completed 'Multi-Agent Communication'",
|
||||
relativeTime: '23 min ago',
|
||||
icon: 'CheckCircle',
|
||||
tone: 'emerald',
|
||||
},
|
||||
{
|
||||
id: 'act-003',
|
||||
message: "New job posted: OpenAI Labs posted 'Senior LLM Engineer'",
|
||||
relativeTime: '1 hour ago',
|
||||
icon: 'Briefcase',
|
||||
tone: 'amber',
|
||||
},
|
||||
{
|
||||
id: 'act-004',
|
||||
message: 'Placement recorded: Alex Rivera hired at Anthropic Research',
|
||||
relativeTime: '2 hours ago',
|
||||
icon: 'Award',
|
||||
tone: 'violet',
|
||||
},
|
||||
{
|
||||
id: 'act-005',
|
||||
message: 'Employer verified: Hugging Face completed identity verification',
|
||||
relativeTime: '3 hours ago',
|
||||
icon: 'ShieldCheck',
|
||||
tone: 'emerald',
|
||||
},
|
||||
{
|
||||
id: 'act-006',
|
||||
message: 'Microcredential issued: 5 learners earned RAG Pipeline Design credential',
|
||||
relativeTime: '5 hours ago',
|
||||
icon: 'GraduationCap',
|
||||
tone: 'cyan',
|
||||
},
|
||||
{
|
||||
id: 'act-007',
|
||||
message: "Oral defense completed: Jamie Park defended 'Agent Architecture Patterns'",
|
||||
relativeTime: '8 hours ago',
|
||||
icon: 'MessageSquare',
|
||||
tone: 'indigo',
|
||||
},
|
||||
{
|
||||
id: 'act-008',
|
||||
message: 'New enrollment spike: 23 new learners in Computational Sciences',
|
||||
relativeTime: '12 hours ago',
|
||||
icon: 'TrendingUp',
|
||||
tone: 'rose',
|
||||
},
|
||||
{
|
||||
id: 'act-009',
|
||||
message: "Competency published: 'Guardrails & Output Validation' added to AI Orchestration stack",
|
||||
relativeTime: '1 day ago',
|
||||
icon: 'BookOpen',
|
||||
tone: 'violet',
|
||||
},
|
||||
{
|
||||
id: 'act-010',
|
||||
message: 'Employer application submitted: Mistral AI requested marketplace access',
|
||||
relativeTime: '2 days ago',
|
||||
icon: 'Building2',
|
||||
tone: 'amber',
|
||||
},
|
||||
];
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// System health (REQ-022)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export type ServiceStatus = 'operational' | 'degraded' | 'down';
|
||||
|
||||
export interface ServiceHealth {
|
||||
id: string;
|
||||
name: string;
|
||||
status: ServiceStatus;
|
||||
}
|
||||
|
||||
export const serviceHealth: ServiceHealth[] = [
|
||||
{ id: 'svc-web', name: 'Web Server', status: 'operational' },
|
||||
{ id: 'svc-db', name: 'Database', status: 'operational' },
|
||||
{ id: 'svc-ai-tutor', name: 'AI Tutor Service', status: 'operational' },
|
||||
{ id: 'svc-assessment', name: 'Assessment Engine', status: 'degraded' },
|
||||
{ id: 'svc-jobs', name: 'Job Aggregation', status: 'operational' },
|
||||
{ id: 'svc-search', name: 'Search Service', status: 'operational' },
|
||||
];
|
||||
|
||||
/** 30-day uptime bars (mock percentages for the simple visual). */
|
||||
export const uptimeBars: number[] = [
|
||||
99.98, 99.99, 99.95, 99.97, 100.0, 99.91, 99.88, 99.97, 99.99, 99.96, 99.92,
|
||||
99.98, 99.99, 99.95, 100.0, 99.97, 99.93, 99.9, 99.96, 99.98, 99.99, 99.94,
|
||||
99.97, 99.96, 99.92, 99.99, 99.98, 99.95, 99.97, 99.96,
|
||||
];
|
||||
|
||||
export interface SystemStats {
|
||||
errorRate: string;
|
||||
avgResponseMs: number;
|
||||
}
|
||||
|
||||
export const systemStats: SystemStats = {
|
||||
errorRate: '0.02%',
|
||||
avgResponseMs: 142,
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Learner roster (admin view) (REQ-023)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export type LearnerStatus = 'active' | 'completed' | 'paused';
|
||||
|
||||
export interface AdminLearnerCompetency {
|
||||
id: string;
|
||||
name: string;
|
||||
status: 'mastered' | 'in_progress' | 'available' | 'locked';
|
||||
}
|
||||
|
||||
export interface AdminLearnerCredential {
|
||||
id: string;
|
||||
name: string;
|
||||
issuedAt: string;
|
||||
score: number;
|
||||
}
|
||||
|
||||
export interface AdminLearner {
|
||||
id: string;
|
||||
name: string;
|
||||
email: string;
|
||||
stackId: string;
|
||||
stackName: string;
|
||||
progressPct: number;
|
||||
masteredCount: number;
|
||||
totalCompetencies: number;
|
||||
status: LearnerStatus;
|
||||
joinedAt: string;
|
||||
competencies: AdminLearnerCompetency[];
|
||||
credentials: AdminLearnerCredential[];
|
||||
}
|
||||
|
||||
const STACKS = [
|
||||
{ id: 'stack-orchestration', name: 'AI Orchestration Engineer' },
|
||||
{ id: 'stack-safety', name: 'AI Safety & Governance Lead' },
|
||||
{ id: 'stack-designer', name: 'Human-AI Product Designer' },
|
||||
{ id: 'stack-operator', name: 'AI-Augmented Field Operator' },
|
||||
{ id: 'stack-science', name: 'Computational Sciences Practitioner' },
|
||||
];
|
||||
|
||||
const STACK_TOTALS: Record<string, number> = {
|
||||
'stack-orchestration': 15,
|
||||
'stack-safety': 14,
|
||||
'stack-designer': 13,
|
||||
'stack-operator': 12,
|
||||
'stack-science': 16,
|
||||
};
|
||||
|
||||
const COMP_NAME_BANK: Record<string, string[]> = {
|
||||
'stack-orchestration': [
|
||||
'Agent Architecture Patterns',
|
||||
'Multi-Agent Communication',
|
||||
'Tool Use & Function Calling',
|
||||
'Prompt Engineering Fundamentals',
|
||||
'RAG Pipeline Design',
|
||||
'Vector Databases & Embeddings',
|
||||
'LLM Evaluation & Metrics',
|
||||
'Guardrails & Output Validation',
|
||||
'Agent Memory Systems',
|
||||
'Workflow Orchestration',
|
||||
'Model Routing & Cascading',
|
||||
'Streaming & Incremental Output',
|
||||
'Observability for Agents',
|
||||
'Cost Optimization Strategies',
|
||||
'Production Deployment Patterns',
|
||||
],
|
||||
'stack-safety': [
|
||||
'Alignment Fundamentals',
|
||||
'Red Teaming Methodologies',
|
||||
'Model Card Authoring',
|
||||
'Bias Auditing',
|
||||
'AI Policy Frameworks',
|
||||
'Risk Taxonomy & Classification',
|
||||
'Interpretability Techniques',
|
||||
'Incident Response for AI',
|
||||
'Data Provenance & Lineage',
|
||||
'Jailbreak & Prompt Injection Defense',
|
||||
'Model Monitoring in Production',
|
||||
'Privacy-Preserving ML',
|
||||
'Governance Documentation',
|
||||
'Stakeholder Communication',
|
||||
],
|
||||
'stack-designer': [
|
||||
'Agentic Interaction Patterns',
|
||||
'Conversational UX',
|
||||
'AI Transparency Patterns',
|
||||
'Human-in-the-Loop Design',
|
||||
'Prompt UX',
|
||||
'Failure & Fallback Design',
|
||||
'Multimodal Interface Design',
|
||||
'Trust & Calibration',
|
||||
'Accessibility for AI Interfaces',
|
||||
'Persona & Tone Systems',
|
||||
'Evaluation of AI UX',
|
||||
'Onboarding to Agentic Systems',
|
||||
'AI Ethics in Product Design',
|
||||
],
|
||||
'stack-operator': [
|
||||
'AI Co-Pilot Operation',
|
||||
'Robotics Safety Protocols',
|
||||
'Predictive Maintenance Alerts',
|
||||
'Computer Vision Inspection',
|
||||
'Sensor Data Interpretation',
|
||||
'Digital Twin Fundamentals',
|
||||
'Augmented Reality Overlays',
|
||||
'Edge Model Deployment',
|
||||
'Calibration & Drift Correction',
|
||||
'Field Data Collection',
|
||||
'Autonomous System Supervision',
|
||||
'Safety-Critical Decision Making',
|
||||
],
|
||||
'stack-science': [
|
||||
'Scientific Computing with Python',
|
||||
'ML for Scientific Discovery',
|
||||
'Molecular & Materials Simulation',
|
||||
'Climate Modeling Fundamentals',
|
||||
'Bioinformatics Pipelines',
|
||||
'High-Performance Computing',
|
||||
'Scientific Data Visualization',
|
||||
'Reproducible Research Practices',
|
||||
'Statistical Inference',
|
||||
'Physics-Informed Neural Networks',
|
||||
'Generative Models for Science',
|
||||
'Causal Inference Methods',
|
||||
'Experiment Design',
|
||||
'Data Assimilation',
|
||||
'Scientific Writing with AI',
|
||||
'Open Science & FAIR Data',
|
||||
],
|
||||
};
|
||||
|
||||
function buildCompetencies(
|
||||
stackId: string,
|
||||
mastered: number,
|
||||
inProgress: number,
|
||||
): AdminLearnerCompetency[] {
|
||||
const names = COMP_NAME_BANK[stackId] ?? [];
|
||||
const out: AdminLearnerCompetency[] = names.map((name, i) => {
|
||||
let status: AdminLearnerCompetency['status'] = 'locked';
|
||||
if (i < mastered) status = 'mastered';
|
||||
else if (i < mastered + inProgress) status = 'in_progress';
|
||||
else if (i < mastered + inProgress + 3) status = 'available';
|
||||
return { id: `${stackId}-c${i.toString().padStart(3, '0')}`, name, status };
|
||||
});
|
||||
return out;
|
||||
}
|
||||
|
||||
function buildCredentials(
|
||||
stackId: string,
|
||||
mastered: number,
|
||||
): AdminLearnerCredential[] {
|
||||
const names = COMP_NAME_BANK[stackId] ?? [];
|
||||
const count = Math.min(mastered, 6);
|
||||
const out: AdminLearnerCredential[] = [];
|
||||
for (let i = 0; i < count; i++) {
|
||||
out.push({
|
||||
id: `mc-${stackId}-${i}`,
|
||||
name: names[i] ?? `Competency ${i + 1}`,
|
||||
issuedAt: `2026-0${(i % 8) + 1}-${((i * 4) % 27 + 1).toString().padStart(2, '0')}T10:00:00Z`,
|
||||
score: 80 + ((i * 7) % 18),
|
||||
});
|
||||
}
|
||||
return out;
|
||||
}
|
||||
|
||||
interface RosterSeed {
|
||||
name: string;
|
||||
email: string;
|
||||
stackIdx: number;
|
||||
mastered: number;
|
||||
inProgress: number;
|
||||
status: LearnerStatus;
|
||||
joinedAt: string;
|
||||
}
|
||||
|
||||
const ROSTER_SEEDS: RosterSeed[] = [
|
||||
{ name: 'Sarah Chen', email: 'sarah.chen@example.com', stackIdx: 0, mastered: 9, inProgress: 2, status: 'active', joinedAt: '2026-05-12T09:00:00Z' },
|
||||
{ name: 'Marcus Lee', email: 'marcus.lee@example.com', stackIdx: 0, mastered: 14, inProgress: 1, status: 'active', joinedAt: '2026-02-03T09:00:00Z' },
|
||||
{ name: 'Jamie Park', email: 'jamie.park@example.com', stackIdx: 0, mastered: 15, inProgress: 0, status: 'completed', joinedAt: '2025-12-01T09:00:00Z' },
|
||||
{ name: 'Alex Rivera', email: 'alex.rivera@example.com', stackIdx: 1, mastered: 10, inProgress: 2, status: 'active', joinedAt: '2026-04-18T09:00:00Z' },
|
||||
{ name: 'Priya Sharma', email: 'priya.sharma@example.com', stackIdx: 1, mastered: 5, inProgress: 3, status: 'active', joinedAt: '2026-06-22T09:00:00Z' },
|
||||
{ name: 'Diego Morales', email: 'diego.morales@example.com', stackIdx: 1, mastered: 14, inProgress: 0, status: 'completed', joinedAt: '2025-11-10T09:00:00Z' },
|
||||
{ name: 'Riley Thompson', email: 'riley.thompson@example.com', stackIdx: 2, mastered: 7, inProgress: 2, status: 'active', joinedAt: '2026-07-01T09:00:00Z' },
|
||||
{ name: 'Maya Patel', email: 'maya.patel@example.com', stackIdx: 2, mastered: 3, inProgress: 1, status: 'paused', joinedAt: '2026-08-15T09:00:00Z' },
|
||||
{ name: 'Jordan Kim', email: 'jordan.kim@example.com', stackIdx: 2, mastered: 13, inProgress: 0, status: 'completed', joinedAt: '2026-01-20T09:00:00Z' },
|
||||
{ name: 'Sam Wilson', email: 'sam.wilson@example.com', stackIdx: 3, mastered: 4, inProgress: 2, status: 'active', joinedAt: '2026-08-02T09:00:00Z' },
|
||||
{ name: 'Taylor Brooks', email: 'taylor.brooks@example.com', stackIdx: 3, mastered: 12, inProgress: 0, status: 'completed', joinedAt: '2026-01-05T09:00:00Z' },
|
||||
{ name: 'Casey Nguyen', email: 'casey.nguyen@example.com', stackIdx: 4, mastered: 8, inProgress: 3, status: 'active', joinedAt: '2026-03-30T09:00:00Z' },
|
||||
{ name: 'Morgan Davis', email: 'morgan.davis@example.com', stackIdx: 4, mastered: 16, inProgress: 0, status: 'completed', joinedAt: '2025-10-14T09:00:00Z' },
|
||||
{ name: 'Avery Garcia', email: 'avery.garcia@example.com', stackIdx: 4, mastered: 2, inProgress: 1, status: 'paused', joinedAt: '2026-08-28T09:00:00Z' },
|
||||
{ name: 'Quinn Foster', email: 'quinn.foster@example.com', stackIdx: 0, mastered: 6, inProgress: 3, status: 'active', joinedAt: '2026-07-19T09:00:00Z' },
|
||||
];
|
||||
|
||||
export const adminLearners: AdminLearner[] = ROSTER_SEEDS.map((seed, i) => {
|
||||
const stack = STACKS[seed.stackIdx];
|
||||
const total = STACK_TOTALS[stack.id];
|
||||
const competencies = buildCompetencies(stack.id, seed.mastered, seed.inProgress);
|
||||
const credentials = buildCredentials(stack.id, seed.mastered);
|
||||
const progressPct = Math.round((seed.mastered / total) * 100);
|
||||
return {
|
||||
id: `adm-lrn-${(i + 1).toString().padStart(3, '0')}`,
|
||||
name: seed.name,
|
||||
email: seed.email,
|
||||
stackId: stack.id,
|
||||
stackName: stack.name,
|
||||
progressPct,
|
||||
masteredCount: seed.mastered,
|
||||
totalCompetencies: total,
|
||||
status: seed.status,
|
||||
joinedAt: seed.joinedAt,
|
||||
competencies,
|
||||
credentials,
|
||||
};
|
||||
});
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Marketplace moderation queues (REQ-025)
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export interface JobReviewItem {
|
||||
id: string;
|
||||
title: string;
|
||||
employerName: string;
|
||||
submittedAt: string;
|
||||
stackName: string;
|
||||
location: string;
|
||||
}
|
||||
|
||||
export const jobReviewQueue: JobReviewItem[] = [
|
||||
{ id: 'rev-001', title: 'Senior LLM Engineer', employerName: 'OpenAI Labs', submittedAt: '2026-09-08T14:00:00Z', stackName: 'AI Orchestration Engineer', location: 'San Francisco, CA (Remote)' },
|
||||
{ id: 'rev-002', title: 'AI Safety Auditor', employerName: 'Anthropic Research', submittedAt: '2026-09-09T11:30:00Z', stackName: 'AI Safety & Governance Lead', location: 'San Francisco, CA' },
|
||||
{ id: 'rev-003', title: 'Agentic UX Designer', employerName: 'Hugging Face', submittedAt: '2026-09-09T16:45:00Z', stackName: 'Human-AI Product Designer', location: 'Remote' },
|
||||
{ id: 'rev-004', title: 'Field Robotics Lead', employerName: 'Boston Dynamics', submittedAt: '2026-09-10T08:15:00Z', stackName: 'AI-Augmented Field Operator', location: 'Waltham, MA' },
|
||||
{ id: 'rev-005', title: 'Climate ML Researcher', employerName: 'DeepMind', submittedAt: '2026-09-10T10:00:00Z', stackName: 'Computational Sciences Practitioner', location: 'London (Remote)' },
|
||||
];
|
||||
|
||||
export interface EmployerVerificationItem {
|
||||
id: string;
|
||||
name: string;
|
||||
logoInitials: string;
|
||||
industry: string;
|
||||
submittedAt: string;
|
||||
location: string;
|
||||
}
|
||||
|
||||
export const employerVerificationQueue: EmployerVerificationItem[] = [
|
||||
{ id: 'ver-001', name: 'Mistral AI', logoInitials: 'MA', industry: 'Artificial Intelligence', submittedAt: '2026-09-07T09:00:00Z', location: 'Paris, France' },
|
||||
{ id: 'ver-002', name: 'Cohere', logoInitials: 'CO', industry: 'Language Models', submittedAt: '2026-09-08T13:20:00Z', location: 'Toronto, Canada' },
|
||||
{ id: 'ver-003', name: 'Scale AI', logoInitials: 'SA', industry: 'Data & Annotation', submittedAt: '2026-09-09T17:00:00Z', location: 'San Francisco, CA' },
|
||||
];
|
||||
|
||||
export type FlaggedContentType = 'Job Posting' | 'Review' | 'Employer Profile';
|
||||
|
||||
export interface FlaggedContentItem {
|
||||
id: string;
|
||||
contentType: FlaggedContentType;
|
||||
title: string;
|
||||
flaggedBy: string;
|
||||
reason: string;
|
||||
flaggedAt: string;
|
||||
}
|
||||
|
||||
export const flaggedContentQueue: FlaggedContentItem[] = [
|
||||
{ id: 'flag-001', contentType: 'Job Posting', title: 'Junior Prompt Engineer', flaggedBy: 'Automated filter', reason: 'Suspicious salary range', flaggedAt: '2026-09-09T12:00:00Z' },
|
||||
{ id: 'flag-002', contentType: 'Review', title: 'Anonymous review on OpenAI Labs', flaggedBy: 'User report', reason: 'Inappropriate language', flaggedAt: '2026-09-09T18:30:00Z' },
|
||||
{ id: 'flag-003', contentType: 'Employer Profile', title: 'Stealth Startup 42', flaggedBy: 'Moderator', reason: 'Unverified contact info', flaggedAt: '2026-09-10T07:45:00Z' },
|
||||
{ id: 'flag-004', contentType: 'Job Posting', title: 'ML Internship', flaggedBy: 'Automated filter', reason: 'Missing required fields', flaggedAt: '2026-09-10T09:15:00Z' },
|
||||
];
|
||||
@@ -0,0 +1,112 @@
|
||||
/**
|
||||
* Pre-scripted AI tutor responses for the prototype.
|
||||
* Each pair has a Coach (motivational, pacing) and Tutor (concept, Socratic)
|
||||
* variant keyed by intent.
|
||||
*/
|
||||
|
||||
export interface TutorResponse {
|
||||
id: string;
|
||||
intent: string;
|
||||
agent: 'coach' | 'tutor';
|
||||
message: string;
|
||||
suggestedActions?: string[];
|
||||
}
|
||||
|
||||
export const aiTutorResponses: TutorResponse[] = [
|
||||
{
|
||||
id: 'resp-001',
|
||||
intent: 'stuck-on-concept',
|
||||
agent: 'coach',
|
||||
message:
|
||||
"I can see you've hit a wall on RAG Pipeline Design — that's the most common sticking point in this stack. Take a 5-minute break, then come back and let's try a smaller chunk. You've already mastered Tool Use, so the retrieval pieces will click faster than you expect.",
|
||||
suggestedActions: ['Take a break', 'Review a worked example', 'Break it into smaller steps'],
|
||||
},
|
||||
{
|
||||
id: 'resp-002',
|
||||
intent: 'stuck-on-concept',
|
||||
agent: 'tutor',
|
||||
message:
|
||||
"Let's build intuition first. RAG is a two-stage retrieval pipeline: (1) given a query, find the most relevant passages from a corpus, and (2) feed those passages into the model as context so its answer is grounded. Socratic question: why might a lexical search (like BM25) struggle with a query phrased very differently from the document text?",
|
||||
suggestedActions: ['Show me a worked example', 'Compare BM25 vs embeddings', 'Try a practice problem'],
|
||||
},
|
||||
{
|
||||
id: 'resp-003',
|
||||
intent: 'request-pacing',
|
||||
agent: 'coach',
|
||||
message:
|
||||
"You're 62% through the AI Orchestration stack and ahead of your original pace by nine days. Your next two defenses are scheduled in 11 days. I recommend a 3-day sprint on Multi-Agent Communication, then one light day before the defense prep.",
|
||||
suggestedActions: ['Show my weekly plan', 'Schedule a lighter day', 'Adjust pace'],
|
||||
},
|
||||
{
|
||||
id: 'resp-004',
|
||||
intent: 'request-pacing',
|
||||
agent: 'tutor',
|
||||
message:
|
||||
'Here is a suggested sequence: complete the Multi-Agent Communication module in 3 sessions of 45 minutes, then the Memory Systems primer in 2 sessions. After that, one full session for defense rehearsal. This matches the cognitive load profile of learners who succeeded before you.',
|
||||
suggestedActions: ['Lock in this plan', 'Adjust session length', 'See alternatives'],
|
||||
},
|
||||
{
|
||||
id: 'resp-005',
|
||||
intent: 'celebrate-milestone',
|
||||
agent: 'coach',
|
||||
message:
|
||||
"Huge milestone — you just earned your Tool Use & Function Calling microcredential with a 91. That's above the cohort median. You now have three of the five core orchestration credentials. Two more and you qualify for the stack endorsement.",
|
||||
suggestedActions: ['See path to endorsement', 'Share with employer partners', 'Pick the next competency'],
|
||||
},
|
||||
{
|
||||
id: 'resp-006',
|
||||
intent: 'celebrate-milestone',
|
||||
agent: 'tutor',
|
||||
message:
|
||||
'Your artifact for this competency showed clean handling of structured outputs and graceful fallback when the model returned malformed JSON. For your next competency, I recommend exploring how tool-use composes with multi-agent communication — that will set you up for the stack endorsement.',
|
||||
suggestedActions: ['Start Multi-Agent Communication', 'Review a harder artifact example', 'Read a case study'],
|
||||
},
|
||||
{
|
||||
id: 'resp-007',
|
||||
intent: 'explain-socratic',
|
||||
agent: 'tutor',
|
||||
message:
|
||||
"Think about agent memory as three layers: short-term context (the current conversation window), episodic memory (records of past agent runs you can replay), and long-term semantic memory (consolidated knowledge you distill over time). Question: if an agent handles 10,000 sessions a day, which layer would you consolidate into long-term memory, and how often?",
|
||||
suggestedActions: ['I have an answer', 'Give me a hint', 'Show a worked example'],
|
||||
},
|
||||
{
|
||||
id: 'resp-008',
|
||||
intent: 'defense-prep',
|
||||
agent: 'coach',
|
||||
message:
|
||||
"Your oral defense for Multi-Agent Communication is in 11 days. You are well prepared — your process trace shows 14 distinct practice runs. Let's spend one session rehearsing the edge-case questions, then a mock defense with me acting as the panel.",
|
||||
suggestedActions: ['Start mock defense', 'Review edge-case questions', 'See my process trace'],
|
||||
},
|
||||
{
|
||||
id: 'resp-009',
|
||||
intent: 'defense-prep',
|
||||
agent: 'tutor',
|
||||
message:
|
||||
"In a defense you'll be asked to explain your design trade-offs, not just your code. Be ready to answer: why did you choose a blackboard architecture over direct message passing? What failure mode did you observe under load, and how did you mitigate it? Let's rehearse one question now.",
|
||||
suggestedActions: ['Rehearse question 1', 'Rehearse question 2', 'See scoring rubric'],
|
||||
},
|
||||
{
|
||||
id: 'resp-010',
|
||||
intent: 'career-guidance',
|
||||
agent: 'coach',
|
||||
message:
|
||||
"Based on your competencies and artifacts, you match strongly to AI Orchestration Engineer roles (96%) and Agent Reliability Engineer roles (90%). Two employers are actively hiring for these profiles. Want me to show you the matching jobs and the remaining competencies they require?",
|
||||
suggestedActions: ['Show matching jobs', 'See competency gaps', 'Build a targeted plan'],
|
||||
},
|
||||
{
|
||||
id: 'resp-011',
|
||||
intent: 'career-guidance',
|
||||
agent: 'tutor',
|
||||
message:
|
||||
'Your portfolio demonstrates multi-agent systems and evaluation, which are the two most-cited skills in senior orchestration postings. The gap to a Staff-level role is observability and cost optimization. I recommend the Agent Reliability Engineer competencies as your next sprint.',
|
||||
suggestedActions: ['Start reliability sprint', 'See a staff-level job', 'Compare skill gaps'],
|
||||
},
|
||||
{
|
||||
id: 'resp-012',
|
||||
intent: 'check-understanding',
|
||||
agent: 'tutor',
|
||||
message:
|
||||
'Quick check: in a plan-and-execute agent, what is the advantage of re-planning after each tool call rather than executing the full plan from the start? Take your time — there is no penalty for thinking.',
|
||||
suggestedActions: ['I have an answer', 'Give me a hint', 'Skip this check'],
|
||||
},
|
||||
];
|
||||
@@ -0,0 +1,184 @@
|
||||
import type { Candidate } from '@nextcraft/types';
|
||||
|
||||
export const candidates: Candidate[] = [
|
||||
{
|
||||
id: 'cand-001',
|
||||
name: 'Maya Okonkwo',
|
||||
avatar: 'https://i.pravatar.cc/150?img=1',
|
||||
headline: 'AI Orchestration Engineer · Multi-agent systems, RAG, evaluation',
|
||||
competencyStackId: 'stack-orchestration',
|
||||
microcredentials: 11,
|
||||
artifactCount: 12,
|
||||
defenseScore: 92,
|
||||
matchScore: 96,
|
||||
bio: 'Shipped two production agent systems handling 4M+ queries/week. Evidence portfolio includes a multi-agent research assistant with full eval harness.',
|
||||
},
|
||||
{
|
||||
id: 'cand-002',
|
||||
name: 'Devon Park',
|
||||
avatar: 'https://i.pravatar.cc/150?img=2',
|
||||
headline: 'AI Safety Researcher · Alignment, red teaming, interpretability',
|
||||
competencyStackId: 'stack-safety',
|
||||
microcredentials: 10,
|
||||
artifactCount: 9,
|
||||
defenseScore: 90,
|
||||
matchScore: 91,
|
||||
bio: 'Published two workshop papers on jailbreak robustness. Runs an automated red-team suite with 1,200+ probes across three model families.',
|
||||
},
|
||||
{
|
||||
id: 'cand-003',
|
||||
name: 'Priya Iyer',
|
||||
avatar: 'https://i.pravatar.cc/150?img=3',
|
||||
headline: 'Human-AI Product Designer · Agentic UX, trust calibration',
|
||||
competencyStackId: 'stack-designer',
|
||||
microcredentials: 9,
|
||||
artifactCount: 11,
|
||||
defenseScore: 88,
|
||||
matchScore: 89,
|
||||
bio: 'Designed the transparency system for an assistant with 2M MAU. Portfolio includes a full human-in-the-loop review pattern library.',
|
||||
},
|
||||
{
|
||||
id: 'cand-004',
|
||||
name: 'Tomás Vega',
|
||||
avatar: 'https://i.pravatar.cc/150?img=4',
|
||||
headline: 'LLM Application Developer · RAG, function calling, streaming',
|
||||
competencyStackId: 'stack-orchestration',
|
||||
microcredentials: 12,
|
||||
artifactCount: 10,
|
||||
defenseScore: 87,
|
||||
matchScore: 93,
|
||||
bio: 'Built a document-grounded Q&A product from zero to 50K daily actives. Specializes in retrieval quality and output validation.',
|
||||
},
|
||||
{
|
||||
id: 'cand-005',
|
||||
name: 'Hana Lindqvist',
|
||||
avatar: 'https://i.pravatar.cc/150?img=5',
|
||||
headline: 'Computational Biologist · Drug discovery, ML pipelines',
|
||||
competencyStackId: 'stack-science',
|
||||
microcredentials: 13,
|
||||
artifactCount: 8,
|
||||
defenseScore: 91,
|
||||
matchScore: 88,
|
||||
bio: 'Active-learning pipeline nominated for a phenotype-prediction benchmark. Reproducible workflows with Snakemake and containerized HPC jobs.',
|
||||
},
|
||||
{
|
||||
id: 'cand-006',
|
||||
name: 'Marcus Bell',
|
||||
avatar: 'https://i.pravatar.cc/150?img=6',
|
||||
headline: 'Robotics Operations Specialist · Vision systems, field AI',
|
||||
competencyStackId: 'stack-operator',
|
||||
microcredentials: 8,
|
||||
artifactCount: 7,
|
||||
defenseScore: 84,
|
||||
matchScore: 78,
|
||||
bio: 'Five years on a warehouse robotics fleet. Built an anomaly-triage dashboard that cut false-positive escalations by 40%.',
|
||||
},
|
||||
{
|
||||
id: 'cand-007',
|
||||
name: 'Sofia Marchetti',
|
||||
avatar: 'https://i.pravatar.cc/150?img=7',
|
||||
headline: 'AI Governance Lead · NIST AI RMF, audit, model cards',
|
||||
competencyStackId: 'stack-safety',
|
||||
microcredentials: 11,
|
||||
artifactCount: 6,
|
||||
defenseScore: 89,
|
||||
matchScore: 85,
|
||||
bio: 'Stood up AI governance at a 5,000-person org. Authored 14 model cards and a risk register covering 30+ deployed systems.',
|
||||
},
|
||||
{
|
||||
id: 'cand-008',
|
||||
name: 'Liam Chen',
|
||||
avatar: 'https://i.pravatar.cc/150?img=8',
|
||||
headline: 'Agent Reliability Engineer · Observability, tracing, SRE',
|
||||
competencyStackId: 'stack-orchestration',
|
||||
microcredentials: 10,
|
||||
artifactCount: 9,
|
||||
defenseScore: 86,
|
||||
matchScore: 90,
|
||||
bio: 'Owns tracing for an agent platform serving 200+ internal teams. Built a token-cost alerting system that saved $1.2M/year.',
|
||||
},
|
||||
{
|
||||
id: 'cand-009',
|
||||
name: 'Amara Diallo',
|
||||
avatar: 'https://i.pravatar.cc/150?img=9',
|
||||
headline: 'Climate ML Scientist · Forecasting, data assimilation, PINNs',
|
||||
competencyStackId: 'stack-science',
|
||||
microcredentials: 12,
|
||||
artifactCount: 8,
|
||||
defenseScore: 90,
|
||||
matchScore: 84,
|
||||
bio: 'Downscaled GCM output for a regional energy grid operator. Physics-informed model improved 72-hour wind forecasts by 18%.',
|
||||
},
|
||||
{
|
||||
id: 'cand-010',
|
||||
name: 'Ethan Whitfield',
|
||||
avatar: 'https://i.pravatar.cc/150?img=10',
|
||||
headline: 'AI Product Manager · Roadmapping, AI UX, metrics',
|
||||
competencyStackId: 'stack-designer',
|
||||
microcredentials: 9,
|
||||
artifactCount: 5,
|
||||
defenseScore: 82,
|
||||
matchScore: 80,
|
||||
bio: 'Shipped an agentic coding assistant to 30K developers. Defined the success metrics and evaluation framework for the v1 launch.',
|
||||
},
|
||||
{
|
||||
id: 'cand-011',
|
||||
name: 'Yuki Tanaka',
|
||||
avatar: 'https://i.pravatar.cc/150?img=11',
|
||||
headline: 'Evaluation Engineer · LLM-as-judge, regression suites',
|
||||
competencyStackId: 'stack-orchestration',
|
||||
microcredentials: 10,
|
||||
artifactCount: 8,
|
||||
defenseScore: 85,
|
||||
matchScore: 86,
|
||||
bio: 'Built an eval platform that runs 50K+ judged samples per model release. Calibrated LLM-as-judge against human panels to 0.87 agreement.',
|
||||
},
|
||||
{
|
||||
id: 'cand-012',
|
||||
name: 'Olu Adeyemi',
|
||||
avatar: 'https://i.pravatar.cc/150?img=12',
|
||||
headline: 'Conversation Designer · Dialogue flows, persona systems',
|
||||
competencyStackId: 'stack-designer',
|
||||
microcredentials: 8,
|
||||
artifactCount: 7,
|
||||
defenseScore: 83,
|
||||
matchScore: 77,
|
||||
bio: 'Designed repair flows that reduced user frustration escalations by 35%. Authored a persona consistency framework now used company-wide.',
|
||||
},
|
||||
{
|
||||
id: 'cand-013',
|
||||
name: 'Nadia Petrova',
|
||||
avatar: 'https://i.pravatar.cc/150?img=13',
|
||||
headline: 'Materials ML Engineer · Property prediction, active learning',
|
||||
competencyStackId: 'stack-science',
|
||||
microcredentials: 11,
|
||||
artifactCount: 9,
|
||||
defenseScore: 88,
|
||||
matchScore: 82,
|
||||
bio: 'Active-learning loop identified three experimentally-validated novel alloys. Maintains an open-source DFT active-learning toolkit.',
|
||||
},
|
||||
{
|
||||
id: 'cand-014',
|
||||
name: 'Rafael Costa',
|
||||
avatar: 'https://i.pravatar.cc/150?img=14',
|
||||
headline: 'Edge AI Engineer · Quantization, TensorRT, field deployment',
|
||||
competencyStackId: 'stack-operator',
|
||||
microcredentials: 9,
|
||||
artifactCount: 8,
|
||||
defenseScore: 84,
|
||||
matchScore: 83,
|
||||
bio: 'Quantized a vision model from 240MB to 11MB with <1% accuracy loss. Deployed to 3,000+ edge devices with OTA model updates.',
|
||||
},
|
||||
{
|
||||
id: 'cand-015',
|
||||
name: 'Ingrid Solberg',
|
||||
avatar: 'https://i.pravatar.cc/150?img=15',
|
||||
headline: 'AI Red Team Lead · Adversarial testing, disclosure, policy',
|
||||
competencyStackId: 'stack-safety',
|
||||
microcredentials: 10,
|
||||
artifactCount: 7,
|
||||
defenseScore: 87,
|
||||
matchScore: 88,
|
||||
bio: 'Led red-teaming for two frontier model releases. Coordinated three coordinated disclosures with partner labs.',
|
||||
},
|
||||
];
|
||||
@@ -0,0 +1,167 @@
|
||||
import type { CompetencyStack, Competency } from '@nextcraft/types';
|
||||
|
||||
let idCounter = 0;
|
||||
const cid = (prefix: string) => `${prefix}-c${(++idCounter).toString().padStart(3, '0')}`;
|
||||
|
||||
function makeCompetency(
|
||||
stackId: string,
|
||||
name: string,
|
||||
description: string,
|
||||
status: Competency['status'],
|
||||
prerequisites: string[] = [],
|
||||
): Competency {
|
||||
return {
|
||||
id: cid(stackId),
|
||||
name,
|
||||
description,
|
||||
status,
|
||||
stackId,
|
||||
prerequisites,
|
||||
microcredentialId: status === 'mastered' ? `mc-${cid(stackId)}` : null,
|
||||
};
|
||||
}
|
||||
|
||||
// --- Stack 1: AI Orchestration Engineer (15 competencies) ---
|
||||
const orchestrationComps: Competency[] = [
|
||||
makeCompetency('stack-orchestration', 'Agent Architecture Patterns', 'ReAct, plan-and-execute, reflexion, and reflexion-based agent topologies.', 'mastered'),
|
||||
makeCompetency('stack-orchestration', 'Multi-Agent Communication', 'Message passing, shared memory blackboards, and inter-agent protocol design.', 'in_progress', ['stack-orchestration-c001']),
|
||||
makeCompetency('stack-orchestration', 'Tool Use & Function Calling', 'Defining tool schemas, binding tools to models, and handling structured outputs.', 'mastered'),
|
||||
makeCompetency('stack-orchestration', 'Prompt Engineering Fundamentals', 'Few-shot, chain-of-thought, and instruction tuning for reliable model behavior.', 'mastered'),
|
||||
makeCompetency('stack-orchestration', 'RAG Pipeline Design', 'Chunking strategies, hybrid retrieval, reranking, and context window management.', 'in_progress'),
|
||||
makeCompetency('stack-orchestration', 'Vector Databases & Embeddings', 'Embedding model selection, indexing (HNSW, IVF), and metadata filtering.', 'available', ['stack-orchestration-c005']),
|
||||
makeCompetency('stack-orchestration', 'LLM Evaluation & Metrics', 'LLM-as-judge, human eval panels, regression suites, and drift detection.', 'available'),
|
||||
makeCompetency('stack-orchestration', 'Guardrails & Output Validation', 'Schema validation, safety classifiers, and fallback response strategies.', 'available', ['stack-orchestration-c003']),
|
||||
makeCompetency('stack-orchestration', 'Agent Memory Systems', 'Short-term context, episodic memory, and long-term knowledge consolidation.', 'locked', ['stack-orchestration-c002', 'stack-orchestration-c006']),
|
||||
makeCompetency('stack-orchestration', 'Workflow Orchestration', 'DAG-based pipelines, conditional branching, and human-in-the-loop checkpoints.', 'locked', ['stack-orchestration-c001']),
|
||||
makeCompetency('stack-orchestration', 'Model Routing & Cascading', 'Cost-aware routing, small-to-large cascades, and fallback model strategies.', 'locked', ['stack-orchestration-c008']),
|
||||
makeCompetency('stack-orchestration', 'Streaming & Incremental Output', 'Token streaming, partial JSON parsing, and progressive UI rendering.', 'available'),
|
||||
makeCompetency('stack-orchestration', 'Observability for Agents', 'Tracing spans, token cost tracking, and latency profiling across agent calls.', 'available'),
|
||||
makeCompetency('stack-orchestration', 'Cost Optimization Strategies', 'Caching, prompt compression, and batch inference for production cost control.', 'locked', ['stack-orchestration-c011']),
|
||||
makeCompetency('stack-orchestration', 'Production Deployment Patterns', 'Blue-green deploys, shadow traffic, and rollback for agent workloads.', 'locked', ['stack-orchestration-c010']),
|
||||
];
|
||||
|
||||
// --- Stack 2: AI Safety & Governance Lead (14 competencies) ---
|
||||
const safetyComps: Competency[] = [
|
||||
makeCompetency('stack-safety', 'Alignment Fundamentals', 'RLHF, DPO, and constitutional AI approaches to value alignment.', 'in_progress'),
|
||||
makeCompetency('stack-safety', 'Red Teaming Methodologies', 'Adversarial prompting, automated red-team suites, and vulnerability disclosure.', 'available'),
|
||||
makeCompetency('stack-safety', 'Model Card Authoring', 'Documenting capabilities, limitations, intended use, and known failure modes.', 'mastered'),
|
||||
makeCompetency('stack-safety', 'Bias Auditing', 'Disparate impact testing across demographics and protected attributes.', 'in_progress', ['stack-safety-c003']),
|
||||
makeCompetency('stack-safety', 'AI Policy Frameworks', 'NIST AI RMF, EU AI Act, and ISO/IEC 42001 compliance mapping.', 'available'),
|
||||
makeCompetency('stack-safety', 'Risk Taxonomy & Classification', 'Harm severity scales, likelihood scoring, and risk register maintenance.', 'available', ['stack-safety-c005']),
|
||||
makeCompetency('stack-safety', 'Interpretability Techniques', 'Attention probing, activation patching, and circuit analysis.', 'locked', ['stack-safety-c001']),
|
||||
makeCompetency('stack-safety', 'Incident Response for AI', 'Detection, containment, root-cause analysis, and postmortem for AI failures.', 'locked', ['stack-safety-c006']),
|
||||
makeCompetency('stack-safety', 'Data Provenance & Lineage', 'Training data tracking, consent management, and deletion workflows.', 'available'),
|
||||
makeCompetency('stack-safety', 'Jailbreak & Prompt Injection Defense', 'Input sanitization, instruction hierarchy, and indirect injection mitigation.', 'available', ['stack-safety-c002']),
|
||||
makeCompetency('stack-safety', 'Model Monitoring in Production', 'Drift detection, output distribution tracking, and alerting thresholds.', 'locked', ['stack-safety-c008']),
|
||||
makeCompetency('stack-safety', 'Privacy-Preserving ML', 'Differential privacy, federated learning, and synthetic data generation.', 'locked', ['stack-safety-c009']),
|
||||
makeCompetency('stack-safety', 'Governance Documentation', 'Audit trails, decision logs, and accountability matrices for AI systems.', 'available'),
|
||||
makeCompetency('stack-safety', 'Stakeholder Communication', 'Translating technical risk findings for executives, regulators, and users.', 'available', ['stack-safety-c013']),
|
||||
];
|
||||
|
||||
// --- Stack 3: Human-AI Product Designer (13 competencies) ---
|
||||
const designerComps: Competency[] = [
|
||||
makeCompetency('stack-designer', 'Agentic Interaction Patterns', 'Designing for delegating, interrupting, and reviewing autonomous agents.', 'in_progress'),
|
||||
makeCompetency('stack-designer', 'Conversational UX', 'Multi-turn dialogue design, intent modeling, and repair flows.', 'mastered'),
|
||||
makeCompetency('stack-designer', 'AI Transparency Patterns', 'Confidence indicators, source attribution, and model limitation disclosure.', 'in_progress', ['stack-designer-c002']),
|
||||
makeCompetency('stack-designer', 'Human-in-the-Loop Design', 'Approval gates, escalation paths, and override affordances.', 'available', ['stack-designer-c001']),
|
||||
makeCompetency('stack-designer', 'Prompt UX', 'Designing prompt composition surfaces, suggestions, and templates.', 'available'),
|
||||
makeCompetency('stack-designer', 'Failure & Fallback Design', 'Graceful degradation, error states, and recovery flows for AI features.', 'available', ['stack-designer-c003']),
|
||||
makeCompetency('stack-designer', 'Multimodal Interface Design', 'Voice + touch + visual coordination across modalities.', 'locked', ['stack-designer-c002']),
|
||||
makeCompetency('stack-designer', 'Trust & Calibration', 'User mental model alignment, expectation setting, and over-trust mitigation.', 'available', ['stack-designer-c003']),
|
||||
makeCompetency('stack-designer', 'Accessibility for AI Interfaces', 'Screen-reader-friendly AI output, cognitive load, and reading-level tuning.', 'available'),
|
||||
makeCompetency('stack-designer', 'Persona & Tone Systems', 'Character design for AI assistants, consistency, and contextual adaptation.', 'available', ['stack-designer-c005']),
|
||||
makeCompetency('stack-designer', 'Evaluation of AI UX', 'Task success, satisfaction, and reliance metrics for AI-assisted workflows.', 'locked', ['stack-designer-c008']),
|
||||
makeCompetency('stack-designer', 'Onboarding to Agentic Systems', 'Progressive disclosure, first-run experience, and capability scaffolding.', 'available', ['stack-designer-c004']),
|
||||
makeCompetency('stack-designer', 'AI Ethics in Product Design', 'Consent, dark-pattern avoidance, and dignity-preserving automation.', 'available', ['stack-designer-c009']),
|
||||
];
|
||||
|
||||
// --- Stack 4: AI-Augmented Field Operator (12 competencies) ---
|
||||
const operatorComps: Competency[] = [
|
||||
makeCompetency('stack-operator', 'AI Co-Pilot Operation', 'Interacting with voice and tablet-based AI assistants in field conditions.', 'in_progress'),
|
||||
makeCompetency('stack-operator', 'Robotics Safety Protocols', 'Lockout/tagout, collision avoidance, and emergency stop procedures.', 'mastered'),
|
||||
makeCompetency('stack-operator', 'Predictive Maintenance Alerts', 'Interpreting ML-based anomaly scores and scheduling interventions.', 'available', ['stack-operator-c002']),
|
||||
makeCompetency('stack-operator', 'Computer Vision Inspection', 'Operating vision-based quality control stations and tuning thresholds.', 'available'),
|
||||
makeCompetency('stack-operator', 'Sensor Data Interpretation', 'Reading IoT telemetry dashboards and recognizing fault signatures.', 'in_progress', ['stack-operator-c003']),
|
||||
makeCompetency('stack-operator', 'Digital Twin Fundamentals', 'Navigating virtual replicas of physical assets for simulation and planning.', 'locked', ['stack-operator-c005']),
|
||||
makeCompetency('stack-operator', 'Augmented Reality Overlays', 'Using AR headsets for guided assembly, annotation, and remote assistance.', 'available'),
|
||||
makeCompetency('stack-operator', 'Edge Model Deployment', 'Pushing model updates to on-device inference hardware in the field.', 'locked', ['stack-operator-c006']),
|
||||
makeCompetency('stack-operator', 'Calibration & Drift Correction', 'Maintaining sensor accuracy and recognizing model drift in production.', 'available', ['stack-operator-c004']),
|
||||
makeCompetency('stack-operator', 'Field Data Collection', 'Structured annotation, labeling workflows, and high-quality dataset capture.', 'available'),
|
||||
makeCompetency('stack-operator', 'Autonomous System Supervision', 'Monitoring fleets of semi-autonomous units and intervening on exceptions.', 'locked', ['stack-operator-c001']),
|
||||
makeCompetency('stack-operator', 'Safety-Critical Decision Making', 'Knowing when to override AI recommendations and escalate to humans.', 'available', ['stack-operator-c002']),
|
||||
];
|
||||
|
||||
// --- Stack 5: Computational Sciences Practitioner (16 competencies) ---
|
||||
const scienceComps: Competency[] = [
|
||||
makeCompetency('stack-science', 'Scientific Computing with Python', 'NumPy, SciPy, pandas, and Jupyter workflows for research-grade analysis.', 'mastered'),
|
||||
makeCompetency('stack-science', 'ML for Scientific Discovery', 'Surrogate models, property prediction, and active learning loops.', 'in_progress', ['stack-science-c001']),
|
||||
makeCompetency('stack-science', 'Molecular & Materials Simulation', 'DFT, molecular dynamics, and ML potentials for materials screening.', 'available'),
|
||||
makeCompetency('stack-science', 'Climate Modeling Fundamentals', 'GCM structure, downscaling, and emissions scenario interpretation.', 'available'),
|
||||
makeCompetency('stack-science', 'Bioinformatics Pipelines', 'Sequence alignment, variant calling, and differential expression analysis.', 'in_progress'),
|
||||
makeCompetency('stack-science', 'High-Performance Computing', 'MPI, OpenMP, GPU offloading, and job scheduling on HPC clusters.', 'available', ['stack-science-c001']),
|
||||
makeCompetency('stack-science', 'Scientific Data Visualization', 'Matplotlib, Plotly, ParaView, and domain-specific plotting conventions.', 'mastered'),
|
||||
makeCompetency('stack-science', 'Reproducible Research Practices', 'Containerization, workflow managers (Snakemake, Nextflow), and DOIs.', 'available', ['stack-science-c006']),
|
||||
makeCompetency('stack-science', 'Statistical Inference', 'Bayesian methods, hypothesis testing, and uncertainty quantification.', 'available'),
|
||||
makeCompetency('stack-science', 'Physics-Informed Neural Networks', 'Embedding governing equations as constraints in ML models.', 'locked', ['stack-science-c002']),
|
||||
makeCompetency('stack-science', 'Generative Models for Science', 'Diffusion models for molecule generation and protein structure sampling.', 'locked', ['stack-science-c010']),
|
||||
makeCompetency('stack-science', 'Causal Inference Methods', 'Do-calculus, instrumental variables, and counterfactual reasoning.', 'available', ['stack-science-c009']),
|
||||
makeCompetency('stack-science', 'Experiment Design', 'DOE, factorial designs, and sample-size planning for costly experiments.', 'available'),
|
||||
makeCompetency('stack-science', 'Data Assimilation', 'EnKF, 4D-Var, and real-time integration of observations into models.', 'locked', ['stack-science-c004']),
|
||||
makeCompetency('stack-science', 'Scientific Writing with AI', 'Literature review automation, manuscript drafting assistance, and citation tools.', 'available'),
|
||||
makeCompetency('stack-science', 'Open Science & FAIR Data', 'Findable, accessible, interoperable, reusable data stewardship.', 'available', ['stack-science-c008']),
|
||||
];
|
||||
|
||||
export const competencyStacks: CompetencyStack[] = [
|
||||
{
|
||||
id: 'stack-orchestration',
|
||||
name: 'AI Orchestration Engineer',
|
||||
targetRoles: 'Agent design, multi-agent systems, AI workflow automation',
|
||||
description:
|
||||
'Design and operate systems of cooperating AI agents. Master tool use, retrieval, memory, evaluation, and production deployment of agentic workflows.',
|
||||
competencies: orchestrationComps,
|
||||
color: 'indigo',
|
||||
icon: 'Workflow',
|
||||
},
|
||||
{
|
||||
id: 'stack-safety',
|
||||
name: 'AI Safety & Governance Lead',
|
||||
targetRoles: 'Alignment, audit, policy, risk',
|
||||
description:
|
||||
'Ensure AI systems are aligned, auditable, and compliant. Lead red-teaming, bias audits, incident response, and governance documentation.',
|
||||
competencies: safetyComps,
|
||||
color: 'rose',
|
||||
icon: 'ShieldCheck',
|
||||
},
|
||||
{
|
||||
id: 'stack-designer',
|
||||
name: 'Human-AI Product Designer',
|
||||
targetRoles: 'UX for agentic systems, AI interaction design',
|
||||
description:
|
||||
'Design interfaces where humans and AI agents collaborate. Master transparency, trust calibration, failure design, and agentic interaction patterns.',
|
||||
competencies: designerComps,
|
||||
color: 'violet',
|
||||
icon: 'Sparkles',
|
||||
},
|
||||
{
|
||||
id: 'stack-operator',
|
||||
name: 'AI-Augmented Field Operator',
|
||||
targetRoles: 'Skilled trades + AI co-pilots, robotics operations',
|
||||
description:
|
||||
'Operate AI-augmented equipment in the field. Pair skilled trades with AI co-pilots, robotics supervision, predictive maintenance, and AR-guided workflows.',
|
||||
competencies: operatorComps,
|
||||
color: 'emerald',
|
||||
icon: 'Wrench',
|
||||
},
|
||||
{
|
||||
id: 'stack-science',
|
||||
name: 'Computational Sciences Practitioner',
|
||||
targetRoles: 'Bio, materials, climate + AI',
|
||||
description:
|
||||
'Apply ML to scientific discovery in biology, materials, and climate. Master scientific computing, simulation, PINNs, and reproducible research.',
|
||||
competencies: scienceComps,
|
||||
color: 'cyan',
|
||||
icon: 'Atom',
|
||||
},
|
||||
];
|
||||
|
||||
export const allCompetencies: Competency[] = competencyStacks.flatMap((s) => s.competencies);
|
||||
@@ -0,0 +1,134 @@
|
||||
import type { Employer } from '@nextcraft/types';
|
||||
|
||||
export const employers: Employer[] = [
|
||||
{
|
||||
id: 'emp-openai',
|
||||
name: 'OpenAI Labs',
|
||||
logo: 'https://placehold.co/80x80/indigo/white?text=OA',
|
||||
description:
|
||||
'Mock employer building frontier AI systems. We build and deploy large language models and agentic tools used by millions of developers and consumers.',
|
||||
industry: 'Artificial Intelligence',
|
||||
size: '2,000+',
|
||||
location: 'San Francisco, CA',
|
||||
website: 'https://example.com/openai',
|
||||
socialLinks: { twitter: 'https://example.com/openai/x', linkedin: 'https://example.com/openai/li' },
|
||||
culture: 'Research-driven, shipping-paced, safety-conscious. We pair frontier research with product rigor.',
|
||||
},
|
||||
{
|
||||
id: 'emp-anthropic',
|
||||
name: 'Anthropic Research',
|
||||
logo: 'https://placehold.co/80x80/amber/white?text=AN',
|
||||
description:
|
||||
'Mock employer focused on AI safety and alignment. We build reliable, interpretable, and steerable AI systems.',
|
||||
industry: 'AI Safety',
|
||||
size: '1,000+',
|
||||
location: 'San Francisco, CA',
|
||||
website: 'https://example.com/anthropic',
|
||||
socialLinks: { twitter: 'https://example.com/anthropic/x', linkedin: 'https://example.com/anthropic/li' },
|
||||
culture: 'Safety-first, evidence-based, calm-paced. We value thoroughness over speed when stakes are high.',
|
||||
},
|
||||
{
|
||||
id: 'emp-huggingface',
|
||||
name: 'Hugging Face',
|
||||
logo: 'https://placehold.co/80x80/yellow/black?text=HF',
|
||||
description:
|
||||
'Mock employer building the open-source AI community. We host models, datasets, and demos for the global ML community.',
|
||||
industry: 'Open Source AI',
|
||||
size: '500+',
|
||||
location: 'New York, NY',
|
||||
website: 'https://example.com/hf',
|
||||
socialLinks: { twitter: 'https://example.com/hf/x', linkedin: 'https://example.com/hf/li' },
|
||||
culture: 'Community-first, open-by-default, remote-friendly. We ship in the open with thousands of contributors.',
|
||||
},
|
||||
{
|
||||
id: 'emp-scaleai',
|
||||
name: 'Scale AI',
|
||||
logo: 'https://placehold.co/80x80/violet/white?text=SC',
|
||||
description:
|
||||
'Mock employer providing data and evaluation infrastructure for frontier AI. We power the RLHF and eval pipelines behind many model releases.',
|
||||
industry: 'AI Infrastructure',
|
||||
size: '1,500+',
|
||||
location: 'San Francisco, CA',
|
||||
website: 'https://example.com/scale',
|
||||
socialLinks: { twitter: 'https://example.com/scale/x', linkedin: 'https://example.com/scale/li' },
|
||||
culture: 'Infrastructure-minded, quality-obsessed, enterprise-aware. We bridge research and production data.',
|
||||
},
|
||||
{
|
||||
id: 'emp-perplexity',
|
||||
name: 'Perplexity',
|
||||
logo: 'https://placehold.co/80x80/teal/white?text=PX',
|
||||
description:
|
||||
'Mock employer building an AI-powered answer engine. We combine retrieval, generation, and citations for trustworthy answers.',
|
||||
industry: 'AI Search',
|
||||
size: '300+',
|
||||
location: 'San Francisco, CA',
|
||||
website: 'https://example.com/perplexity',
|
||||
socialLinks: { twitter: 'https://example.com/perplexity/x', linkedin: 'https://example.com/perplexity/li' },
|
||||
culture: 'Answer-focused, fast-iterating, citation-proud. We treat groundedness as a product feature.',
|
||||
},
|
||||
{
|
||||
id: 'emp-cohere',
|
||||
name: 'Cohere',
|
||||
logo: 'https://placehold.co/80x80/pink/white?text=CO',
|
||||
description:
|
||||
'Mock employer building enterprise-grade language models. We specialize in retrieval, multilinguality, and data privacy for regulated industries.',
|
||||
industry: 'Enterprise LLMs',
|
||||
size: '400+',
|
||||
location: 'Toronto, Canada',
|
||||
website: 'https://example.com/cohere',
|
||||
socialLinks: { twitter: 'https://example.com/cohere/x', linkedin: 'https://example.com/cohere/li' },
|
||||
culture: 'Enterprise-aware, research-active, multilingual. We ship models that work in 100+ languages.',
|
||||
},
|
||||
{
|
||||
id: 'emp-mistral',
|
||||
name: 'Mistral AI',
|
||||
logo: 'https://placehold.co/80x80/red/white?text=MI',
|
||||
description:
|
||||
'Mock employer building open-weight frontier models in Europe. We push efficiency and openness in large language models.',
|
||||
industry: 'Open-Weight LLMs',
|
||||
size: '200+',
|
||||
location: 'Paris, France',
|
||||
website: 'https://example.com/mistral',
|
||||
socialLinks: { twitter: 'https://example.com/mistral/x', linkedin: 'https://example.com/mistral/li' },
|
||||
culture: 'European-rooted, efficiency-driven, open-weight-proud. We ship small models that punch above their size.',
|
||||
},
|
||||
{
|
||||
id: 'emp-replicate',
|
||||
name: 'Replicate',
|
||||
logo: 'https://placehold.co/80x80/orange/white?text=RE',
|
||||
description:
|
||||
'Mock employer making ML deployment delightful. We host, serve, and scale models with a few lines of code.',
|
||||
industry: 'ML Deployment',
|
||||
size: '150+',
|
||||
location: 'San Francisco, CA',
|
||||
website: 'https://example.com/replicate',
|
||||
socialLinks: { twitter: 'https://example.com/replicate/x', linkedin: 'https://example.com/replicate/li' },
|
||||
culture: 'Developer-experience-obsessed, pragmatic, remote-friendly. We make shipping models feel like shipping software.',
|
||||
},
|
||||
{
|
||||
id: 'emp-pinecone',
|
||||
name: 'Pinecone',
|
||||
logo: 'https://placehold.co/80x80/green/white?text=PC',
|
||||
description:
|
||||
'Mock employer building the vector database for AI applications. We power retrieval for thousands of production RAG systems.',
|
||||
industry: 'Vector Databases',
|
||||
size: '300+',
|
||||
location: 'New York, NY',
|
||||
website: 'https://example.com/pinecone',
|
||||
socialLinks: { twitter: 'https://example.com/pinecone/x', linkedin: 'https://example.com/pinecone/li' },
|
||||
culture: 'Infra-focused, latency-obsessed, distributed-first. We treat retrieval as the heart of grounded AI.',
|
||||
},
|
||||
{
|
||||
id: 'emp-langchain',
|
||||
name: 'LangChain',
|
||||
logo: 'https://placehold.co/80x80/blue/white?text=LC',
|
||||
description:
|
||||
'Mock employer building the orchestration layer for LLM applications. We provide frameworks for agents, retrieval, and evaluation.',
|
||||
industry: 'AI Orchestration',
|
||||
size: '200+',
|
||||
location: 'San Francisco, CA',
|
||||
website: 'https://example.com/langchain',
|
||||
socialLinks: { twitter: 'https://example.com/langchain/x', linkedin: 'https://example.com/langchain/li' },
|
||||
culture: 'Framework-minded, community-driven, abstractions-first. We build primitives others compose into products.',
|
||||
},
|
||||
];
|
||||
@@ -0,0 +1,38 @@
|
||||
export { competencyStacks, allCompetencies } from './competency-stacks';
|
||||
export { jobs } from './jobs';
|
||||
export { candidates } from './candidates';
|
||||
export { employers } from './employers';
|
||||
export {
|
||||
primaryLearner,
|
||||
learnerMicrocredentials,
|
||||
learnerArtifacts,
|
||||
upcomingDefenses,
|
||||
learnerSummary,
|
||||
} from './learner-progress';
|
||||
export { aiTutorResponses } from './ai-tutor-responses';
|
||||
export type { TutorResponse } from './ai-tutor-responses';
|
||||
export {
|
||||
platformMetrics,
|
||||
activityFeed,
|
||||
serviceHealth,
|
||||
uptimeBars,
|
||||
systemStats,
|
||||
adminLearners,
|
||||
jobReviewQueue,
|
||||
employerVerificationQueue,
|
||||
flaggedContentQueue,
|
||||
} from './admin';
|
||||
export type {
|
||||
PlatformMetric,
|
||||
ActivityEvent,
|
||||
ServiceStatus,
|
||||
ServiceHealth,
|
||||
AdminLearner,
|
||||
AdminLearnerCompetency,
|
||||
AdminLearnerCredential,
|
||||
LearnerStatus,
|
||||
JobReviewItem,
|
||||
EmployerVerificationItem,
|
||||
FlaggedContentItem,
|
||||
FlaggedContentType,
|
||||
} from './admin';
|
||||
@@ -0,0 +1,324 @@
|
||||
import type { Job } from '@nextcraft/types';
|
||||
|
||||
export const jobs: Job[] = [
|
||||
{
|
||||
id: 'job-001',
|
||||
title: 'AI Orchestration Engineer',
|
||||
employerId: 'emp-langchain',
|
||||
description:
|
||||
'Design and operate multi-agent systems that automate complex knowledge workflows. You will own agent topology, tool integration, and evaluation harnesses for production deployments serving millions of queries.',
|
||||
requiredCompetencies: ['stack-orchestration-c001', 'stack-orchestration-c002', 'stack-orchestration-c005'],
|
||||
skills: ['LangGraph', 'Multi-agent systems', 'RAG', 'Python', 'Evaluation'],
|
||||
seniority: 'senior',
|
||||
location: 'San Francisco, CA',
|
||||
remote: true,
|
||||
salaryMin: 160000,
|
||||
salaryMax: 240000,
|
||||
matchScore: 96,
|
||||
postedAt: '2026-08-21T10:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'job-002',
|
||||
title: 'LLM Application Developer',
|
||||
employerId: 'emp-openai',
|
||||
description:
|
||||
'Build delightful LLM-powered features end-to-end. You will work on retrieval, function calling, streaming UX, and robust output validation for consumer-facing products.',
|
||||
requiredCompetencies: ['stack-orchestration-c003', 'stack-orchestration-c004', 'stack-orchestration-c005'],
|
||||
skills: ['Python', 'TypeScript', 'RAG', 'Function calling', 'Streaming'],
|
||||
seniority: 'mid',
|
||||
location: 'San Francisco, CA',
|
||||
remote: true,
|
||||
salaryMin: 140000,
|
||||
salaryMax: 210000,
|
||||
matchScore: 92,
|
||||
postedAt: '2026-08-28T09:30:00Z',
|
||||
},
|
||||
{
|
||||
id: 'job-003',
|
||||
title: 'AI Safety Researcher',
|
||||
employerId: 'emp-anthropic',
|
||||
description:
|
||||
'Research alignment, interpretability, and robustness of frontier models. Design experiments, run evaluations, and publish findings that improve the safety of deployed AI systems.',
|
||||
requiredCompetencies: ['stack-safety-c001', 'stack-safety-c007', 'stack-safety-c002'],
|
||||
skills: ['Alignment', 'Interpretability', 'Red teaming', 'Python', 'Research'],
|
||||
seniority: 'senior',
|
||||
location: 'San Francisco, CA',
|
||||
remote: false,
|
||||
salaryMin: 180000,
|
||||
salaryMax: 280000,
|
||||
matchScore: 88,
|
||||
postedAt: '2026-08-15T12:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'job-004',
|
||||
title: 'Prompt Engineer',
|
||||
employerId: 'emp-perplexity',
|
||||
description:
|
||||
'Craft, test, and ship prompt strategies that power answer-engine features. Own prompt libraries, regression suites, and A/B experiments across product surfaces.',
|
||||
requiredCompetencies: ['stack-orchestration-c004', 'stack-orchestration-c001'],
|
||||
skills: ['Prompt engineering', 'Evaluation', 'A/B testing', 'Python'],
|
||||
seniority: 'mid',
|
||||
location: 'Remote',
|
||||
remote: true,
|
||||
salaryMin: 110000,
|
||||
salaryMax: 175000,
|
||||
matchScore: 84,
|
||||
postedAt: '2026-09-02T14:15:00Z',
|
||||
},
|
||||
{
|
||||
id: 'job-005',
|
||||
title: 'AI Product Manager',
|
||||
employerId: 'emp-huggingface',
|
||||
description:
|
||||
'Own the roadmap for AI-powered developer tools. Translate model capabilities into customer value, define success metrics, and ship agentic features with engineering.',
|
||||
requiredCompetencies: ['stack-designer-c001', 'stack-orchestration-c001'],
|
||||
skills: ['Product strategy', 'AI UX', 'Roadmapping', 'Stakeholder mgmt'],
|
||||
seniority: 'senior',
|
||||
location: 'New York, NY',
|
||||
remote: true,
|
||||
salaryMin: 150000,
|
||||
salaryMax: 220000,
|
||||
matchScore: 78,
|
||||
postedAt: '2026-08-30T08:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'job-006',
|
||||
title: 'RAG Infrastructure Engineer',
|
||||
employerId: 'emp-pinecone',
|
||||
description:
|
||||
'Build the retrieval substrate behind knowledge-grounded AI. Optimize indexing, query latency, and hybrid retrieval across billion-vector workloads.',
|
||||
requiredCompetencies: ['stack-orchestration-c005', 'stack-orchestration-c006'],
|
||||
skills: ['Vector databases', 'Embeddings', 'Go', 'Distributed systems'],
|
||||
seniority: 'mid',
|
||||
location: 'Remote',
|
||||
remote: true,
|
||||
salaryMin: 130000,
|
||||
salaryMax: 200000,
|
||||
matchScore: 81,
|
||||
postedAt: '2026-09-05T11:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'job-007',
|
||||
title: 'AI Governance Lead',
|
||||
employerId: 'emp-scaleai',
|
||||
description:
|
||||
'Stand up the AI governance program for enterprise customers. Map controls to NIST AI RMF and EU AI Act, run audits, and author model cards at scale.',
|
||||
requiredCompetencies: ['stack-safety-c005', 'stack-safety-c003', 'stack-safety-c013'],
|
||||
skills: ['AI policy', 'NIST AI RMF', 'Audit', 'Documentation'],
|
||||
seniority: 'staff',
|
||||
location: 'San Francisco, CA',
|
||||
remote: true,
|
||||
salaryMin: 170000,
|
||||
salaryMax: 230000,
|
||||
matchScore: 74,
|
||||
postedAt: '2026-08-18T16:45:00Z',
|
||||
},
|
||||
{
|
||||
id: 'job-008',
|
||||
title: 'Human-AI Interaction Designer',
|
||||
employerId: 'emp-anthropic',
|
||||
description:
|
||||
'Design how users collaborate with Claude across products. Own transparency patterns, trust calibration, and agentic interaction for assistant surfaces.',
|
||||
requiredCompetencies: ['stack-designer-c001', 'stack-designer-c003', 'stack-designer-c008'],
|
||||
skills: ['Figma', 'AI UX', 'Prototyping', 'User research'],
|
||||
seniority: 'mid',
|
||||
location: 'San Francisco, CA',
|
||||
remote: true,
|
||||
salaryMin: 125000,
|
||||
salaryMax: 190000,
|
||||
matchScore: 86,
|
||||
postedAt: '2026-08-25T10:30:00Z',
|
||||
},
|
||||
{
|
||||
id: 'job-009',
|
||||
title: 'Evaluation Engineer',
|
||||
employerId: 'emp-cohere',
|
||||
description:
|
||||
'Build and operate the eval platform for LLM-powered products. Design LLM-as-judge pipelines, regression suites, and human-eval panels for production models.',
|
||||
requiredCompetencies: ['stack-orchestration-c007', 'stack-safety-c002'],
|
||||
skills: ['LLM evaluation', 'Python', 'Statistics', 'Data labeling'],
|
||||
seniority: 'mid',
|
||||
location: 'Toronto, Canada',
|
||||
remote: true,
|
||||
salaryMin: 120000,
|
||||
salaryMax: 180000,
|
||||
matchScore: 79,
|
||||
postedAt: '2026-09-01T13:20:00Z',
|
||||
},
|
||||
{
|
||||
id: 'job-010',
|
||||
title: 'Robotics Operations Specialist',
|
||||
employerId: 'emp-replicate',
|
||||
description:
|
||||
'Supervise a fleet of AI-augmented robotic units in a warehouse environment. Interpret anomaly alerts, perform calibrations, and intervene on exceptions.',
|
||||
requiredCompetencies: ['stack-operator-c002', 'stack-operator-c011', 'stack-operator-c003'],
|
||||
skills: ['Robotics', 'Safety protocols', 'IoT', 'Predictive maintenance'],
|
||||
seniority: 'entry',
|
||||
location: 'Austin, TX',
|
||||
remote: false,
|
||||
salaryMin: 80000,
|
||||
salaryMax: 115000,
|
||||
matchScore: 71,
|
||||
postedAt: '2026-08-22T09:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'job-011',
|
||||
title: 'Computational Biologist',
|
||||
employerId: 'emp-recursion',
|
||||
description:
|
||||
'Apply ML to drug discovery. Build pipelines for phenotype prediction, active learning on assay data, and molecular generation for novel targets.',
|
||||
requiredCompetencies: ['stack-science-c005', 'stack-science-c002', 'stack-science-c011'],
|
||||
skills: ['Bioinformatics', 'Python', 'PyTorch', 'Drug discovery'],
|
||||
seniority: 'senior',
|
||||
location: 'Boston, MA',
|
||||
remote: true,
|
||||
salaryMin: 145000,
|
||||
salaryMax: 215000,
|
||||
matchScore: 83,
|
||||
postedAt: '2026-08-12T15:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'job-012',
|
||||
title: 'Climate ML Scientist',
|
||||
employerId: 'emp-deepmind',
|
||||
description:
|
||||
'Develop ML models for climate forecasting and energy grid optimization. Work with earth system scientists to downscale GCM output and quantify uncertainty.',
|
||||
requiredCompetencies: ['stack-science-c004', 'stack-science-c014', 'stack-science-c010'],
|
||||
skills: ['Climate modeling', 'PyTorch', 'Data assimilation', 'PINNs'],
|
||||
seniority: 'senior',
|
||||
location: 'London, UK',
|
||||
remote: true,
|
||||
salaryMin: 135000,
|
||||
salaryMax: 200000,
|
||||
matchScore: 77,
|
||||
postedAt: '2026-08-27T11:45:00Z',
|
||||
},
|
||||
{
|
||||
id: 'job-013',
|
||||
title: 'Agent Reliability Engineer',
|
||||
employerId: 'emp-langchain',
|
||||
description:
|
||||
'Own observability and reliability for production agent workloads. Build tracing, alerting, and rollback systems for multi-step agent pipelines.',
|
||||
requiredCompetencies: ['stack-orchestration-c013', 'stack-orchestration-c015', 'stack-orchestration-c008'],
|
||||
skills: ['Observability', 'Python', 'SRE', 'Distributed tracing'],
|
||||
seniority: 'mid',
|
||||
location: 'Remote',
|
||||
remote: true,
|
||||
salaryMin: 140000,
|
||||
salaryMax: 205000,
|
||||
matchScore: 90,
|
||||
postedAt: '2026-09-04T09:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'job-014',
|
||||
title: 'AI Red Team Lead',
|
||||
employerId: 'emp-mistral',
|
||||
description:
|
||||
'Lead adversarial testing of frontier and open-weight models. Build automated red-team suites, track vulnerabilities, and coordinate disclosure.',
|
||||
requiredCompetencies: ['stack-safety-c002', 'stack-safety-c010', 'stack-safety-c001'],
|
||||
skills: ['Red teaming', 'Prompt injection', 'Python', 'Leadership'],
|
||||
seniority: 'staff',
|
||||
location: 'Paris, France',
|
||||
remote: true,
|
||||
salaryMin: 160000,
|
||||
salaryMax: 230000,
|
||||
matchScore: 85,
|
||||
postedAt: '2026-08-19T10:30:00Z',
|
||||
},
|
||||
{
|
||||
id: 'job-015',
|
||||
title: 'Conversation Designer',
|
||||
employerId: 'emp-huggingface',
|
||||
description:
|
||||
'Design dialogue flows, personas, and repair strategies for AI assistants across open-source products. Partner with ML engineers to align tone with model behavior.',
|
||||
requiredCompetencies: ['stack-designer-c002', 'stack-designer-c010', 'stack-designer-c011'],
|
||||
skills: ['Conversation design', 'Figma', 'Voice UX', 'Prototyping'],
|
||||
seniority: 'mid',
|
||||
location: 'Remote',
|
||||
remote: true,
|
||||
salaryMin: 105000,
|
||||
salaryMax: 160000,
|
||||
matchScore: 73,
|
||||
postedAt: '2026-08-29T14:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'job-016',
|
||||
title: 'Field AI Technician',
|
||||
employerId: 'emp-anduril',
|
||||
description:
|
||||
'Deploy and maintain AI vision systems on defense hardware in the field. Calibrate sensors, interpret model alerts, and escalate edge cases to engineering.',
|
||||
requiredCompetencies: ['stack-operator-c004', 'stack-operator-c009', 'stack-operator-c001'],
|
||||
skills: ['Computer vision', 'Sensor calibration', 'Field ops', 'Python'],
|
||||
seniority: 'entry',
|
||||
location: 'Costa Mesa, CA',
|
||||
remote: false,
|
||||
salaryMin: 90000,
|
||||
salaryMax: 130000,
|
||||
matchScore: 68,
|
||||
postedAt: '2026-08-14T08:30:00Z',
|
||||
},
|
||||
{
|
||||
id: 'job-017',
|
||||
title: 'Materials ML Engineer',
|
||||
employerId: 'emp-deepmind',
|
||||
description:
|
||||
'Discover novel materials with ML. Train property-prediction models, run active-learning loops over DFT calculations, and validate candidates experimentally.',
|
||||
requiredCompetencies: ['stack-science-c003', 'stack-science-c002', 'stack-science-c006'],
|
||||
skills: ['Materials science', 'PyTorch', 'DFT', 'Active learning'],
|
||||
seniority: 'senior',
|
||||
location: 'London, UK',
|
||||
remote: true,
|
||||
salaryMin: 140000,
|
||||
salaryMax: 210000,
|
||||
matchScore: 80,
|
||||
postedAt: '2026-08-26T12:15:00Z',
|
||||
},
|
||||
{
|
||||
id: 'job-018',
|
||||
title: 'AI Trust & Safety Analyst',
|
||||
employerId: 'emp-openai',
|
||||
description:
|
||||
'Investigate misuse patterns, triage safety incidents, and improve policy enforcement for consumer AI products. Author postmortems and recommend mitigations.',
|
||||
requiredCompetencies: ['stack-safety-c008', 'stack-safety-c006', 'stack-safety-c002'],
|
||||
skills: ['Trust & safety', 'Incident response', 'Policy', 'Investigation'],
|
||||
seniority: 'mid',
|
||||
location: 'San Francisco, CA',
|
||||
remote: true,
|
||||
salaryMin: 115000,
|
||||
salaryMax: 170000,
|
||||
matchScore: 76,
|
||||
postedAt: '2026-09-03T10:45:00Z',
|
||||
},
|
||||
{
|
||||
id: 'job-019',
|
||||
title: 'Edge AI Engineer',
|
||||
employerId: 'emp-replicate',
|
||||
description:
|
||||
'Optimize and deploy models to edge hardware. Quantize, distill, and compile models for low-latency inference on field devices with constrained budgets.',
|
||||
requiredCompetencies: ['stack-operator-c008', 'stack-orchestration-c012', 'stack-orchestration-c014'],
|
||||
skills: ['Edge ML', 'TensorRT', 'C++', 'Quantization'],
|
||||
seniority: 'mid',
|
||||
location: 'Remote',
|
||||
remote: true,
|
||||
salaryMin: 130000,
|
||||
salaryMax: 195000,
|
||||
matchScore: 82,
|
||||
postedAt: '2026-08-24T11:30:00Z',
|
||||
},
|
||||
{
|
||||
id: 'job-020',
|
||||
title: 'AI Research Engineer',
|
||||
employerId: 'emp-cohere',
|
||||
description:
|
||||
'Push the frontier of language model capabilities. Prototype new architectures, run large-scale experiments, and contribute to publications and open-source releases.',
|
||||
requiredCompetencies: ['stack-orchestration-c001', 'stack-science-c010', 'stack-science-c011'],
|
||||
skills: ['PyTorch', 'Research', 'Transformers', 'Distributed training'],
|
||||
seniority: 'senior',
|
||||
location: 'Berlin, Germany',
|
||||
remote: true,
|
||||
salaryMin: 155000,
|
||||
salaryMax: 235000,
|
||||
matchScore: 94,
|
||||
postedAt: '2026-08-20T09:00:00Z',
|
||||
},
|
||||
];
|
||||
@@ -0,0 +1,101 @@
|
||||
import type { Learner, Artifact, OralDefense, Microcredential } from '@nextcraft/types';
|
||||
|
||||
export const primaryLearner: Learner = {
|
||||
id: 'learner-001',
|
||||
name: 'Alex Rivera',
|
||||
email: 'alex.rivera@example.com',
|
||||
avatar: 'https://i.pravatar.cc/150?img=16',
|
||||
ageGroup: '18+',
|
||||
enrolledStacks: ['stack-orchestration', 'stack-safety'],
|
||||
progress: {
|
||||
'stack-orchestration': 62,
|
||||
'stack-safety': 41,
|
||||
},
|
||||
};
|
||||
|
||||
export const learnerMicrocredentials: Microcredential[] = [
|
||||
{ id: 'mc-001', competencyId: 'stack-orchestration-c001', issuedAt: '2026-07-12T00:00:00Z', verified: true, score: 94 },
|
||||
{ id: 'mc-002', competencyId: 'stack-orchestration-c004', issuedAt: '2026-07-28T00:00:00Z', verified: true, score: 91 },
|
||||
{ id: 'mc-003', competencyId: 'stack-orchestration-c006', issuedAt: '2026-08-04T00:00:00Z', verified: true, score: 88 },
|
||||
{ id: 'mc-004', competencyId: 'stack-safety-c021', issuedAt: '2026-08-20T00:00:00Z', verified: true, score: 90 },
|
||||
{ id: 'mc-005', competencyId: 'stack-orchestration-c003', issuedAt: null, verified: false, score: null },
|
||||
];
|
||||
|
||||
export const learnerArtifacts: Artifact[] = [
|
||||
{
|
||||
id: 'art-001',
|
||||
name: 'Multi-agent research assistant',
|
||||
type: 'code',
|
||||
url: 'https://example.com/artifacts/research-assistant',
|
||||
description: 'A LangGraph-based assistant that plans, retrieves, and drafts cited literature reviews with an eval harness.',
|
||||
createdAt: '2026-08-22T14:30:00Z',
|
||||
},
|
||||
{
|
||||
id: 'art-002',
|
||||
name: 'RAG retrieval quality dashboard',
|
||||
type: 'code',
|
||||
url: 'https://example.com/artifacts/rag-dashboard',
|
||||
description: 'Streamlit dashboard comparing chunking strategies and rerankers across 800 evaluation queries.',
|
||||
createdAt: '2026-08-15T09:12:00Z',
|
||||
},
|
||||
{
|
||||
id: 'art-003',
|
||||
name: 'Model card for internal Q&A agent',
|
||||
type: 'document',
|
||||
url: 'https://example.com/artifacts/model-card',
|
||||
description: 'Capabilities, limitations, intended use, and red-team findings for a document-grounded Q&A agent.',
|
||||
createdAt: '2026-08-19T11:00:00Z',
|
||||
},
|
||||
{
|
||||
id: 'art-004',
|
||||
name: 'Prompt regression suite',
|
||||
type: 'code',
|
||||
url: 'https://example.com/artifacts/prompt-regression',
|
||||
description: 'Pytest-based suite of 320 prompt assertions with LLM-as-judge scoring and CI integration.',
|
||||
createdAt: '2026-08-08T16:45:00Z',
|
||||
},
|
||||
{
|
||||
id: 'art-005',
|
||||
name: 'Agent topology diagram',
|
||||
type: 'design',
|
||||
url: 'https://example.com/artifacts/topology',
|
||||
description: 'Architecture diagram for a plan-and-execute agent with reflection and tool-retrieval sub-graphs.',
|
||||
createdAt: '2026-07-30T10:20:00Z',
|
||||
},
|
||||
];
|
||||
|
||||
export const upcomingDefenses: OralDefense[] = [
|
||||
{
|
||||
id: 'def-001',
|
||||
competencyId: 'stack-orchestration-c003',
|
||||
transcript: '',
|
||||
score: null,
|
||||
status: 'scheduled',
|
||||
},
|
||||
{
|
||||
id: 'def-002',
|
||||
competencyId: 'stack-orchestration-c008',
|
||||
transcript: '',
|
||||
score: null,
|
||||
status: 'scheduled',
|
||||
},
|
||||
{
|
||||
id: 'def-003',
|
||||
competencyId: 'stack-safety-c019',
|
||||
transcript: '',
|
||||
score: null,
|
||||
status: 'pending',
|
||||
},
|
||||
];
|
||||
|
||||
export const learnerSummary = {
|
||||
enrolledStacks: primaryLearner.enrolledStacks.length,
|
||||
microcredentialsEarned: learnerMicrocredentials.filter((m) => m.verified).length,
|
||||
artifactsSubmitted: learnerArtifacts.length,
|
||||
upcomingDefenses: upcomingDefenses.filter((d) => d.status === 'scheduled').length,
|
||||
averageScore:
|
||||
learnerMicrocredentials
|
||||
.filter((m) => m.score !== null)
|
||||
.reduce((acc, m) => acc + (m.score ?? 0), 0) /
|
||||
Math.max(1, learnerMicrocredentials.filter((m) => m.score !== null).length),
|
||||
};
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"name": "@nextcraft/mock-data",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"main": "./index.ts",
|
||||
"types": "./index.ts",
|
||||
"exports": {
|
||||
".": "./index.ts",
|
||||
"./*": "./*.ts"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "tsc --noEmit",
|
||||
"typecheck": "tsc --noEmit"
|
||||
},
|
||||
"dependencies": {
|
||||
"@nextcraft/types": "workspace:*"
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.7.2"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"extends": "../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"noEmit": true,
|
||||
"declaration": false,
|
||||
"declarationMap": false
|
||||
},
|
||||
"include": ["*.ts"]
|
||||
}
|
||||
Reference in New Issue
Block a user