Spaces:
Sleeping
Sleeping
File size: 15,300 Bytes
7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 7a97213 c6537a8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 | // Demo data for a lifter running a 12-week hypertrophy block.
export const DEMO_PROJECT = {
title: "12-Week Hypertrophy Block — Upper/Lower",
meta: "Intermediate lifter · muscle gain phase",
};
export const INSIGHTS = [
{
id: 'i-progress',
title: 'Program progress',
icon: 'graph',
category: 'progress',
confidence: 82,
summary: 'Week 6 of a 12-week upper/lower block. Upper-body volume and pressing strength are trending up; leg volume and step count are the main gaps before the next deload.',
bullets: [
'Strength: <strong>bench +7.5kg</strong> · overhead press +5kg since week 1',
'Volume: <strong>16 sets/week</strong> chest & back · legs lagging at 10',
'<strong>Risk:</strong> right shoulder tightness on incline pressing',
],
pinned: true,
sources: 18,
updatedMinutesAgo: 5,
quotes: [
'"Add a second lower day before increasing upper volume." — Program Planner chat',
'"Warm up the rotator cuff before pressing." — Form & Safety Coach',
],
},
{
id: 'i-method',
title: 'Nutrition & recovery',
icon: 'flask',
category: 'theory',
confidence: 71,
summary: 'Protein target is being hit most days; total calories are slightly under the surplus goal. Sleep is the biggest recovery limiter this block.',
bullets: [
'Protein: <strong>1.9 g/kg</strong> avg · target 2.0–2.2 g/kg',
'Calories: <strong>~250 kcal under</strong> the lean-bulk surplus',
'Sleep: <strong>6.2 h avg</strong> — recovery and gym energy suffering',
],
sources: 14,
updatedMinutesAgo: 14,
quotes: [
'"Add a shake + carbs post-workout to close the calorie gap." — Nutrition Strategist',
'"Prioritize 7.5h sleep before adding volume." — Recovery Specialist',
],
},
{
id: 'i-lit',
title: 'Training knowledge',
icon: 'book',
category: 'literature',
confidence: 76,
summary: 'Solid grasp of progressive overload and rep ranges for chest and back. Weaker on leg-day exercise selection and how to program a deload.',
bullets: [
'<strong>Coverage:</strong> hypertrophy rep ranges & progressive overload',
'<strong>Gap:</strong> quad vs. hip-hinge <strong>exercise selection</strong> for legs',
'<strong>Gap:</strong> no clear <strong>deload</strong> protocol planned',
],
sources: 32,
updatedMinutesAgo: 28,
quotes: [
'"Rotate hack squats and RDLs to balance quads and hamstrings." — Hypertrophy Coach',
'"Plan a deload every 5–6 weeks." — Program Planner',
],
},
{
id: 'i-questions',
title: 'Open training questions',
icon: 'sparkles',
category: 'theory',
confidence: 63,
summary: 'Three live threads. Q1 (adding a third training day for legs) gates the next block. Q2–Q3 affect nutrition and recovery choices.',
bullets: [
'<strong>Q1:</strong> Move to a 4-day upper/lower or keep 3 full-body days?',
'<strong>Q2:</strong> Lean-bulk surplus size — 200 or 400 kcal over maintenance?',
'<strong>Q3:</strong> Cardio on rest days without hurting recovery?',
],
sources: 9,
updatedMinutesAgo: 41,
quotes: [
'"A 4th day lets you bring legs up without cutting upper volume." — Program Planner',
'"Keep the surplus small to limit fat gain." — Nutrition Strategist',
],
},
{
id: 'i-next',
title: 'Next steps',
icon: 'arrow',
category: 'action',
confidence: 85,
summary: 'Near-term actions tied to the next training week and the upcoming deload. Two items have slipped a week.',
bullets: [
'Add a <strong>second lower-body day</strong> and rebalance leg volume',
'Hit <strong>2.0 g/kg protein</strong> daily and log every meal for a week',
'Add <strong>10 min mobility</strong> pre-lift for the shoulder',
'Schedule a <strong>deload</strong> for week 7',
],
sources: 7,
updatedMinutesAgo: 9,
quotes: [
'"Under-recovered legs are the #1 progress blocker right now." — Recovery Specialist',
'"Track protein before adding training volume." — Nutrition Strategist',
],
},
{
id: 'i-blockers',
title: 'Blockers & risks',
icon: 'alert',
category: 'risk',
confidence: 74,
summary: 'One physical limiter (shoulder tightness), one lifestyle limiter (sleep). Sleep is the higher risk to progress this block.',
bullets: [
'<strong>Physical:</strong> shoulder tightness limits incline pressing volume',
'<strong>Lifestyle:</strong> sleep under 6.5h is capping recovery and gym energy',
],
sources: 6,
updatedMinutesAgo: 20,
quotes: [
'"Without recovery you cannot express the strength you are building." — Recovery Specialist',
'"Fix sleep before chasing bigger lifts." — Form & Safety Coach',
],
},
];
export const WIDGET_CATALOG = [
{ type: 'bibliography', name: 'Bibliography', desc: 'DOI lookup + BibTeX import; APA/MLA/Chicago/BibTeX export', icon: 'book', cat: 'research', defaultSize: 'M', enhanced: true },
{ type: 'reading-queue', name: 'Reading Queue', desc: 'CrossRef title search + DOI resolve to auto-fill papers', icon: 'list', cat: 'research', defaultSize: 'S', enhanced: true },
{ type: 'notes', name: 'Note Inbox', desc: 'Markdown rendering with full-text search', icon: 'notes', cat: 'research', defaultSize: 'S', enhanced: true },
{ type: 'concept-map', name: 'Concept Map', desc: 'Drag papers as nodes, tag themes', icon: 'network', cat: 'research', defaultSize: 'M', stub: true },
{ type: 'highlights', name: 'Highlights & Quotes', desc: 'Pulled quotes with citation key, copy-formatted', icon: 'cite', cat: 'research', defaultSize: 'M', enhanced: true },
{ type: 'paper-tldr', name: 'Paper TL;DR', desc: 'PDF → claim / method / limits / gaps', icon: 'microscope', cat: 'research', defaultSize: 'M', stub: true },
{ type: 'writing', name: 'Writing Tracker', desc: 'Inline writing pad, multi-chapter, 28-day heatmap', icon: 'pencil', cat: 'writing', defaultSize: 'M', enhanced: true },
{ type: 'outline', name: 'Outline Builder', desc: 'Collapsible tree with indent / outdent / inline editing', icon: 'list', cat: 'writing', defaultSize: 'M', enhanced: true },
{ type: 'latex', name: 'LaTeX Scratchpad', desc: 'Live KaTeX render-as-you-type with snippet chips', icon: 'flask', cat: 'writing', defaultSize: 'M', enhanced: true },
{ type: 'draft-locker', name: 'Draft Locker', desc: 'Versioned chapter drafts', icon: 'shield', cat: 'writing', defaultSize: 'S', stub: true },
{ type: 'kanban', name: 'Task Board', desc: 'Drag-to-move with priority filter chips and due-date sort', icon: 'kanban', cat: 'project', defaultSize: 'L', enhanced: true },
{ type: 'deadlines', name: 'Deadlines', desc: 'Countdown plus per-deadline .ics calendar export', icon: 'calendar', cat: 'project', defaultSize: 'S', enhanced: true },
{ type: 'pomodoro', name: 'Pomodoro', desc: 'Real timer with break cycle and session counter', icon: 'timer', cat: 'project', defaultSize: 'S', enhanced: true },
{ type: 'gantt', name: 'Milestone Timeline', desc: 'Base building → hypertrophy → peak', icon: 'flag', cat: 'project', defaultSize: 'L', stub: true },
{ type: 'meeting-log', name: 'Meeting Log', desc: 'Per-stakeholder, last contact, actions', icon: 'message', cat: 'project', defaultSize: 'M' },
{ type: 'goals', name: 'Goals / OKRs', desc: 'Quarterly milestones with progress sliders', icon: 'bullseye', cat: 'project', defaultSize: 'M' },
{ type: 'calendar', name: 'Calendar', desc: 'Month grid with deadlines and writing days', icon: 'calendar', cat: 'project', defaultSize: 'M', enhanced: true },
{ type: 'activity', name: 'Activity Feed', desc: 'Chronological log of edits across widgets', icon: 'graph', cat: 'project', defaultSize: 'M', enhanced: true },
{ type: 'documenter', name: 'Daily Documenter', desc: 'Date-stamped journal · AI weekly summary (LLM stub)', icon: 'pencil', cat: 'project', defaultSize: 'M', enhanced: true },
{ type: 'phd-journey', name: 'Training Roadmap', desc: 'Milestones from assessment → base building → hypertrophy → peak → maintain', icon: 'flag', cat: 'project', defaultSize: 'M', enhanced: true },
{ type: 'phd-resources', name: 'Fitness Resources', desc: 'Programs, exercise libraries, nutrition guides, and community references', icon: 'star', cat: 'research', defaultSize: 'M', enhanced: true },
{ type: 'mood', name: 'Mood / Burnout Check-in', desc: 'Daily slider, trend graph', icon: 'smile', cat: 'wellness', defaultSize: 'S', stub: true },
{ type: 'sleep', name: 'Sleep & Energy', desc: 'Correlate with productive days', icon: 'heart', cat: 'wellness', defaultSize: 'S', stub: true },
{ type: 'habits', name: 'Habit Tracker', desc: 'Daily research practices', icon: 'flame', cat: 'wellness', defaultSize: 'S' },
{ type: 'focus', name: 'Focus Playlist', desc: 'Ambient sounds & music', icon: 'music', cat: 'wellness', defaultSize: 'S', stub: true },
{ type: 'cfp', name: 'Conference / CFP Tracker', desc: 'Deadlines, fit, submission status', icon: 'send', cat: 'career', defaultSize: 'M', stub: true },
{ type: 'grants', name: 'Grant Tracker', desc: 'Applications, deadlines, awards', icon: 'award', cat: 'career', defaultSize: 'S', stub: true },
{ type: 'crm', name: 'Networking CRM', desc: 'Collaborators, last touch', icon: 'network', cat: 'career', defaultSize: 'M', stub: true },
{ type: 'cv', name: 'CV / Publications', desc: 'Track outputs, generate CV', icon: 'user', cat: 'career', defaultSize: 'S', stub: true },
{ type: 'datasets', name: 'Dataset Library', desc: 'Public datasets by domain', icon: 'database', cat: 'data', defaultSize: 'M', stub: true },
{ type: 'methods', name: 'Methods Cheat Sheet', desc: 'When to use what test', icon: 'flask', cat: 'data', defaultSize: 'M', stub: true },
{ type: 'budget', name: 'Budget Tracker', desc: 'Research spend vs. cap', icon: 'wallet', cat: 'practical', defaultSize: 'S' },
{ type: 'discounts', name: 'Student Discounts', desc: 'Software & services with edu pricing', icon: 'star', cat: 'practical', defaultSize: 'S', stub: true },
{ type: 'reviewer-2', name: 'Reviewer 2 Simulator', desc: 'Paste a plan → harsh, honest critique', icon: 'gavel', cat: 'critic', defaultSize: 'M', critic: true },
{ type: 'devils-advocate', name: 'Devil\'s Advocate', desc: 'Strongest counter-arguments to your plan', icon: 'scale', cat: 'critic', defaultSize: 'M', critic: true },
{ type: 'scope-realism', name: 'Scope Realism Check', desc: 'Brutal feasibility verdict given timeline', icon: 'bullseye', cat: 'critic', defaultSize: 'M', critic: true },
{ type: 'assumption', name: 'Assumption Excavator', desc: 'Names hidden assumptions, asks "what if wrong?"', icon: 'brain', cat: 'critic', defaultSize: 'M', critic: true, stub: true },
{ type: 'whats-missing', name: '"What\'s Missing"', desc: 'Gap analysis on your program or diet', icon: 'alert', cat: 'critic', defaultSize: 'S', critic: true, stub: true },
{ type: 'calibrator', name: 'Confidence Calibrator', desc: 'Challenges every "this always works" claim', icon: 'scale', cat: 'critic', defaultSize: 'S', critic: true, stub: true },
];
export const CATEGORIES = [
{ id: 'all', label: 'All' },
{ id: 'research', label: 'Training' },
{ id: 'writing', label: 'Logging' },
{ id: 'project', label: 'Project' },
{ id: 'wellness', label: 'Wellness' },
{ id: 'career', label: 'Goals' },
{ id: 'data', label: 'Data' },
{ id: 'practical', label: 'Practical' },
{ id: 'critic', label: 'Anti-yes-man', critic: true },
];
// Workspace starts empty — users add widgets from the palette or pick a preset.
export const DEFAULT_LAYOUT = [];
// Curated starter layouts. Each preset assigns its own widget IDs so reseeding
// won't collide with manually-added widgets.
const presetIds = (types) => types.map((t, i) => ({ id: `pre-${t.type}-${i}`, ...t }));
export const WORKSPACE_PRESETS = [
{
id: 'day1-soc',
name: 'Beginner Starter',
desc: 'Get oriented: reading queue, notes, deadlines, task board, pomodoro.',
icon: 'sparkles',
layout: presetIds([
{ type: 'reading-queue', size: 'M' },
{ type: 'bibliography', size: 'M' },
{ type: 'notes', size: 'M' },
{ type: 'deadlines', size: 'S' },
{ type: 'pomodoro', size: 'S' },
{ type: 'kanban', size: 'L' },
]),
},
{
id: 'writing-sprint',
name: 'Program Builder',
desc: 'Plan your split: writing pad, outline, highlights, task board, pomodoro.',
icon: 'pencil',
layout: presetIds([
{ type: 'writing', size: 'M' },
{ type: 'outline', size: 'M' },
{ type: 'pomodoro', size: 'S' },
{ type: 'latex', size: 'M' },
{ type: 'highlights', size: 'M' },
{ type: 'bibliography', size: 'M' },
]),
},
{
id: 'audit-prep',
name: 'Cut Prep',
desc: 'Dial in nutrition and tracking: notes, reading queue, highlights, task board.',
icon: 'book',
layout: presetIds([
{ type: 'bibliography', size: 'L' },
{ type: 'reading-queue', size: 'M' },
{ type: 'notes', size: 'M' },
{ type: 'highlights', size: 'M' },
{ type: 'kanban', size: 'M' },
]),
},
{
id: 'incident-mode',
name: 'Plateau Buster',
desc: 'Break through: planning widgets plus challenge widgets to pressure-test your program.',
icon: 'gavel',
layout: presetIds([
{ type: 'writing', size: 'M' },
{ type: 'outline', size: 'M' },
{ type: 'reviewer-2', size: 'M', critic: true },
{ type: 'devils-advocate', size: 'M', critic: true },
{ type: 'scope-realism', size: 'M', critic: true },
{ type: 'deadlines', size: 'S' },
]),
},
];
// Initial state when a widget is first added — minimal scaffolding, no demo content.
export const EMPTY_STATE = {
bibliography: { format: 'APA', entries: [] },
kanban: {
cols: [
{ id: 'todo', label: 'To Do' },
{ id: 'doing', label: 'Doing' },
{ id: 'stuck', label: 'Stuck' },
{ id: 'done', label: 'Done' },
],
cards: [],
},
pomodoro: { focus: 25, brk: 5, sessionsToday: 0 },
writing: {
chapters: [{ id: 'c-default', name: 'Untitled chapter', target: 500, draft: '' }],
activeChapterId: 'c-default',
dailyTotals: {},
target: 500,
},
deadlines: [],
budget: { cap: 1000, items: [] },
notes: { items: [] },
habits: { items: [] },
goals: { items: [] },
'meeting-log': { items: [] },
'reading-queue': [],
'reviewer-2': { lastDraft: '', lastReview: null },
'devils-advocate': { claim: '', counters: [] },
'scope-realism': {
target: '',
score: 0,
label: 'Set a target',
factors: [],
notes: '',
},
outline: { items: [], expanded: {} },
highlights: { items: [] },
latex: { source: '', displayMode: true },
calendar: { viewMonth: new Date().toISOString().slice(0, 7) },
activity: {},
documenter: { entries: [], lastSummary: null },
'phd-journey': {
// Status per milestone: 'open' | 'in-progress' | 'completed'
// Milestones come from the standard training roadmap (assessment → maintenance)
statuses: {},
notes: {},
},
'phd-resources': {
customLinks: [],
},
};
|