From b60c5ee619e46f9d1cbbf002a1c5e80c0827a92c Mon Sep 17 00:00:00 2001 From: th Date: Tue, 7 Apr 2026 22:45:33 +0200 Subject: [PATCH] readme --- README.md | 149 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..5e60328 --- /dev/null +++ b/README.md @@ -0,0 +1,149 @@ +# hyprcrd + +A self-hosted card/note manager with markdown, tags, image galleries, and Obsidian-compatible export. + +## Requirements + +- PHP 8.3+ +- Apache with `mod_rewrite` +- PHP extensions: `pdo_sqlite`, `zip` + +No external dependencies. All frontend libraries load from CDN. + +## Quick Start (Docker) + +```bash +git clone https://git.uesome.de/tanztee/hyprcrd.git +cd hyprcrd +docker build -t hyprcrd . +docker run -d -p 8080:80 -v hyprcrd-data:/var/www/html/data hyprcrd +``` + +Open `http://localhost:8080` and set your password on first visit. + +The `-v hyprcrd-data:/var/www/html/data` flag persists the database across container restarts. + +## Manual Installation + +### 1. Clone + +```bash +git clone https://git.uesome.de/tanztee/hyprcrd.git +cd hyprcrd +``` + +### 2. Set document root + +Point your web server's document root to the `public/` directory. + +**Apache vhost example:** + +```apache + + ServerName hyprcrd.local + DocumentRoot /path/to/hyprcrd/public + + + AllowOverride All + Require all granted + + +``` + +Make sure `mod_rewrite` is enabled: + +```bash +a2enmod rewrite +systemctl restart apache2 +``` + +### 3. Set permissions + +```bash +mkdir -p data public/uploads +chmod 755 data +chmod 777 public/uploads +``` + +The web server user (e.g. `www-data`) needs write access to both directories. + +### 4. PHP settings (optional) + +For larger image uploads, adjust in `php.ini`: + +```ini +upload_max_filesize = 20M +post_max_size = 22M +``` + +### 5. Open and set password + +Navigate to your URL. On first visit, you'll be prompted to set a password (min. 4 characters). That's it. + +## Directory Structure + +``` +hyprcrd/ +├── config.php # App constants (auto-configured) +├── Dockerfile +├── docker-entrypoint.sh +├── src/ +│ ├── bootstrap.php # Initialization +│ └── Database.php # SQLite schema & migrations +├── public/ # Document root +│ ├── index.php # Entry point & API +│ ├── .htaccess # URL rewriting +│ ├── css/style.css +│ ├── js/ +│ │ ├── app.js # Orchestrator +│ │ └── modules/ # Feature modules +│ └── uploads/ # User media (writable) +└── data/ + └── hyprcrd.db # SQLite database (auto-created) +``` + +## Features + +- **Cards** with markdown body, color, tags, and position +- **Buckets** for organizing cards into groups +- **Tags** written as `#tagname` or hierarchical `#parent/child` in card body, extracted automatically +- **Markdown** with `[[Card Title]]` wiki-links, ```` ```gallery ```` image galleries, ```` ```tree ```` list views +- **Search** combining text and `#tag` filters (e.g. `#project meeting notes`) +- **Image gallery** with orphan detection and fullscreen viewer +- **Split view** showing tag-related and content-related cards +- **Import/Export** as JSON+media ZIP or Obsidian/Logseq-compatible markdown vault +- **Drag & drop** card reordering and grouping +- **Keyboard shortcuts**: `Ctrl+K` search, `Shift+scroll` zoom, arrow keys in autocomplete + +## Data & Backup + +All data lives in two places: + +- `data/hyprcrd.db` — SQLite database (cards, buckets, settings) +- `public/uploads/` — uploaded images and audio + +Back up both to preserve everything. The database auto-migrates on startup. + +## Export Formats + +- **JSON export** (`export` button) — full backup with media, re-importable +- **Markdown vault** (`vault` button) — Obsidian/Logseq-compatible structure: + ``` + Bucket Name/ + Card Title.md # YAML frontmatter + markdown body + attachments/ + image.jpg + ``` + +## Security + +- Bcrypt password hashing +- CSRF protection on all mutations +- Rate-limited login (5 attempts/60s) +- Upload directory blocks PHP execution +- DOMPurify sanitizes all rendered markdown +- Security headers (X-Frame-Options, HSTS, etc.) + +## License + +MIT