A calm, ADHD-friendly calendar PWA designed for neurodivergent minds.
- Calm Design: Soft color palette with no harsh contrasts
- Multiple Views: Day, Week, and Month calendar views
- Event Templates: Quick event creation from saved templates
- Categories: Color-coded organization for events
- Recurrence: Daily, weekly, monthly, and yearly repeating events
- Reminders: Configurable push notification reminders
- Calendar Subscriptions: Subscribe to external iCal/ICS feeds (Google Calendar, Outlook, etc.)
- Offline Support: Local-first with IndexedDB
- PWA: Install on any device, including iOS
- Multi-language: English and Swedish support
- Timezone Support: Full timezone-aware date handling
- TRMNL E-Ink Dashboard: View-only agenda for TRMNL devices (incl. TRMNL X) — see trmnl-plugin/
- Frontend: SvelteKit 2 + Svelte 5 (runes), Tailwind CSS 4
- Local Storage: Dexie.js (IndexedDB)
- Backend: PocketBase
- Date Handling: date-fns + date-fns-tz
- i18n: svelte-i18n
- Node.js 20+
- PocketBase 0.39+ (for backend)
-
Clone the repository:
git clone https://github.com/Bazooper-blip/calendhd.git cd calendhd -
Install dependencies:
npm install
-
Copy environment variables:
cp .env.example .env
-
Download and start PocketBase:
# Download from https://pocketbase.io/docs/ cd pocketbase ./pocketbase serve
-
Run the development server:
npm run dev
npm run build
npm run previewSee the ha-addon folder for Home Assistant deployment instructions.
cd docker
docker-compose up -dcalendhd/
├── src/
│ ├── routes/ # SvelteKit pages
│ │ ├── calendar/ # Day/week/month views
│ │ ├── event/ # Event creation/editing
│ │ ├── templates/ # Event templates
│ │ ├── categories/ # Category management
│ │ ├── subscriptions/# External calendar feeds
│ │ └── settings/ # User preferences
│ │
│ ├── lib/
│ │ ├── components/ # Svelte components
│ │ ├── stores/ # Svelte 5 rune stores
│ │ ├── db/ # Dexie IndexedDB
│ │ ├── api/ # PocketBase client
│ │ ├── i18n/ # Internationalization
│ │ ├── utils/ # Utilities
│ │ └── types/ # TypeScript types
│ │
│ └── service-worker.ts # PWA service worker
│
├── pocketbase/
│ ├── pb_hooks/ # Server hooks (reminders, cleanup, notifications)
│ └── pb_migrations/ # Database schema
│
├── push-service/ # Web Push notification service
├── trmnl-plugin/ # TRMNL e-ink dashboard plugin (view-only)
├── static/ # PWA manifest + icons
├── ha-addon/ # Home Assistant Add-on
└── docker/ # Docker configuration
- Reduced animations option
- High contrast mode
- Consistent, predictable layout
- No guilt messaging for overdue items
- Keyboard navigation support
- Screen reader friendly
Contributions are welcome! Please feel free to submit a Pull Request.
MIT