···77 <meta name="description" content="A simple, fast, and free CDN powered by Cloudflare. Upload images, GIFs, videos and documents.">
88 <meta property="og:title" content="MBD CDN — madebydanny.uk">
99 <meta property="og:description" content="A simple easy to use CDN, free for life">
1010- <meta property="og:image" content="https://imrs.madebydanny.uk?url=https://public-cdn.madebydanny.uk/user-content/2026-01-30/cb09a559-ae35-4617-971c-9230521f7a9c.png">
1010+ <meta property="og:image" content="https://cdn.madebydanny.uk/user-content/2026-04-29/93bde54d-bc21-43b9-8e4e-d9d324e9607d.png">
1111 <meta property="og:type" content="website">
1212 <link rel="icon" href="https://public-cdn.madebydanny.uk/user-content/2026-01-30/33913bec-bc2f-4e6c-a474-2ef8f8c00197">
1313···531531532532 .limit-card {
533533 background: var(--bg-card);
534534- border: 1px solid var(--border);
535535- border-top: 2px solid var(--accent);
536534 border-radius: var(--radius);
537535 padding: 1.25rem;
538536 text-align: center;
···572570 .limits-note {
573571 padding: 0.875rem 1.125rem;
574572 background: var(--bg-card);
575575- border: 1px solid var(--border);
576576- border-left: 3px solid var(--accent);
577573 border-radius: var(--radius);
578574 font-size: 0.8375rem;
579575 color: var(--text-muted);
···638634 .how-grid, .limits-grid { grid-template-columns: 1fr; }
639635 .nav-title { display: none; }
640636 }
637637+638638+ .hero-badges {
639639+ display: flex;
640640+ flex-wrap: wrap;
641641+ gap: 0.5rem;
642642+ margin-top: 1.25rem;
643643+ }
644644+ .badge {
645645+ display: inline-flex;
646646+ align-items: center;
647647+ gap: 0.35rem;
648648+ padding: 0.3rem 0.75rem;
649649+ border: 1px solid var(--border);
650650+ border-radius: 999px;
651651+ font-size: 0.75rem;
652652+ color: var(--text-muted);
653653+ background: var(--bg-card);
654654+ }
655655+ .badge i { font-size: 0.7rem; color: var(--accent); }
641656 </style>
642657</head>
643658<body>
···655670 <section class="page-hero">
656671 <p class="page-hero-eyebrow">madebydanny.uk</p>
657672 <h1>MBD CDN</h1>
658658- <p>A simple, fast CDN powered by Cloudflare R2 — free to use, no account needed.</p>
673673+ <p>A simple, fast CDN powered by Cloudflare R2. Free for Life.</p>
674674+ <p>Are you a developer looking for a CDN with an API? <a href="/cdn/api.html"><b>Try the new API!</b></a></p>
659675 </section>
660676661677 <!-- Stats -->
···848864849865 <div class="limits-note">
850866 All limits reset daily at <strong>midnight UTC</strong> and are enforced per IP to protect performance for all users.
851851- Need higher limits? Consider self-hosting the stack, or get in touch via Bluesky.
867867+ <p><b>Need higher limits? <a href="/cdn/api.html">Try the new API!</b></a></p>
852868 </div>
853869854870 <div class="usage-section">
···858874 <div class="usage-item">
859875 <div class="usage-row">
860876 <span>Files Uploaded</span>
861861- <span id="usage-files-label">0 / 30</span>
877877+ <span id="usage-files-label">0 / 25</span>
862878 </div>
863879 <div class="usage-track">
864880 <div class="usage-fill" id="usage-files-fill" style="width:0%"></div>
···867883 <div class="usage-item">
868884 <div class="usage-row">
869885 <span>Storage Used</span>
870870- <span id="usage-bytes-label">0 B / 1 GB</span>
886886+ <span id="usage-bytes-label">0 B / 200 MB</span>
871887 </div>
872888 <div class="usage-track">
873889 <div class="usage-fill" id="usage-bytes-fill" style="width:0%"></div>
+11
cdn/admin-cmds.md
···11+# MBD CDN - Admin Key Management
22+33+If you self-host MBD CDN, you can issue and revoke keys via the `/v1/keys` admin endpoints. These endpoints require a separate `ADMIN_SECRET` environment variable to be set in your Cloudflare Worker — **not** a regular API key.
44+55+## Issue a Key
66+77+```bash
88+curl -X POST [https://cdn.madebydanny.uk/v1/keys](https://cdn.madebydanny.uk/v1/keys) \
99+ -H "Authorization: Bearer your_admin_secret" \
1010+ -H "Content-Type: application/json" \
1111+ -d '{"name": "My App", "owner": "yourname"}'