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.
 
 
 
 
 
 
Trent Larson 81096a8bee doc: Add instructions to become test user, and other README refactors. 2 days ago
.cursor/rules fix: DataExportSection error 5 days ago
.github/workflows Playwright install 1 year ago
android Merge branch 'master' into build-improvement 5 days ago
assets chore: commit stray files that should have been with the previous commit 2 months ago
doc Add component communication guide with function props preference 4 weeks ago
docker Fix Docker build issues and SQL worker configuration 4 weeks ago
electron WIP: improve font caching and partial fix on test 3 weeks ago
ios Merge branch 'master' into build-improvement 5 days ago
public add another sample boundary frame for the certificate view of a claim 8 months ago
resources Implement proper asset management with capacitor-assets 4 weeks ago
scripts Fix build script to fail on TypeScript errors 1 week ago
src feat: Add easier way for test users to register themselves. 2 days ago
sw_scripts Remove PWA functionality and service worker infrastructure 4 weeks ago
test-playwright fix: ClaimView now correctly displays User #0 registration status 3 weeks ago
test-scripts rename app ID from app.timesafari.app to app.timesafari & adjust tests (Java 20 works) 5 months ago
.browserslistrc init 3 years ago
.cursor-markdown-rules.md docs: update build pattern conversion plan with consistent naming and mode handling 1 month ago
.dockerignore Fix Docker build issues and SQL worker configuration 4 weeks ago
.env.development patch: restored .env.development variables 1 month ago
.env.production Remove manual service worker registration; rely on VitePWA auto-registration 1 month ago
.env.test Remove manual service worker registration; rely on VitePWA auto-registration 1 month ago
.eslintrc.js fix: update ESLint and VS Code settings 3 months ago
.gitignore chore: add coverage folder to gitignore 2 weeks ago
.markdownlint.json docs: update build pattern conversion plan with consistent naming and mode handling 1 month ago
.npmrc WIP: Fix Electron build issues and migrate to @nostr/tools 2 months ago
BUILDING.md doc: Add helpful setup instructions for quick start for new devs. 2 days ago
CHANGELOG.md Merge branch 'master' into build-improvement 5 days ago
CONTRIBUTING.md add recipient description to offers in user's list 1 year ago
Dockerfile Fix Docker build issues and SQL worker configuration 4 weeks ago
Gemfile fix: resolve duplicate APP_SERVER import declarations 3 weeks ago
Gemfile.lock update lock files to match current build 3 weeks ago
LICENSE add license file 8 months ago
README.md doc: Add instructions to become test user, and other README refactors. 2 days ago
TASK_storage.md add documentation for some new work: storage 3 months ago
build.sh feature: adding Dockerfile for online testing or deployment to docker 4 months ago
capacitor-assets.config.json Implement proper asset management with capacitor-assets 4 weeks ago
capacitor.config.json Fix Android emulator API connectivity with cleaner build script approach 2 weeks ago
docker-compose.yml Fix: markdownlint MD012/MD019 errors in build-pattern-conversion-plan.md 1 month ago
index.html Fix: restored viewport-fit for safe-area-insets 3 weeks ago
jest.config.js Finalize Dexie-to-SQLite migration prep: docs, circular dep removal, SQL helpers, tests 1 month ago
package-lock.json chore: Bump version and add "-beta". 2 days ago
package.json chore: Bump version and add "-beta". 2 days 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 undo port change because it may cause a timeout starting the tests (intermittently) 2 weeks 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
tailwind.config.js Fix config 3 years ago
tsconfig.json WIP: fix(AbsurdSqlDatabaseService) fixes to typing and other curious beasts 3 months ago
tsconfig.node.json Integrate TypeScript type checking into build process with conditional execution 2 weeks ago
vite.config.capacitor.mts refactor: reorganize Vite config into modular files 6 months ago
vite.config.common.mts Merge branch 'master' into build-improvement 5 days ago
vite.config.dev.mts WIP: certificate view and dependency updates 6 months ago
vite.config.electron.mts Remove manual service worker registration; rely on VitePWA auto-registration 1 month ago
vite.config.optimized.mts Remove PWA functionality and service worker infrastructure 4 weeks ago
vite.config.utils.mts refactor: reorganize Vite config into modular files 6 months ago
vite.config.web.mts Fix Docker build issues and SQL worker configuration 4 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.

Roadmap

See ClickUp for current priorities.

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 build:web:serve -- --test

To be able to make submissions: go to "profile" (bottom left), go to the bottom and expand "Show Advanced Settings", go to the bottom and to the "Test Page", and finally "Become User 0" to see all the functionality.

See BUILDING.md for comprehensive build instructions for all platforms (Web, Electron, iOS, Android, Docker).

Development Database Clearing

TimeSafari provides a simple script-based approach to clear the local database (not the claim server) 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

Domain Configuration

TimeSafari uses a centralized domain configuration system to ensure consistent URL generation across all environments. This prevents localhost URLs from appearing in shared links during development.

Key Features

  • Production URLs for Sharing: All copy link buttons use production domain
  • Environment-Specific Internal URLs: Internal operations use appropriate environment URLs
  • Single Point of Control: Change domain in one place for entire app
  • Type-Safe Configuration: Full TypeScript support

Quick Reference

// For sharing functionality (environment-specific)
import { APP_SERVER } from "@/constants/app";
const shareLink = `${APP_SERVER}/deep-link/claim/123`;

// For internal operations (environment-specific)
import { APP_SERVER } from "@/constants/app";
const apiUrl = `${APP_SERVER}/api/claim/123`;

Documentation

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, 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
  • 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!