You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
Matthew Raymer abd8f7a5dd feat: implement script-based database clearing for development 2 weeks ago
.cursor/rules docs: update build pattern conversion plan with consistent naming and mode handling 3 weeks ago
.github/workflows Playwright install 1 year ago
android chore: update Android build dependencies 3 weeks ago
assets chore: commit stray files that should have been with the previous commit 4 weeks ago
dev-dist feat: integrate PWA functionality with platform service architecture 2 weeks ago
doc Migrate ContactQRScan views to use mixin parseJsonField 3 weeks ago
docker Fix: markdownlint MD012/MD019 errors in build-pattern-conversion-plan.md 2 weeks ago
docs feat: implement script-based database clearing for development 2 weeks ago
electron feat: implement script-based database clearing for development 2 weeks ago
ios on mobile: bump version to 1.0.2 and build to 35 1 month ago
public add another sample boundary frame for the certificate view of a claim 7 months ago
scripts feat: implement script-based database clearing for development 2 weeks ago
src Fix HomeView registration status detection for imported users 2 weeks ago
sw_scripts switch the encryption secret from localStorage to IndexedDB (because localStorage gets lost so often) 8 months ago
test-playwright Fix Playwright tests: API config and offer tests 2 weeks ago
test-scripts rename app ID from app.timesafari.app to app.timesafari & adjust tests (Java 20 works) 4 months ago
.browserslistrc init 3 years ago
.cursor-markdown-rules.md docs: update build pattern conversion plan with consistent naming and mode handling 3 weeks ago
.dockerignore migration: move to bash based build scripts 1 month ago
.env.development Fix: markdownlint MD012/MD019 errors in build-pattern-conversion-plan.md 2 weeks ago
.env.production Fix: markdownlint MD012/MD019 errors in build-pattern-conversion-plan.md 2 weeks ago
.env.test Fix: markdownlint MD012/MD019 errors in build-pattern-conversion-plan.md 2 weeks ago
.eslintrc.js fix: update ESLint and VS Code settings 2 months ago
.gitignore feat: Add Electron dependencies and development scripts 1 month ago
.markdownlint.json docs: update build pattern conversion plan with consistent naming and mode handling 3 weeks ago
.npmrc WIP: Fix Electron build issues and migrate to @nostr/tools 1 month ago
BUILDING.md Add single-instance enforcement to Electron app 2 weeks ago
CHANGELOG.md bump to version 1.0.3-beta 1 month ago
CONTRIBUTING.md add recipient description to offers in user's list 12 months ago
Dockerfile Fix: markdownlint MD012/MD019 errors in build-pattern-conversion-plan.md 2 weeks ago
Gemfile feat: Add Fastlane configuration for mobile app deployment 5 months ago
Gemfile.lock feat(ios): enhance iOS test automation and fix dependencies 5 months ago
LICENSE add license file 8 months ago
README.md feat: implement script-based database clearing for development 2 weeks ago
TASK_storage.md add documentation for some new work: storage 2 months ago
WORKER_ONLY_DATABASE_IMPLEMENTATION.md Remove debug logging from generateAndRegisterEthrUser test utility 3 weeks ago
build.sh feature: adding Dockerfile for online testing or deployment to docker 3 months ago
capacitor.config.json feat(build): add automated Android resource detection and generation 4 weeks ago
docker-compose.yml Fix: markdownlint MD012/MD019 errors in build-pattern-conversion-plan.md 2 weeks ago
experiment.sh # Commit Message for SharedArrayBuffer Platform Exclusion 3 weeks ago
index.html Fix CORS restrictions and development server configuration 3 weeks ago
jest.config.js Finalize Dexie-to-SQLite migration prep: docs, circular dep removal, SQL helpers, tests 3 weeks ago
package-lock.json Finalize Dexie-to-SQLite migration prep: docs, circular dep removal, SQL helpers, tests 3 weeks ago
package.json refactor: implement clean modular Electron build system 2 weeks ago
pkgx.yaml disable SQLite in Java & Swift (since they don't compile) & add SQL queueing on startup 2 months ago
playwright.config-local.ts Fix Playwright test selector and clean up debug logging 2 weeks ago
playwright.config.ts Refatored vite.config to be a bit more streamlined before adding alternate build options. This did end up requiring me to remove @ from imports for some reason. Tests came out fine. 7 months ago
postcss.config.js Adding Tailwind and start application views 3 years ago
project.task.yaml update ClickUp link to a public link 1 year ago
sw_combine.js combine all service-worker scripts into a single file to try and ensure included scripts aren't lost 1 year ago
tailwind.config.js Fix config 3 years ago
temp.har WIP: Electron asset path and renderer build fixes 1 month ago
tsconfig.json WIP: fix(AbsurdSqlDatabaseService) fixes to typing and other curious beasts 2 months ago
tsconfig.node.json refactor(electron): improve build process and configuration 3 months ago
vite.config.capacitor.mts refactor: reorganize Vite config into modular files 5 months ago
vite.config.common.mts Fix: markdownlint MD012/MD019 errors in build-pattern-conversion-plan.md 2 weeks ago
vite.config.dev.mts WIP: certificate view and dependency updates 5 months ago
vite.config.electron.mts fix(electron): suppress DevTools source map error for Capacitor SQLite plugin 2 weeks ago
vite.config.mts WIP: Fix Electron build issues and migrate to @nostr/tools 1 month ago
vite.config.optimized.mts docs: update build pattern conversion plan with consistent naming and mode handling 3 weeks ago
vite.config.ts Fix CORS restrictions and development server configuration 3 weeks ago
vite.config.utils.mts refactor: reorganize Vite config into modular files 5 months ago
vite.config.web.mts Enable full PWA install experience in all web modes 2 weeks ago

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
  • All database operations go through PlatformServiceMixin
  • Migration tools provide controlled access to both databases
  • Clear separation between legacy and new code

Migration Documentation

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 dev command). 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, and danger. They are done via notiwind and set up in App.vue.

  • Customize Vue configuration.

  • If you are deploying in a subdirectory, add it to publicPath in 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 definitions
    • deepLinks.ts - Deep linking type system and Zod validation schemas
    • give.ts - Give-related interfaces and type definitions
    • claims.ts - Claim-related interfaces and verifiable credentials
    • common.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 with Vue mixins for service access:

  • src/services/PlatformService.ts - Database interface definition
  • src/services/PlatformServiceFactory.ts - Platform-specific service factory
  • src/services/AbsurdSqlDatabaseService.ts - SQLite implementation
  • src/utils/PlatformServiceMixin.ts - Vue mixin for database access with caching
  • src/db/ - Legacy Dexie database (migration in progress)

