Files
nextcraft/packages/mock-data/learner-progress.ts
T
CIAgent 810485ecc8 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)
2026-09-10 22:47:56 +00:00

101 lines
3.5 KiB
TypeScript

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),
};