- New 'Import Obsidian' action on site settings page
- Upload a zip file of an Obsidian vault to import all notes as posts
- Markdown notes imported with title from filename, published date from
file timestamp, and body with front-matter stripped
- Images and other attachments saved as Upload records
- New obsimport service handles zip traversal and import logic
- Unit tests for front-matter stripping
Co-authored-by: Shelley <shelley@exe.dev>
Implements the pages service with ListPages, GetPage, CreatePage,
UpdatePage, DeletePage, and ReorderPages methods. Wires the service
into the service registry and generalises SlugConflictError message.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Slug collision checks now properly propagate real DB errors instead of
silently ignoring them
- GetCategory now verifies site ownership, matching the pattern used by
UpdateCategory and DeleteCategory
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extend the publishing pipeline to generate category index pages,
per-category archive pages, per-category RSS/JSON feeds, and display
categories on individual post pages and post lists.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Wire up categories service, add CategoriesHandler with full CRUD, create index/edit templates, register routes in server.go, and add Categories nav link.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Have got upload images appearing in the post list
- Allowed for deleting uploads
- Allowed for seeing the upload progress
- Fixed the setting of upload properties like the MIME type
- Removed the stripe exif logic with just re-encoding PNGs and JPEGs by loading them and saving them