# Milestones

## v1.7 Content Generation (Shipped: 2026-04-05)

**Phases completed:** 6 phases, 21 plans, 38 tasks

**Key accomplishments:**

- One-liner:
- One-liner:
- culori/resvg/svgo deps installed, RenderResult bundle types defined, content-job-runner wired to diagram/icon-set/theme-palette switch, and useContentJob SSE hook ready for UI plans
- Diagram renderer synthesizes Mermaid from natural language via LLM (DIAG-01), strips unsafe directives (DIAG-05), renders SVG+PNG via Playwright+DOMPurify+Resvg; icon renderer generates SVG icon sets via LLM, cleans with SVGO, rasterizes to 3 PNG sizes via sharp
- OKLCH palette engine with 7-role dark/light generation from a single hex seed, WCAG AA validation via culori+wcag-contrast, four export formatters (CSS custom props, Tailwind config, VS Code theme, JSON), and nexus-settings.json extended with customTheme persistence
- ContentStudio page with Diagrams and Icons tabs fully functional: prompt+type selector, generate button, SSE progress, SVG preview with download, collapsible source editor (TDD-tested), icon grid with selection and bulk download bar
- All theme UI components built and wired: seed input, palette grid with WCAG badges, scoped live preview (with TDD test coverage for THEME-04), 4-format export tabs, apply confirmation dialog, ThemeContext custom theme extension, ContentStudio Themes tab fully functional
- Full test suite run (30 server + 13 UI component tests passing), server tsc clean, UI tsc clean for Phase 41 files; ThemeContext backward-compat exports restored to fix regression from 41-05 worktree commit
- file-type/xlsx/csv-parse installed, four bundle types added to types.ts, wallpaper/social-post/convert cases wired in content-job-runner, and converter-capabilities service probing pandoc/libreoffice via new execFileNoThrow utility
- LLM SVG wallpaper generation rasterized via sharp at 12 platform dimensions, plus platform-aware social post JSON renderer with hashtags and Instagram carousel support
- Full convert-renderer.ts routing sharp/ffmpeg/xlsx/AI-bridge by format pair, multipart upload route with magic-byte MIME validation returning 202, and GET /api/system/converters capability endpoint
- useSystemProviders hook wires /api/system/providers to ChatInput offline badge, surfacing local Whisper availability via WifiOff icon when voice mode is active
- Four React components + extended ContentStudio tabs: wallpaper generator with 12-platform grouped selector and multi-size app icon grid, social post generator with live character count and hashtag chip copy, carousel collapsible slides
- Drag-drop ConvertPanel with grouped format chips, AI fallback notice, MIME error display, SSE job tracking, and deep-link /convert/:src/:tgt routing
- Playwright HTML-to-PDF renderer for 4 document types (report/invoice/api-docs/one-pager) with PdfDocumentBundle/BrandKitBundle types and content-job-runner wiring
- Full brand identity kit renderer orchestrating logo SVG, 5 avatar sizes, 5 social platform images, email signature HTML, letterhead HTML, guidelines PDF, and ZIP packaging via archiver
- DocumentGeneratePanel, BrandKitPanel, BrandKitResult UI components with pdf-document and brand-kit job submission, PDF/ZIP download, and Documents/Brand tabs added to ContentStudio (7 tabs total)
- Remotion 4.0.445 workspace package with PitchDeck/DemoVideo compositions, cached getBundlePath, concurrency:1 renderPresentationComposition, and presentation job wiring in content-job-runner
- renderPresentation function with LLM pitch-deck/demo-video slide generation (puterChatComplete), Remotion MP4 rendering (concurrency:1 via content-renderer), and SSE content_job.progress events
- PresentationPanel with real-time SSE progress bar, MP4 video player + download, and Presentations tab in ContentStudio — backed by fine-grained data.progress in useContentJob
- 9 content generators registered as installable Nexus skills via local-nexus-content source type, with Creative group seeded and startup sequence unified

---

## v1.6 Voice Pipeline + Minimal Message Bridge (Shipped: 2026-04-04)

**Phases completed:** 4 phases, 12 plans, 14 tasks

