diff --git a/cdn.html b/cdn.html index 2e5fa1b..5601084 100644 --- a/cdn.html +++ b/cdn.html @@ -1,1157 +1,542 @@ - - - MBD CDN — madebydanny.uk - - - - - - - - - - - - - - + + + MBD CDN - danielmorrisey.com + + + + + + + + + + + + + + + + + + + + + + + + + + + - - -
- - -
-

madebydanny.uk

-

MBD CDN

-

A simple, fast CDN powered by Cloudflare R2. Free for Life.

-

Are you a developer looking for a CDN with an API? Just send a POST to cdn.madebydanny.uk

-
- - -
- -
-
-
-
—
-
Images
-
-
-
-
—
-
Videos
-
-
-
-
—
-
GIFs
-
-
-
-
—
-
Documents
-
-
-
-
-
-
-
—
-
Storage Used
-
-
-
-
- - -
-
- - - - -
- - -
- - -
- - · - · -
- -
-
-
-
-
0%
-
- -
-
-
- - - -
- -
-
✓ Your file is live
-
-
- - - Open - -
-
-
- - -
-
-

MBD CDN is a content delivery network built by madebydanny.uk - to host and serve media files — images, GIFs, videos, and documents — at fast speeds with global availability.

-

Files uploaded here are stored in Cloudflare R2 object storage - and served from Cloudflare's global edge network, which spans over 310 cities worldwide. Your media is delivered - from a server close to whoever is viewing it, minimising latency.

-

The platform is designed to be simple and permanent. Files are stored indefinitely once uploaded - and immediately available via a public URL — no sign-up, no expiry, no catch.

-

The underlying stack is a Cloudflare Worker with R2 for storage and - D1 for metadata. The whole thing runs at the edge with no cold starts.

-
-
- - -
-
-
-
1
-
-

You select a file

-

Your file is read locally in the browser and sent directly to the CDN API over HTTPS — straight to the Cloudflare edge, no intermediate servers.

+ + + +
+ + +
+

danielmorrisey.com/cdn

+

MBD CDN

+

+ A simple, fast CDN powered by Cloudflare R2 and Workers. Free for Life.. +

+
+ + +
+ +
+
+
+
—
+
Images
+
+
+
+
—
+
Videos
+
+
+
+
—
+
GIFs
+
+
+
+
—
+
Documents
+
-
-
-
2
-
-

A Worker receives it

-

A Cloudflare Worker handles the upload at the edge. It assigns a UUID filename, detects the file type, and streams the body directly into R2 with no cold starts.

+
+
+
+
—
+
Storage Used
+
-
-
-
3
-
-

R2 stores it permanently

-

The file is written to Cloudflare R2 — S3-compatible storage with zero egress fees and 11 nines of durability. Metadata is logged to D1 to track stats.

+
+ + +
+
+ + + +
- -
-
4
-
-

You get a public URL

-

A permanent cdn.madebydanny.uk link is returned instantly. Anyone with it can access the file, served from whichever Cloudflare PoP is closest to them.

+ + +
+ + +
+ + · + · +
+ +
+
+
+
+
0%
+
+ +
+
+
+ + + +
+ +
+
✓ Your file is live
+
+
+ + + Open + +
+
-
-
- -
-
- -

310+ Edge Locations

-

Files cached and served globally — sub-50ms for most users.

-
-
- -

R2 Object Storage

-

Zero egress fees, no expiry. Enterprise-grade durability.

-
-
- -

Zero Cold Starts

-

Workers run at the edge — every request is handled immediately.

-
-
- - - -
-
-
- -
—
-
Max File Size
-
Per individual upload
-
-
- -
—
-
Daily Storage
-
Total uploads per day
-
-
- -
—
-
Uploads Per Day
-
Resets at midnight UTC
-
-
- -
- All limits reset daily at midnight UTC and are enforced per IP to protect performance for all users. -

Need higher limits? Try the new API!

