chainlinkmeme
⬢ A community-curated archive of Chainlink memes — chainlinkme.me.
Browse, search, favorite, and react. Every meme has a permalink that unfurls beautifully in Discord, Twitter, and Telegram. The memeverse flies you through the whole archive as a 3D galaxy and can rebuild your face out of it; a tag constellation maps the archive as a cosmos; weekly snapshots preserve the top 7 memes each week; a Discord slash command pulls memes into any server on demand.
Architecture
GitHub repo ─► jsDelivr (image CDN, automatic)
│
│
├──► GitHub Pages (Astro, 100% pre-rendered)
│
└──► Cloudflare Worker ─► D1 (/api/reactions · /discord/interactions)
- Images + metadata live in this repo. The repo is the archive.
- Site is a static Astro build deployed to GitHub Pages — no Cloudflare Pages, no Next.js, no SSR.
- Worker handles the two small bits of state: per-meme reactions (D1-backed, edge-cached) and the Discord slash command. ~200 lines total.
- Images are served via jsDelivr directly from this public repo — no separate CDN setup, no S3.
Everything else is derived at build time. The live site can be rebuilt from scratch with git clone && pnpm install && pnpm build — the only external state is the D1 reactions table, which is allowed to be lossy.
Repo layout
memes/ # source of truth: one .jpg/.gif/.png/.webp + one .toml per meme
site/ # Astro frontend (GitHub Pages)
worker/ # Cloudflare Worker + D1 (reactions + Discord bot)
scripts/ # build-time + one-off tooling
.github/workflows/ # CI: validate PRs, deploy on merge, weekly snapshot
Features
The memeverse (/verse)
Every meme in the archive as a hex tile in one WebGL 2 galaxy.
- Star systems: every tag with 12+ memes becomes a spinning disc of tiles. Each meme lives in the system of its rarest qualifying tag, so the giant tags don't swallow the niche ones. Sergey holds the galactic core around a glowing chainlink hex; the other systems wind out along two spiral arms, each next to the system it shares the most memes with. Memes with no system drift on the outer rim.
- Stars that resolve into memes: far away, a tile renders as a star of its average colour; fly closer and it becomes the meme. Tiles big on screen stream in a sharp 256px copy.
- Fly: drag to orbit, scroll/pinch to zoom, right- or shift-drag to pan, click a meme to fly to it (info panel, reactions, prev/next through its system).
/ lights up a tag, r warps to a random meme, t starts an autopilot tour (good on a TV), ? shows the keys.
- Deep links:
#m=<slug> (every permalink has a "find it in the memeverse" button), #tag=pepe, #tour, #assemble, and #callsign=rory-clippy-fud, which flies a ccip.dev LinkMarine through the three dog-tag tags their callsign was drawn from.
Assemble (/verse/#assemble)
Drop in a photo (or take a selfie, or pick a meme, or the chainlink mark) and the galaxy pours out of its orbits to rebuild it as a honeycomb portrait made of the archive. Download it as a hex PFP or a poster, share it, or record a clip of the galaxy assembling it (MP4 where the browser can encode it, WebM otherwise; filmed straight off the canvas, no UI).
- Each hex is described the way the build describes every meme: mean CIE Lab colour over a 4×4 grid of bins inside the hex. The matcher shortlists by mean colour, picks by the full description, makes reuse progressively more expensive and never repeats a meme next to itself, so a face comes out of ~900 different memes rather than a few beige ones.
- A blend slider shifts each tile towards the photo's colour while keeping part of the meme's own contrast; the 3D view and the downloads apply the same maths.
- It all runs in the browser. The photo never leaves the device.
Gallery
- Responsive JS masonry (2/3/4 columns), append-only so scrolling back up never reshuffles memes
- Browse by vibe: a scrollable rail of the 24 biggest tags, each fronted by its most colourful meme as a hex (picked at build time from the memeverse atlas's colour features,
site/src/lib/tag-rail.ts); one tap filters the wall
- A command bar that sticks to the top while you scroll: tag search with synonym-aware autocomplete, fresh / shuffle order (shuffle is a seeded re-deal, so pagination stays stable), GIFs only, Favorites only, Random
- Cards carry a caption and their first tags, a "new" badge for recent additions, and one-click copy image (a PNG straight to the clipboard, paste it into X or Telegram; GIFs fall back to copying the link)
- Per-meme permalinks (
/m/<slug>) with full OG + Twitter cards
r for a random meme; / to focus search; j/k to navigate; f to favorite; i to copy the image; ? for the full keymap
- View transitions between gallery and permalinks
- Dark / light themes (respects
prefers-color-scheme)
- The stage: the meme of the day as a holographic collector card (foil and glare follow the cursor) over a living honeycomb of the archive's most colourful memes, which drifts, shimmers, lights up around the pointer and flips tiles over. The pick is re-made in the browser for today's UTC date, so it matches the daily X post between deploys, and it flips to the next one at midnight with a countdown. The honeycomb's sheet (
atlas/hero.webp, ~145 KB) is rendered by scripts/build-verse-og.ts
- Hex-shaped scroll-to-top widget
Reactions
- Four reactions per meme: ❤️, 😂, ⚡, 💎
- Optimistic UI with rollback on failure, offline pill if the worker is unreachable
- Global counts served bulk from
/api/reactions, edge-cached
- Personal favorites persisted in localStorage
- Legacy
likes table preserved so pre-migration hearts still count
This is the beginning of the README. Read the rest at the original. Read the full README ↗