Skip to content

feat: S8 local .ics calendar export (constitution-safe)#71

Merged
EyalDelarea merged 2 commits into
mainfrom
feat/s8-ics-export
Jun 12, 2026
Merged

feat: S8 local .ics calendar export (constitution-safe)#71
EyalDelarea merged 2 commits into
mainfrom
feat/s8-ics-export

Conversation

@EyalDelarea

Copy link
Copy Markdown
Owner

S8 · Local .ics calendar export

The final roadmap slice (#50, epic #58) — the constitution-safe reframe of the prototype's "connect Google Calendar" affordance.

Why not Google Calendar

The constitution's core principle is "all inference local, nothing leaves the box except the read-only WhatsApp link." Two-way Google Calendar sync is an outbound third-party cloud write — it would need a constitution amendment (the S8 memo on #58 laid out the options). So instead of outbound sync, S7's local meetings are exported as a standard .ics file the user imports into any calendar themselves — ~80% of the value, nothing leaves the device automatically, no amendment needed.

What changed

  • buildIcs(meetings, now) (pure, tested) — a VCALENDAR with a VEVENT per dated meeting (UID/DTSTAMP/DTSTART/SUMMARY/DESCRIPTION, RFC-5545 escaping, CRLF). Undated meetings are skipped (a VEVENT needs a DTSTART) — they still show in the in-app agenda.
  • GET /api/meetings.ics — downloads the calendar (text/calendar, attachment; filename="catchapp.ics").
  • UI — a "ייצוא ליומן (.ics)" link in the §6 Meetings column (replaces the prototype's "connect" banner).

Verified

The endpoint returns a real importable calendar — confirmed live: 200 text/calendar, a valid BEGIN:VCALENDAR … BEGIN:VEVENT … DTSTART:20260620T090000Z … END:VCALENDAR.

Note

Meeting starts_at is currently null for most extracted meetings (S7 doesn't yet parse Hebrew dates from free text), so the .ics is sparse until a date-extraction follow-up lands — the mechanism is correct and constitution-safe; richer dates are additive.

Tests / gate

buildIcs unit-tested (VCALENDAR shape, undated-skip, RFC escaping). Full suite green.

Closes #58.

🤖 Generated with Claude Code

EyalDelarea and others added 2 commits June 12, 2026 02:55
buildIcs (pure, tested): meetings → a VCALENDAR the user imports into any
calendar themselves — the local alternative to outbound Google Calendar sync
(nothing leaves the box). GET /api/meetings.ics downloads it; a 'ייצוא ליומן
(.ics)' link in the §6 Meetings column. Undated meetings skipped (need DTSTART).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@EyalDelarea EyalDelarea merged commit e6097ad into main Jun 12, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

S8 · Calendar (constitution gate)

1 participant