-
- -
- -
Loading your usage…
- - -
-
- - - - + + // ── Init ─────────────────────────────────────────────────────────── + + loadStats(); + \ No newline at end of file diff --git a/css/cdn.css b/css/cdn.css index 93b004b..9c31ff9 100644 --- a/css/cdn.css +++ b/css/cdn.css @@ -1,178 +1,675 @@ - /* --- THEME VARIABLES --- */ - :root { - --bsky-card-bg: #4a2b32; - --bsky-post-bg: #1e1e1e; - --bsky-text-color: #ffffff; - --bsky-subtext-color: #dcbaba; - --bsky-link-color: #ffcccc; - --bsky-border: rgba(255,255,255,0.1); - } - - body { - font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; - background-color: #121212; - color: white; - padding: 20px; - line-height: 1.5; - margin: auto; - text-align: center; - max-width: 600px; - } - - /* --- CARD STYLING --- */ - #music-status-card, #latest-post-card { - background-color: var(--bsky-card-bg); - color: var(--bsky-text-color); - border-radius: 12px; - padding: 16px; - margin: 20px auto; - display: none; - box-shadow: 0 4px 6px rgba(0,0,0,0.3); - max-width: 500px; - border: 1px solid var(--bsky-border); - text-align: center; - } - - .bsky-header { - font-size: 0.75rem; - text-transform: uppercase; - letter-spacing: 0.05em; - color: var(--bsky-subtext-color); - margin-bottom: 12px; - display: flex; - justify-content: center; - align-items: center; - gap: 8px; - } - - .bsky-header a { - color: var(--bsky-subtext-color); - text-decoration: none; - } - - .bsky-content-body { - margin-bottom: 12px; - word-wrap: break-word; - text-align: center; - } - - /* --- POST IMAGE STYLING --- */ - .post-image { - width: 100%; - border-radius: 8px; - margin: 10px auto 0 auto; - border: 1px solid var(--bsky-border); - display: block; - } - - .bsky-trackname { - font-weight: 700; - font-size: 1.1rem; - display: block; - color: var(--bsky-text-color); - text-decoration: none; - margin-bottom: 2px; - } - - .bsky-artist { - color: var(--bsky-subtext-color); - font-size: 0.95rem; - } - - .bsky-footer { - border-top: 1px solid var(--bsky-border); - padding-top: 10px; - margin-top: 12px; - font-size: 0.8rem; - color: var(--bsky-subtext-color); - display: flex; - align-items: center; - justify-content: center; - gap: 8px; - } - - a { color: var(--bsky-link-color); } - - .error-msg { - color: #ff6b6b; - font-size: 0.9rem; - } - - hr { - border: none; - border-top: 1px solid var(--bsky-border); - margin: 20px 0; - } - - /* Social button row */ - .social-row { - display: flex; - gap: 10px; - flex-wrap: wrap; - margin: 12px 0 20px 0; - justify-content: center; - } - - .social-btn { - display: inline-flex; - align-items: center; - justify-content: center; - gap: 8px; - padding: 8px 14px; /* keep expanded size by default */ - border-radius: 999px; - background: rgba(255,255,255,0.04); - color: var(--bsky-text-color); - text-decoration: none; - border: 1px solid var(--bsky-border); - font-size: 0.95rem; - flex: 0 0 auto; /* don't stretch; allow pushing */ - min-width: 44px; - transition: all 0.2s ease; - } - - .social-btn:hover { - background: var(--btn-bg); - border-color: var(--btn-border); - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(0,0,0,0.3); - } - - .social-btn i { - width: 1.1em; - text-align: center; - font-size: 1.05em; - } - - /* label hidden by default, revealed on hover */ - .social-btn .label { - display: inline-block; - /* always visible (no hover reveal) */ - opacity: 1; - transform: translateX(0); - margin-left: 8px; - white-space: nowrap; - color: inherit; - font-weight: 600; - font-size: 0.95rem; - max-width: 180px; - overflow: hidden; - vertical-align: middle; - } - - /* hover styles removed - buttons are static */ - - /* brand color variables per button */ - .btn-bluesky { --btn-bg: #0077ff; --btn-border: rgba(0,119,255,0.6); } - .btn-instagram { --btn-bg: #E1306C; --btn-border: rgba(225,48,108,0.5); } - .btn-tangled { --btn-bg: #000000; --btn-border: rgba(107,114,128,0.4); } - .btn-threads { --btn-bg: #000000; --btn-border: rgba(17,24,39,0.4); } - .btn-mastodon { --btn-bg: #6364FF; --btn-border: rgba(48,136,212,0.4); } - - /* Screen-reader only text (keep for accessibility) */ - .sr-only { - position: absolute !important; - height: 1px; width: 1px; - overflow: hidden; - clip: rect(1px, 1px, 1px, 1px); - white-space: nowrap; - } \ No newline at end of file +/* ── Design Tokens ── */ +:root { + --bg-deep: #100b09; + --bg: #1c1310; + --bg-raised: #251a15; + --bg-card: #2e2018; + --border: #3d2b1f; + --border-hover: #5c3d28; + --text: #f4deb8; + --text-muted: #e8c28a; + --text-dim: #b37a48; + --accent: #d4975c; + --accent-bright:#e8c28a; + --accent-dim: rgba(212, 151, 92, 0.14); + --accent-glow: rgba(212, 151, 92, 0.08); + --green: #4caf7d; + --red: #e06c6c; + --font-serif: 'Lota', Georgia, 'Times New Roman', serif; + --font-mono: 'Sometype Mono', 'Monaco', 'Courier New', monospace; + --font-sans: 'DM Sans', system-ui, sans-serif; + --radius: 10px; + --transition: 0.2s ease; + --max-w: 680px; +} + +*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } + +html { scroll-behavior: smooth; } + +body { + font-family: var(--font-serif); + font-size: 16px; + line-height: 1.7; + color: var(--text); + background-color: var(--bg); + -webkit-font-smoothing: antialiased; +} + +/* ── Typography ── */ + +h1, h2, h3 { + font-family: var(--font-mono); + font-weight: 600; + line-height: 1.2; +} + +a { + color: var(--accent); + text-decoration: none; + transition: opacity var(--transition); +} +a:hover { opacity: 0.75; } + +code { + font-family: var(--font-mono); + font-size: 0.875em; + background: var(--bg-raised); + padding: 0.15em 0.4em; + border-radius: 4px; + color: var(--accent); + word-break: break-all; +} + +/* ── Header ── */ + +.site-header { + position: sticky; + top: 0; + z-index: 100; + background: var(--bg); + backdrop-filter: blur(12px); + border-bottom: 1px solid var(--border); +} + +.nav-container { + max-width: var(--max-w); + margin: 0 auto; + padding: 0.875rem 1.5rem; + display: flex; + justify-content: space-between; + align-items: center; +} + +.nav-logo { + font-family: var(--font-serif); + font-style: italic; + font-size: 1.25rem; + color: var(--text); +} +.nav-logo:hover { opacity: 0.6; } + +.nav-menu { + list-style: none; + display: flex; + gap: 1.5rem; +} + +.nav-menu a { + font-size: 0.875rem; + color: var(--text-muted); + letter-spacing: 0.01em; +} +.nav-menu a:hover { color: var(--text); opacity: 1; } + +/* ── Main ── */ + +.main-content { + max-width: var(--max-w); + margin: 0 auto; + padding: 0 1.5rem; +} + +/* ── Hero ── */ + +.hero { + padding: 4rem 0 3rem; +} + +.hero-eyebrow { + font-size: 0.875rem; + color: var(--text-muted); + margin-bottom: 0.25rem; + letter-spacing: 0.04em; +} + +.hero-title { + font-size: clamp(2.5rem, 6vw, 3.5rem); + color: var(--text); + margin-bottom: 1.25rem; + letter-spacing: -0.02em; +} + +.hero-bio { + font-size: 1.0625rem; + color: var(--text-muted); + line-height: 1.8; + max-width: 560px; + margin-bottom: 1.5rem; +} + +.hero-bio a { + color: var(--accent); + border-bottom: 1px solid var(--accent-dim); + transition: border-color var(--transition), opacity var(--transition); +} +.hero-bio a:hover { + opacity: 1; + border-bottom-color: var(--accent); +} + +/* ── Sections ── */ + +.content-section { + padding: 2.5rem 0; + border-top: 1px solid var(--border); +} + +.section-label { + font-family: var(--font-sans); + font-size: 0.75rem; + font-weight: 500; + text-transform: uppercase; + letter-spacing: 0.1em; + color: var(--text-dim); + margin-bottom: 1.25rem; +} + +/* ── Stats ── */ + +.stats-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 0.75rem; + margin-bottom: 0.75rem; +} + +.stat-card { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 1rem; + text-align: center; + transition: border-color var(--transition); +} +.stat-card:hover { border-color: var(--border-hover); } + +.stat-icon { + font-size: 1.1rem; + color: var(--accent); + opacity: 0.7; + margin-bottom: 0.375rem; +} + +.stat-value { + font-family: var(--font-mono); + font-size: 1.375rem; + color: var(--text); + letter-spacing: -0.02em; + line-height: 1.2; +} + +.stat-value.loading { + color: var(--text-dim); + animation: pulse 1.6s ease-in-out infinite; +} + +@keyframes pulse { 0%,100% { opacity: .4; } 50% { opacity: .8; } } + +.stat-label { + font-family: var(--font-sans); + font-size: 0.7rem; + color: var(--text-dim); + text-transform: uppercase; + letter-spacing: 0.05em; + margin-top: 0.2rem; +} + +.storage-card { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 1rem 1.25rem; + display: flex; + align-items: center; + gap: 1rem; + transition: border-color var(--transition); +} +.storage-card:hover { border-color: var(--border-hover); } +.storage-card .stat-icon { margin-bottom: 0; font-size: 1.25rem; flex-shrink: 0; } +.storage-card .stat-value { font-size: 1.25rem; } + +/* ── Tabs ── */ + +.tab-bar { + display: flex; + gap: 0; + border-bottom: 1px solid var(--border); + overflow-x: auto; + scrollbar-width: none; + margin-bottom: 2rem; +} +.tab-bar::-webkit-scrollbar { display: none; } + +.tab-btn { + font-family: var(--font-sans); + font-size: 0.875rem; + font-weight: 500; + color: var(--text-muted); + background: none; + border: none; + border-bottom: 2px solid transparent; + padding: 0.75rem 1.125rem; + cursor: pointer; + white-space: nowrap; + margin-bottom: -1px; + transition: color var(--transition), border-color var(--transition); + letter-spacing: 0.01em; +} +.tab-btn:hover { color: var(--text); } +.tab-btn.active { color: var(--accent); border-bottom-color: var(--accent); } +.tab-btn i { margin-right: 0.375rem; } + +.tab-pane { display: none; padding-bottom: 4rem; } +.tab-pane.active { display: block; } + +/* ── Upload tab ── */ + +.drop-zone { + display: block; + border: 1px dashed var(--border-hover); + border-radius: var(--radius); + padding: 3rem 1.5rem; + text-align: center; + cursor: pointer; + color: var(--text-muted); + transition: border-color var(--transition), background var(--transition); + margin-bottom: 0.875rem; +} +.drop-zone:hover { + border-color: var(--accent); + background: var(--accent-glow); +} +.drop-zone.drag-over { + border-color: var(--green); + background: rgba(76, 175, 125, 0.05); +} +.drop-zone i { + font-size: 2rem; + color: var(--accent); + opacity: 0.6; + display: block; + margin-bottom: 0.75rem; +} +.drop-zone input { display: none; } + +#file-name { + font-size: 0.875rem; + display: block; + margin-top: 0.25rem; + font-family: var(--font-sans); + color: var(--text-muted); +} + +.file-info { + display: none; + margin-bottom: 0.875rem; + padding: 0.75rem 1rem; + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius); + font-size: 0.8125rem; + font-family: var(--font-sans); + color: var(--text-muted); +} +.file-info.show { display: block; } + +.progress-wrap { display: none; margin-bottom: 0.875rem; } +.progress-wrap.show { display: block; } + +.progress-track { + height: 4px; + background: var(--bg-raised); + border-radius: 999px; + overflow: hidden; +} +.progress-fill { + height: 100%; + width: 0%; + background: linear-gradient(90deg, var(--accent), var(--green)); + border-radius: 999px; + transition: width 0.2s ease; +} +.progress-label { + text-align: right; + font-size: 0.75rem; + font-family: var(--font-mono); + color: var(--text-dim); + margin-top: 0.3rem; +} + +.turnstile-wrap { + margin-bottom: 0.75rem; +} + +.cf-turnstile { + display: flex; + justify-content: center; +} + +.upload-btn { + display: block; + width: 100%; + padding: 0.875rem 1.5rem; + background: var(--accent); + color: var(--bg-deep); + border: none; + border-radius: 999px; + font-family: var(--font-sans); + font-size: 0.9375rem; + font-weight: 500; + cursor: pointer; + transition: opacity var(--transition), transform var(--transition); + letter-spacing: 0.01em; +} +.upload-btn:hover { opacity: 0.85; transform: translateY(-1px); } +.upload-btn:active { transform: scale(0.99); } +.upload-btn:disabled { opacity: 0.35; cursor: not-allowed; transform: none; } + +.status-msg { + text-align: center; + margin-top: 0.75rem; + font-size: 0.875rem; + font-family: var(--font-sans); + min-height: 1.3em; + color: var(--accent); +} + +.result-box { + display: none; + margin-top: 1.25rem; + padding: 1.25rem; + background: var(--bg-card); + border: 1px solid var(--green); + border-radius: var(--radius); + animation: slideIn 0.25s ease; +} +.result-box.show { display: block; } + +@keyframes slideIn { + from { opacity: 0; transform: translateY(-6px); } + to { opacity: 1; transform: translateY(0); } +} + +.result-label { + font-family: var(--font-sans); + font-size: 0.75rem; + text-transform: uppercase; + letter-spacing: 0.06em; + color: var(--text-dim); + margin-bottom: 0.625rem; +} + +.result-url { + font-family: var(--font-mono); + font-size: 0.8125rem; + padding: 0.625rem 0.875rem; + background: var(--bg-raised); + border: 1px solid var(--border); + border-radius: 6px; + word-break: break-all; + color: var(--text); + margin-bottom: 0.875rem; + line-height: 1.5; +} + +.result-actions { display: flex; gap: 0.625rem; flex-wrap: wrap; } + +.copy-btn, +.open-btn { + display: inline-flex; + align-items: center; + gap: 0.4rem; + padding: 0.5rem 1rem; + background: var(--bg-raised); + border: 1px solid var(--border); + border-radius: 999px; + color: var(--text-muted); + font-family: var(--font-sans); + font-size: 0.8125rem; + font-weight: 500; + cursor: pointer; + transition: border-color var(--transition), color var(--transition); + text-decoration: none; +} +.copy-btn:hover, +.open-btn:hover { border-color: var(--accent); color: var(--accent); opacity: 1; } +.copy-btn.copied { background: var(--green); border-color: var(--green); color: var(--bg-deep); } + +/* ── About / Prose ── */ + +.prose { + font-size: 0.9375rem; + color: var(--text-muted); + line-height: 1.8; +} +.prose p + p { margin-top: 1rem; } +.prose a { color: var(--accent); border-bottom: 1px solid var(--accent-dim); } +.prose a:hover { border-bottom-color: var(--accent); opacity: 1; } +.prose strong { color: var(--text); font-weight: 600; } + +/* ── Steps (How it Works) ── */ + +.steps { + display: flex; + flex-direction: column; + margin-bottom: 2rem; +} + +.step { + display: flex; + gap: 1rem; + padding: 1rem 0; + border-bottom: 1px solid var(--border); +} +.step:last-child { border-bottom: none; } + +.step-num { + flex-shrink: 0; + width: 1.75rem; + height: 1.75rem; + border-radius: 50%; + background: var(--bg-card); + border: 1px solid var(--border); + display: flex; + align-items: center; + justify-content: center; + font-size: 0.75rem; + font-weight: 500; + color: var(--accent); + margin-top: 0.1rem; + font-family: var(--font-mono); +} + +.step-body h3 { + font-family: var(--font-serif); + font-size: 0.9375rem; + font-weight: 400; + color: var(--text); + margin-bottom: 0.2rem; +} +.step-body p { + font-size: 0.875rem; + color: var(--text-muted); + line-height: 1.7; +} + +/* ── How-it-works feature grid ── */ + +.how-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 0.75rem; +} + +.how-card { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 1.125rem; + transition: border-color var(--transition); +} +.how-card:hover { border-color: var(--border-hover); } + +.how-card i { + font-size: 1.125rem; + color: var(--accent); + opacity: 0.8; + margin-bottom: 0.625rem; + display: block; +} + +.how-card h3 { + font-family: var(--font-sans); + font-size: 0.875rem; + font-weight: 500; + color: var(--text); + margin-bottom: 0.375rem; +} + +.how-card p { + font-size: 0.8125rem; + color: var(--text-muted); + line-height: 1.6; +} + +/* ── Limits ── */ + +.limits-grid { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 0.75rem; + margin-bottom: 1.25rem; +} + +.limit-card { + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius); + padding: 1.25rem; + text-align: center; + transition: border-color var(--transition); +} +.limit-card:hover { border-color: var(--border-hover); } + +.limit-card i { + font-size: 1.25rem; + color: var(--accent); + opacity: 0.7; + margin-bottom: 0.625rem; + display: block; +} + +.limit-value { + font-family: var(--font-mono); + font-size: 1.375rem; + color: var(--text); + letter-spacing: -0.02em; + margin-bottom: 0.25rem; + line-height: 1.2; +} + +.limit-label { + font-family: var(--font-sans); + font-size: 0.7rem; + color: var(--text-dim); + text-transform: uppercase; + letter-spacing: 0.05em; + font-weight: 500; +} + +.limit-note { + font-family: var(--font-sans); + font-size: 0.7rem; + color: var(--text-dim); + margin-top: 0.25rem; + opacity: 0.7; +} + +.limits-note { + padding: 0.875rem 1.125rem; + background: var(--bg-card); + border: 1px solid var(--border); + border-radius: var(--radius); + font-family: var(--font-sans); + font-size: 0.8375rem; + color: var(--text-muted); + line-height: 1.65; + margin-bottom: 1.75rem; +} +.limits-note strong { color: var(--text); } +.limits-note a { color: var(--accent); } +.limits-note p { margin-top: 0.375rem; } + +/* ── Usage bars ── */ + +.usage-section { margin-top: 1.5rem; } + +.usage-item { margin-bottom: 1.25rem; } + +.usage-row { + display: flex; + justify-content: space-between; + font-family: var(--font-sans); + font-size: 0.8125rem; + color: var(--text-muted); + margin-bottom: 0.5rem; +} +.usage-row span:first-child { color: var(--text); font-weight: 500; } + +.usage-track { + height: 5px; + background: var(--bg-raised); + border-radius: 999px; + overflow: hidden; +} +.usage-fill { + height: 100%; + border-radius: 999px; + background: linear-gradient(90deg, var(--accent), var(--green)); + transition: width 0.6s cubic-bezier(.4, 0, .2, 1); +} +.usage-fill.warn { background: linear-gradient(90deg, #c47a30, #d48a40); } +.usage-fill.danger { background: linear-gradient(90deg, var(--red), #c05050); } + +.usage-loading { + font-family: var(--font-sans); + font-size: 0.8125rem; + color: var(--text-dim); + font-style: italic; +} + +.divider { border: none; border-top: 1px solid var(--border); margin: 1.75rem 0; } + +.file-types { + font-family: var(--font-sans); + font-size: 0.875rem; + color: var(--text-muted); + line-height: 1.8; +} +.file-types strong { color: var(--text); } + +/* ── Footer ── */ + +.site-footer { + max-width: var(--max-w); + margin: 0 auto; + padding: 2.5rem 1.5rem 3rem; + border-top: 1px solid var(--border); + font-size: 0.8125rem; + color: var(--text-dim); + line-height: 1.8; +} + +.site-footer a { color: var(--text-muted); } +.site-footer a:hover { color: var(--text); opacity: 1; } + +/* ── Responsive ── */ + +@media (max-width: 600px) { + .hero { padding: 2.5rem 0 2rem; } + .stats-grid { grid-template-columns: repeat(2, 1fr); } + .how-grid, + .limits-grid { grid-template-columns: 1fr; } + .nav-menu { display: none; } +} \ No newline at end of file diff --git a/imrs.html b/imrs.html index 8badbb3..33526db 100644 --- a/imrs.html +++ b/imrs.html @@ -13,8 +13,6 @@ - - @@ -115,7 +113,7 @@ IMRS, or Image Media Reduction System, is a simple tool that runs a Cloudflare W

