OscarBeamish

Beamish.Ink — AI skill for Claude Code

AI community

Web effects and interface components for AI coding agents.

How to install Beamish.Ink

This entry records only its repository, not the path inside it, so there is no exact command to give. Open OscarBeamish/beamish.ink and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

What Beamish.Ink does

Web effects and interface components for AI coding agents. Three.js scenes, WebGL shaders and text animations, built for warm paper rather than black. No package, no CLI: copy a prompt, paste it into Claude Code or Cursor, and your agent writes the code.

Alternatives in AI

  • Guizang Ppt Skill — AI-agent Skill for generating polished HTML slide decks: editorial magazine and Swiss layouts, image prompts 24.9k ★
  • Anthropic Quickstarts — by Anthropic - Offers comprehensive development guides for three distinct AI-powered demo projects with standa 15.4k ★
  • Claude Skill Web Clone — Methodology for faithfully cloning any website (static / React / WebGL) — without copying AI-hallucinated code 969 ★

README

Beamish

Web effects and interface components for AI coding agents.

Three.js scenes, WebGL shaders, text animations and interface components. There is nothing to install. Browse [beamish.ink](https://beamish.ink), pick one, press **Copy prompt**, and paste the result into Claude Code or Cursor. Your agent fetches the source from this repo and writes it into your project.

Why a prompt and not a package

A component library has to guess your build, your framework and your styling system. It will be wrong about at least one of them.

A prompt does not guess. It hands your agent the real source file, every option with the range that actually looks good, wiring for React, Vue and plain HTML, and the three mistakes most likely to be made with that particular effect. Then it stays out of the way while the agent adapts all of it to the project in front of it.

Every prompt pins its URLs to a git tag, never to `main`. A prompt you pasted six months ago still fetches the file it was written about.

What's here

Two tiers with two contracts. They are not unified and will not be.

**`effects/`** is canvas and WebGL. A framework-free module that takes a DOM element and returns a handle:

export type EffectHandle = {
  start(): void
  stop(): void
  update(opts: Partial): void
  renderAtTime(t: number): void  // deterministic: same t, same frame
  destroy(): void                // releases the WebGL context, RAF and listeners
}

**`components/`** is navs, buttons, menus and cursors. Ordinary React and Vue components. Semantics, keyboard handling and focus management are the whole job here, and an imperative handle is the wrong shape for any of them.

The two tiers share tokens, motion, `meta.json`, the prompt system and the recorder. The runtime contract is the one thing they do not share.

Built for paper

Every library in this space assumes a near-black canvas, and their effects come apart the moment you put them on anything else. The background