README.md
			
		
		
	
	TimeSafari.app - Crowd-Funder for Time - PWA
Time Safari allows people to ease into collaboration: start with expressions of gratitude and expand to crowd-fund with time & money, then record and see the impact of contributions.
Database Migration Status
Current Status: The application is undergoing a migration from Dexie (IndexedDB) to SQLite using absurd-sql. This migration is in Phase 2 with a well-defined migration fence in place.
Migration Progress
- ✅ SQLite Database Service: Fully implemented with absurd-sql
 - ✅ Platform Service Layer: Unified database interface across platforms
 - ✅ Settings Migration: Core user settings transferred
 - ✅ Account Migration: Identity and key management
 - 🔄 Contact Migration: User contact data (via import interface)
 - 📋 Code Cleanup: Remove unused Dexie imports
 
Migration Fence
The migration is controlled by a migration fence that separates legacy Dexie code from the new SQLite implementation. See Migration Fence Definition for complete details.
Key Points:
- Legacy Dexie database is disabled by default (
USE_DEXIE_DB = false) - All database operations go through 
PlatformService - Migration tools provide controlled access to both databases
 - Clear separation between legacy and new code
 
Migration Documentation
- Migration Guide - Complete migration process
 - Migration Fence Definition - Fence boundaries and rules
 - Database Migration Guide - User-facing migration tools
 
Roadmap
See project.task.yaml for current priorities. (Numbers at the beginning of lines are estimated hours. See taskyaml.org for details.)
Setup & Building
Quick start:
- For setup, we recommend pkgx, which installs what you need (either automatically or with the 
devcommand). Core dependencies are typescript & npm; when building for other platforms, you'll need other things such as those in the pkgx.yaml & BUILDING.md files. 
npm install
npm run dev
See BUILDING.md for more details.
Tests
See TESTING.md for detailed test instructions.
Icons
Application icons are in the assets directory, processed by the capacitor-assets command.
To add a Font Awesome icon, add to fontawesome.ts and reference with font-awesome element and icon attribute with the hyphenated name.
Other
Reference Material
- 
Notifications can be type of
toast(self-dismiss),info,success,warning, anddanger. They are done via notiwind and set up in App.vue. - 
If you are deploying in a subdirectory, add it to
publicPathin vue.config.js, eg:publicPath: "/app/time-tracker/", 
Code Organization
The project uses a centralized approach to type definitions and interfaces:
src/interfaces/- Contains all TypeScript interfaces and type definitionsdeepLinks.ts- Deep linking type system and Zod validation schemasgive.ts- Give-related interfaces and type definitionsclaims.ts- Claim-related interfaces and verifiable credentialscommon.ts- Shared interfaces and utility types- Other domain-specific interface files
 
Key principles:
- All interfaces and types are defined in the interfaces folder
 - Zod schemas are used for runtime validation and type generation
 - Domain-specific interfaces are separated into their own files
 - Common interfaces are shared through 
common.ts - Type definitions are generated from Zod schemas where possible
 
Database Architecture
The application uses a platform-agnostic database layer:
src/services/PlatformService.ts- Database interface definitionsrc/services/PlatformServiceFactory.ts- Platform-specific service factorysrc/services/AbsurdSqlDatabaseService.ts- SQLite implementationsrc/db/- Legacy Dexie database (migration in progress)
Development Guidelines:
- Always use 
PlatformServicefor database operations - Never import Dexie directly in application code
 - Test with 
USE_DEXIE_DB = falsefor new features - Use migration tools for data transfer between systems
 
Kudos
Gifts make the world go 'round!
- WebStorm by JetBrains for the free open-source license
 - Máximo Fernández for the 3D code and explanatory post
 - Many tools & libraries such as Nodejs.org, IntelliJ Idea, Veramo.io, Vuejs.org, threejs.org
 - Bush 3D model
 - Forest floor image
 - Time Safari logo assisted by DALL-E in ChatGPT
 - DiceBear and Avataaars for human-looking identicons
 - Some gratitude prompts thanks to Develop Good Habits