Compare commits

70 Commits

Author SHA1 Message Date
Your Name
3d7dc4f875 bump to v1.1.0: accessibility, filter bar fix, updated README 2026-02-19 20:15:01 +02:00
Your Name
6012166d99 add aria-labels to TopBar buttons and CalendarPopover 2026-02-19 19:56:47 +02:00
Your Name
0b155c6023 add ARIA labels and pressed states to board list and remaining components 2026-02-19 19:55:30 +02:00
Your Name
d66e90a6d5 add ARIA labels, pressed states, and fix keyboard visibility across card detail components 2026-02-19 19:54:22 +02:00
Your Name
56eab06dc4 add labels and ARIA attributes to filter bar inputs 2026-02-19 19:51:56 +02:00
Your Name
68442ec784 add ARIA tab roles, pressed states, and labels to settings dialog 2026-02-19 19:50:54 +02:00
Your Name
6ca8cfb059 add dialog semantics, focus trap, and ARIA labels to card detail modal 2026-02-19 19:49:25 +02:00
Your Name
21e09279eb improve card thumbnail accessibility: aging opacity, ARIA labels 2026-02-19 19:48:08 +02:00
Your Name
3d2fc5a09d fix column header keyboard visibility and ARIA labels 2026-02-19 19:46:58 +02:00
Your Name
4fa0f486f5 add skip navigation, page title, and global ARIA live region 2026-02-19 19:45:51 +02:00
Your Name
2044a7026d make toasts accessible: ARIA live region, dismiss button, pause on hover 2026-02-19 19:44:06 +02:00
Your Name
b1c5e9caa9 fix focus ring contrast across UI primitives 2026-02-19 19:43:00 +02:00
Your Name
7c4941ada4 fix contrast tokens, focus rings, and scrollbar visibility for WCAG AAA 2026-02-19 19:42:04 +02:00
Your Name
c921826f55 clean up unused files and update gitignore 2026-02-19 19:15:55 +02:00
Your Name
8492ffcfb7 fix card click delay when reduced motion is active
Skip layoutId and use instant transitions on the card detail modal
when reduced motion is on. The shared layout animation kept the z-50
overlay in the DOM during its exit spring, blocking all card clicks
until it settled.
2026-02-16 18:51:35 +02:00
Your Name
25f71544f0 fix layout animation blocking card clicks when reduce motion is on
Skip Framer Motion layout/layoutId props on cards when reduced motion
is active. These props cause pointerEvents:none during layout
transitions, making cards unclickable for ~1s after any layout shift.
2026-02-16 18:38:04 +02:00
Your Name
30263d6ac7 add reduce motion toggle and bump to v1.0.1
Add in-app reduce motion setting under Settings > Appearance so users
can disable animations without changing their OS preference. Applies a
.reduce-motion CSS class to kill all CSS transitions/animations and
wraps the app in MotionConfig to globally disable Framer Motion springs,
layout animations, and enter/exit transitions. Setting persists to disk.

Also removes leftover default Square*.png icons and bumps version to
1.0.1.
2026-02-16 17:51:23 +02:00
Your Name
d1636745f1 add custom app icon - teal squircle with lighthouse 2026-02-16 16:07:20 +02:00
Your Name
9cc3d55cbf bump version to 1.0.0 2026-02-16 15:51:57 +02:00
Your Name
d244bd1f19 replace fancy unicode punctuation with ASCII equivalents
Em dashes, en dashes, arrows, and ellipsis replaced with
--, -, ->, and ... respectively throughout README.
2026-02-16 15:49:53 +02:00
Your Name
fd0fe2cdcc fix README: Windows-only portable exe, remove default icon
- Platform is Windows only, single portable exe
- Remove icon image reference (using default Tauri icon)
- Use emoji header instead
- Update clone URLs to point to Gitea instance
- Remove installer/macOS/Linux references
2026-02-16 15:45:00 +02:00
Your Name
59aaa688bb add README, CC0 license, and button icon alignment fix
- Comprehensive README with full feature docs, settings reference,
  keyboard shortcuts, data storage layout, and build instructions
