Summary
Provide personalized, live iCalendar subscription feeds (.ics / webcal://) for Discord contributors and server members, enabling direct synchronization of assigned tasks and due dates into Google Calendar, Apple Calendar, Microsoft Outlook, and standard task management clients.
Background & Context
From Day 1, dgg-pm has prioritized RFC 5545 schema portability (to_rfc5545_vtodo in src/domain/standard_mappings.py, mapping TaskStatus and PriorityLevel to RFC 5545 values). Furthermore, a concurrent FastAPI server (src/adapters/api/app.py) is already running within the application process on port 8000.
Currently, contributors must check Discord to track their deadlines and upcoming commitments. Offering an iCal subscription link allows users to view their active and overdue project tasks directly within their personal calendar apps.
Proposed Capabilities
-
Calendar Token & Security:
- Add secure token generation for each Discord user (e.g., stateful
calendar_token in user_preferences table or HMAC-signed token).
- Allow users to reset / revoke their calendar link on demand if compromised.
-
Calendar Export & Client Compatibility:
- Wrap task RFC 5545 components into a valid
VCALENDAR envelope (BEGIN:VCALENDAR ... END:VCALENDAR).
- Support
VEVENT serialization for tasks with due_at to ensure full visibility on calendar clients that ignore VTODO (specifically Google Calendar web UI).
- Support
VTODO serialization (?format=todo) for dedicated to-do and task clients (Apple Reminders, OmniFocus).
-
HTTP Calendar Endpoint in FastAPI:
- Expose
GET /calendar/{token}.ics in src/adapters/api/app.py returning text/calendar; charset=utf-8.
- Query user's assigned active tasks across authorized projects and render the RFC 5545 calendar feed.
-
Discord Bot Interface:
- Add
/pm calendar slash command (or an interactive button within /pm settings / /pm task list).
- Ephemerally reply with:
- Direct
webcal:// link (one-click subscription in macOS/iOS/Windows calendar clients).
- Standard
https:// link (for manual entry in Google Calendar / Outlook).
- Interactive "Regenerate Link" button.
-
Configuration & Documentation:
- Add
PUBLIC_BASE_URL in src/config.py (e.g. https://pm.example.com).
- Document reverse-proxy setup (Caddy/Nginx/Cloudflare Tunnel) in
README.md and docs/wiki.
Acceptance Criteria
Summary
Provide personalized, live iCalendar subscription feeds (
.ics/webcal://) for Discord contributors and server members, enabling direct synchronization of assigned tasks and due dates into Google Calendar, Apple Calendar, Microsoft Outlook, and standard task management clients.Background & Context
From Day 1,
dgg-pmhas prioritized RFC 5545 schema portability (to_rfc5545_vtodoinsrc/domain/standard_mappings.py, mappingTaskStatusandPriorityLevelto RFC 5545 values). Furthermore, a concurrent FastAPI server (src/adapters/api/app.py) is already running within the application process on port 8000.Currently, contributors must check Discord to track their deadlines and upcoming commitments. Offering an iCal subscription link allows users to view their active and overdue project tasks directly within their personal calendar apps.
Proposed Capabilities
Calendar Token & Security:
calendar_tokeninuser_preferencestable or HMAC-signed token).Calendar Export & Client Compatibility:
VCALENDARenvelope (BEGIN:VCALENDAR ... END:VCALENDAR).VEVENTserialization for tasks withdue_atto ensure full visibility on calendar clients that ignoreVTODO(specifically Google Calendar web UI).VTODOserialization (?format=todo) for dedicated to-do and task clients (Apple Reminders, OmniFocus).HTTP Calendar Endpoint in FastAPI:
GET /calendar/{token}.icsinsrc/adapters/api/app.pyreturningtext/calendar; charset=utf-8.Discord Bot Interface:
/pm calendarslash command (or an interactive button within/pm settings//pm task list).webcal://link (one-click subscription in macOS/iOS/Windows calendar clients).https://link (for manual entry in Google Calendar / Outlook).Configuration & Documentation:
PUBLIC_BASE_URLinsrc/config.py(e.g.https://pm.example.com).README.mdanddocs/wiki.Acceptance Criteria
/pm calendar.GET /calendar/{token}.icsvalidate cleanly against RFC 5545 linters.