Minuta Technical Documentation
Website: https://minuta.tools
Navigation
- 100-architecture - Architecture decisions
- 200-models - Data models
- 300-services - Service layer
- 400-ui - UI components
- 500-architecture - Architecture investigations
- 500-reports - Report generation
- 600-testing - Testing guide
- 700-integrations - External integrations
- 800-performance - Performance optimization
- 900-log - Development log
Project Overview
Minuta is a native multiplatform (macOS/iOS) time tracking app using Automerge CRDT storage (supports conflict-free sync via folder sync services like Dropbox, iCloud Drive, Google Drive).
Quick Start
# Build and test (always run tests when building)
cd Shared && swift build && swift test
# Full build with tests
cd Shared && swift test && cd ../Minuta && xcodebuild -scheme Minuta -destination 'platform=iOS Simulator,name=iPhone 17' -quiet build
# Open in Xcode
open Minuta/Minuta.xcodeproj Quick Links
Architecture
- 101-overview - System architecture
- 501-yoga-satori-investigation - Pure Swift SVG renderer
- 502-multi-cloud-sync - Multi-cloud sync architecture
- 503-crdt-data-structures - CRDT data structures
- 504-automerge-migration - Automerge migration exploration
- 505-automerge-storage - Automerge CRDT storage architecture
- 506-cross-process-safety - App/CLI cross-process safety
- 505-automerge-migration-plan - Automerge migration implementation plan (archived)
Models
- 201-tag - Tag model
- 202-time-record - TimeRecord model
- 203-export-options - Export configuration options
- 204-color-palette - Deterministic OKLCH tag colors
- 205-widget-data - Widget snapshot shared via App Group
Services
- 301-file-storage - File storage service
- 302-export - CSV export service
- 303-time-tracking - Time tracking service
- 304-error-handling - Error types and handling
- 305-storage-location - Storage location manager
- 306-report - Report data models
- 307-svg-renderer - SVG report renderer
- 308-stacked-chart - Stacked bar chart rendering
- 309-comments-section - Comments column layout
- 310-webkit-service - PDF/PNG conversion
- 311-cli - Command-line interface reference
- 312-automerge-storage-service - Primary Automerge CRDT storage actor
- 313-conflict-resolution - Merging sync-service conflict copies
- 314-external-change-monitor - Polling for external storage writes
UI Components
- 401-macos - macOS-specific notes
- 402-ios - iOS UI architecture overview
- 403-app-state - Central state management
- 404-storage-location - Folder selection UI
- 405-settings-sheet - Settings modal
- 406-record-editor - Timer and record editor
- 407-history-section - History with filtering
- 408-date-range-picker - Date selection
- 409-tag-filter - Tag filter buttons
- 410-flow-layout - Flex-wrap layout
- 411-share-export-sheet - Export format selection
- 412-deletion-toast - Undo deletion toast
- 413-mac-titlebar-design - Mac title bar / toolbar design
- 414-record-images - Image attachments gallery, picker, viewer
Testing
- 601-testing-guide - Testing guide and manual procedures
- 602-ui-automation-plan - UI automation plan
- 603-ui-testing-implementation - UI testing implementation
- 604-ui-screenshots - UI test screenshots
Performance
- 801-optimization-plan - Performance optimization plan
- 802-scroll-profiling - Scroll profiling
- 803-load-more-bug - Load-more bug investigation
Integrations
- 701-deel - Deel timesheet integration
- 702-testflight - TestFlight distribution
- 703-ci - CI workflow
Development Log
- 901-2024-12-08-init - Project initialization
- 902-2024-12-09-editor - Record editing, deletion & data access
- 903-2024-12-09-multiplatform - Multiplatform migration
- 904-2024-12-12-catalyst - Mac Catalyst migration
- 910-backlog - Backlog (bugs, improvements, future work)
- 911-completed - Completed tasks archive
- 912-execution-plan - Prioritized execution plan
- 912-audit-2025-12-25 - Project audit (2025-12-25)
- 913-repository-review - Repository quality review (2025-12-18)
- 913-plan-smart-history-layout - Plan: smart history layout
- 914-plan-cli-tool - Plan: CLI tool
Key Components
Views
ContentView- Single unified view (no tabs) with all sectionsSettingsSheet- Modal with tags, data folder, import/export optionsHistorySection- Date range filtering with records grouped by dayDateRangePickerView- Date preset buttons + From/To pickersTagFilterView- Tag filter toggle buttons with FlowLayoutRunningTimersSection- Active timers sectionTodaySectionView- Today’s records with soft deleteRunningTimerEditor- Inline editor for running timersEditableRecordRow- Completed record with inline edit modeDeletionToastView- Toast notification for deleted records with undoFlowLayout- Custom Layout for wrapping elements (like CSS flex-wrap)
Services
AppState- Shared state management via @EnvironmentObjectStorageLocationManager- User folder selection with security-scoped bookmarksImportService- HEY CSV importExportService- CSV exportReportService- PDF/SVG/PNG report generation with chartsSVGReportRenderer- Pure Swift SVG generation (no JS)
Utilities
DurationFormatter- Time interval formatting (timer, compact, CSV formats)TagColorGenerator- Deterministic OKLCH-based tag colors from namesOKLCH- Color space conversion (sRGB to OKLCH)CSVParser- CSV parsing and field escapingStringExtensions- XML escaping for SVG generationLogger- OSLog wrapper with app categories
App Intents
StartTimerIntent- Shortcuts: start timer with optional tag/commentStopTimerIntent- Shortcuts: stop all running timers
Project Structure
Minuta/ # iOS + Mac Catalyst Xcode project
Sources/ # SwiftUI views and app code
Services/ # StorageLocationManager
Views/ # All UI components
project.yml # XcodeGen config
Shared/ # Swift Package (models + services)
Sources/MinutaShared/
Models/ # Tag, TimeRecord, ExportOptions, ReportData
Services/ # FileStorageService, ExportService, ImportService, TimeTrackingService, ReportService, SVGReportRenderer
Utilities/ # DurationFormatter, TagColorGenerator, OKLCH, CSVParser, StringExtensions, Logger
docs/ # Documentation