58 lines
1.9 KiB
Markdown
58 lines
1.9 KiB
Markdown
# CalendarOverview
|
||
|
||
Paste a Google Calendar ICS URL, see a two-year (current + next) overview.
|
||
Each day is split into three segments — morning (00:00–12:00), afternoon
|
||
(12:00–18:00), evening (18:00–24:00) — that light up based on your events.
|
||
|
||
## Running it
|
||
|
||
```
|
||
npm install
|
||
npm start # http://localhost:3000
|
||
./start.sh # same, on port 4000
|
||
```
|
||
|
||
Optionally set `CALURL=<your ics url>` in a `.env` file (copy
|
||
`.env.example`) to have the URL prefilled on load. It's only used to prefill
|
||
the input server-side and is never logged.
|
||
|
||
## Tagging events with emoji
|
||
|
||
Start an event title with an emoji to color its segment. Emoji-to-color
|
||
mappings live in `tags.json`:
|
||
|
||
```json
|
||
{ "💜": { "label": "Tessa", "color": "magenta" } }
|
||
```
|
||
|
||
- One leading emoji not in `tags.json` still lights up (in a fallback
|
||
color) so it stands out from plain events.
|
||
- Two leading emoji (with or without a space between them, e.g. `✈️💜` or
|
||
`✈️ 💜`) split the segment into both colors.
|
||
- Events without a leading emoji still light their segment, just muted/grey.
|
||
- All-day events light all three segments for every day they span.
|
||
|
||
## Conflicts
|
||
|
||
If two tagged events overlap in time on the same day, that day is flagged
|
||
as a conflict. Add the standalone word `nc` anywhere in the title (e.g.
|
||
"Videobellen Caroline & Bas nc") to mark that event as intentionally
|
||
overlapping — it's excluded from conflict detection but still shows and
|
||
still gets colored normally.
|
||
|
||
## Timezones
|
||
|
||
All event times are displayed in Amsterdam local time, regardless of the
|
||
timezone the source event was created in (UTC, another IANA zone, etc.).
|
||
Events with no timezone info at all (a "floating" time per the ICS spec)
|
||
are shown as-is, unconverted.
|
||
|
||
## Tests
|
||
|
||
```
|
||
npm test
|
||
```
|
||
|
||
Plain `assert`-based script (`test_days.js`) covering recurrence expansion,
|
||
segment lighting, emoji tagging, and conflict detection.
|