Spaces:
Running
Running
File size: 12,632 Bytes
ffcad5d | 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 | // Demo data for a security program lead preparing for a SOC 2 audit.
export const DEMO_PROJECT = {
title: "Zero Trust Rollout — Production SaaS",
meta: "Security Engineer · Q2 audit prep",
};
export const INSIGHTS = [
{
id: 'i-progress',
title: 'Program progress',
icon: 'graph',
category: 'progress',
confidence: 82,
summary: 'Zero Trust Phase 2 is 78% complete. MFA enforced for workforce; service accounts and legacy VPN exceptions remain the main gaps before audit sampling.',
bullets: [
'Identity: <strong>MFA 94%</strong> workforce · service accounts in remediation',
'Network: micro-segmentation pilot on <strong>3 app tiers</strong>',
'<strong>Risk:</strong> 12 VPN exceptions still lack compensating controls',
],
pinned: true,
sources: 18,
updatedMinutesAgo: 5,
quotes: [
'"MFA rollout blocked on two legacy HR integrations." — IAM workstream notes',
'"Auditors will sample VPN exception register first." — GRC advisor chat',
],
},
{
id: 'i-method',
title: 'Controls posture',
icon: 'flask',
category: 'theory',
confidence: 71,
summary: 'SOC 2 CC6/CC7 mappings are drafted. Detection use cases cover ransomware and cred theft; log retention and IR tabletop evidence are still thin.',
bullets: [
'Mapped: <strong>CC6.1–CC6.7</strong> access controls with Okta + AWS',
'Open: centralized logging retention proof for <strong>365 days</strong>',
'Open: tabletop scenario for <strong>ransomware + exfil</strong> not yet run',
],
sources: 14,
updatedMinutesAgo: 14,
quotes: [
'"Need SIEM retention screenshots before fieldwork." — compliance advisor',
'"Tabletop scheduled but not executed." — IR lead notes',
],
},
{
id: 'i-lit',
title: 'Threat landscape',
icon: 'book',
category: 'literature',
confidence: 76,
summary: 'Strong coverage of identity attacks, SaaS misconfigurations, and supply-chain risks for your stack. Weaker on OT exposure and insider threat playbooks.',
bullets: [
'<strong>Coverage:</strong> MITRE techniques for cloud identity & SaaS',
'<strong>Gap:</strong> limited intel on <strong>OAuth consent phishing</strong> variants',
'<strong>Gap:</strong> no formal insider-threat escalation path documented',
],
sources: 32,
updatedMinutesAgo: 28,
quotes: [
'"OAuth abuse is the fastest-moving thread in your sector." — threat intel advisor',
'"Insider playbook is a one-pager — not enough for audit." — GRC advisor',
],
},
{
id: 'i-questions',
title: 'Open security questions',
icon: 'sparkles',
category: 'theory',
confidence: 63,
summary: 'Three live threads. Q1 (scope of zero trust for contractors) gates architecture sign-off. Q2–Q3 affect detection engineering priorities.',
bullets: [
'<strong>Q1:</strong> Do contractors get full ZTNA or bastion-only access?',
'<strong>Q2:</strong> Which SIEM detections are in-scope for SOC 2 evidence?',
'<strong>Q3:</strong> Is customer data in EU regions in scope for DPA addendum?',
],
sources: 9,
updatedMinutesAgo: 41,
quotes: [
'"Contractor access model blocks network design." — architect advisor',
'"EU data residency may expand audit scope." — privacy advisor',
],
},
{
id: 'i-next',
title: 'Next steps',
icon: 'arrow',
category: 'action',
confidence: 85,
summary: 'Near-term actions tied to audit date and production cutover. Two items have slipped one sprint.',
bullets: [
'Close <strong>12 VPN exceptions</strong> or document compensating controls',
'Run ransomware tabletop & upload minutes to evidence locker',
'Ship <strong>5 high-fidelity detections</strong> to production SIEM',
'Finalize vendor SOC 2 bridge letter for subprocessors',
],
sources: 7,
updatedMinutesAgo: 9,
quotes: [
'"VPN exceptions are the #1 audit finding risk." — GRC advisor',
'"Detections without tuning will false-positive in week one." — SOC advisor',
],
},
{
id: 'i-blockers',
title: 'Blockers & risks',
icon: 'alert',
category: 'risk',
confidence: 74,
summary: 'One technical blocker (legacy logging), one governance blocker (exception approvals). Governance is the higher audit risk.',
bullets: [
'<strong>Technical:</strong> legacy app logs not reaching SIEM — 18% of prod traffic',
'<strong>Governance:</strong> exception approval SLA > 10 days — auditors will flag',
],
sources: 6,
updatedMinutesAgo: 20,
quotes: [
'"Without those logs you cannot prove detective controls." — detection engineer',
'"Exception backlog reads as control failure." — devil\'s advocate advisor',
],
},
];
export const WIDGET_CATALOG = [
{ type: 'reading-queue', name: 'Reading Queue', desc: 'Advisories, breach write-ups, and reports to work through', icon: 'list', cat: 'research', defaultSize: 'S', enhanced: true },
{ type: 'notes', name: 'Note Inbox', desc: 'Markdown security notes with full-text search', icon: 'notes', cat: 'research', defaultSize: 'S', enhanced: true },
{ type: 'highlights', name: 'Highlights & Quotes', desc: 'Key excerpts from reports and advisories, with source', icon: 'cite', cat: 'research', defaultSize: 'M', enhanced: true },
{ type: 'phd-resources', name: 'Security Resources', desc: 'Frameworks, tools, training, and community references', icon: 'star', cat: 'research', defaultSize: 'M', enhanced: true },
{ type: 'writing', name: 'Doc Drafting', desc: 'Draft policies, runbooks, and reports; 28-day writing heatmap', icon: 'pencil', cat: 'writing', defaultSize: 'M', enhanced: true },
{ type: 'outline', name: 'Outline Builder', desc: 'Structure a policy, report, or runbook before drafting', icon: 'list', cat: 'writing', defaultSize: 'M', enhanced: true },
{ type: 'kanban', name: 'Task Board', desc: 'Remediation and project tasks with priority filters', icon: 'kanban', cat: 'project', defaultSize: 'L', enhanced: true },
{ type: 'deadlines', name: 'Deadlines', desc: 'Audit dates, cert renewals, patch windows — with .ics 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: 'meeting-log', name: 'Meeting Log', desc: 'Per-stakeholder contact history and action items', icon: 'message', cat: 'project', defaultSize: 'M' },
{ type: 'goals', name: 'Goals / OKRs', desc: 'Quarterly security milestones with progress sliders', icon: 'bullseye', cat: 'project', defaultSize: 'M' },
{ type: 'calendar', name: 'Calendar', desc: 'Month grid with deadlines and work 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 work journal with weekly summary', icon: 'pencil', cat: 'project', defaultSize: 'M', enhanced: true },
{ type: 'phd-journey', name: 'Security Program Roadmap', desc: 'Milestones from assessment → hardening → audit → steady state', icon: 'flag', cat: 'project', defaultSize: 'M', enhanced: true },
{ type: 'habits', name: 'Habit Tracker', desc: 'Daily security practices — reviews, backups, alert triage', icon: 'flame', cat: 'wellness', defaultSize: 'S' },
{ type: 'budget', name: 'Budget Tracker', desc: 'Security spend vs. cap — tools, training, services', icon: 'wallet', cat: 'practical', defaultSize: 'S' },
{ type: 'reviewer-2', name: 'Red Team Reviewer', desc: 'Paste a draft policy or plan → adversarial critique', icon: 'gavel', cat: 'critic', defaultSize: 'M', critic: true },
{ type: 'devils-advocate', name: 'Devil\'s Advocate', desc: 'Strongest counter-arguments to your security plan', icon: 'scale', cat: 'critic', defaultSize: 'M', critic: true },
{ type: 'scope-realism', name: 'Scope Realism Check', desc: 'Blunt feasibility verdict for your rollout timeline', icon: 'bullseye', cat: 'critic', defaultSize: 'M', critic: true },
];
export const CATEGORIES = [
{ id: 'all', label: 'All' },
{ id: 'research', label: 'Threat Intel' },
{ id: 'writing', label: 'Docs & Policies' },
{ id: 'project', label: 'Project' },
{ id: 'wellness', label: 'Practice' },
{ 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: 'SOC Starter',
desc: 'Get oriented: reading queue, notes, deadlines, kanban, pomodoro.',
icon: 'sparkles',
layout: presetIds([
{ type: 'reading-queue', size: 'M' },
{ type: 'notes', size: 'M' },
{ type: 'deadlines', size: 'S' },
{ type: 'pomodoro', size: 'S' },
{ type: 'kanban', size: 'L' },
{ type: 'activity', size: 'M' },
]),
},
{
id: 'writing-sprint',
name: 'Policy Sprint',
desc: 'Focus mode for drafting: doc pad, outline, highlights, pomodoro, red-team review.',
icon: 'pencil',
layout: presetIds([
{ type: 'writing', size: 'M' },
{ type: 'outline', size: 'M' },
{ type: 'pomodoro', size: 'S' },
{ type: 'highlights', size: 'M' },
{ type: 'reviewer-2', size: 'M', critic: true },
]),
},
{
id: 'audit-prep',
name: 'Audit Prep',
desc: 'Evidence-heavy: reading queue, notes, highlights, kanban, deadlines, goals.',
icon: 'book',
layout: presetIds([
{ type: 'reading-queue', size: 'M' },
{ type: 'notes', size: 'M' },
{ type: 'highlights', size: 'M' },
{ type: 'kanban', size: 'L' },
{ type: 'deadlines', size: 'S' },
{ type: 'goals', size: 'M' },
]),
},
{
id: 'incident-mode',
name: 'Incident Mode',
desc: 'Active response: kanban, deadlines, meeting log, doc pad, challenge widgets.',
icon: 'gavel',
layout: presetIds([
{ type: 'kanban', size: 'L' },
{ type: 'deadlines', size: 'S' },
{ type: 'meeting-log', size: 'M' },
{ type: 'writing', size: 'M' },
{ type: 'devils-advocate', size: 'M', critic: true },
{ type: 'scope-realism', size: 'M', critic: true },
]),
},
];
// 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 security program roadmap (assessment → steady state)
statuses: {},
notes: {},
},
'phd-resources': {
customLinks: [],
},
};
|