**Key accomplishments:**

- Transport-agnostic voice service with Whisper STT cascade, Piper TTS sentence chunking, ffmpeg-static transcoding, and SPOKEN/markdown dual-output formatting — 12 tests all passing
- One-liner:
- Voice pipeline HTTP-accessible via POST /api/transcribe and POST /api/synthesize, with full_voice dual-output prompt injection and messageType persistence in the SSE stream endpoint
- One-liner:
- One-liner:
- Inline audio player (ChatVoicePlayer), voice badge with collapsible markdown (ChatVoiceBadge), and three-pill mode toggle (VoiceModeToggle) — complete output-side voice UI
- voiceMode threaded end-to-end (ChatPanel -> useStreamingChat -> chatApi -> server), VoiceMicButton replacing VoiceRecordButton, ChatVoiceBadge rendering for voice messages in ChatMessage
- grammY long-polling bot with text relay, [AgentName] prefix, session map, and /api/telegram/token + /status management routes wired into app.ts
- OGG download + Whisper transcription + Piper TTS reply wired into existing telegramService, with shared relayToAgent() function and graceful voice degradation
- TelegramStep component with BotFather numbered instructions, live token validation via POST /api/telegram/token, inserted as step 5 in a 7-step NexusOnboardingWizard
- abbreviation handling:
- Task 1 — Voice capability probe:

---

## v1.5 Smart Onboarding + Personal AI Assistant (Shipped: 2026-04-03)

**Phases completed:** 6 phases, 13 plans, 19 tasks

**Key accomplishments:**

- Hardware tier detection (Apple Silicon/GPU/CPU-only) via systeminformation with 3s timeout, file-backed mode persistence via Zod-validated nexus-settings service, extended model catalog with tier arrays, and unauthenticated /api/system/providers endpoint
- One-liner:
- `server/src/services/puter-proxy.ts`
- One-liner:
- 4-step onboarding wizard with Puter/Google/API-key provider cards, adapter auto-detection badges, and post-company-creation credential storage
- Human verification checkpoint for complete provider selection onboarding flow — auto-approved under auto_advance mode, deferred to UAT
- 5-step onboarding wizard with skip buttons on steps 1/2/4, summary screen as step 5, and "Start chatting" CTA that creates workspace then opens chat panel.
- File-backed assistant memory service with write-time credential sanitization and REST endpoints mounted in app.ts.
- One-liner:
- Real AI streaming via puterProxyService with memory-injected system prompt, SSE format fix, and assistant-to-PM handoff route with wired UI button.
- chatFileRoutes and nexusSettingsRoutes mounted in app.ts; voiceEnabled added to nexus-settings; usePiperTts hook and TtsButton component created with @mintplex-labs/piper-tts-web WASM synthesis
- VoiceStep onboarding component (mic detection, enable/skip) inserted as wizard step 4; VoiceRecordButton (STT) and TtsButton (TTS) wired into PersonalAssistant for full voice I/O
- One-liner:

---

## v1.4 Hermes Default Provider (Shipped: 2026-04-02)

**Phases completed:** 3 phases, 6 plans, 9 tasks

**Key accomplishments:**

- Four HERM-01..04 integration gaps closed: hermes_local in SESSIONED_LOCAL_ADAPTERS, Toolsets field edit-only, and hermes session codec round-trip tests added
- One-liner:
- Hermes agent config gains Ollama model dropdown with install callout, and AgentSkillsTab shows purple "Hermes skill" badge for native Hermes skills
- Hermes heartbeat now persists model name + VRAM via jsonb merge, and AgentOverview renders a HermesRuntimeCard showing model, native skill count, and memory usage.
- Board-auth hermes probe route + NexusOnboardingWizard Hermes fallback + adapter-neutral agent templates in NewAgentDialog
- Hermes agents created via wizard get a promptTemplate with Nexus HEARTBEAT.md workflow instructions and Mustache variables, validated by 8 integration tests covering probe logic, template contract, and bundle loading

---

## v1.3 Chat & PWA (Shipped: 2026-04-02)

**Phases completed:** 6 phases, 35 plans, 51 tasks

