Current State: - SQLite initialization completes successfully - API exposure and IPC bridge working correctly - Type definitions and interfaces properly implemented - Enhanced error handling with specific error codes - Comprehensive logging system in place Critical Issue Identified: SQLite initialization timeout causing cascading failures: - Components attempting database operations before initialization complete - Error logging failing due to database unavailability - Multiple components affected (HomeView, AccountView, ImageMethodDialog) - User experience impacted with cache clear prompts Changes Made: - Added proper TypeScript interfaces for SQLite operations - Enhanced SQLiteError class with error codes and context - Implemented input validation utilities - Added detailed logging with timestamps - Improved error categorization and handling - Added result structure validation Type Definitions Added: - SQLiteConnectionOptions - SQLiteQueryOptions - SQLiteExecuteOptions - SQLiteResult - SQLiteEchoResult Error Codes Implemented: - SQLITE_BUSY - SQLITE_NO_TABLE - SQLITE_SYNTAX_ERROR - SQLITE_PLUGIN_UNAVAILABLE - SQLITE_INVALID_OPTIONS - SQLITE_MIGRATION_FAILED - SQLITE_INVALID_RESULT - SQLITE_ECHO_MISMATCH Next Steps: 1. Implement initialization synchronization 2. Add component loading states 3. Improve error recovery mechanisms 4. Add proper error boundaries 5. Implement fallback UI states Affected Files: - electron/src/rt/sqlite-init.ts - src/types/electron.d.ts Note: This is a transitional commit. While the structure and type safety are improved, the initialization timeout issue needs to be addressed in the next commit to prevent cascading failures. Testing Required: - SQLite initialization timing - Component loading sequences - Error recovery scenarios - Database operation retries
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.
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 main.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
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