9. Rebuild Guide
Recommended Architecture
Stack Selection
| Layer | Technology | Rationale |
|---|---|---|
| Runtime | Node.js 20+ | Claude CLI is a Node-based tool, ecosystem alignment |
| Server | Express.js | Lightweight, well-understood, supports WebSocket upgrade |
| Frontend | React 18 + Vite | Fast builds, HMR, large component ecosystem |
| Database | SQLite (better-sqlite3) | Single-tenant, no separate DB server, filesystem-portable |
| Real-time | WebSocket (ws) | Direct streaming from Claude CLI to browser |
| Terminal | node-pty + xterm.js | PTY emulation for Claude CLI process management |
| AI Engine | Claude CLI (Anthropic) | Core product dependency, provides tool use and file access |
| Styling | CSS Modules / Tailwind | Dark/light theme support required |
| Diagrams | React Flow, Mermaid, Recharts | Workflow editor, inline diagrams, analytics charts |
Architecture Diagram
βββββββββββββββββββββββββββββββββββββββββββββββ
β Browser β
β React SPA (Vite) ββββ WebSocket Client β
ββββββββββββββββ¬βββββββββββββββ¬ββββββββββββββββ
β HTTP β WS
ββββββββββββββββ΄βββββββββββββββ΄ββββββββββββββββ
β Express Server β
β βββββββββββ βββββββββββ ββββββββββββββββ β
β β Routes β βMiddlewareβ β Services β β
β β (API) β β (Auth) β β (Business) β β
β ββββββ¬ββββββ βββββββββββ ββββββββ¬ββββββββ β
β β β β
β ββββββ΄ββββββββββββββββββββββββββ΄βββββββββ β
β β Claude CLI (node-pty) β β
β β βββββββββββββββββββββββββββββββ β β
β β β System Prompt Injections β β β
β β β Personas, Guides, Modes β β β
β β βββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββ β
β β β β β
β ββββββ΄βββββ ββββββββ΄ββββββ ββββ΄βββββββ β
β β SQLite β β File System β β rclone β β
β β (db) β β (docs/files)β β (cloud) β β
β βββββββββββ ββββββββββββββ βββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββ
β
ββββββββ΄βββββββ
β Anthropic β
β Claude API β
β (or Bedrock)β
βββββββββββββββ
Build Phases
See 00-build-order.md for the full 17-phase build sequence.
Critical Path Summary
Phase 1 β 2 β 3 β 4 β 5 must be sequential:
- Foundation -- Express server, SQLite, path utilities, env config
- Auth -- Users table, bcrypt, JWT, middleware chain
- Files -- Project directories, upload/download, safePath, file tree
- Claude CLI -- node-pty spawning, session management, system prompt injection
- Chat -- WebSocket server, React chat UI, streaming, message rendering
Everything after Phase 5 extends the core and can be parallelized.
Parallel Work Streams
After the critical path, these streams can proceed independently:
Stream A: Knowledge & Content
- Phase 6: Knowledge base (doc serving, preview, download)
- Phase 16: Report publisher (PPTX, PDF generation)
Stream B: Automation
- Phase 8: Skills & workflows (SKILL.md parser, React Flow editor)
- Phase 9: Scheduling (cron, execution logging)
Stream C: Integrations
- Phase 10: Git integration
- Phase 11: Cloud drives (OAuth, rclone)
- Phase 12: MCP framework (21 services)
Stream D: Admin & Analytics
- Phase 13: Admin portal (users, analytics)
- Phase 15: AI provider management (Bedrock)
Stream E: Specialty Features
- Phase 7: Onboarding flow
- Phase 14: Meeting transcription
Implementation Risks
| Risk | Impact | Mitigation |
|---|---|---|
| Claude CLI version changes | Breaking changes in CLI interface | Pin CLI version in Dockerfile, test upgrades |
| node-pty compatibility | Platform-specific build issues | Use Docker for consistent builds |
| SQLite concurrency limits | Performance under multi-user load | Single-tenant design limits exposure, busy_timeout helps |
| rclone stability | Cloud drive access failures | Health monitoring, auto-remount, degraded state handling |
| Large knowledge bases | Memory/performance issues | File tree caching, pagination, streaming |
| Docker image size | Slow deployments | Multi-stage build, BuildKit caching |
| MCP ecosystem changes | Breaking protocol changes | Version-pin MCP packages |
Validation Checklist
Phase 1 Complete When:
- Express server starts on configurable port
- SQLite database initializes with full schema
- Health check endpoint responds
- Environment variables load correctly
- Path utilities resolve correctly in Docker and local
Phase 2 Complete When:
- First user can register and becomes admin
- Subsequent registration is blocked
- Login returns valid JWT
- Protected routes reject unauthenticated requests
- Localhost bypass works for internal calls
Phase 3 Complete When:
- Files upload to correct project directory
- File tree loads and displays hierarchy
- File download works for all supported types
- Path traversal attempts are blocked
- File delete with confirmation works
Phase 4 Complete When:
- Claude CLI spawns via node-pty
- System prompt injections are appended correctly
- Model selection works (Claude direct + Bedrock)
- Permission mode configuration applies
- Session directories created and managed
Phase 5 Complete When:
- WebSocket connection established from browser
- User message sent and response streamed back
- Tool calls displayed in collapsible groups
- Markdown with code highlighting renders correctly
- Session history saved and loadable
- Multiple concurrent sessions work
Full System Complete When:
- All 17 phases pass their individual checklists
- Docker build succeeds (multi-stage, <2GB image)
- Container starts and passes health check
- Login β onboarding β chat β file upload β skill run works end-to-end
- Admin can create users, configure AI provider, view analytics
- Scheduled prompts fire and log results
- Cloud drive mounts and file access works
- Git operations work within the container
Migration Notes
From Existing Deployment
When migrating an existing Sasha instance:
- Database: Copy
sasha.dbfile to new container's/app/data/volume - Files: Copy
/home/sasha/all-project-files/to new volume - Skills: Copy
.claude/skills/directory - Config: Transfer environment variables (API keys, secrets)
- Cloud drives: Re-authorize OAuth connections (tokens are encrypted with container-specific key)
Data Portability
- Database is a single SQLite file (portable)
- Knowledge base is plain markdown files (portable)
- Skills are markdown files (portable)
- Cloud drive tokens must be re-authorized
- Session data can be discarded without impact
