punkyard_obsidian-lindar/docs/roadmap.md
pun kyard 762136428b
feat: open category system with per-color defaults and per-event color override (#53) (#53)
- Add EventCategory interface + categories CRUD in settings
- Dynamic datalist + auto-color on category match in event modal
- Full cell today highlight, rename TYPE to CATEGORY
- Consistent frontmatter: title → type → uid → color → event → allDay → start → end → participants
- Accept lindar-event as event marker alias
- Wednesdays toggle above weekends in settings

Co-authored-by: nmn <punkyard@users.noreply.github.com>
2026-07-03 16:48:20 +02:00

5.5 KiB

Roadmap

Upcoming

v0.2 — List & Unscheduled tabs

  • List tab: flat chronological events, month-grouped, filter, click-to-open
  • Unscheduled tab: tagged-but-undated notes with inline date picker

v0.3 — Tag-based discovery

  • #event tag as first-class discovery (alongside folder)
  • event: true optional in tag mode

v0.4 — CalDAV sync (exploratory)

  • Two-way sync with remote calendars
  • iCal feed import

Completed phases

Phase 1 — scaffold

  • Start from the official Obsidian sample plugin structure
  • Create manifest.json, package.json, tsconfig.json, esbuild.config.mjs, versions.json
  • Add LICENSE
  • Create plugin entry point in src/main.ts, settings model, shared types
  • Keep main.ts minimal and move feature logic into focused modules under src/
  • Add strict TypeScript settings and Obsidian typings
  • Implement settings persistence with loadData() and saveData()
  • Register a custom Obsidian view for the calendar
  • Add a ribbon icon and command to open Linear Calendar
  • Run npm install and confirm npm run dev rebuilds successfully
  • Test the plugin inside a separate development vault

Phase 2 — base calendar view

  • Render the yearly view with 12 month rows
  • Add correct day offsets for every month
  • Align weekday headers with the date grid
  • Make the month column sticky on the left
  • Make the header sticky on top
  • Apply the 96vh layout, add horizontal scrolling
  • Highlight today
  • Add light/dark theme styling
  • Add year navigation controls, display customizable motto

Phase 3 — event creation and storage

  • Open a popup when the user clicks a date cell
  • Add title, start date, end date, color, and notes fields
  • Use the native color input when supported by the OS
  • Save events as Markdown notes with YAML frontmatter
  • Load saved events back into the calendar view
  • Render single-day and multi-day events as colored event bars
  • Edit and delete existing events from the calendar
  • Improve event bar spacing, contrast, and overflow behavior

Phase 4 — multi-day events and layout

  • Render multi-day events as continuous bars
  • Support events spanning weeks and months
  • Handle overlapping events with sensible lane stacking
  • Finalize month event lane scroll interaction
  • Add adaptive lane height / month-specific scrolling
  • Fix empty-event-list tail area wheel propagation

Polish backlog

Phase 5 — open category system

  • Add EventCategory interface and categories field to settings
  • Dynamic category CRUD in settings UI
  • Replace hardcoded type suggestions with user-defined categories
  • Auto-fill color picker when category name matches
  • Document category system in docs/categories.md

Phase 6 — polish

  • Add hover details / tooltip behavior
  • Improve spacing, typography, borders, and color balance
  • Auto-scroll the view so today is visible when useful
  • Handle leap years and edge cases gracefully
  • Verify manual install works with main.js, manifest.json, and optional styles.css
  • Test reload/unload cleanup and command stability
  • Self-review against Obsidian developer policies and plugin guidelines
  • Test on macOS, Windows, and Linux where possible

Phase 7 — release and submission

  • Bump manifest.json version using SemVer
  • Update versions.json to map plugin version to minimum app version
  • Ensure manifest.json includes stable id, name, version, author, description, minAppVersion, and isDesktopOnly
  • Build release artifacts and verify main.js is bundled correctly
  • Create a GitHub release whose tag exactly matches manifest.json version, with no v prefix
  • Upload main.js, manifest.json, and optional styles.css as individual release assets
  • Confirm the repository includes README.md and LICENSE
  • Fork obsidianmd/obsidian-releases
  • Add the plugin entry to community-plugins.json
  • Ensure the submitted description matches manifest.json exactly
  • Open the community plugin PR using the plugin submission template
  • Complete the release checklist and respond to validation feedback

Release readiness checklist

  • README.md clearly explains what the plugin does and how to use it
  • LICENSE is present and matches MIT
  • manifest.json contains the correct id, name, version, author, description, minAppVersion, and isDesktopOnly
  • versions.json exists and includes an entry for the current release version
  • main.js is built and committed for release artifacts
  • styles.css is included if custom styling is required
  • package.json scripts support npm run dev and npm run build
  • The plugin builds cleanly with npm run build
  • The plugin has been validated manually in a dev vault
  • Release tag matches manifest.json version exactly and uses no v prefix
  • GitHub release assets include main.js, manifest.json, and optional styles.css
  • Community submission PR is prepared with a matching description and metadata
  • community-plugins.json entry uses the exact same plugin id
  • Submitted description matches manifest.json description exactly
  • PR is opened against obsidianmd/obsidian-releases with the plugin template
  • Submission checklist is fully completed
  • Any validation failures are fixed by pushing another commit to the PR branch