# Building TimeSafari This guide explains how to build TimeSafari for different platforms. ## Prerequisites - Node.js (LTS version recommended) - npm (comes with Node.js) - Git - For iOS builds: macOS with Xcode installed - For Android builds: Android Studio with SDK installed - For desktop builds: Additional build tools based on your OS ## Initial Setup 1. Clone the repository: ```bash git clone [repository-url] cd TimeSafari ``` 2. Install dependencies: ```bash npm install ``` ## Web Build To build for web deployment: 1. Run the production build: ```bash npm run build ``` 2. The built files will be in the `dist` directory. 3. To test the production build locally: ```bash npm run serve ``` ## Desktop Build (Electron) To build the desktop application: 0. You must web build first: ```bash npm run build ``` 1. Run the Electron build: ```bash npm run build:electron ``` 2. The built files will be in `dist-electron`. 3. To run the desktop app: ```bash npx electron dist-electron ``` ## Mobile Builds (Capacitor) ### iOS Build Prerequisites: macOS with Xcode installed 1. Build the web assets: ```bash npm run build -- --mode capacitor ``` 2. Add iOS platform if not already added: ```bash npx cap add ios ``` 3. Update iOS project with latest build: ```bash npx cap sync ios ``` 4. Open the project in Xcode: ```bash npx cap open ios ``` 5. Use Xcode to build and run on simulator or device. ### Android Build Prerequisites: Android Studio with SDK installed 1. Build the web assets: ```bash npm run build -- --mode capacitor ``` 2. Add Android platform if not already added: ```bash npx cap add android ``` 3. Update Android project with latest build: ```bash npx cap sync android ``` 4. Open the project in Android Studio: ```bash npx cap open android ``` 5. Use Android Studio to build and run on emulator or device. ## Development To run the application in development mode: 1. Start the development server: ```bash npm run dev ``` ## Testing Run local tests: ```bash npm run test-local ``` Run all tests (includes building): ```bash npm run test-all ``` ## Linting Check code style: ```bash npm run lint ``` Fix code style issues: ```bash npm run lint-fix ``` ## Environment Configuration ### Development Create a `.env.development` file: ```bash TIME_SAFARI_APP_TITLE="TimeSafari_Dev" VITE_APP_SERVER=http://localhost:3000 VITE_DEFAULT_ENDORSER_API_SERVER=http://localhost:3000 VITE_DEFAULT_IMAGE_API_SERVER=http://localhost:3000 VITE_DEFAULT_PARTNER_API_SERVER=http://localhost:3000 VITE_PASSKEYS_ENABLED=true ``` ### Test/Staging Create a `.env.staging` file: ```bash TIME_SAFARI_APP_TITLE="TimeSafari_Test" VITE_APP_SERVER=https://test.timesafari.app VITE_BVC_MEETUPS_PROJECT_CLAIM_ID=https://endorser.ch/entity/01HWE8FWHQ1YGP7GFZYYPS272F VITE_DEFAULT_ENDORSER_API_SERVER=https://test-api.endorser.ch VITE_DEFAULT_IMAGE_API_SERVER=https://test-image-api.timesafari.app VITE_DEFAULT_PARTNER_API_SERVER=https://test-partner-api.endorser.ch VITE_PASSKEYS_ENABLED=true ``` ### Production The `.env.production` file will be used automatically for production builds. ## Notes - The application uses PWA (Progressive Web App) features for web builds - Electron builds disable PWA features automatically - Build output directories: - Web: `dist/` - Electron: `dist-electron/` - Capacitor: `dist-capacitor/` ## Deployment ### Test Server ```bash # Build using staging environment npm run build -- --mode staging # Deploy to test server rsync -azvu -e "ssh -i ~/.ssh/your_key" dist/ ubuntutest@test.timesafari.app:time-safari/ ``` ### Production Server ```bash # On the production server: pkgx +npm sh cd crowd-funder-for-time-pwa git checkout master && git pull git checkout npm install npm run build cd - # Backup and deploy mv time-safari/dist time-safari-dist-prev.0 mv crowd-funder-for-time-pwa/dist time-safari/ ``` ### Version Management 1. Update CHANGELOG.md with new changes 2. Update version in package.json 3. Commit changes and tag release: ```bash git tag git push origin ``` 4. After deployment, update package.json with next version + "-beta" ## Troubleshooting ### Common Build Issues 1. **Missing Environment Variables** - Check that all required variables are set in your .env file - For development, ensure local services are running on correct ports 2. **Electron Build Failures** - Verify Node.js version compatibility - Check that all required dependencies are installed - Ensure proper paths in electron/main.js 3. **Mobile Build Issues** - For iOS: Xcode command line tools must be installed - For Android: Correct SDK version must be installed - Check Capacitor configuration in capacitor.config.ts