Core Concepts
Activity Tracking
The Activity page — a Timeline of every piece of skill evidence, skills grouped with proficiency, and a career-path recommendation.
What it's for
The Skill-Scoring System explains how evidence turns into numbers. The Activity page (/activity) is where you actually look at that evidence: every graded task and assessment, every completion, every attendance record, as a browsable log — plus the same numbers rolled up by skill and by career path. It's built entirely from getUserSkillEvidence() and computeSkillScores() in lib/data/scoring.ts and lib/skills.ts, the same functions the resume uses, so the two views never disagree.
Timeline tab
A flat, dot-and-line log — buildActivityLog() in lib/skills.ts turns every position's graded tasks/assessments, attendance, and completion, plus every course's graded items and enrollment status, into one entry per event. Each entry shows:
- •A timestamp on the left. Graded items use their own date; completions use postingParticipant.completedAt; anything without a completion date yet (an active, uncompleted event position, for example) falls back to postingParticipant.assignedAt — a real timestamp, not a placeholder, so the Timeline never shows a blank date.
- •A tag on the right — {Job/Course/Event/Project} - {Assessment/Task/Attendance/Log/Completion} — naming which posting kind and which of the 5 scoring tiers this entry belongs to.
- •A title that reads like a real position, not a bare status word — a completed event position shows "Winner — WildHacks — 36hr Hackathon", not just "Winner".
- •One badge per tagged skill, each showing that skill next to the tier weight it earns (e.g. "Python: 0.01") — the actual TIER_WEIGHTS constant, not a summary percentage, so the scoring model is visible on every entry instead of being a black box.
- •Links to the underlying Activity (the job/course/event/project's own Hub page) and its Hub, plus a best-effort "Updated by" line (a course's professor, an event's organizer) — text only, not a clickable profile, since none of these demo Hubs have a real faculty/manager account seeded yet.
Skills tab
Skills are grouped into a 3-tier hierarchy by a local keyword classifier in components/app/SkillsSection.tsx: Category (STEM, Languages, Social Studies, Personality, Design, Business, Academics, Software) wraps Subject (Physics, Hindi, Mathematics, ...), which wraps individual skill tags (Electrostatics, Hindi Grammar, ...). A real subject renders as one aggregate card — its tags shown as chips underneath, not as separate peer skills — while Personality/Design/Business/Academics have no natural subject split, so their individual named skills (Leadership, Figma, ...) render directly under the Category. This is deliberately separate from CareerPath (below): the taxonomy here is about the shape of the skill itself, not a life-domain goal.
Each card renders its score, a Learning → Beginner → Amateur → Advanced → Pro progress bar (proficiencyLabel()'s 5 bands — 0/20/40/60/80 thresholds), and a count of how many jobs/courses/projects/events credit it (summed across every tag, for a Subject rollup card). Clicking a card opens a modal listing every posting behind it — every tag's evidence merged together for a Subject card — each broken into Assessments, Tasks (score% or a Due/Upcoming status), and Attendance.
Reports tab
- •Completions by kind — how many completed Jobs, Courses, Projects, Events.
- •Proficiency — how many skills fall in each of the 5 bands.
- •Recommended career path — every skill's score is summed into its inferred CareerPath (via inferPath(), a keyword heuristic) and ranked; rankCareerPaths() in lib/skills.ts does the summing and is shared with the Resume page's own recommendation note. Paths with zero matching skill score are hidden rather than padded in at 0%.
The Today page's Activity badge
Today's topnav Activity button shows a live count — the same buildActivityLog() output, length-counted — so the number always matches exactly what the Timeline tab would show if you clicked through.