Doop
Doop is an open-source multiplayer design canvas and design MCP for Claude Code, Codex, and any AI agent. Design side by side with agents — free in beta.
Build cyberpunk-styled chat screenshots in your browser. Glitch FX, custom contacts, PNG export — perfect for Shadowrun / Cyberpunk RED / 2020 game masters making in-character handouts. 8 languages, n
DesignHTML · JavaScriptGitHub @CyberDelaaiOnlineOwner 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
A tool to make a cyberpunk-like messenger dialogs
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗A single-page web app for composing cyberpunk-styled dialog screenshots (netrunner UI vibe). No backend, no build step. Open index.html in any modern browser.
Inspired by Commlink-Thread.
FILE TRANSFERRED.contactId. Editing the contact propagates name/avatar to every linked message in the preview and PNG export. Clone-of-a-clone keeps the chain even without a contact. Visible // NO CONTACT badge in red on rows that aren't linked.EXAMPLE_* snapshots are seeded for every supported locale. Toggle to hide examples once you've found your own rhythm.commlink_dialog_<epoch-ms>.png.localStorage keeps state, contacts, snapshots, language, UI open-state. Images (bg + bgOriginal + body images + their *Original recrop sources) live in IndexedDB, content-addressed by SHA-256 so identical images dedupe automatically across messages and snapshots.Just open the file:
xdg-open index.html # Linux
open index.html # macOS
start index.html # Windows
No server needed — all dependencies are either inlined (fonts as base64) or loaded from CDN (augmented-ui, html-to-image, qrcode-generator).
If you'd rather use a local server:
python3 -m http.server
# then visit http://localhost:8000
.
├── index.html ← markup + inline JS, inlined @font-face base64 fonts
├── css/
│ ├── base.css ← root vars, layout, panels, fields, buttons, swatches, toast, lang select
│ ├── messages.css ← message editor rows + dialog frame + preview rendering + signal bars
│ ├── config.css ← snapshots panel + slot list
│ └── contacts.css ← collapsible sidebars (contacts / snapshots / donate) + contact editor
└── js/
├── i18n.js ← translation dictionary for all 8 supported locales
├── storage.js ← localStorage + IndexedDB image store
├── state.js ← defaultState, loadState/saveState, helpers, migrations
├── render.js ← renderPreview, renderMessagesEditor, syncForm
├── snapshots.js ← snapshot CRUD + bundled EXAMPLE_* seeding
├── contacts.js ← contact CRUD + inline edit
├── crop.js ← image crop modal (openCrop/doCrop + drag handlers)
├── png-export.js ← html-to-image PNG export
├── json-io.js ← state + contacts JSON export/import
└── effects.js ← tag-glitch animation + version-hover morph
index.html's <style id="font-face-inline"> block so html-to-image picks them up reliably without any cross-origin fetch (necessary for clean PNG export on file://). CJK glyphs fall back to system fonts (Hiragino / Yu Gothic / PingFang / Noto Sans CJK).foreignObject so the browser does the actual rendering (correctly handling clip-path, gradients, box-shadow). The glitch SVG filter is temporarily cloned into the captured tree so its url(#glitch-slices) reference resolves; the export captures .stage-wrap so the floating signal-bars sibling is included, then crops off the .stage-meta header.{var} interpolation; English fallback when a key is missing in another locale. Glitch animation reads the tag string fresh on each cycle so language changes apply on the next glitch.idb:<hash> ref; snapshots store the same ref → no copy on save. A reference-count GC runs after destructive ops (image clear, JSON import, snapshot delete) to remove orphaned blobs.localStorage because cookies don't work reliably on file:// URLs.APP_VERSION constant near the top of the script in index.html follows X.Y.Z:
The header tag shows the version after the locale-aware app name (e.g. DIALOG CONSTRUCTOR // v1.2.12). The tag occasionally glitches to DIALOG FORGER and back.
localStorage
commlink:state — current dialog (messages, choices, meta, accent, FX). Image fields are idb:<hash> refs.commlink:snapshots — { name: snapshot } map. Image fields are refs (same hash space as state).commlink:contacts — [ { id, name, avatar } ]. Avatars stay as base64 here (they're already 128×128 WEBP and small).commlink:bgOriginal — recrop source ref for the background.commlink:lang — current locale code.commlink:openPanel — currently open side panel (contacts / snapshots / '').commlink:seeded — version stamp so the bundled EXAMPLE_* snapshots refresh after a schema bump.commlink:showExamples — '1' / '0' for the SHOW EXAMPLES toggle in the snapshots panel.IndexedDB
commlink-images, store images: { key: sha256hex, value: Blob }. Used for bg, bgOriginal, and message body images (current + recrop source).If you find these tools useful, you can support development here: boosty.to/cyberdelaai/donate
MIT © 2026 CyberDelaai