Architecture
Architecture Documentation
Section titled “Architecture Documentation”This document describes the technical architecture of Thought Ledger, including system components, data flow, and design decisions.
System Overview
Section titled “System Overview”Thought Ledger is a local-first AI decision memory system that runs entirely on your device. The architecture prioritizes privacy, performance, and user control.
Core Principles
Section titled “Core Principles”- Local Processing: All AI processing happens locally
- Privacy by Design: No data leaves the device
- Modular Architecture: Components can be updated independently
- Open Standards: Uses open formats and protocols
High-Level Architecture
Section titled “High-Level Architecture”┌─────────────────────────────────────────────────────────────┐│ Thought Ledger System │├─────────────────────────────────────────────────────────────┤│ Web Interface (React/Astro) ││ ├── Decision Dashboard ││ ├── AI Chat Interface ││ └── Analytics & Patterns │├─────────────────────────────────────────────────────────────┤│ API Layer (Node.js/Express) ││ ├── Decision Management ││ ├── AI Integration ││ └── Search & Retrieval │├─────────────────────────────────────────────────────────────┤│ Core Services ││ ├── Decision Memory Engine ││ ├── Pattern Analysis ││ └── Context Management │├─────────────────────────────────────────────────────────────┤│ AI Layer ││ ├── Ollama Integration ││ ├── Model Management ││ └── Prompt Engineering │├─────────────────────────────────────────────────────────────┤│ Data Layer ││ ├── SQLite Database ││ ├── Vector Storage (Embeddings) ││ └── File System (Exports/Backups) │└─────────────────────────────────────────────────────────────┘Component Architecture
Section titled “Component Architecture”1. Web Interface
Section titled “1. Web Interface”Technology Stack: Astro, React, Tailwind CSS
Responsibilities:
- User interaction and decision entry
- Real-time AI chat interface
- Data visualization and analytics
- Responsive design for all devices
Key Features:
- Server-Side Rendering (SSR) for performance
- Progressive Web App (PWA) capabilities
- Offline functionality
- Component-based architecture
2. API Layer
Section titled “2. API Layer”Technology Stack: Node.js, Express.js, TypeScript
Endpoints:
// Decision ManagementPOST /api/decisions // Create new decisionGET /api/decisions // List decisionsGET /api/decisions/:id // Get specific decisionPUT /api/decisions/:id // Update decisionDELETE /api/decisions/:id // Delete decision
// AI IntegrationPOST /api/ai/assist // Get AI assistancePOST /api/ai/chat // AI chat interfaceGET /api/ai/models // Available AI models
// Search & AnalyticsGET /api/search // Search decisionsGET /api/analytics/patterns // Decision patternsGET /api/analytics/insights // Personal insights3. Core Services
Section titled “3. Core Services”Decision Memory Engine
Section titled “Decision Memory Engine”class DecisionMemoryEngine { // Store decisions with full context async storeDecision(decision: Decision): Promise<void>
// Retrieve relevant decisions for context async getRelevantDecisions(context: string): Promise<Decision[]>
// Update decision with outcomes async updateDecisionOutcome(id: string, outcome: Outcome): Promise<void>
// Analyze decision patterns async analyzePatterns(userId: string): Promise<Pattern[]>}Pattern Analysis Service
Section titled “Pattern Analysis Service”class PatternAnalysisService { // Identify recurring decision types async identifyDecisionPatterns(decisions: Decision[]): Promise<Pattern[]>
// Analyze success factors async analyzeSuccessFactors(decisions: Decision[]): Promise<Factor[]>
// Detect personal biases async detectBiases(decisions: Decision[]): Promise<Bias[]>
// Generate insights async generateInsights(userId: string): Promise<Insight[]>}4. AI Layer
Section titled “4. AI Layer”Ollama Integration
Section titled “Ollama Integration”class OllamaService { private baseUrl: string = "http://localhost:11434"
// Generate AI response async generate(prompt: string, model: string): Promise<string>
// List available models async listModels(): Promise<Model[]>
// Pull new model async pullModel(model: string): Promise<void>
// Check model health async healthCheck(): Promise<boolean>}Prompt Engineering
Section titled “Prompt Engineering”Thought Ledger uses specialized prompts for different tasks:
Decision Assistance Prompt:
You are a decision assistant with access to the user's past decisions.Context: {current_context}Relevant History: {relevant_decisions}User's Decision Patterns: {user_patterns}
Provide insights for this decision considering:1. Similar past decisions and their outcomes2. The user's typical decision patterns3. Potential blind spots or biases4. Risk factors based on historyPattern Analysis Prompt:
Analyze these decisions for patterns:{decision_history}
Identify:1. Reccurring decision types2. Success/failure patterns3. Decision-making tendencies4. Areas of strength and improvement5. Data Layer
Section titled “5. Data Layer”Database Schema
Section titled “Database Schema”-- Decisions tableCREATE TABLE decisions ( id TEXT PRIMARY KEY, title TEXT NOT NULL, context TEXT, options TEXT, -- JSON array selected_option TEXT, reasoning TEXT, confidence_level INTEGER, created_at DATETIME, updated_at DATETIME, tags TEXT, -- JSON array metadata TEXT -- JSON object);
-- Outcomes tableCREATE TABLE outcomes ( id TEXT PRIMARY KEY, decision_id TEXT, outcome_description TEXT, success_rating INTEGER, lessons_learned TEXT, recorded_at DATETIME, FOREIGN KEY (decision_id) REFERENCES decisions(id));
-- Embeddings for semantic searchCREATE TABLE decision_embeddings ( decision_id TEXT, embedding BLOB, -- Vector representation model_name TEXT, created_at DATETIME, FOREIGN KEY (decision_id) REFERENCES decisions(id));Vector Storage
Section titled “Vector Storage”For semantic search and similarity matching:
- Embedding Models: Use local sentence transformers
- Vector Database: SQLite with vector extensions
- Similarity Search: Cosine similarity for decision matching
Data Flow
Section titled “Data Flow”Decision Creation Flow
Section titled “Decision Creation Flow”User Input → Web Interface → API Layer → Validation ↓Decision Memory Engine → Database Storage → Vector Embedding ↓AI Service → Context Analysis → Pattern Update → User ResponseAI Assistance Flow
Section titled “AI Assistance Flow”User Query → Web Interface → API Layer → Context Retrieval ↓Relevant Decisions → Pattern Analysis → AI Service (Ollama) ↓AI Response → Insight Generation → Web Interface → UserPattern Analysis Flow
Section titled “Pattern Analysis Flow”Scheduled Task → Decision Retrieval → Pattern Analysis Service ↓Machine Learning → Pattern Detection → Insight Generation ↓Database Update → Notification Service → User InterfaceSecurity Architecture
Section titled “Security Architecture”Privacy Protection
Section titled “Privacy Protection”- Local Processing: All data processing on-device
- No Network Calls: No external API calls for core functionality
- Encryption: Sensitive data encrypted at rest
- Access Control: Optional authentication for sensitive decisions
Data Security
Section titled “Data Security”class SecurityService { // Encrypt sensitive decision data async encryptDecision(data: string, key: string): Promise<string>
// Validate user access async validateAccess(userId: string, decisionId: string): Promise<boolean>
// Audit logging for security events async logSecurityEvent(event: SecurityEvent): Promise<void>}Performance Optimization
Section titled “Performance Optimization”Caching Strategy
Section titled “Caching Strategy”- Decision Cache: Frequently accessed decisions in memory
- AI Response Cache: Cache AI responses for similar queries
- Pattern Cache: Pre-computed patterns for faster analysis
Database Optimization
Section titled “Database Optimization”- Indexing: Strategic indexes on common query patterns
- Connection Pooling: Efficient database connections
- Batch Operations: Bulk operations for large datasets
AI Performance
Section titled “AI Performance”- Model Selection: Choose appropriate model size for hardware
- Prompt Caching: Cache prompt templates and responses
- Parallel Processing: Multiple AI requests when possible
Deployment Architecture
Section titled “Deployment Architecture”Local Deployment
Section titled “Local Deployment”User Device├── Thought Ledger Application├── Ollama Service├── SQLite Database└── Configuration FilesDevelopment Environment
Section titled “Development Environment”# docker-compose.yml for developmentversion: "3.8"services: thought-ledger: build: . ports: - "3000:3000" volumes: - ./data:/app/data environment: - NODE_ENV=development
ollama: image: ollama/ollama ports: - "11434:11434" volumes: - ollama_data:/root/.ollama
volumes: ollama_data:Extensibility
Section titled “Extensibility”Plugin Architecture
Section titled “Plugin Architecture”interface Plugin { name: string version: string initialize(context: PluginContext): Promise<void> onDecisionCreate(decision: Decision): Promise<void> onAIResponse(response: AIResponse): Promise<void>}Integration Points
Section titled “Integration Points”- Webhook Support: External system notifications
- API Extensions: Custom endpoints for specific needs
- Model Plugins: Support for different AI models
- Export Plugins: Custom export formats
Monitoring & Observability
Section titled “Monitoring & Observability”Health Checks
Section titled “Health Checks”class HealthService { async checkDatabase(): Promise<HealthStatus> async checkAIService(): Promise<HealthStatus> async checkSystemResources(): Promise<HealthStatus> async generateHealthReport(): Promise<HealthReport>}Metrics Collection
Section titled “Metrics Collection”- Decision Metrics: Volume, types, outcomes
- AI Performance: Response times, model usage
- System Performance: Memory, CPU, storage usage
- User Engagement: Feature usage, session duration
This architecture ensures Thought Ledger remains private, performant, and user-controlled while providing powerful AI-assisted decision memory capabilities.