**Key accomplishments:**

- Four vitest test stub files (46 it.todo cases) establishing Wave 0 scaffolds for chat service, routes, markdown rendering, and keyboard input
- Two Drizzle tables (chat_conversations, chat_messages) with migration SQL, plus TypeScript interfaces and Zod validators exported from @paperclipai/shared
- One-liner:
- Express REST API for conversation+message CRUD with cursor pagination, soft-delete, auto-title, and updatedAt bumping
- One-liner:
- TanStack Query infinite-scroll chat UI: chatApi client, useChatConversations/useChatMessages hooks, ChatConversationList with IntersectionObserver, ChatMessageList with auto-scroll, and fully wired ChatPanel with two-path message send
- DB migration adding updated_at to chat_messages, ChatMessage type update, @tanstack/react-virtual install, 11-role agent-role-colors utility (THEME-03), cursor-blink CSS animation, and 7 Wave 0 test stubs
- `server/src/services/chat.ts`
- Agent identity bar with role-specific colors (THEME-03), agent selector dropdown (CHAT-08), and streaming cursor for visible agent identity on every assistant message (AGENT-04)
- Edit/retry/stop controls wired to ChatMessage — user messages get inline edit textarea, assistant messages get retry RefreshCw, stop button component ready for ChatPanel.
- Slash command routing table (5 commands, /search disabled) and agent @mention autocomplete popover — both standalone, wired into ChatInput in plan 05.
- `ui/src/components/ChatMessageList.tsx`
- One-liner:
- Extended chatService with addSystemMessage helper and messageType support, and added POST handoff and status-update routes that insert typed system messages and create issues from brainstormer specs.
- One-liner:
- ChatMessage.tsx:
- One-liner:
- Six service methods and six route handlers for full-text search (tsvector/ts_rank), bookmark toggle/list, conversation branching with message copy, and Markdown/JSON export with agent name resolution
- Six chatApi methods, two React Query hooks, and four components — search/bookmark/branch UI layer built independently from server routes, ready for wiring in Plan 03.
- One-liner:
- One-liner:
- Complete server-side file system: multipart upload with content-type validation, object-storage persistence, DB record creation, stream download with correct MIME headers, conversation file listing, and cross-conversation reference support.
- Drag-and-drop, clipboard paste, and file picker wired into ChatInput via ChatFileDropZone and useChatFileUpload with XHR progress tracking
- One-liner:
- One-liner:
- PATCH /files/:fileId/promote endpoint and ChatFileCard promote button with FolderUp icon wired to chatApi.promoteFile
- Git versioning layer added to file uploads: gitFileService wraps git CLI with safe execFile, every upload creates a commit, GET /files/:fileId/history exposes git log
- PLACEHOLDERS.md manifest service with addEntry/replaceEntry and POST /files/:fileId/replace endpoint wiring agent-generated uploads to per-project markdown manifests
- VoiceRecordButton with MediaRecorder API wired into ChatInput; POST /transcribe endpoint with whisper-cpp/openai-whisper cascade and graceful 503 fallback
- Cache-first service worker with nexus-v1 cache, push/notificationclick handlers, idb + web-push installed, and 14 Wave 0 test stubs for PWA hooks and PullToRefresh
- React.lazy code splitting for all 37 page components plus Vite manualChunks for react, react-dom, react-router-dom, @tanstack/react-query, react-markdown vendor bundles
- useMediaQuery
- PWA install prompt with iOS fallback, amber offline status banner, and IndexedDB message queue that auto-flushes on reconnection
- End-to-end web push notifications: PostgreSQL push_subscriptions table, VAPID server service, /api/push routes, SW pushManager subscription hook, and engagement-gated permission prompt

---

## v1.2.1 Universal Skill Management (Shipped: 2026-04-01)

**Phases completed:** 1 phases, 2 plans, 2 tasks

**Key accomplishments:**

- One-liner:
- Zone taxonomy (DISPLAY/CODE/STORED), commit-msg hook enforcing [nexus] prefix, and git rerere established as rebase safety infrastructure before any upstream files are modified

---