- CC0 1.0 Universal public domain dedication
- Fix button icon/text vertical alignment (leading-none + svg translate)
- Lock Cargo dependencies
2026-02-16 15:40:28 +02:00
Your Name
414c1f7d68 feat: typography overhaul, custom scrollbars, import/export, settings UI
Includes changes from prior sessions: Epilogue + Space Mono fonts,
OverlayScrollbars integration, markdown editor fixes, settings dialog,
import/export buttons, and various UI refinements.
2026-02-16 14:56:36 +02:00
Your Name
8dedbf6032 docs: add 15-improvements design doc and implementation plan
Also tracks Cargo.lock and BoardCardOverlay component from prior sessions.
2026-02-16 14:56:22 +02:00
Your Name
2e2740427e feat: Phase 4 - board templates, auto-backup, version history
- BoardTemplate type and storage CRUD (save/list/delete templates)
- createBoardFromTemplate factory function
- "Save as Template" in board card context menu
- User templates shown in NewBoardDialog with delete option
- Auto-backup on save with 5-minute throttle, 10 backup retention
- VersionHistoryDialog with backup list and restore confirmation
- Version History accessible from board settings dropdown
2026-02-16 14:55:58 +02:00
Your Name
6340beb5d0 feat: Phase 3 - filter bar, keyboard navigation, notifications, comments
- FilterBar component with text search, label chips, due date and priority dropdowns
- "/" keyboard shortcut and toolbar button to toggle filter bar
- Keyboard card navigation with J/K/H/L keys, Enter to open, Escape to clear
- Focus ring on keyboard-selected cards with auto-scroll
- Desktop notifications for due/overdue cards via tauri-plugin-notification
- CommentsSection component with add/delete and relative timestamps
- Filtered card count display in column headers
2026-02-16 14:52:08 +02:00
Your Name
e535177914 feat: Phase 2 card interactions - priority picker, context menu, WIP limits, column collapse, checklist reorder
- PriorityPicker component with 5 colored chips in card detail modal
- Card context menu: Move to column, Set priority, Duplicate, Delete
- duplicateCard store action (clones card, inserts after original)
- Column WIP limits with amber/red indicators when at/over limit
- Column collapse/expand to 40px vertical strip
- Checklist item drag reordering with grip handle
- Comment store actions (addComment, deleteComment) for Phase 3
2026-02-16 14:46:20 +02:00
Your Name
8ca3b81e92 feat: Phase 1 quick wins - defaultColumnWidth, due date colors, card aging, open attachments 2026-02-16 14:33:48 +02:00
Your Name
02ef3acbfe feat: Phase 0 data model - add Comment, Priority, collapsed, wipLimit fields 2026-02-16 14:31:56 +02:00
Your Name
c6fea186ef feat: custom scrollbars, portable storage, window state persistence
- Custom scrollbar CSS using ::-webkit-scrollbar for Tauri's Chromium WebView
- Portable storage: all data written next to exe in data/ folder instead of AppData
- Rust get_portable_data_dir command with runtime FS scope for exe directory
- Window size/position/maximized saved to settings on close, restored on startup
2026-02-15 22:18:50 +02:00
Your Name
bc12b5569a feat: custom calendar date picker replacing native input
Build fully custom CalendarPopover with date-fns + Radix Popover.
Month/year dropdown selectors, today button, clear button, past
dates dimmed. Rewrite DueDatePicker to use it instead of <input type=date>.
2026-02-15 22:04:31 +02:00
Your Name
03e0b132da docs: add custom date picker design document 2026-02-15 21:58:10 +02:00
Your Name
9365d16452 fix: replace onCloseRequested with beforeunload to fix window close
The Tauri onCloseRequested async handler was preventing the window
from actually closing. Using beforeunload for the save flush instead.
2026-02-15 21:46:44 +02:00
Your Name
21302bdfe9 feat: redesign card detail modal as 2-column dashboard grid
Replace 60/40 split layout with a 2x3 CSS grid where all sections
get equal weight. Cover color header, progress bar on checklist,
compact markdown editor, scroll containment on long lists.
2026-02-15 21:41:16 +02:00
Your Name
63b7de0e6f fix: window controls, dragging, and text selection
- Add Tauri permissions for window minimize/maximize/close/drag
- Rewrite WindowControls with plain buttons + stopPropagation
  to prevent drag region from capturing button clicks
