Skip to content

Repository files navigation

CYBERDECK

A deck of client-side cyberpunk creative tools. Each app is a "program" that runs on the deck: it shares the visual language and code patterns, but ships, versions, and deploys on its own.

No backend server — everything runs in the browser.

Programs

Program Path What it does
ASCII//Convert apps/ascii Image or webcam → interactive ASCII art. Live →
GLITCH//Studio apps/glitch A glitch-effect pipeline over image or webcam — live preview, presets, PNG / video export. Live →
GOLEM//Console apps/golem A 32-bit fantasy computer: write assembly, assemble it, run it from a command line as registers, memory and the Terminal update live. Live →
SPRAWL//Atlas apps/sprawl The deck's first piece, not tool: the world's connected capacity as light. Opens blown white; you repair it by sliding the scale coarser until structure emerges. Live →

Running locally

Requirements: Node.js 22+ (see .nvmrc)

npm install                 # installs every app (npm workspaces)
npm run dev                 # start ASCII//Convert

npm run build               # build every app
npm run test:run            # run every app's tests once
npm run check               # Biome lint + format, repo-wide

Scope any app script with --workspace @cyberdeck/ascii.

Structure

apps/ascii         ASCII//Convert
apps/glitch        GLITCH//Studio
apps/golem         GOLEM//Console
apps/sprawl        SPRAWL//Atlas
packages/deck-kit  the shared shell every program builds on
docs/adr           architectural decisions, deck-wide
CONTEXT-MAP.md     how the programs relate

Tooling is deliberately light: npm workspaces, no Nx or Turborepo. Repo-wide tooling (Biome, lefthook, commitlint, Changesets) sits at the root; each app owns its own build and test dependencies.

For a long time there was no shared packages/ — duplication was kept as a signal of what actually repeats (ADR 0011). GLITCH//Studio made the seams obvious, so the proven-shared surface was extracted into @cyberdeck/deck-kit — the visual language, ui/ primitives, and generic browser plumbing. It's consumed as source (no build step) and is deliberately not a domain core: each app's pipeline stays in the app (ADR 0014).

Deploys

Each app is its own Vercel project pointing at this repo. ASCII//Convert builds from the root vercel.json; the rest set Root Directory to their apps/<name> and are driven by a nested vercel.json that cds to the repo root so the @cyberdeck/deck-kit workspace dependency resolves.

Each project's ignoreCommand skips its build when the diff touches nothing it ships. It watches the app plus packages/deck-kit (consumed as source by all, ADR 0014), diffs over $VERCEL_GIT_PREVIOUS_SHA..HEAD (that project's last deploy on the branch), excludes **/*.md, and fails toward deploying — production, a branch's first deploy, and any git error all build. CI's paths-ignore is separate; Vercel does not read it.

Contributing

Commits follow conventional commits (enforced by commitlint). Releases run on Changesets, per app — a PR that changes app behavior adds one with npm run changeset (ADR 0012).

Credits

GOLEM//Console's instruction set is inherited from Poxim, the didactic 32-bit architecture used in the Computer Architecture course at UFS (Universidade Federal de Sergipe), 2017. The encoding, register file, and 42 mnemonics are Poxim's; the reference programs under apps/golem/src/golem/__fixtures__/ are the course's example project, kept verbatim as test oracles. Credit to the course and its instructor — ADR 0019 explains why the ISA was inherited rather than designed.

License

MIT

About

Client-side cyberpunk creative tools: ASCII art, glitch effects, and whatever runs on the deck next.

Topics

Resources

Security policy

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages