replace double dashes with single dashes in README

This commit is contained in:
Your Name
2026-02-19 20:23:01 +02:00
parent 3d7dc4f875
commit 4ca553784e

136
README.md
View File

@@ -20,7 +20,7 @@
Your productivity tools shouldn't phone home. They shouldn't harvest your habits. They shouldn't stop working when a company pivots to AI or gets acqui-hired.
OpenPylon is a desktop Kanban application that keeps everything on your machine. Every board, card, and attachment is a plain JSON file in a folder next to the executable. Copy it to a USB drive. Back it up to a NAS. Share it with your team over a local network. The data is yours -- always has been, always will be.
OpenPylon is a desktop Kanban application that keeps everything on your machine. Every board, card, and attachment is a plain JSON file in a folder next to the executable. Copy it to a USB drive. Back it up to a NAS. Share it with your team over a local network. The data is yours - always has been, always will be.
No subscription. No signup. No server between you and your work. No one profits from your productivity except you.
@@ -33,44 +33,44 @@ No subscription. No signup. No server between you and your work. No one profits
### 📋 Boards
- **Unlimited boards** with custom accent colors and editable titles
- **Three built-in templates** -- Blank, Kanban (To Do / In Progress / Done), and Sprint (Backlog / To Do / In Progress / Review / Done)
- **Save any board as a reusable template** -- build your own workflows and share them freely
- **Three built-in templates** - Blank, Kanban (To Do / In Progress / Done), and Sprint (Backlog / To Do / In Progress / Review / Done)
- **Save any board as a reusable template** - build your own workflows and share them freely
- **Duplicate entire boards** with all cards, labels, and settings preserved
- **Drag-and-drop reordering** in the board list
- **Sort boards** by name, last modified, date created, or manual drag order
- **Import and export** -- JSON (full fidelity) and CSV (spreadsheet-compatible); imports from Trello JSON too
- **Import and export** - JSON (full fidelity) and CSV (spreadsheet-compatible); imports from Trello JSON too
### 🏛️ Columns
- **Add, rename, reorder, and delete** columns with drag-and-drop
- **Three column widths** -- Narrow, Standard, Wide
- **Column colors** -- 10 preset hues or no color
- **WIP limits** -- optional per-column capacity limits (3, 5, 7, or 10) with amber/red header warnings when the collective workload exceeds what's sustainable
- **Collapse columns** to a narrow vertical strip showing just the title and card count -- keep things tidy without losing context
- **Three column widths** - Narrow, Standard, Wide
- **Column colors** - 10 preset hues or no color
- **WIP limits** - optional per-column capacity limits (3, 5, 7, or 10) with amber/red header warnings when the collective workload exceeds what's sustainable
- **Collapse columns** to a narrow vertical strip showing just the title and card count - keep things tidy without losing context
### 🃏 Cards
- **Drag-and-drop** cards within and between columns
- **Markdown descriptions** -- full GitHub Flavored Markdown with tables, strikethrough, task lists, autolinks, and a live preview toggle
- **Checklists** -- add items, check them off, reorder by dragging, track progress with a visual bar
- **Labels** -- create labels with custom names and colors, toggle them per card
- **Due dates** -- custom calendar picker with relative time display ("in 3 days", "overdue by 2 days")
- **Priority levels** -- None, Low, Medium, High, Urgent -- each with a distinct color indicator visible on card thumbnails
- **Cover colors** -- 10 preset hues rendered as a colored header bar on the card detail
- **File attachments** -- link to files in place or copy them into the board's data directory; open in your system's default application
- **Comments** -- timestamped notes on each card, newest first, with add and delete
- **Card duplication** -- copy a card within its column
- **Card aging** -- cards that haven't been touched in a while gradually fade, so you can see at a glance where work has stalled
- **Markdown descriptions** - full GitHub Flavored Markdown with tables, strikethrough, task lists, autolinks, and a live preview toggle
- **Checklists** - add items, check them off, reorder by dragging, track progress with a visual bar
- **Labels** - create labels with custom names and colors, toggle them per card
- **Due dates** - custom calendar picker with relative time display ("in 3 days", "overdue by 2 days")
- **Priority levels** - None, Low, Medium, High, Urgent - each with a distinct color indicator visible on card thumbnails
- **Cover colors** - 10 preset hues rendered as a colored header bar on the card detail
- **File attachments** - link to files in place or copy them into the board's data directory; open in your system's default application
- **Comments** - timestamped notes on each card, newest first, with add and delete
- **Card duplication** - copy a card within its column
- **Card aging** - cards that haven't been touched in a while gradually fade, so you can see at a glance where work has stalled
### 🔍 Filtering and Search
- **Filter bar** (press `/`) -- narrow down cards by text search, labels, due date status (overdue, today, this week, no date), and priority level
- **Command palette** (`Ctrl+K`) -- fuzzy search across cards in the current board, across all boards, and quick access to app actions like creating a new board or toggling dark mode
- **Cross-board search** -- find any card by title or description across every board you have
- **Filter bar** (press `/`) - narrow down cards by text search, labels, due date status (overdue, today, this week, no date), and priority level
- **Command palette** (`Ctrl+K`) - fuzzy search across cards in the current board, across all boards, and quick access to app actions like creating a new board or toggling dark mode
- **Cross-board search** - find any card by title or description across every board you have
### ⌨️ Keyboard Navigation
Full keyboard-driven workflow. Vim-style or arrow keys -- your choice.
Full keyboard-driven workflow. Vim-style or arrow keys - your choice.
| Shortcut | Action |
|---|---|
@@ -86,39 +86,39 @@ Full keyboard-driven workflow. Vim-style or arrow keys -- your choice.
### 🎨 Appearance
- **Theme** -- Light, Dark, or follow your system preference
- **Accent color** -- 10 hues (Teal, Blue, Purple, Pink, Red, Orange, Yellow, Lime, Cyan, Slate) applied globally across the interface
- **UI zoom** -- 75% to 150% in 5% increments
- **Density** -- Compact, Comfortable, or Spacious -- adjust how much breathing room the interface gets
- **Board backgrounds** -- None, Dots, Grid, or Gradient pattern per board
- **Default column width** -- configure what width new columns start at
- **Custom scrollbars** -- themed scrollbars throughout, with auto-hide behavior
- **Smooth animations** -- staggered entrances, layout transitions, and micro-interactions powered by Framer Motion, with full `prefers-reduced-motion` support
- **Theme** - Light, Dark, or follow your system preference
- **Accent color** - 10 hues (Teal, Blue, Purple, Pink, Red, Orange, Yellow, Lime, Cyan, Slate) applied globally across the interface
- **UI zoom** - 75% to 150% in 5% increments
- **Density** - Compact, Comfortable, or Spacious - adjust how much breathing room the interface gets
- **Board backgrounds** - None, Dots, Grid, or Gradient pattern per board
- **Default column width** - configure what width new columns start at
- **Custom scrollbars** - themed scrollbars throughout, with auto-hide behavior
- **Smooth animations** - staggered entrances, layout transitions, and micro-interactions powered by Framer Motion, with full `prefers-reduced-motion` support
### ♿ Accessibility (WCAG 2.2 AAA)
OpenPylon targets WCAG 2.2 AAA conformance -- because productivity tools should work for everyone, not just people with perfect vision and a mouse.
OpenPylon targets WCAG 2.2 AAA conformance - because productivity tools should work for everyone, not just people with perfect vision and a mouse.
**Color and Contrast**
- **7:1 enhanced contrast** on all text and interactive elements, in both light and dark themes
- **3:1 non-text contrast** on borders, scrollbar thumbs, and focus indicators
- **High-contrast mode** support -- `prefers-contrast: more` boosts all tokens further
- **Color is never the sole indicator** -- priority levels, due date status, and labels all include text or shape cues alongside color
- **High-contrast mode** support - `prefers-contrast: more` boosts all tokens further
- **Color is never the sole indicator** - priority levels, due date status, and labels all include text or shape cues alongside color
**Focus and Keyboard**
- **3px dual-ring focus indicators** visible on every interactive element, against any background
- **Skip-to-content link** as the first focusable element on the page
- **Full keyboard navigation** -- vim keys, arrow keys, tab order, Escape to dismiss
- **Shift+F10 context menus** -- right-click menus are also reachable via keyboard
- **Full keyboard navigation** - vim keys, arrow keys, tab order, Escape to dismiss
- **Shift+F10 context menus** - right-click menus are also reachable via keyboard
- **Focus trapping** in all modals and dialogs with focus restore on close
- **Hidden interactive elements** (menu buttons, action buttons) become visible on `focus-visible`, not just hover
**Screen Readers and ARIA**
- **ARIA live regions** announce card/column creation, deletion, moves, filter changes, and drag-and-drop operations
- **Proper dialog semantics** -- `role="dialog"`, `aria-modal`, `aria-labelledby` on all modals
- **Proper dialog semantics** - `role="dialog"`, `aria-modal`, `aria-labelledby` on all modals
- **Tab/tabpanel pattern** in settings with `role="tablist"`, `role="tab"`, `aria-selected`
- **Calendar grid** with `role="grid"`, `aria-selected` on date cells, labeled navigation
- **`aria-label`** on every icon-only button, color swatch, status indicator, and unlabeled input
@@ -133,33 +133,33 @@ OpenPylon targets WCAG 2.2 AAA conformance -- because productivity tools should
**Motion**
- **`prefers-reduced-motion`** fully respected -- both via CSS media query and an in-app toggle
- **`prefers-reduced-motion`** fully respected - both via CSS media query and an in-app toggle
- **No essential information** conveyed through animation alone
**Page Structure**
- **Dynamic page titles** -- updates to reflect the current board name
- **Dynamic page titles** - updates to reflect the current board name
- **Landmark regions** and semantic HTML throughout
- **Minimum touch targets** -- 44px interactive area on small buttons via extended hit zones
- **Minimum touch targets** - 44px interactive area on small buttons via extended hit zones
### 🛡️ Data Safety
Your work is protected by multiple layers of redundancy -- because tools that lose your data don't deserve your trust.
Your work is protected by multiple layers of redundancy - because tools that lose your data don't deserve your trust.
- **Auto-save** -- boards save automatically 500ms after every change
- **Automatic backups** -- timestamped snapshots every 5 minutes, last 10 retained per board
- **Version history** -- browse and restore previous versions from the board settings menu
- **Rolling backup** -- the previous save is always preserved as a `.backup.json` file
- **Portable storage** -- all data lives in a `data/` folder next to the executable; no registry entries, no AppData, no hidden folders
- **Schema validation** -- all data is validated with Zod on every load, with graceful fallback to defaults if a file is corrupted. Forward-compatible: boards from older versions just work.
- **Auto-save** - boards save automatically 500ms after every change
- **Automatic backups** - timestamped snapshots every 5 minutes, last 10 retained per board
- **Version history** - browse and restore previous versions from the board settings menu
- **Rolling backup** - the previous save is always preserved as a `.backup.json` file
- **Portable storage** - all data lives in a `data/` folder next to the executable; no registry entries, no AppData, no hidden folders
- **Schema validation** - all data is validated with Zod on every load, with graceful fallback to defaults if a file is corrupted. Forward-compatible: boards from older versions just work.
### 🖥️ Desktop Integration
- **Custom frameless window** -- integrated title bar with minimize, maximize, and close controls, plus a drag region that feels native
- **Window state persistence** -- remembers your window position, size, and maximized state between sessions
- **Due date notifications** -- OS-level desktop notifications for cards that are due today or overdue, checked hourly
- **Custom frameless window** - integrated title bar with minimize, maximize, and close controls, plus a drag region that feels native
- **Window state persistence** - remembers your window position, size, and maximized state between sessions
- **Due date notifications** - OS-level desktop notifications for cards that are due today or overdue, checked hourly
- **Open attachments** directly in your system's default application
- **Right-click context menus** -- on boards (duplicate, export, save as template, delete) and on cards (move, duplicate, set priority, delete)
- **Right-click context menus** - on boards (duplicate, export, save as template, delete) and on cards (move, duplicate, set priority, delete)
---
@@ -169,9 +169,9 @@ Your work is protected by multiple layers of redundancy -- because tools that lo
Grab `openpylon.exe` from the [Releases](https://git.lashman.live/lashman/openpylon/releases) page. That's it. Unzip, run, done.
No installer. No admin rights. No registry entries. Runs from anywhere -- your desktop, a USB stick, a shared drive. Put it wherever you want. It's yours.
No installer. No admin rights. No registry entries. Runs from anywhere - your desktop, a USB stick, a shared drive. Put it wherever you want. It's yours.
> 💡 **Fully portable** -- OpenPylon stores all its data in a `data/` folder right next to the executable. Move the folder, move your data. Delete the folder, it's gone. No traces left behind.
> 💡 **Fully portable** - OpenPylon stores all its data in a `data/` folder right next to the executable. Move the folder, move your data. Delete the folder, it's gone. No traces left behind.
### Build from Source
@@ -229,15 +229,15 @@ data/
### 📄 Board Format
Each board is a self-contained JSON file with a Zod-validated schema. New fields added in future versions receive sensible defaults on load -- so older board files never break. You can read, edit, or script against these files with any tool you like. They're just JSON. No proprietary formats, no binary blobs, no vendor lock-in.
Each board is a self-contained JSON file with a Zod-validated schema. New fields added in future versions receive sensible defaults on load - so older board files never break. You can read, edit, or script against these files with any tool you like. They're just JSON. No proprietary formats, no binary blobs, no vendor lock-in.
### 🔄 Backup and Recovery
If something goes wrong:
1. **Version History** -- open board settings (⚙️ icon in the top bar) -> "Version History" -> pick a snapshot -> restore. Your current state is backed up first.
2. **Manual `.backup.json`** -- every board has a `.backup.json` sibling in the `boards/` folder. Rename it to replace the current file.
3. **Timestamped snapshots** -- find the one you want in `data/backups/<board-id>/` and copy it into `data/boards/`.
1. **Version History** - open board settings (⚙️ icon in the top bar) -> "Version History" -> pick a snapshot -> restore. Your current state is backed up first.
2. **Manual `.backup.json`** - every board has a `.backup.json` sibling in the `boards/` folder. Rename it to replace the current file.
3. **Timestamped snapshots** - find the one you want in `data/backups/<board-id>/` and copy it into `data/boards/`.
---
@@ -249,10 +249,10 @@ Click the **Import** button on the board list screen and pick a `.json` file. Op
| Format | What Gets Imported |
|---|---|
| **OpenPylon JSON** | Everything -- full fidelity round-trip, no data loss |
| **OpenPylon JSON** | Everything - full fidelity round-trip, no data loss |
| **Trello JSON** | Lists -> columns, cards, labels (with color mapping), checklists. Archived/closed items are skipped. |
Migrating off Trello? Export your board from Trello (Menu -> Share -> Export as JSON), then import it here. Your data belongs with you -- not with Atlassian.
Migrating off Trello? Export your board from Trello (Menu -> Share -> Export as JSON), then import it here. Your data belongs with you - not with Atlassian.
### Exporting
@@ -302,7 +302,7 @@ No lock-in. Take your data wherever you want, whenever you want. We'd rather you
| Layer | Technology |
|---|---|
| 🦀 Runtime | [Tauri v2](https://v2.tauri.app/) -- lightweight, native, no Electron bloat |
| 🦀 Runtime | [Tauri v2](https://v2.tauri.app/) - lightweight, native, no Electron bloat |
| ⚛️ Frontend | [React 19](https://react.dev/) + [TypeScript 5.8](https://www.typescriptlang.org/) |
| 🎨 Styling | [Tailwind CSS 4](https://tailwindcss.com/) + [Radix UI](https://www.radix-ui.com/) primitives |
| 🧠 State | [Zustand 5](https://zustand.docs.pmnd.rs/) + [Zundo](https://github.com/charkour/zundo) (50-step undo/redo) |
@@ -324,9 +324,9 @@ All dependencies are free and open-source. No proprietary tooling. No paid servi
openpylon/
├── src/ # React frontend
│ ├── components/
│ │ ├── board/ # Board view -- columns, cards, filter bar, drag overlays
│ │ ├── boards/ # Board list -- grid, new board dialog, board cards
│ │ ├── card-detail/ # Card modal -- markdown, checklists, labels, priority,
│ │ ├── board/ # Board view - columns, cards, filter bar, drag overlays
│ │ ├── boards/ # Board list - grid, new board dialog, board cards
│ │ ├── card-detail/ # Card modal - markdown, checklists, labels, priority,
│ │ │ # due dates, attachments, comments, cover colors
│ │ ├── command-palette/ # Ctrl+K fuzzy search across everything
│ │ ├── import-export/ # Import/export buttons and file handling
@@ -335,7 +335,7 @@ openpylon/
│ │ └── ui/ # Shared primitives (button, dialog, tooltip, popover...)
│ ├── hooks/ # Keyboard shortcuts, keyboard card navigation
│ ├── lib/ # Storage, import/export, board factory, motion presets
│ ├── stores/ # Zustand -- app store, board store, toast store
│ ├── stores/ # Zustand - app store, board store, toast store
│ └── types/ # TypeScript interfaces and type definitions
├── src-tauri/ # Tauri / Rust backend
│ ├── src/
@@ -359,7 +359,7 @@ openpylon/
npm run tauri dev
# Type-check the frontend
npx tsc --noEmit
npx tsc -noEmit
# Production build (portable exe)
npm run tauri build
@@ -369,7 +369,7 @@ The dev server runs on `http://localhost:1420` with Vite HMR. Rust backend chang
### 🤝 Contributing
OpenPylon is released into the public domain under CC0 1.0. There's no CLA, no copyright assignment, no gatekeeping. If you want to contribute, just open a PR. If you want to fork it and build something entirely different, go ahead -- no permission needed.
OpenPylon is released into the public domain under CC0 1.0. There's no CLA, no copyright assignment, no gatekeeping. If you want to contribute, just open a PR. If you want to fork it and build something entirely different, go ahead - no permission needed.
Good things happen when tools are shared freely.
@@ -383,11 +383,11 @@ Good things happen when tools are shared freely.
</a>
</p>
**CC0 1.0 Universal -- Public Domain Dedication**
**CC0 1.0 Universal - Public Domain Dedication**
To the extent possible under law, the authors of OpenPylon have waived all copyright and related rights to this software. This work is published from the United States.
You can copy, modify, distribute, and use this software -- even for commercial purposes -- without asking permission and without owing anyone anything.
You can copy, modify, distribute, and use this software - even for commercial purposes - without asking permission and without owing anyone anything.
See [LICENSE](LICENSE) or https://creativecommons.org/publicdomain/zero/1.0/ for details.
@@ -397,6 +397,6 @@ See [LICENSE](LICENSE) or https://creativecommons.org/publicdomain/zero/1.0/ for
<sub>
Made with care. Shared without conditions.
<br />
Your tools should serve you -- not the other way around.
Your tools should serve you - not the other way around.
</sub>
</p>