Saleor Store
우리 컬렉션을 쇼핑하세요
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Generative art apparel with real-time WebGL customization, built as a custom Shopify storefront.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
A custom Shopify theme for Brightfield Studio — a generative art store selling wearable real-time shader designs.
Brightfield Studio sells GLSL shader T-shirts that customers can customize in-browser using live WebGL rendering. The key differentiator is real-time shader customization (color, intensity, and other per-product params) with a live on-shirt mockup preview — composited client-side — before ordering.README 전문 보기 ↗A custom Shopify theme for Brightfield Studio — a generative art store selling wearable real-time shader designs.
Brightfield Studio sells GLSL shader T-shirts that customers can customize in-browser using live WebGL rendering. The key differentiator is real-time shader customization (color, intensity, and other per-product params) with a live on-shirt mockup preview — composited client-side — before ordering.
#version 300 es) rendered client-sideThe project has two parts:
sections/, assets/, layout/) — Shopify theme files served by Shopify CDNworker/) — Cloudflare Worker handling: design image hosting in R2, custom product creation, Printful order fulfillment (orders/paid webhook), community design gallery (submit / approve / like), product reviews, shader state sharing (save/restore share links), image share pages on share.brightfield.studio, a per-device recent-designs gallery, background removal (Cloudflare Images), an admin moderation UI, and storage GC.Key files:
| File | Purpose |
|---|---|
assets/rise-shirt.js | Product page dot-halftone shader |
assets/hero-shader.js | Homepage neon plasma shader |
sections/main-product.liquid | Product page with Customize tab + shader GUI |
sections/homepage-shader-demo.liquid | Homepage shader demo with controls and Share-link sharing |
sections/hero.liquid | Homepage hero with plasma canvas |
assets/theme.css | Main stylesheet (a few sections carry their own {% stylesheet %} blocks) |
worker/src/index.js | Cloudflare Worker — every endpoint (full feature list under Architecture above) |
shader-[filename] (e.g. shader-rise-shirt)window._shaderState.values: written by the inline GUI script, read by the deferred shader scriptThree share surfaces exist:
POST /save-shader-state and copies a short URL (#share=<id>) to the clipboard.POST /create-share; the Worker stores both and returns an absolute share-page URL (https://share.brightfield.studio/<id>), which is what gets copied. That page carries the design image in its Open Graph/Twitter meta tags (so link previews show it) and immediately redirects the visitor to the product with a ?bfr=<base64-state>#shader URL that restores the design. (The redirect is client-side JS — the HTTP response is a plain 200 page, which is what lets crawlers read the meta tags; a no-JS visitor gets a manual link instead.)https://share.brightfield.studio/<id> URL form for approved submissions. For those ids the share page serves metadata from community/submissions/ and redirects to the product (or the community page) without a ?bfr= restore payload — the restore link is a direct-share feature.Both pages still restore #share= URLs. When one is loaded:
GET /get-shader-state/<id> on the Worker#shader (product) or #shader-demo (homepage)(A legacy #s=<base64> inline-state format is also still restored on both pages.)
Worker endpoints:
POST /save-shader-state — accepts { state: {...} }, stores in R2, returns { id } (UUID)GET /get-shader-state/:id — returns the stored state JSONPOST /create-share — accepts { image, shader, productHandle, values }, stores the JPEG + metadata in R2, returns { id, url }GET https://share.brightfield.studio/<id> — the share page itself (a hostname catch-all: a GET on that host not matching an earlier route treats the path as the id. Routes registered before it — /img/*, /get-shader-state/*, /list-designs, the community/review list GETs — still win there, which matters since design images themselves are served from that host; ones registered after it — /share/:id, /admin-ui, /admin/gc-dry-run — are swallowed as share ids on that host, so they work on the workers.dev domain only. GET /share/:id there serves the same share page.)shader-[shader-file-name] so it will load your shader defined in assets/[shader-file-name].jsmain — that deploys the theme automatically (see Deployment below; npm run push is only for the rare manual push)For a shader that doesn't exist yet, first follow "Adding a new shader" in CLAUDE.md: besides the JS file, a new shader needs a snippets/shader-controls-[name].liquid snippet, a {% when %} branch in sections/main-product.liquid's case block (an unlisted tag falls back to rise-shirt's controls), a npm run build:shader-defs run, and an entry in test-shaders.html's #shader-picker list — the one step no test fails on when it's forgotten.
# 1. Install git hooks
scripts/install-hooks.sh
# 2. Run theme dev server (picks a free port, 9292 preferred)
npm run dev
# Local preview: the URL the CLI prints (http://127.0.0.1:9292 when free)
# 3. Run Worker locally (if editing the worker)
cd worker && npm run dev
# Local Worker: http://127.0.0.1:8787
main: git checkout -b feat/... or fix/...main (enforced by .githooks/pre-push)gh pr createMerging to main deploys automatically via GitHub Actions (.github/workflows/test.yml): after tests pass, the theme is pushed to Shopify and the Worker is deployed with Wrangler. Verify locally (npm run dev) before merging.
# Manual pushes, if ever needed:
npm run push # theme
cd worker && npm run deploy # worker