- Add data-tauri-drag-region to TopBar child containers
- Make OpenPylon text pointer-events-none and select-none
2026-02-15 21:19:24 +02:00
Your Name
85c54a3768 feat: add micro-animations to TopBar, toasts, settings, and shortcut help 2026-02-15 21:01:10 +02:00
Your Name
24219bb212 feat: gesture-reactive drag overlay with tilt based on pointer velocity 2026-02-15 21:01:06 +02:00
Your Name
feccc4e17a feat: shared layout animation - card expands into detail modal 2026-02-15 21:00:29 +02:00
Your Name
1e14edda6c feat: add column stagger + card stagger + card hover/tap animations 2026-02-15 20:58:53 +02:00
Your Name
3a3c3bd2e1 feat: add stagger animations to board list and board cards 2026-02-15 20:58:03 +02:00
Your Name
1ecf04efcf feat: add AnimatePresence page transitions between views 2026-02-15 20:58:01 +02:00
Your Name
3d8bbc9ebb feat: custom window titlebar - remove native decorations, add WindowControls to TopBar 2026-02-15 20:56:55 +02:00
Your Name
6f5415c9f5 feat: lighten dark mode for HDR monitors - bump pylon + shadcn values 2026-02-15 20:56:35 +02:00
Your Name
275b663934 feat: add shared motion config with spring presets and variants 2026-02-15 20:56:29 +02:00
Your Name
3703857ccf docs: add motion, dark mode & titlebar implementation plan
13-task plan covering shared motion config, dark mode CSS tuning,
custom window titlebar, page transitions, stagger animations,
shared layout card-to-modal animation, gesture-reactive drag,
and micro-interactions across all components.
2026-02-15 20:55:31 +02:00
Your Name
1e487e95a1 docs: add motion, dark mode & custom titlebar design
Design document covering three visual improvements:
- Playful bouncy Framer Motion animations for every interaction
- Subtle dark mode lift for HDR monitors (18-22% → 25-30% lightness)
- Custom window titlebar merged into TopBar with accent-colored controls
2026-02-15 20:51:53 +02:00
Your Name
46c0df3ab8 feat: add themed scrollbar styling for light and dark modes 2026-02-15 20:34:04 +02:00
Your Name
e4edc201b9 feat: upgrade empty states with welcome message and column placeholders 2026-02-15 20:33:16 +02:00
Your Name
fffa565423 feat: add board background patterns (dots, grid, gradient) with settings dropdown 2026-02-15 20:32:43 +02:00
Your Name
e5e9483a8e feat: add keyboard shortcut help modal triggered by ? key 2026-02-15 20:32:32 +02:00
Your Name
fde10d1a3c feat: add undo/redo buttons to TopBar with tooltips 2026-02-15 20:31:35 +02:00
Your Name
6341897487 feat: add toast notification system with success, error, and info variants 2026-02-15 20:30:17 +02:00
Your Name
61a5f11f25 feat: add card cover color with picker in card detail and bar in thumbnail 2026-02-15 20:29:29 +02:00
Your Name
0ef77bc470 feat: add column color picker submenu with 10 preset colors 2026-02-15 20:29:18 +02:00
Your Name
1556529307 feat: add column color, card coverColor, and board background to data model 2026-02-15 20:28:16 +02:00
Your Name
f303d61677 feat: apply board color to TopBar border and column header accents 2026-02-15 20:26:51 +02:00
Your Name
c2928afb11 feat: rewrite settings dialog with tabbed panel - appearance, boards, shortcuts, about 2026-02-15 20:25:58 +02:00
Your Name
a7c9c83bb0 feat: apply density factor to card, column, and board spacing 2026-02-15 20:25:34 +02:00
Your Name
aa91ef35c8 feat: add density CSS variable with default value 2026-02-15 20:24:19 +02:00
Your Name
c08efb5171 feat: wire app store with appearance actions and CSS variable application 2026-02-15 20:24:09 +02:00
Your Name
03a089efda feat: expand AppSettings with appearance and board default fields 2026-02-15 20:23:47 +02:00
Your Name
a9d1ae3a28 fix: use Tauri v2 named fs permissions for appdata access 2026-02-15 20:22:54 +02:00
Your Name
1d99473a22 docs: add visual glow-up implementation plan with 17 tasks
Detailed step-by-step plan covering settings infrastructure,
UI zoom, accent colors, density, board/column/card colors,
toasts, keyboard help, backgrounds, onboarding, and polish.
2026-02-15 20:18:38 +02:00
Your Name
fceaf60462 docs: add visual glow-up design document
Comprehensive design for 12 visual polish improvements including
settings infrastructure, UI zoom, accent colors, density toggle,
board/column/card colors, toasts, and onboarding.
2026-02-15 20:14:10 +02:00
Your Name
557cf461db fix: broaden filesystem scope to include $APPDATA root directory
The glob pattern $APPDATA/openpylon/** didn't match the openpylon
directory itself, causing exists() checks to fail with a forbidden
path error on app startup.
2026-02-15 19:44:56 +02:00
Your Name
fa52a28749 fix: correct lib crate name in main.rs (temptauri_lib -> openpylon_lib) 2026-02-15 19:38:50 +02:00
Your Name
c590146be0 fix: address code review findings - data loss, race condition, broken features
- TopBar: call closeBoard() before navigating back to prevent data loss
- board-store: guard debouncedSave against race condition when board is
  closed during an in-flight save
- board-store: add missing updatedAt to setColumnWidth
- useKeyboardShortcuts: remove duplicate Ctrl+K handler that prevented
  command palette from toggling closed
- AttachmentSection: wire up Tauri file dialog for adding attachments
  with link/copy mode support
2026-02-15 19:33:25 +02:00
Your Name
2a81849c8d fix: move hooks before early return in BoardView, remove unused attachmentMode prop
Fixed React hooks rules violation where useState and useCallback were
called after a conditional return in BoardView. Removed unused
attachmentMode prop from AttachmentSection (can be re-added when file
dialog is wired up).
2026-02-15 19:30:58 +02:00
Your Name
07a4275e8c feat: add window close handler, configure minimum window size
Flush pending board saves on window close via Tauri's onCloseRequested.
Set minimum window dimensions to 800x600.
2026-02-15 19:24:00 +02:00
Your Name
4638ce046c feat: accessibility pass - semantic HTML, ARIA, focus indicators, high contrast 2026-02-15 19:19:34 +02:00

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. 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. 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 ### 📋 Boards
- **Unlimited boards** with custom accent colors and editable titles - **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) - **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 - **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 - **Duplicate entire boards** with all cards, labels, and settings preserved
- **Drag-and-drop reordering** in the board list - **Drag-and-drop reordering** in the board list
- **Sort boards** by name, last modified, date created, or manual drag order - **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 ### 🏛️ Columns
- **Add, rename, reorder, and delete** columns with drag-and-drop - **Add, rename, reorder, and delete** columns with drag-and-drop
- **Three column widths** - Narrow, Standard, Wide - **Three column widths** -- Narrow, Standard, Wide
- **Column colors** - 10 preset hues or no color - **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 - **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 - **Collapse columns** to a narrow vertical strip showing just the title and card count -- keep things tidy without losing context
### 🃏 Cards ### 🃏 Cards
- **Drag-and-drop** cards within and between columns - **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 - **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 - **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 - **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") - **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 - **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 - **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 - **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 - **Comments** -- timestamped notes on each card, newest first, with add and delete
- **Card duplication** - copy a card within its column - **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 - **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 ### 🔍 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 - **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 - **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 - **Cross-board search** -- find any card by title or description across every board you have
### ⌨️ Keyboard Navigation ### ⌨️ 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 | | Shortcut | Action |
|---|---| |---|---|
@@ -86,39 +86,39 @@ Full keyboard-driven workflow. Vim-style or arrow keys - your choice.
### 🎨 Appearance ### 🎨 Appearance
- **Theme** - Light, Dark, or follow your system preference - **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 - **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 - **UI zoom** -- 75% to 150% in 5% increments
- **Density** - Compact, Comfortable, or Spacious - adjust how much breathing room the interface gets - **Density** -- Compact, Comfortable, or Spacious -- adjust how much breathing room the interface gets
- **Board backgrounds** - None, Dots, Grid, or Gradient pattern per board - **Board backgrounds** -- None, Dots, Grid, or Gradient pattern per board
- **Default column width** - configure what width new columns start at - **Default column width** -- configure what width new columns start at
- **Custom scrollbars** - themed scrollbars throughout, with auto-hide behavior - **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 - **Smooth animations** -- staggered entrances, layout transitions, and micro-interactions powered by Framer Motion, with full `prefers-reduced-motion` support
### ♿ Accessibility (WCAG 2.2 AAA) ### ♿ 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** **Color and Contrast**
- **7:1 enhanced contrast** on all text and interactive elements, in both light and dark themes - **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 - **3:1 non-text contrast** on borders, scrollbar thumbs, and focus indicators
- **High-contrast mode** support - `prefers-contrast: more` boosts all tokens further - **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 - **Color is never the sole indicator** -- priority levels, due date status, and labels all include text or shape cues alongside color
**Focus and Keyboard** **Focus and Keyboard**
- **3px dual-ring focus indicators** visible on every interactive element, against any background - **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 - **Skip-to-content link** as the first focusable element on the page
- **Full keyboard navigation** - vim keys, arrow keys, tab order, Escape to dismiss - **Full keyboard navigation** -- vim keys, arrow keys, tab order, Escape to dismiss
- **Shift+F10 context menus** - right-click menus are also reachable via keyboard - **Shift+F10 context menus** -- right-click menus are also reachable via keyboard
- **Focus trapping** in all modals and dialogs with focus restore on close - **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 - **Hidden interactive elements** (menu buttons, action buttons) become visible on `focus-visible`, not just hover
**Screen Readers and ARIA** **Screen Readers and ARIA**
- **ARIA live regions** announce card/column creation, deletion, moves, filter changes, and drag-and-drop operations - **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` - **Tab/tabpanel pattern** in settings with `role="tablist"`, `role="tab"`, `aria-selected`
- **Calendar grid** with `role="grid"`, `aria-selected` on date cells, labeled navigation - **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 - **`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 w
**Motion** **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 - **No essential information** conveyed through animation alone
**Page Structure** **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 - **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 ### 🛡️ 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 - **Auto-save** -- boards save automatically 500ms after every change
- **Automatic backups** - timestamped snapshots every 5 minutes, last 10 retained per board - **Automatic backups** -- timestamped snapshots every 5 minutes, last 10 retained per board
- **Version history** - browse and restore previous versions from the board settings menu - **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 - **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 - **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. - **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 ### 🖥️ Desktop Integration
- **Custom frameless window** - integrated title bar with minimize, maximize, and close controls, plus a drag region that feels native - **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 - **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 - **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 - **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 los
Grab `openpylon.exe` from the [Releases](https://git.lashman.live/lashman/openpylon/releases) page. That's it. Unzip, run, done. 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 ### Build from Source
@@ -229,15 +229,15 @@ data/
### 📄 Board Format ### 📄 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 ### 🔄 Backup and Recovery
If something goes wrong: 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. 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. 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/`. 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 | | 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. | | **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 ### Exporting
@@ -302,7 +302,7 @@ No lock-in. Take your data wherever you want, whenever you want. We'd rather you
| Layer | Technology | | 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/) | | ⚛️ 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 | | 🎨 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) | | 🧠 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/ openpylon/
├── src/ # React frontend ├── src/ # React frontend
│ ├── components/ │ ├── components/
│ │ ├── board/ # Board view - columns, cards, filter bar, drag overlays │ │ ├── board/ # Board view -- columns, cards, filter bar, drag overlays
│ │ ├── boards/ # Board list - grid, new board dialog, board cards │ │ ├── boards/ # Board list -- grid, new board dialog, board cards
│ │ ├── card-detail/ # Card modal - markdown, checklists, labels, priority, │ │ ├── card-detail/ # Card modal -- markdown, checklists, labels, priority,
│ │ │ # due dates, attachments, comments, cover colors │ │ │ # due dates, attachments, comments, cover colors
│ │ ├── command-palette/ # Ctrl+K fuzzy search across everything │ │ ├── command-palette/ # Ctrl+K fuzzy search across everything
│ │ ├── import-export/ # Import/export buttons and file handling │ │ ├── import-export/ # Import/export buttons and file handling
@@ -335,7 +335,7 @@ openpylon/
│ │ └── ui/ # Shared primitives (button, dialog, tooltip, popover...) │ │ └── ui/ # Shared primitives (button, dialog, tooltip, popover...)
│ ├── hooks/ # Keyboard shortcuts, keyboard card navigation │ ├── hooks/ # Keyboard shortcuts, keyboard card navigation
│ ├── lib/ # Storage, import/export, board factory, motion presets │ ├── 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 │ └── types/ # TypeScript interfaces and type definitions
├── src-tauri/ # Tauri / Rust backend ├── src-tauri/ # Tauri / Rust backend
│ ├── src/ │ ├── src/
@@ -359,7 +359,7 @@ openpylon/
npm run tauri dev npm run tauri dev
# Type-check the frontend # Type-check the frontend
npx tsc -noEmit npx tsc --noEmit
# Production build (portable exe) # Production build (portable exe)
npm run tauri build npm run tauri build
@@ -369,7 +369,7 @@ The dev server runs on `http://localhost:1420` with Vite HMR. Rust backend chang
### 🤝 Contributing ### 🤝 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. Good things happen when tools are shared freely.
@@ -383,11 +383,11 @@ Good things happen when tools are shared freely.
</a> </a>
</p> </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. 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. 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> <sub>
Made with care. Shared without conditions. Made with care. Shared without conditions.
<br /> <br />
Your tools should serve you - not the other way around. Your tools should serve you -- not the other way around.
</sub> </sub>
</p> </p>