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 local JSON storage (iCloud-ready architecture).
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-migration-plan - Automerge migration implementation plan
Models
- 201-tag - Tag model
- 202-time-record - TimeRecord model
- 203-export-options - Export configuration options
- 204-color-palette - Deterministic OKLCH tag colors
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
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
Testing
- 601-testing-guide - Testing guide and manual procedures
Integrations
- 701-deel - Deel timesheet integration
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
- 913-repository-review - Repository quality review (2025-12-18)
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