You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Every major CMS — Strapi, Payload, Directus — stores media references as hardcoded absolute URLs in rich text content. This creates fragile content that breaks when:
S3 signed URLs expire (Strapi issue #25756 — open, 3 comments this week)
CDN domain changes
Environment changes (staging → production)
Storage bucket migrations
This is a systemic gap. Numen can own it by building relative URL storage with runtime delivery resolution as a first-class feature.
The Problem (Competitor Evidence)
Strapi #25756 (March 17, 2026): "Signed URLs in private S3 buckets expire and are not refreshed for images embedded in rich text." When Strapi generates a signed S3 URL for an embedded image, that URL lives in the database. When it expires (typically 1-24 hours), every piece of content referencing it breaks.
Strapi #25758 (March 17, 2026): "Strapi RTE (blocks) uses absolute URLs in native image embed option." All embedded media is absolute. CDN swap = broken content across the board.
Pattern: No major CMS stores media references relationally in content. They all hardcode URLs at creation time.
Proposed Solution: Smart Media Delivery
Core Architecture
Storage layer: All media references stored as numen://media/{uuid} relative pointers, never absolute URLs
Delivery layer:MediaDeliveryService resolves pointers at API response time to:
Public CDN URL (default)
Fresh signed URL if private bucket (with cache + background refresh)
Environment-correct domain
Rich Text Resolution
Rich text fields contain embedded media references. On read:
Parser extracts all numen://media/{uuid} references in HTML/Markdown/Lexical/Tiptap nodes
Batch-resolves to current URLs in a single pass
Returns fully-resolved content — consumers get valid URLs, always
Features
Signed URL cache: Background job refreshes signed URLs before expiry. Never a broken image.
CDN migration: Change one config key (storage.cdn_url). All content resolves correctly immediately — zero database updates.
Environment awareness: Same content model, correct URLs per environment.
Lazy fallback: If media not found, returns a graceful placeholder URL rather than a broken ref.
API Output Options
{
"media_url_mode": "absolute", // Resolve to absolute URLs (default)"media_url_mode": "signed", // Force signed URLs (private assets)"media_url_mode": "relative", // Return numen:// pointers (for SDK/cache layer)
}
Why This Matters for AI Pipeline
Numen's AI pipeline generates content that includes media (via image generation, DAM search). That media must stay valid indefinitely. A blog post generated by the pipeline today should still have valid images in 2 years, regardless of CDN changes. With relative URL storage, it will.
Priority
HIGH — Solves a systemic pain point competitors have ignored for years. Positions Numen as "the CMS where content works forever."
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
Overview
Every major CMS — Strapi, Payload, Directus — stores media references as hardcoded absolute URLs in rich text content. This creates fragile content that breaks when:
This is a systemic gap. Numen can own it by building relative URL storage with runtime delivery resolution as a first-class feature.
The Problem (Competitor Evidence)
Strapi #25756 (March 17, 2026): "Signed URLs in private S3 buckets expire and are not refreshed for images embedded in rich text." When Strapi generates a signed S3 URL for an embedded image, that URL lives in the database. When it expires (typically 1-24 hours), every piece of content referencing it breaks.
Strapi #25758 (March 17, 2026): "Strapi RTE (blocks) uses absolute URLs in native image embed option." All embedded media is absolute. CDN swap = broken content across the board.
Pattern: No major CMS stores media references relationally in content. They all hardcode URLs at creation time.
Proposed Solution: Smart Media Delivery
Core Architecture
numen://media/{uuid}relative pointers, never absolute URLsMediaDeliveryServiceresolves pointers at API response time to:Rich Text Resolution
Rich text fields contain embedded media references. On read:
numen://media/{uuid}references in HTML/Markdown/Lexical/Tiptap nodesFeatures
storage.cdn_url). All content resolves correctly immediately — zero database updates.API Output Options
{ "media_url_mode": "absolute", // Resolve to absolute URLs (default) "media_url_mode": "signed", // Force signed URLs (private assets) "media_url_mode": "relative", // Return numen:// pointers (for SDK/cache layer) }Why This Matters for AI Pipeline
Numen's AI pipeline generates content that includes media (via image generation, DAM search). That media must stay valid indefinitely. A blog post generated by the pipeline today should still have valid images in 2 years, regardless of CDN changes. With relative URL storage, it will.
Priority
HIGH — Solves a systemic pain point competitors have ignored for years. Positions Numen as "the CMS where content works forever."
Competitor Context
numen://media/{uuid}+ runtime resolutionBeta Was this translation helpful? Give feedback.
All reactions