AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
A decentralized CDN. Anyone can serve bytes; clients pay per megabyte in USDC. An open market that gets cheaper as it grows, at ~$0.01/GB, up to 90% below legacy CDN list pricing.
Translation pending
Developer toolsTypeScript · MDXGitHub @decdnOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Marketing site for deCDN — the delivery layer anyone can serve.
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A decentralized delivery layer for bytes at scale. Anyone can serve bytes; clients pay per megabyte in USDC.
This is the source for the deCDN marketing site and blog.
Next.js 16 (App Router) · React 19 · Tailwind CSS v4 · TypeScript · pnpm. Static export, deployed to Cloudflare Pages.Read the full README ↗A decentralized delivery layer for bytes at scale. Anyone can serve bytes; clients pay per megabyte in USDC.
This is the source for the deCDN marketing site and blog.
Next.js 16 (App Router) · React 19 · Tailwind CSS v4 · TypeScript · pnpm · Node ≥24 (.nvmrc). Static export, deployed to Cloudflare Pages.
pnpm install # required (not npm/yarn) — husky hooks shell out to `pnpm exec`
pnpm dev # dev server on :3000
pnpm build # static export → ./out, then the check:out + check:og-image guards
pnpm test # vitest run
pnpm typecheck # tsc --noEmit
pnpm lint # eslint (flat config)
pnpm format # prettier --write .
pnpm format:check # prettier --check . (CI)
app/ — App Router entry (layout.tsx, page.tsx, globals.css) plus the blog routes (blog/, blog/[slug]/), the legal/[doc] route, the sitemap/robots handlers, the llms.txt / llms-full.txt handlers, and file-convention metadata assets.components/layout/ — the site chrome mounted in app/layout.tsx on every route (Chrome → MobileMenu, Footer, ScrollReveal) plus chrome-active, the nav's section and tone tables.components/home/ — the homepage sections composed by app/page.tsx, one folder per section (hero/, compare/, method/, faq/, try/, contact/) with its sub-parts, plus brand.tsx, which they share.components/blog/, components/legal/ — components used only by those routes (PostRow, LegalDoc).components/ui/ — generic primitives with no site content (Frame, SectionHeader, Prose, Figure, PanelFigure, Pill, CodeBlock). A component that takes site data or domain types goes in its feature's folder; a primitive with no site content stays in ui/ even if only one feature uses it today.lib/ — shared helpers (links.ts, copy.ts, stats.ts, blog.ts, faq.ts, legal.ts, jsonld.tsx, schema.ts, …). The site's prose and its displayed values live in lib/copy.ts as plain data — the comparison table maps over it and the llms-full.txt mirror serialises it, so anything inlined in a component drifts from the mirror. Prose that names the product renders through highlightBrand (components/home/brand.tsx).test-utils/ — test-only helpers for walking the element tree a server component returns.scripts/ — postbuild guards run against ./out by pnpm build: check-out.mjs (advertised URLs, dotted routes, panel captions, the prerendered mobile menu toggle) and check-og-image.mjs (social cards).content/blog/ — MDX posts loaded by lib/blog.ts and rendered by app/blog/[slug]/page.tsx.content/legal/ — MDX for the legal pages (privacy, terms, disclaimer), loaded by lib/legal.ts and rendered by app/legal/[doc]/page.tsx.docs/ — Mintlify source for docs.decdn.org. Built and deployed independently of pnpm build; not part of the static export and not imported from the website code.@/* maps to the project root (e.g. @/lib/links, not @/src/...).next.config.ts sets output: "export"; the build emits ./out. No SSR, ISR, middleware, or Image Optimization API. Route handlers (app/robots.txt/route.ts, app/sitemap.xml/route.ts, app/sitemap-pages.xml/route.ts, app/llms.txt/route.ts, app/llms-full.txt/route.ts) must be dynamic = "force-static" and GET-only; the dotted segment is what makes them emit real files rather than <path>/index.html. robots.txt is a hand-written route handler rather than the Next app/robots.ts metadata file, so it can emit the non-standard Content-Signal: directive (per contentsignals.org).trailingSlash: true. Every route emits <path>/index.html. Internal links and hand-built URLs (sitemap entries, JSON-LD @ids) should expect a trailing slash — see SITE_URL and BLOG_URL in lib/links.ts.app/globals.css under @theme inline { … } — there is no tailwind.config.*.commitlint runs in the commit-msg husky hook; non-conforming messages are rejected.metadataBase is live. lib/links.ts site is the real origin and INDEXABLE is true. Anything anchored on this origin — OG and canonical (via metadataBase); JSON-LD and the sitemap/robots emitters (via SITE_URL) — ships to production. Adding a non-blog page means appending an entry to app/sitemap-pages.xml/route.ts; blog posts are auto-derived from content/blog/, while legal pages are driven by the closed LEGAL_SLUGS list in lib/legal.ts (add both the MDX file under content/legal/ and a slug there). Flipping INDEXABLE flips <meta name="robots"> only; robots.txt and the sitemap stay unconditional by design (rationale in lib/links.ts)./llms.txt is a curated index of this origin and /llms-full.txt is every page as one plain-text document; both derive their page entries from listPosts(), , and , are listed in , and are advertised through in and a header in . resolves every advertised same-origin URL against after a build. The protocol documentation has its own pair on , served by Mintlify.This project is tested with BrowserStack. Unit tests run under vitest (pnpm test); cross-browser checks use BrowserStack through its Open Source Sponsorship Program.
Cloudflare Pages serves the out/ directory produced by pnpm build.
See AGENTS.md for the full ruleset (CLAUDE.md is a one-line include of it).
LEGAL_SLUGSlib/faq.tslib/copy.tsapp/sitemap-pages.xml/route.tsalternates.typesapp/layout.tsxLink:public/_headersscripts/check-out.mjsout/docs.decdn.orghttps://data.decdn.org/stats-421614.json (rewritten every five minutes by the decdn/stats indexer). The fetch lives in lib/stats.ts / lib/use-stats.ts; the CSP in public/_headers allowlists the origin under connect-src, so change STATS_ORIGIN and the CSP together.