# hyprcrd — Electron Desktop App Wraps the PHP backend in an Electron shell. A static PHP binary is bundled per platform so users don't need PHP installed. ## How it works 1. On launch, the app starts PHP's built-in server on a random port (`127.0.0.1`) 2. `router.php` replaces Apache's `.htaccess` rewrite rules 3. A `BrowserWindow` loads `http://127.0.0.1:/` 4. On quit, the PHP process is killed cleanly User data (database + uploads) is stored **outside** the app bundle so it survives updates: - **Dev**: `electron/appdata/` - **Linux**: `~/.config/hyprcrd/data/` - **macOS**: `~/Library/Application Support/hyprcrd/data/` - **Windows**: `%APPDATA%/hyprcrd/data/` ## Development ```bash cd electron npm install npm start # launches the app using system or bundled PHP ``` Requires PHP 8.1+ with `pdo_sqlite` and `zip` extensions — either on the system PATH or as a static binary in `php-bin//`. ## Bundling PHP Static PHP binaries are not checked into git. Fetch them before building: ```bash ./fetch-php.sh # downloads ~20MB per platform from static-php-cli ``` Or place them manually (see `php-bin/README.md` for sources): php-bin/linux/php php-bin/darwin/php php-bin/win32/php.exe The app prefers the bundled binary. If none is found, it falls back to system PHP. If neither exists, a dialog tells the user what to install. ## Building distributables ```bash npm run dist ``` Uses `electron-builder`. Output: | Platform | Format | Location | |----------|----------|-------------------| | macOS | `.dmg` | `dist/` | | Windows | NSIS | `dist/` | | Linux | AppImage | `dist/` | ## File structure ``` electron/ main.js Electron main process — spawns PHP, creates window preload.js Exposes window.hyprcrdElectron (platform, isElectron) router.php PHP built-in server router (replaces .htaccess) fetch-php.sh Downloads static PHP binaries for all platforms php-bin/ Platform-specific PHP binaries (gitignored) ```