HARBOR SCHEDULE
Harbor Schedule
harbor-schedule is the production-facing Harbor calendar app.
Current implementation stack:
- Node.js + Express backend
- React + Vite frontend
- FullCalendar interaction layer
- PostgreSQL persistence
Current scope:
- public per-user schedule pages at
/<username>/ - guest read access
- owner/admin write access
- PostgreSQL-backed schedule storage
- recurring events:
nonedailyweeklybiweeklymonthly_same_day
- fixed event colors:
- red
- pink
- green
- blue
- cyan
- yellow
- purple
- brown
- Harbor-served theme shell, header, footer, timezone, and theme preferences
- floating event editor panel
- Unix-socket management API for Harbor lifecycle control
Runtime contract:
- public localhost HTTP server
- management HTTP API on a Unix socket
- YAML config loading via
--config - Harbor-injected identity, permission, timezone, and theme context
- optional
harbor_database_urlfor startup ownership backfill against Harbor’s user table
Permissions used by the draft:
schedule.readschedule.write
Guests may view schedules. Authenticated users with schedule.write
may edit their own schedule. The admin permission may edit any
existing schedule, but only the owner may create the first schedule
for a user. Ownership is keyed to Harbor’s stable userId, while the
public username slug remains a cached route identifier that can be
updated when the owner renames their Harbor account. On startup,
Schedule automatically backfills legacy username-owned rows from
Harbor’s user table and refuses to start if any legacy rows remain
unresolved.
Development:
npm install
npm run build:client
node server/server.mjs --config /path/to/schedule.yml
Harbor build packaging:
npm run build:harbor -- --app-dir /path/to/harbor-release/apps/schedule