Development Guidelines:

  • Always use PlatformServiceMixin for database operations in components
  • Never import Dexie directly in application code
  • Test with PlatformServiceMixin for new features
  • Use migration tools for data transfer between systems
  • Leverage mixin's ultra-concise methods: $db(), $exec(), $one(), $contacts(), $settings()

Architecture Decision: The project uses Vue mixins over Composition API composables for platform service access. See Architecture Decisions for detailed rationale.

Kudos

Gifts make the world go 'round!

Development Database Clearing

TimeSafari provides a simple script-based approach to clear the database for development purposes.

Quick Usage

# Run the database clearing script
./scripts/clear-database.sh

# Then restart your development server
npm run build:electron:dev  # For Electron
npm run build:web:dev       # For Web

What It Does

Electron (Desktop App)

  • Automatically finds and clears the SQLite database files
  • Works on Linux, macOS, and Windows
  • Clears all data and forces fresh migrations on next startup

Web Browser

  • Provides instructions for using custom browser data directories
  • Shows manual clearing via browser DevTools
  • Ensures reliable database clearing without browser complications

Safety Features

  • Interactive Script: Guides you through the process
  • Platform Detection: Automatically detects your OS
  • Clear Instructions: Step-by-step guidance for each platform
  • Safe Paths: Only clears TimeSafari-specific data

Manual Commands (if needed)

Electron Database Location

# Linux
rm -rf ~/.config/TimeSafari/*

# macOS  
rm -rf ~/Library/Application\ Support/TimeSafari/*

# Windows
rmdir /s /q %APPDATA%\TimeSafari

Web Browser (Custom Data Directory)

# Create isolated browser profile
mkdir ~/timesafari-dev-data

# Start browser with custom profile
google-chrome --user-data-dir=~/timesafari-dev-data

# Clear when needed
rm -rf ~/timesafari-dev-data

See the script for complete platform-specific instructions.