- Pass post.image[] as JSON prefillImages param when prefilling compose from an existing post (repost/edit/retry), replacing the broken single-image prefillImagePath/prefillImageId approach
- MediaLibraryModal now shows the attempted URL and a clear explanation on 404, making it easier to diagnose if the Postiz version does not expose GET /media
- stripHtml accepts null/undefined input and returns "" instead of throwing
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- PostizContext: new PostizWorkspace type, multi-workspace storage
(postiz_workspaces_v2), auto-migration from legacy single config,
addWorkspace / updateWorkspace / removeWorkspace, clients map
- Settings: full rewrite with workspace card list (add / edit / delete)
- Compose: channels displayed in two levels — workspace section then
network type (X/Twitter, Instagram, LinkedIn...) within each workspace;
submit routes posts and image uploads per workspace
- MediaLibraryModal: workspace tabs when multiple workspaces configured,
returned items carry their workspaceId
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Multi-images (compose):
- Replace single imageUri with mediaItems: MediaItem[] (local | uploaded)
- allowsMultipleSelection: true, selectionLimit up to 4 total
- Each picked image is resized to max 1920px before upload
- Thumbnail row with individual × remove buttons
- uploaded badge (cloud icon) on library/prefill images
- buildMediaPayload() uploads local items, passes uploaded items as-is
Media Library:
- New MediaLibraryModal component — full-screen modal
- Fetches GET /media from Postiz instance
- 3-column grid with multi-select (capped at remaining slots)
- Selected items added to compose media pool
Notifications:
- Strip HTML from notification body text
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>