Update post
Cover storage now uses durable object storage
New stored covers can now live in Cloudflare R2 instead of depending on Vercel filesystem uploads or fragile remote hotlinks.
Post links
Keep browsing
Move between the update feed, upcoming work, and the editor from the same reading surface.
What changed
A concise summary of the work delivered in this release.
- Added Cloudflare R2 support for normalized cover uploads.
- Added app-side R2 safety caps for total stored bytes, daily upload bytes, and daily upload count.
- Added R2 media storage metadata so covers can be distinguished from local files, database-backed media, and remote URLs.
- Updated catalog contribution logic to prefer durable stored covers over original hotlink URLs when a cover is stored in R2 or the database.
User value
How this release improves the experience, workflow, or control users get from LoreKeep.
- New covers should stay visible in production instead of disappearing when Vercel local upload paths are unavailable.
- Stored covers are compressed before upload, keeping media usage small for early testing.
- If R2 is not configured or safety caps are reached, LoreKeep falls back instead of blocking entry saves.
Full notes
Additional context, implementation notes, or rollout details for this release.
LoreKeep cover storage now has a production-ready object-storage path. When R2 is configured, saved and recovered covers are normalized, compressed, uploaded to the media bucket, and served from the dedicated media domain. Local development still uses local uploads where possible, and database-backed cover bytes remain as a safety fallback so saves do not fail if object storage is unavailable.
Release status
Current state
A quick snapshot of how this update is categorized and published.
Category
Infrastructure
Status
Live
Published
2026-05-18 20:30 UTC