Overview
Payas Days is a fully client-side web calendar that runs entirely in your browser — no server, no account, and no build step required. Open payas-days/index.html and start scheduling immediately. All data is stored locally using IndexedDB and can be exported as standard ICS or portable Markdown files.
| Property | Value |
|---|---|
| Entry point | payas-days/index.html |
| Stack | HTML5 · CSS3 · Vanilla JS (ES2022) |
| Dependencies | Bootstrap 5.3 · Font Awesome 6.5 · Google Fonts |
| Storage | IndexedDB (persistent) · ICS & Markdown export/import |
| Views | Month · Week · Day · Agenda |
| Browser support | Chromium-based · Firefox |
| Theme | Light and Dark mode (system preference aware) |
| Responsive | Desktop and mobile |
Payas Days follows the Payas design system shared across all Payas web tools (Reader, Editor, Player, Imager, FM, Omi) — using the same colour tokens, typography, and component patterns.
Quick Start
No build or server needed. Just open the entry file:
# Open directly
xdg-open payas-days/index.html # Linux
open payas-days/index.html # macOS
start payas-days/index.html # Windows
# Or serve locally (avoids file:// quirks)
npx serve .
python3 -m http.server 8080
Then navigate to http://localhost:8080/payas-days/index.html.
Calendar Views
Switch between views using the tab bar below the header.
| View | Description |
|---|---|
| Month | Full calendar grid. Up to 3 event chips per cell, +N indicator for overflow. |
| Week | 7-column time grid (24 h vertical axis). Events sized by actual start/end times. Red now line marks the current time. |
| Day | Single-column time grid identical to Week view column. |
| Agenda | Events grouped by date for the next 30 days, sorted chronologically. |
Use ← / → arrow keys to navigate between periods. Click the date display in the header to jump to today.
Event Management
Creating Events
- FAB button (
+, bottom-right) — opens a blank event modal defaulting to the current time. - Day cell click (Month view) — opens a modal pre-filled with the clicked date.
Event Fields
| Field | Notes |
|---|---|
| Title | Required. Plain text. |
| All day | Toggle switch. Switches inputs to date-only pickers. |
| Start / End | datetime-local inputs. |
| Description | Multi-line textarea. Supports Markdown. |
| Location | Free text or URL. |
| Timezone | IANA timezone dropdown. Defaults to local timezone. |
| Color | 10-colour swatch picker. |
| Label | Free text tag (e.g. work, personal). Searchable. |
| Recurrence | Preset dropdown (Daily/Weekly/Monthly/Yearly) + raw RRULE input. |
| Reminders | Minute offsets before event start. Fires browser notifications. |
| Attendees | Email address chips. |
| Attachments | URL chips. |
Conflict Detection
When saving, Payas Days checks for overlapping timed events and shows a confirmation dialog listing conflicts before saving.
Settings
| Section | Options |
|---|---|
| Appearance | Light / Dark theme toggle, persisted to IndexedDB. |
| Notifications | Enable browser notifications via Notification.requestPermission(). |
| Export ICS | Downloads payas-days.ics (RFC 5545 — compatible with Google Calendar, Outlook, Apple Calendar). |
| Export Markdown | Downloads all events as a single payas-days-events.md bundle. |
| Import ICS | File picker or drag-and-drop .ics import. |
| Import Markdown | File picker or drag-and-drop .md event import. |
| Clear all | Deletes every event from IndexedDB (requires confirmation). |
Keyboard Shortcuts
| Shortcut | Action |
|---|---|
← Arrow |
Navigate backward |
→ Arrow |
Navigate forward |
T |
Jump to today |
/ |
Open search bar |
Escape |
Close search bar |
Storage & Data
All data is stored in an IndexedDB database named payas-days with two object stores:
| Store | Purpose |
|---|---|
| events | Event records, indexed by start date and label |
| settings | App settings (theme, seeded flag) |
Export formats:
- ICS — RFC 5545 iCalendar with
VALARMreminders andATTENDEEfields. - Markdown — YAML front-matter per event, Markdown body for description.
Architecture
Payas Days is a multi-file static web app with no build step and no framework.
payas-days/
├── index.html — markup: header, tab bar, view containers, modals, FAB
├── css/
│ └── styles.css — all CSS (~600+ lines, Payas design tokens)
├── js/
│ ├── storage.js — IndexedDB adapter, Markdown serialisation
│ ├── recurrence.js — RRULE expander (DAILY/WEEKLY/MONTHLY/YEARLY)
│ ├── ics.js — ICS (RFC 5545) import & export
│ ├── events.js — CRUD cache, conflict detection, reminders
│ ├── calendar.js — Month/Week/Day/Agenda renderers
│ └── app.js — wiring: theme, nav, form, search, popover, init
└── data/ — (reserved for future local data files)
Scripts load in dependency order: storage.js → recurrence.js → ics.js → events.js → calendar.js → app.js. Each file exposes a single namespace object — no ES modules, no bundler.
Get Payas Days
| Resource | Link |
|---|---|
| GitLab Repository | gitlab.com/samanscode/payas-days |
| Download ZIP | payas-days-main.zip |
License
Payas Days is released under the MIT License.
© 2026 Saman Udayanga Wijesinghe