In an HTML image tag

Wrap any src to serve AVIF automatically to supporting browsers.

-
<img src="https://imrs.danielmorrisey.com/?url=https://example.com/photo.jpg">
+
<img src="https://imrs.danielmorrisey.com/?url=danielmorrisey.com/media/images/DSC_3765.avif">
diff --git a/index.html b/index.html index 5a5e161..63218c2 100644 --- a/index.html +++ b/index.html @@ -94,8 +94,11 @@

latest from bluesky

-
- loading post… +
+ +
+ loading post… +
@@ -158,7 +161,7 @@ diff --git a/js/script.js b/js/script.js index 2c97280..5a08096 100644 --- a/js/script.js +++ b/js/script.js @@ -56,7 +56,7 @@ document.addEventListener('DOMContentLoaded', () => { contentEl.innerHTML = `

${escapeHtml(record.text || '')}

- view on Bluesky ↗ + view on Bluesky `; if (record.createdAt) { diff --git a/media/images/seo/cdn.png b/media/images/seo/cdn.png new file mode 100644 index 0000000000000000000000000000000000000000..942813c2dbf68d89620902912800b6d0f82aba64 GIT binary patch literal 21811 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 \ No newline at end of file diff --git a/media/images/seo/imrs.png b/media/images/seo/imrs.png deleted file mode 100644 index 829ac587f383b5c9e3847aa28558eaa39e62095d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19434 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 yB{PAm++!>XpmDq&PH^obA>07s8K{Aep-RxPl~q