vacation days planner
  • JavaScript 87.8%
  • CSS 6.6%
  • HTML 5.5%
Find a file
david dc8da5e83e rewrite README to reflect current project state
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-01 07:17:12 -05:00
data cleanup and docker updates in readme 2025-06-02 14:24:49 -04:00
lib fix script order, stale comments, icon button size, and boardLoader JSDoc 2026-02-28 09:48:32 -05:00
public add Ctrl+Enter submit, keyboard shortcuts popout, descriptive undo/redo toasts 2026-03-01 07:13:15 -05:00
.gitignore cleanup and docker updates in readme 2025-06-02 14:24:49 -04:00
CLAUDE.md update CLAUDE.md for 1.0.81 2026-03-01 07:14:55 -05:00
docker-compose.yml cleanup and docker updates in readme 2025-06-02 14:24:49 -04:00
Dockerfile adding git to docker image for npm 2025-08-04 10:21:23 -04:00
env.example issue: addressed no longer valid env configuration 2025-06-02 22:23:21 -04:00
LICENSE initial checkin 2025-06-02 14:13:45 -04:00
package-lock.json initial checkin 2025-06-02 14:13:45 -04:00
package.json bump version to 1.0.81 2026-03-01 07:13:38 -05:00
README.md rewrite README to reflect current project state 2026-03-01 07:17:12 -05:00
server.js consolidate defaultData.json via GET /api/template route 2026-02-28 09:37:30 -05:00

Vacation Days

A lightweight, real-time collaborative Kanban board for small-group event and vacation planning. No accounts, no database — just share a board name and go.

Built with Node.js, Express, Socket.IO, and vanilla JavaScript. All data is stored as JSON files on the filesystem.

Created with LLM assistance over a long-ish weekend. Scale is not a goal.


Running

Node.js directly:

npm start

Runs on port 3000 by default.

Docker:

docker-compose build
docker-compose up -d

Exposed on port 59061 externally, mapped to 3000 internally.


Features

  • Real-time sync — changes from any connected client are broadcast instantly via Socket.IO
  • Kanban columns by date — add single days or date ranges; columns are sorted chronologically
  • Tasks — add, edit, delete; supports notes, color coding, and completion state
  • Done tasks sink to bottom — completed tasks are automatically sorted to the bottom of their column
  • Per-column tags — label columns with color-coded tags
  • Board description — freeform subtitle below the board title, editable inline
  • Undo / redo — 20-step undo stack with descriptive toasts (e.g. "Undid: task added")
  • Dark mode — toggleable light/dark theme, persisted across sessions
  • Copy shareable link — one-click copy of the board URL
  • Keyboard shortcuts — see below

Keyboard Shortcuts

Shortcut Action
n Add task to the column under the cursor
Ctrl+Enter Submit the open modal
Ctrl+Z Undo
Ctrl+Shift+Z / Ctrl+Y Redo
Escape Close open modal

A full shortcuts reference is available via the button on the home page.


Security

Access control is by board name only (security by obscurity). There is no authentication or user system.

  • Board names are alphanumeric only; invalid names are rejected
  • 5 failed board name attempts triggers a 15-minute IP lockout
  • No board enumeration endpoint — board names cannot be listed
  • Socket.IO events are scoped to board-specific rooms; data is never broadcast to unrelated clients
  • Request body size is capped at 100 KB
  • X-Forwarded-For is trusted for real IP detection behind reverse proxies

Inspiration