A collection of bits - no build steps, no backend, no bundler https://webbits.tfks.net
  • HTML 54.2%
  • JavaScript 40.8%
  • CSS 3.7%
  • TypeScript 1.2%
  • Just 0.1%
Find a file
Erik Stephens af6851716e Site Settings: a publication row names its target the way the chip does
The row printed the raw `target` id, so the same publication read "s3" in Site Settings and "R2" on the chip. `storage.targetLabel` already resolves that — it is the difference between the id and the thing the user configured — so the row calls it instead of interpolating the id.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-20 08:16:31 -07:00
.claude new bit: tarot reader 2026-09-08 21:10:09 -07:00
.codex/prompts new bit: tarot reader 2026-09-08 21:10:09 -07:00
bits BYOB: Copy Into Mine becomes a module, and two bits stop copying the copy 2026-09-19 17:04:30 -07:00
lib Site Settings: a publication row names its target the way the chip does 2026-09-20 08:16:31 -07:00
openspec Camp Jam: a song book becomes a profile, and mine replaces default as the seed 2026-09-17 15:13:05 -07:00
party Crapshoot: the whole craps table, split across everyone's phones 2026-09-10 18:03:32 -07:00
scripts Pack a bit's lib/ as lib/, instead of flattening it 2026-08-17 07:30:39 -07:00
wiki BYOB: Copy Into Mine becomes a module, and two bits stop copying the copy 2026-09-19 17:04:30 -07:00
.gitignore Add Boxwise: exact-fraction cut lists and sheet nesting 2026-08-31 17:49:12 -07:00
.prettierrc more fields for camp-jam 2026-04-17 05:20:53 -07:00
.rsync-filter Add gameon offline pack tooling and self-hosted game rooms 2026-08-01 18:39:25 -07:00
AGENTS.md BYOB federated state: publish a bit, follow a friend's 2026-09-16 08:33:10 -07:00
CLAUDE.md new bit: tarot reader 2026-09-08 21:10:09 -07:00
CONTEXT.md new bit: tarot reader 2026-09-08 21:10:09 -07:00
favicon.png more fields for camp-jam 2026-04-17 05:20:53 -07:00
IDEAS.md Crapshoot: the whole craps table, split across everyone's phones 2026-09-10 18:03:32 -07:00
index.html Crapshoot: the whole craps table, split across everyone's phones 2026-09-10 18:03:32 -07:00
justfile BYOB federated state: publish a bit, follow a friend's 2026-09-16 08:33:10 -07:00
package-lock.json Migrate game backends from hosted PartyKit to self-hosted Cloudflare Workers 2026-07-28 10:02:05 -07:00
package.json Migrate game backends from hosted PartyKit to self-hosted Cloudflare Workers 2026-07-28 10:02:05 -07:00
party.just Migrate game backends from hosted PartyKit to self-hosted Cloudflare Workers 2026-07-28 10:02:05 -07:00
README.md make public 2026-03-20 03:12:29 -07:00
STORAGE.md Camp Jam: a song book becomes a profile, and mine replaces default as the seed 2026-09-17 15:13:05 -07:00

The FunKy bitS

A collection of web bits - no build steps, no backend, no bundler

Live Demo - Inspired By Simon Willison


Stack

Purpose Library CDN
DOM components Shoelace cdn.jsdelivr.net/npm/@shoelace-style/shoelace@2.20.1
DOM components Custom Web Components ./lib/components.js
Reactivity Alpine.js v3 cdn.jsdelivr.net/npm/alpinejs@3.x.x
Styling Tailwind CSS cdn.tailwindcss.com

Structure

├── index.html
├── lib/components/
│   ├── NAME.js
│   └── NAME.css
└── bits/
    ├── NAME.html

Adding a New Bit

  1. Create the file: ./bits/NAME.html

  2. Use this template:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Your Bit</title>
  <script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-50 min-h-screen">
  <site-header></site-header>
  <main x-data="yourBit()" class="max-w-5xl mx-auto px-6 py-8">
    <!-- your bit here -->
  </main>
  <site-footer></site-footer>

  <script defer src="https://cdn.jsdelivr.net/npm/alpinejs@3.x.x/dist/cdn.min.js"></script>
  <script>
    function yourBit() {
      return {
        // Alpine data
      };
    }
  </script>
</body>
</html>
  1. Register it in index.html — add an entry to window.bits:
{
  name: 'Your Bit',
  icon: '🔧',
  desc: 'One-sentence description of what it does.',
  tags: ['tag1', 'tag2'],
  href: 'bits/NAME.html',
}