Progress
[2026-04-08] Made onboarding wizard Step 4 provider-agnostic. The provider check now fetches all registered CLI providers from the API instead of hardcoding Claude Code. Each provider renders a dynamic card with rich install steps (structured installSteps field on AgentProvider). Removed Codex CLI from "Coming soon" list since it's now a real provider. Added installSteps to claude-code and codex-cli providers, installMessage/installSteps to ProviderInfo type, and included both in the API response.
[2026-04-07] Fixed internal link navigation in the editor. Root cause: no Tiptap Link extension was registered, so regular <a href> tags from markdown links were stripped by Tiptap (only wiki-links survived via the custom WikiLink mark). Added @tiptap/extension-link with openOnClick: false and parseHTML exclusion for wiki-links. Also expanded the click handler to handle both wiki-links (#page: hrefs) and regular internal links (relative/absolute paths), resolving them against the tree and navigating to the matched page.
[2026-04-06] Built the Weasleys' Wizard Wheezes storefront website in cabinet-example/storefront/source/index.html. Features: deep purple & gold magical theme with floating sparkle particles, full-viewport hero with the Diagon Alley shop photo, 4 product cards (Moonbeam Meltdrops, Patronus Pop Rocks, Canary Cream Supremes, Portable Swamp Taffy) with badges and pricing, founders story section with stats, 7-image gallery with hover captions showcasing all departments, 3 testimonials from wizarding world characters, visit/location section with hours and owl order info, newsletter signup with animated feedback, responsive footer. Uses all available images from across the KB. Scroll-triggered fade-in animations, sticky nav with scroll effect, mobile hamburger menu, fully responsive down to 640px.
[2026-04-06] Replaced all 5 cabinet-example webapps with completely new designs. The Daily Prophet (candy-counter): newspaper-style dashboard with parchment texture, rotating headlines, 3-column layout, classified ads ticker. Owl Post (owl-post-crm): sealed-letter CRM with wax-seal avatars, parchment cards, owl flight animation on send. The Laboratory (prank-lab): CRT phosphor-green console with SVG arc gauges, typing animation log, emergency shutdown countdown. The Emporium (the-emporium): NEW luxury product lookbook using AI-generated Americana paintings with zigzag gallery, lightbox, parallax. The Marauder's Map (shop-floor-map): parchment ink-drawn floor plan with animated footstep dots, "Mischief Managed" easter egg.
[2026-04-06] Built "Owl Post" — a Harry Potter-themed CRM and messaging app for the Weasleys' Wizard Wheezes example workspace. Features: deep navy star-field background, parchment-textured lead cards styled as sealed letters with wax-seal avatars (house-colored initials), 4-column Kanban board (Cold/Warm/Hot/Closed) with HTML5 drag-and-drop, animated pipeline funnel bar, search and filter pills (All/Hogwarts/Ministry/Business), 10 leads with full detail expansion (notes, deal timeline, next action), Compose Owl modal with parchment scroll styling and autocomplete recipient field, 4 template wax-seal buttons (Intro/Follow-up/Offer/Thanks) that pre-fill messages, animated owl flight with feather particles on send, toast notifications, full ARIA labels/roles, keyboard navigation, and prefers-reduced-motion support. Single self-contained HTML file.
[2026-04-06] Rebuilt shop-floor-map embedded app from 491-line basic SVG to a full interactive floor management system. Added: isometric gradient fills with depth, interior shelf/bench/crate details and zone icons, pulsing status indicators per zone, slide-in sidebar info panel (replacing center overlay), live metric badges that auto-update, breadcrumb zone selector, customer flow path with animated dots, interactive legend with highlight/dim, restock flagging button, full keyboard navigation (Tab/Arrow/Enter/Escape), ARIA labels and screen reader announcements, responsive layout for sidebar context (stacks on narrow), prefers-reduced-motion support, and a proper header with live clock and store status badge.
[2026-04-06] Rebuilt Prank Lab (cabinet-example/prank-lab/index.html) from 642-line basic version to a full lab monitoring console. Added: SVG arc gauge meters with animated fill and color thresholds, sticky header bar with live clock and experiment count badge, experiment result popup system with success/warning/failure variants, 5-second countdown emergency shutdown with flashing border and warning stripes, lab environment monitor with fluctuating temperature/humidity/air quality/vapor readings and cauldron bay indicators, ingredient inventory with stock level highlighting and reorder button, redesigned experiment cards with progress bars/lead researcher/risk assessment/click-to-expand detail, professional timeline log with category badges and expandable entries. All with proper ARIA labels, keyboard navigation, focus-visible states, prefers-reduced-motion support, and responsive layout.
[2026-04-06] Rebuilt cabinet-example KB from scratch. Expanded from 10 pages to 35+ markdown pages, 6 CSVs, 4 interactive HTML apps (3 full-screen, 1 embedded), a storefront website with symlink + .repo.yaml, kanban board (tasks/board.yaml), 3 scheduled jobs (.jobs/), a wholesale PDF, and a 7-page "How to Use Cabinet" feature guide. All themed around Fred & George's Weasleys' Wizard Wheezes with 3-level hierarchy, 60+ wiki-links, and comprehensive coverage of every Cabinet feature.
[2026-04-06] Added AI Provider check step to onboarding wizard (new step 4, between team selection and community steps). Checks if Claude Code CLI is installed and authenticated via /api/agents/providers, shows numbered setup instructions (subscription, install, login) if not found, and lists Gemini CLI, Codex CLI, Anthropic API, OpenAI API, and Google AI API as "Coming soon" providers. Users can skip if not ready.
[2026-04-06] Built "The Emporium" — a luxury product lookbook/catalog embedded app for the Weasleys' Wizard Wheezes example workspace. Features: full-width hero with gradient overlay, sticky filter bar with category pills (All/Sweets/Pranks/Classics/Experimental), zigzag product gallery with gold-framed Americana painting images, parallax scrolling, IntersectionObserver fade-in reveals, lightbox image viewer, wishlist toggling, product count updates on filter, and a footer CTA section. Six products with ratings, prices in Galleons, effect descriptions, and badges. Fully responsive (stacks on mobile), accessible (skip-link, ARIA, keyboard nav, prefers-reduced-motion), dark gallery aesthetic with gold/cream/burgundy palette. Single self-contained HTML file with .app marker for fullscreen mode.
[2026-04-06] Replaced onboarding welcome step with the exact runcabinet.com hero: dictionary definition card (dict-card with 3 definitions, phonetic, origin footer), gradient "Your knowledge base. Your AI team." tagline, and "free project / open source / self-hosted" badge. All typography matches website: Instrument Serif italic numbers, JetBrains Mono labels, Source Serif body.
[2026-04-06] Rewrote onboarding wizard to match runcabinet.com visual identity: warm cream background (#FAF6F1), brown text (#3B2F2F), accent brown (#8B5E3C), dot-grid background, dict-card style form cards, Instrument Serif italic headings, rounded-full accent buttons, cabinet icon on welcome step. All hardcoded to website tokens so onboarding always looks identical regardless of active theme.
[2026-04-06] Fixed theme consistency across panels by moving theme initialization from ThemePicker into a dedicated ThemeInitializer component mounted at the layout root. Added Appearance tab to Settings with full theme selection grid (light + dark themes).
[2026-04-06] Renamed Paper theme to "Cabinet" in the theme picker menu (internal name stays "paper"). Replaced the sidebar logo image with Instrument Serif italic wordmark matching runcabinet.com style, using text-foreground so it adapts across all themes.
[2026-04-06] Made Paper the default theme for all users including first-time/onboarding visitors. Updated Paper theme to match runcabinet.com aesthetic: clean white/black with Inter body font and Source Serif 4 + Instrument Serif headings. Changed defaultTheme from dark to light.
[2026-04-06] Cleaned up agent detail panel: removed the instructions preview (markdown body) from the main view, keeping only the labeled metadata chips (Role, Department, Type, Heartbeat, Workspace) in a compact flex-wrap layout. Instructions remain fully accessible via the Edit Agent dialog. Added setupComplete flag to agent personas — when an agent is opened in the panel for the first time (flag is false), the Edit Agent dialog auto-opens. Saving settings sets the flag to true so it won't auto-open again.
[2026-04-06] Redesigned "Add agent" flow: button now opens a browser dialog showing library templates + "Start from scratch" option. Selecting a template creates the agent and opens the Edit Agent dialog for customization. Added Save button to Edit Agent dialog. Replaced raw cron inputs with SchedulePicker in both the New Job dialog and Job editor panel.
[2026-04-06] Completely rewrote the Weasleys' Wizard Wheezes storefront (cabinet-example/storefront/source/index.html). New design: "The Enchanted Window Display" — warm candlelit luxury shop aesthetic with deep plum background, amber-gold accents, Playfair Display + DM Sans typography. Features: full-viewport hero with golden vignette overlay and canvas firefly particles, scrolling marquee, bento grid product collection with 4 products and detail overlays, about section with team image and stats, testimonial cards from Luna/Neville/Lee Jordan, visit section with hours, slide-in cart panel with quantity controls and totals, floating cart FAB with bounce badge, IntersectionObserver scroll reveals, responsive bento grid (3-col/2-col/1-col), mobile hamburger nav, full accessibility (skip-link, ARIA, keyboard navigation, focus-visible, prefers-reduced-motion).
[2026-04-06] Removed agent system redundancy: consolidated duplicate AgentPersona/HeartbeatRecord types to canonical exports from persona-manager.ts, replaced duplicate CronPicker/cronToHuman/CRON_PRESETS in agent-detail.tsx with shared SchedulePicker and cron-utils imports, unified AgentCard/AgentSummary into AgentListItem type. All cron displays now show human-readable text (cronToHuman/cronToShortLabel) and all cron edit inputs use SchedulePicker with preset buttons.
[2026-04-06] Agent chat composer textarea now auto-grows with content (min 80px, max 260px) and the jobs section above it shrinks to give it room.
[2026-04-06] The agents conversation terminal now inherits the active Cabinet theme instead of forcing a black console. Added shared terminal color tokens in globals.css, updated WebTerminal to read and live-refresh xterm colors from the root theme vars, and restyled completed conversation transcripts to use the same themed terminal surface.
[2026-04-06] Extended terminal theming across the rest of the app: bottom terminal tabs, AI panel sessions, jobs conversations, and agent session panels now use theme-driven surfaces for both live terminals and ended transcripts.
[2026-04-03] Rebuilt the agents experience around durable filesystem-backed conversations. Added a shared conversation store (data/.agents/.conversations/*), moved manual sessions/jobs/heartbeats onto the daemon PTY runtime, added conversations APIs, and replaced the old agent list/detail split with a three-pane agents workspace focused on live and replayable Claude sessions. Also added scripts/launch-chrome-debug.sh plus npm run debug:chrome for CDP-based Chrome debugging on port 9222.
[2026-04-03] Major agent system refactor — removed "Plays" concept entirely: deleted play-manager.ts, trigger-engine.ts, api/plays/ routes, playbook-catalog.tsx, webhook/[slug] and triggers API routes. Unified all Claude invocations to use PTY via the cabinet daemon (heartbeat.ts runHeartbeat, daemon executeJob). Cleaned up all play references from 15+ components/types/API routes. Build passes clean with no play routes.
[2026-04-03] Dead code removal: deleted agent-dashboard.tsx (never rendered), chat/ components (ChatPage, ChannelList, ChannelView — never used), mention-input.tsx (no longer imported), api/missions/, api/activity/, api/jobs/, api/ai/edit/ (all legacy routes with no frontend callers), lib/missions/, lib/activity/, and removed setViewMode() alias from app-store. Build remains clean.
[2026-04-03] Removed dead code: deleted agent-session-view.tsx (AgentSessionView was never rendered). Extracted GeneralAgentView into its own general-agent-view.tsx and updated the import in app-shell.tsx.
[2026-04-03] Created marketing/reddit-campaign/index.md with a full Reddit organic outreach plan for Bible Way — 15 targeted subreddits across Bible study, church, and podcast categories, a 3-phase engagement strategy, high-value thread search queries, rules, and KPIs.
[2026-04-03] Added @mention support to the agent session view prompt input. Replaced the plain <input> + Send button with the reusable MentionInput component; handleSendPrompt now accepts (text, mentionedPages) and fetches KB page content as context via fetchMentionedPagesContext before building the full prompt.
[2026-04-03] Created product/roadmap/index.md with 5 milestones covering Foundation Launch, 1,000 paying users, 10 church partnerships, public podcast, and Scale & Community — aligned to Bible Way company goals.
[2026-04-03] Created /marketing/app-store/apple/index.md with the iOS App Store listing draft (title, subtitle, keywords, description, copy notes) from the drafts directory.
[2026-04-03] Added marketing/app-store/index.md parent page (launch checklist + platform comparison table) so both App Store listings appear in the sidebar tree. Fixed Android listing title field: Play Store allows 50 chars, not 30; updated to "Bible Way: Read the Bible as One Story" (38 chars).
[2026-04-03] Created /marketing/app-store/android/index.md with the Google Play Store listing draft (title, short description, full description, category, content rating, keyword table, and copy notes).
[2026-04-03] Live agent sessions: agent heartbeats now run via the daemon PTY (same path as AI editor) instead of child_process.spawn. Added POST /sessions to daemon, startManualHeartbeat() to heartbeat.ts, agentSessions slice to ai-panel-store, new AgentLivePanel component (identical card+terminal UX to AI editor panel), and wired into AgentDashboard — clicking a persona opens the live panel where "Run Now" shows a streaming xterm.js terminal.
[2026-03-31] Phase 1, Step 1: Added better-sqlite3 dependency and created DB initialization. Created server/db.ts and src/lib/db.ts (shared accessor for Next.js API routes) with automatic schema migrations. Initial migration (server/migrations/001_initial.sql) creates tables: sessions, messages, activity, job_runs, mission_tasks, schema_version. Database stored at /data/.cabinet.db with WAL mode enabled.
[2026-03-31] Phase 1, Step 2: Created agent library templates in /data/.agents/.library/ for CEO, Editor, Content Marketer, SEO Specialist, Sales Agent, and QA Agent. Each template has a persona.md with full frontmatter (name, slug, emoji, type, department, goals, channels, etc.) and markdown body with role instructions. Added API endpoints: GET /api/agents/library (list templates) and POST /api/agents/library/[slug]/add (instantiate agent from template).
[2026-03-31] Phase 1, Step 3: Built new agent list view (src/components/agents/agent-list.tsx) with card grid layout showing agent emoji, name, type, status indicator, role, and job count. Includes "Add from Library" button that opens a modal dialog browsing available templates grouped by department, with one-click instantiation. Also has a "New Agent" placeholder card.
[2026-03-31] Phase 1, Step 4: Built agent detail view (src/components/agents/agent-detail.tsx) with 5 tabs: Definition (metadata grid + persona body), Jobs (agent's plays list), Skills (placeholder), Sessions (heartbeat history), and Goals (progress bars with color-coded completion). Header shows back button, agent emoji/name, Run/Pause/Refresh controls.
[2026-03-31] Phase 1, Step 5: Restructured job storage to live under agents. Updated job-manager.ts to load jobs from both legacy /data/.jobs/ and new /data/.agents/{slug}/jobs/ directories. Added agentSlug field to JobConfig type. Created agent-scoped job API endpoints: GET/POST /api/agents/[slug]/jobs and GET/PUT/DELETE /api/agents/[slug]/jobs/[id] with run and toggle actions.
[2026-03-31] Phase 1, Step 6: Updated sidebar navigation with Team section (Agents, Missions, Chat) and System section (Activity, Settings). Added NavButton component for consistent nav items with active state highlighting. Added new section types to SectionType union: missions, mission, chat, activity.
[2026-03-31] Phase 1, Step 7: Updated app-shell.tsx routing to use new AgentList and AgentDetail components for agents/agent sections. Added placeholder views for missions, chat, and activity sections. Onboarding completion now navigates to agents view instead of mission-control. Phase 1 (Foundation) is now complete.
[2026-03-31] Phase 2 (Onboarding): Rewrote onboarding wizard with PRD's 5-question flow (company name, description, top 3 goals, team size, immediate priority) plus smart team suggestion step that recommends agents based on user answers. Created /api/onboarding/setup endpoint that: saves company config, marks onboarding complete, instantiates agents from library templates with company context injected, creates default chat channels (#general + department channels), and sets up channel directories. Existing first-run detection in app-shell already works with the new setup. Phase 2 complete.
[2026-03-31] Phase 3 (Missions): Built complete mission system. Storage layer (src/lib/missions/mission-io.ts) combines file-based mission definitions (/data/.missions/{id}/mission.md with frontmatter) and SQLite for task tracking (using mission_tasks table). Full REST API: GET/POST /api/missions, GET/PUT/DELETE /api/missions/[id], POST /api/missions/[id]/tasks, PUT/DELETE /api/missions/[id]/tasks/[tid]. UI components: mission-list.tsx (card list with progress bars, grouped by active/completed), mission-detail.tsx (goal display, progress bar, task list with status icons, inline task creation), create-mission-dialog.tsx (title, goal, output path form). Wired into app-shell routing. Phase 3 complete.
[2026-03-31] Phase 4 (Chat): Built complete internal chat system. Storage layer (src/lib/chat/chat-io.ts) uses file-based channel config (/data/.chat/channels.json) and SQLite messages table for message storage. REST API: GET/POST /api/chat/channels (list/create channels), GET/POST /api/chat/channels/[slug] (get messages/post message/pin). UI: channel-list.tsx (sidebar with channel list, create new channel), channel-view.tsx (message thread with date separators, message input, pin toggle), chat-page.tsx (layout combining channel list and view). Messages poll every 5 seconds. Human can post messages; agent message posting wired via API. Phase 4 complete.
[2026-03-31] Phase 5 (Activity Feed): Built activity event logging system. Storage layer (src/lib/activity/activity-io.ts) uses SQLite activity table with support for agent, event type, summary, details, links, mission, and channel fields. REST API: GET /api/activity (paginated, filterable by agent/type) and POST /api/activity (internal logging). UI: activity-feed.tsx with chronological timeline grouped by date, color-coded event type dots, filter tabs (All, Agent Runs, Completions, Errors). Wired into app-shell routing. Phase 5 complete.
[2026-03-31] Phase 6 (Server & Polish): Created cabinet-daemon.ts extending terminal server with job scheduler (scans agent directories for cron jobs, executes via Claude CLI), WebSocket event bus (broadcast channels for job:started, job:completed, agent:output events), SQLite job run logging, and HTTP trigger endpoint. Updated package.json with dev:daemon, start, start:daemon scripts so npm run start launches both Next.js and daemon. Added @mention detection in chat message posting (returns detected agent slugs). Chat messages now log to activity feed. Removed unused PlaceholderSection. All 6 PRD phases implemented.
[2026-03-31] Fixed cabinet-daemon.ts to include PTY terminal server functionality. The daemon was missing the PTY session management from terminal-server.ts, causing the AI panel to show "Connection error". Merged full PTY support (spawn, reconnect, detach, output capture) into the daemon using noServer WebSocket routing: root path for PTY terminals, /events path for event bus. Also added /sessions and /session/:id/output HTTP endpoints for session management.
[2026-03-31] Fixed agents system — core bug: listPersonas() and readPersona() only looked for flat files ({slug}.md) but PRD restructured agents into directories ({slug}/persona.md). Updated persona-manager.ts to support both formats (directory-based first, flat file fallback). Also updated writePersona to create directory structure and deletePersona to handle directories. Removed mission-control as default view — app now defaults to agents list. Cleaned up all mission-control references from app-shell, tree-view, keyboard-shortcuts, and app-store.
[2026-03-31] Fixed onboarding channel creation — setup endpoint now creates channels from agent channels fields (not just departments), so every channel an agent references (#general, #marketing, #content, #leadership, #sales) gets created with correct member lists. Leadership agents are added to all channels. Fixed company config format to use nested company object. Uses wx flag to avoid overwriting existing messages on re-onboard.
[2026-04-03] Moved Settings from the System nav section to a gear icon button at the bottom of the sidebar, next to the + New Page button on the right.
[2026-04-03] Redesigned agent detail panel: Sessions tab now has a ChatGPT/Claude Code-style session sidebar on the left (session list with status, timestamp, duration) and a content panel on the right showing session output. New session view has centered prompt input. Other tabs (Definition, Jobs, Skills, Goals) remain as-is.
[2026-04-03] Removed Activity and Missions features entirely (nav items, components, app-shell routing, store types, logActivity calls from chat). Redesigned agent detail view: replaced horizontal tabs with vertical sidebar navigation (Definition, Goals, Skills, Jobs, Sessions). Each agent maps to a real subdir on disk at /data/.agents/{slug}/. Updated PRD to reflect all removals and new agent detail layout.
[2026-04-03] Created LLM Comparison embedded app at /data/llm-comparison/ with .app marker for full-screen mode. Interactive side-by-side comparison of 13 LLMs (Claude, GPT, Gemini, DeepSeek, Llama, Grok, Mistral) with benchmark bar charts, feature diff grid, pricing calculator, and tier filters.
[2026-04-03] Removed Chat section from sidebar and routing. Removed Goals tab from agent detail view. Added collapsible agent list in sidebar under Agents — each agent shows emoji, name, and active status dot, clicking navigates directly to the agent detail.
[2026-04-03] Added General agent as a permanent entry at the top of the sidebar agent list (always present, not fetched from API). Editor agent is sorted to appear second, before the rest of the agents.
[2026-04-03] Updated PRD to reflect current state: removed Chat and Goals sections, documented collapsible agent list in sidebar with General (always present) and Editor (sorted first) as defaults, updated sidebar diagram, removed chat storage/API/components references, simplified implementation phases, updated glossary.
[2026-04-03] Fixed AI panel terminal height: when a Claude session is running, the terminal now fills all available vertical space (flex-1) instead of being capped at 300px. Uses min-h-[200px] as a floor.
[2026-04-03] Agent Sessions tab now spawns a real Claude Code terminal (WebTerminal) instead of calling the headless API. When sending a prompt, a live interactive terminal session appears with the agent's persona as context — same component used by the AI Editor panel. Session list sidebar shows a spinning indicator for live sessions.
[2026-04-03] Made agent Definition tab fully editable: click any field (department, type, heartbeat, workspace) to edit inline. Persona instructions have an Edit button that opens a textarea. Removed budget and channels fields. Jobs tab now supports add/remove/edit: create new jobs with name+cron, click cron to edit schedule inline, toggle enabled/disabled, delete jobs.
[2026-04-03] Added CronPicker component with 15 human-readable presets (Every hour, Weekdays at 9am, etc.) plus Custom input. Used in: agent heartbeat field (Definition tab), add-job form (Jobs tab), and inline job schedule editor. Cron values show both the expression and human label.
[2026-04-03] Added job description/prompt field — jobs now have a body that serves as the prompt sent to the agent. Visible as a preview on the job card, editable in the expanded edit form. Add-job form also has a prompt textarea. Persona instructions now render as formatted markdown (prose) using a /api/ai/render-md endpoint, with click-to-edit switching to raw markdown textarea. Added @tailwindcss/typography for prose styling.
[2026-04-03] Replaced emoji with Lucide icons for agents in the sidebar. Each agent slug maps to a specific icon: General=Bot, Editor=Pencil, CEO=Crown, Content Marketer=Megaphone, SEO=Search, QA=ShieldCheck, Sales=BarChart3, Developer=Code. Unknown agents fall back to Bot icon.
[2026-04-03] Removed Skills tab from agent detail view. Added 14 new agent library templates (20 total): COO, CFO, CTO, Product Manager, UX Designer, Data Analyst, Social Media Manager, Growth Marketer, Customer Success, Copywriter, DevOps Engineer, People Ops, Legal Advisor, Researcher. Each has full persona.md with role description, responsibilities, and working style. Updated sidebar icon mapping for all new agent types.
[2026-04-03] Added light cabinet icon as sidebar logo (public/logo-light.png) next to 'Cabinet' text. Updated favicon to match.
[2026-04-06] Built "The Daily Prophet" — a Harry Potter-themed real-time newspaper dashboard for Weasleys' Wizard Wheezes (data/cabinet-example/candy-counter/index.html). Features: UnifrakturMaguntia masthead, parchment texture, rotating banner headlines, 3-column newspaper layout with shop metrics (count-up animation + sparklines), order dispatch cards (expandable), bestseller leaderboard with bar charts, live clock, status indicators, scrolling classifieds ticker, confetti easter egg, and full accessibility (ARIA live regions, keyboard nav, reduced-motion support). Single self-contained HTML file.
[2026-04-03] Fixed scheduled plays never executing: added cron registration for plays with schedule triggers in play-manager.ts. Plays with schedule triggers now get registered with node-cron on app startup (via /api/agents/personas init) and re-registered when plays are created/updated. Added "schedule" case to trigger-engine.ts. Rewrote README.md to match runcabinet.com website style with demo video, problem/solution framing, feature matrix, comparison table, and strong CTAs.
[2026-04-06] Built "The Laboratory" — a Harry Potter-themed R&D experiment tracking console for Weasleys' Wizard Wheezes (data/cabinet-example/prank-lab/index.html). Features: phosphor green CRT monitor aesthetic with scanline overlay, 4 SVG circular gauges with brass bezels (animate from 0, fluctuate live), terminal-style experiment log with color-coded timeline and typing animation, 4 active experiment cards with status badges and progress bars, environment monitoring strip, "Run Experiment" button with random outcomes and confetti on success, emergency shutdown sequence with red flash and countdown overlay, full accessibility (ARIA roles, reduced-motion, keyboard nav). Single self-contained HTML file.
[2026-04-06] Built "The Marauder's Map" — an animated interactive store floor map for Weasleys' Wizard Wheezes (data/cabinet-example/shop-floor-map/index.html). Parchment-and-ink aesthetic inspired by the Harry Potter Marauder's Map. Features: SVG floor plan with 6 zones (Candy Aisle, Prank Shelf, Laboratory, Storage, Checkout, Window Display) each with faint watercolor washes and ink-stroke details, 6 animated footstep dot pairs traversing a customer path via CSS offset-path, fade-in header with "I solemnly swear..." oath, slide-in parchment info panel with status dots/descriptions/metrics/restock flagging, toggle for customer flow visibility, legend with color swatches and status indicators, "Mischief Managed" double-click easter egg, full accessibility (ARIA roles, keyboard arrow navigation, focus states, prefers-reduced-motion). Single self-contained HTML file, embedded without .app marker so Cabinet sidebar stays visible.
[2026-04-06] Built the Weasleys' Wizard Wheezes public storefront (data/cabinet-example/storefront/source/index.html). "Magical Maximalism" e-commerce landing page with deep purple/orange/magenta palette, noise-texture overlay, gradient mesh backgrounds. Sections: sticky glass-blur nav with cart badge, full-viewport split hero with rotated image frame and trust badges, tilted infinite-scroll marquee strip, 2x2 product grid with accent-colored hover shadows and add-to-cart with bounce animation, diagonal-cut about section with stats grid, starfield testimonials (Luna/Neville/Lee Jordan), gradient CTA visit section, 3-column footer with U-No-Poo tagline. Functional slide-out cart drawer with quantity controls, focus trapping, and keyboard dismiss. IntersectionObserver scroll reveals, prefers-reduced-motion support, full ARIA labels, skip-to-content link, responsive down to mobile with hamburger overlay menu. Added .app marker for full-screen iframe mode.
[2026-04-07] Configured Electron macOS app identity and chrome. Added app icon (.icns from runcabinet.com), set name to "Cabinet", bundle ID to com.runcabinet.cabinet, copyright to "© 2026 Hila Shmuel", category to productivity. Switched to hiddenInset title bar with traffic light positioning. Added CSS drag region on header, sidebar-header left padding (80px) for traffic light clearance, and inline script to detect Electron runtime via window.CabinetDesktop class.
[2026-04-07] Fixed wiki-link navigation in the editor. Wiki-links ([[Page Name]] / #page:slug) were rendered but had no click handler, so clicking them did nothing. Added a click event listener in the KBEditor component that intercepts wiki-link clicks, resolves the slug to a tree path (preferring sibling pages under the same parent), expands parent directories in the sidebar, and navigates to the target page via selectPage + loadPage.