Skip to content

Conversation

@djedi
Copy link
Owner

@djedi djedi commented Dec 11, 2025

No description provided.

djedi added 11 commits November 11, 2025 04:32
…a.20)

• Implement private read-only ICS calendar feed:
  - New `/api/calendar_token` endpoint to generate/rotate/revoke per-user tokens
  - Public `/api/calendar.ics?token=...` endpoint serving daily notes as all-day events
  - Events include note title, cleaned markdown body, and direct link back to DailyNotes
  - Added calendar sharing toggle + URL management in Settings UI

• Add image upload support:
  - New `/api/upload` endpoint with file type/size validation
  - Uploads stored in `config/uploads/<username>/` with UUID filenames
  - New `Upload` model tracking metadata and last_seen_at for cleanup
  - Editor now supports paste & drop image upload with automatic markdown insertion
  - Added orphan upload detection and cleanup endpoints

• Add new Settings UI section for calendar sharing with copy/regenerate controls
• Bump version to 1.0.0-beta.20 across README, package.json, and package-lock.json
• Add helper script `update_version.sh` for consistent version bumping
• Add migration for `calendar_token` column and update config defaults

This brings powerful new sharing and media capabilities while keeping everything private and revocable.
Add support for subscribing to external ICS calendar feeds (Google Calendar, etc.)
that display events on the daily note page. Includes security hardening for SSRF
prevention and DoS protection.

Also fixes Vue 3 reactivity issue where task list was not populating on initial
page load due to incorrect ref wrapping in the provide/inject pattern.

Backend:
- Add ExternalCalendar model and migration
- Implement ICS feed fetching with 5-minute cache (100-entry limit)
- Add SSRF protection (block localhost, private IPs)
- Add DoS protection (5MB size limit, 1000 event limit per feed)
- Parse ICS events with recurrence support (RRULE)
- Add API endpoints: GET/POST /api/external_calendars, GET /api/external_events
- Add DEFAULT_TIMEZONE config for event display

Frontend:
- Add calendar management UI in Settings
- Add ExternalEvents and ExternalEventsSidebar components
- Display external events on Day view
- Fix task list reactivity by passing ref directly instead of unwrapping
- Generate task list on mount and value change, not just on edit
- Add CalendarService for API integration

Security improvements:
- Block internal network access (localhost, 127.0.0.1, private IP ranges)
- Limit ICS file size to 5MB to prevent memory exhaustion
- Limit events per file to 1000 to prevent DoS
- Implement cache eviction to prevent unbounded growth
- Replace 'any' types with proper TypeScript types
Change Editor import from 'type' to regular import to fix component
resolution issue. Vue cannot render type-only imports, causing notes
to fail loading with 'Failed to resolve component: Editor' warnings.

Also add null guards for global context in Editor component to prevent
potential runtime errors when accessing taskList.
Modify the `updateTask` function to correctly mutate the `taskList`
by accessing its `.value` property. This change ensures that reactivity
is preserved and that Vue automatically updates the DOM when changes
occur in the task list. The previous method did not account for
Vue's reactivity system, leading to potential UI inconsistencies.
- Add slide-out sidebar with overlay on mobile devices
- Make header responsive with overflow menu for hidden actions
- Use dynamic viewport height (dvh) for proper mobile sizing
- Add responsive styles to editor, preview, and search views
- Fix Bulma import to use compiled CSS (avoids SASS conflicts)
- Make login/auth pages responsive with max-width wrapper
- Add iOS-specific fixes (touch scrolling, zoom prevention)
Update project version in README, package.json, and
package-lock.json to 1.0.0-beta.22 for a minor update.
This keeps documentation and package metadata in sync
with the new release.
Save and restore collapsed code sections when navigating between
notes. Fold state is stored in localStorage keyed by note ID and
restored when returning to a previously viewed note.
Copilot AI review requested due to automatic review settings December 11, 2025 01:28
@djedi djedi merged commit 564d593 into djedi:master Dec 11, 2025
6 checks passed
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR migrates the DailyNotes application from Vue 2 to Vue 3, along with numerous feature additions and improvements. The migration includes updates to the editor (CodeMirror 5 to 6), modernized component syntax (Options API to Composition API), and enhanced mobile responsiveness.

  • Migrated from Vue 2 to Vue 3 with Composition API
  • Upgraded CodeMirror 5 to CodeMirror 6 with improved syntax highlighting
  • Added calendar sharing via ICS feeds and external calendar integration
  • Implemented image upload functionality with paste/drag-drop support

Reviewed changes

Copilot reviewed 52 out of 55 changed files in this pull request and generated no comments.

Show a summary per file
File Description
client/package.json Updated dependencies for Vue 3, CodeMirror 6, and related packages
client/src/main.ts Refactored to use Vue 3 createApp API and Unhead
client/src/components/Editor.vue Complete rewrite using CodeMirror 6 and Composition API
client/src/views/*.vue Migrated all views to Composition API with script setup
app/routes.py Added calendar feed, external calendar, and image upload endpoints
app/models.py Added Upload and ExternalCalendar models
migrations/versions/*.py Added database migrations for new features
Comments suppressed due to low confidence (1)

client/src/views/Search.vue:1

  • Corrected spelling of 'Searcy' to 'Search'.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

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.

1 participant