Files
hyprcrd/electron
thandClaude Opus 4.6 82b2ebc15f bookmarks: column-based bookmark manager plugin
New plugin at public/plugins/bookmarks/ — bookmark lists stored as
cards tagged #bookmarks with a JSON body. Board cards render as
coloured tiles (70% card colour + surface) with a centred link icon,
title, and date/bucket metadata; no body preview.

Clicking opens a full-screen overlay with:
  - Named columns (click header to rename, right-click for
    rename + delete), + button to add columns
  - Bookmark items: favicon (stored as data: URI via server-side
    fetch-meta) + title with ellipsis. Click opens URL in new tab.
  - Right-click item → rename or delete
  - Positional drag-and-drop between and within columns — accent
    drop-indicator line shows the insertion point
  - Full-width slider sets relative column width, persisted per card
  - Horizontal wheel-to-scroll on the column container

Adding a bookmark reads the clipboard; if it contains a URL, the
backend fetches <title> + favicon (as base64 data: URI, ≤32 KB) so
the card is fully self-contained. Non-URL clipboard → manual entry
dialog. Also accepts card:123 links — rendered with a card icon in
the linked card's colour; click opens the linked card's detail view
or, if it's another bookmark list, switches the overlay to it.

Multiple bookmark lists supported: header button always shows a
picker (even with one list) with a "new list" option. New lists
inherit the active bucket. Overlay title is click-to-rename.

Tests: plugin registration, header button injection, board card
decoration, overlay open/close + column + item rendering, fetch-meta
API shape, card-link icon rendering, column-width persistence.

Also fixes the flaky undo due_date test — replaced a fixed sleep
with waitForStateCard polling so the undo PATCH has time to settle.

Bumps to 1.9.23.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 12:33:18 +02:00
..
2026-04-12 16:09:34 +02:00
2026-04-12 16:09:34 +02:00
2026-04-12 16:09:34 +02:00
2026-04-12 16:09:34 +02:00
2026-04-12 18:00:06 +02:00

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:<port>/
  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

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/<platform>/.

Bundling PHP

Static PHP binaries are not checked into git. Fetch them before building:

./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

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)