Doop
Doop: 오픈소스 멀티플레이어 디자인 캔버스 및 AI 에이전트용 MCP
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
*Humankind's great tech began with fire. This this.side.of.tech is You.*
A generator and scanner for Ember codes: posters where a standard QR code
burns at the base of a grid column and rises as a plume of embers.README 전문 보기 ↗Humankind's great tech began with fire. This
this.side.of.techis You.
A generator and scanner for Ember codes: posters where a standard QR code burns at the base of a grid column and rises as a plume of embers.
| URL | What it does |
|---|---|
/ | Home. Asks for your name, then takes you to your own Ember. |
/ember/<code> | Your Ember. An Ember QR poster whose QR leads back to https://thissideoftech.com/ember/<code>. The 8-character code comes from a hash of the name (same name, same code; case and spacing ignored; the name can't be recovered from it). The name itself stays on the device that entered it. Anyone else sees the poster without the name. Share, copy link, PNG/SVG download, plus an in-page check that the poster scans back to its link. |
/generate/ | Generator. Type text, get the poster as SVG or PNG. Optional hidden ember text, plus an X-ray view of the convention. |
/qr/ | Ember QR. A standard QR drawn as the embers: a column of grid cells opening into a plume of embers, with ash where the code has no embers. Spare data bits are solved for the picture (zero errors), and an adjustable share of the error-correction budget ("burn") pulls more modules into shape. Settings: size, error-correction level, burn, timing/alignment styling, x-ray. Each design is decoded in the page before you download it. Any QR reader can scan the result; it has no ember layer. |
/scan/ | Scanner. Opens straight to the camera, with a gallery icon to scan a saved image (paste and drag-and-drop work too). A Standard QR / Ember QR switch picks the mode: Standard reads only the QR; Ember also reads the ember layer (pooling evidence across camera frames) and checks the hotpoints. ?mode=standard or ?mode=ember preselects it. |
npm install
npm run dev # http://localhost:5173/ (and /generate/, /qr/, /scan/, /ember/<code>)
npm run dev:phone # same, over HTTPS on your network (self-signed), to test the camera on a phone
npm run build # static site in dist/, served from the domain root
npm test
base: '/'), because pages are opened from deep links such as /ember/<code>./ember/<code> must serve ember/index.html. That rule is already included for Netlify and Cloudflare Pages (public/_redirects), for Vercel (vercel.json), and for npm run dev / preview. On another host, add the same rewrite.https://thissideoftech.com, even when the page is opened on localhost or a preview deploy. Set VITE_SITE_ORIGIN at build time to use another address.Every poster page (the Ember page, Ember QR and the generator) has a designer. The poster is a 2:3 page with a text block above the ember, the ember itself, and a text block below.
d=, base64url JSON) and is validated when read.Text is laid out by src/core/richtext.js:
src/core/compose.js.Fonts: Momo Trust Display (default), Archivo Black, Anton, Bricolage Grotesque, Space Grotesk, Fraunces and DM Serif Display. All are from Google Fonts under the SIL Open Font License 1.1 (src/assets/fonts/licenses/). Each loads on demand (the Latin subset, 13–25 KB) and is embedded in the poster, so downloaded SVGs and PNGs keep their type. Letters outside Latin are drawn in a fallback font.
The build includes a web app manifest and a service worker (sw.js,
generated with the exact list of built files). The app installs to the home
screen and opens straight to the scanner. After the first visit both pages,
including the ZXing WebAssembly, work offline. Use the Install button in the
generator header or the scanner's top bar. On iPhone, use Share ▸ Add to Home Screen.
The scanner opens the camera by itself only when permission is already granted. Otherwise it shows Enable camera, and that tap opens the browser's permission dialog: browsers show the dialog reliably only in response to a tap. If the camera was blocked earlier, browsers never ask again, so the scanner shows how to re-allow it on iPhone, Android or desktop.
The dialog also never appears on plain http:// (except localhost) or
inside another site's frame. Use HTTPS (npm run dev:phone for local testing).
The camera needs a secure context (HTTPS or localhost) and its own tab: pages embedded in another site's frame are not allowed to use the camera, and the scanner says so and offers to open in a new tab.
The end-to-end tests rasterize and distort posters with Python:
pip install cairosvg opencv-python-headless numpy. Those tests are skipped
when Python is missing.
src/core/ convention + rendering + scanning (no DOM; runs in Node too)
prng.js SHA-256 counter stream used for every convention choice
rs.js Reed-Solomon GF(256) with error + erasure decoding
qr.js standard QR matrix (qrcode-generator) + function-pattern mask
artqr.js art QR encoder: free-bit solving (QArt) + error-budget "burn"
emberqr.js Ember QR picture (column + plume) and renderer
ember.js ember layout and codec
hotpoints.js hotpoint placement
render.js poster SVG
scan.js ZXing (WebAssembly) + grid refinement + ember / hotpoint reading
src/app/ the two pages, plus pwa.js (install + service worker registration)
src/sw-template.js service worker; vite.config.js fills in the precache list
public/ manifest and app icons
tests/ unit tests and render → distort → scan tests