尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Catalogs character and sculpted mugs from brand shops, and gives collectors a shelf to track, share and compare
翻譯準備中
正在載入完整 README。
檢視完整 README ↗Character mugs, catalogued and collected
Mug is a catalogue of collectible character mugs: 3D sculpted heads, shaped bodies, bas relief, tiki and teapots, read from the makers' own shops. Collectors keep a shelf of the mugs they own, want and once had, and can share it at their own address. Every mug carries its capacity, style, maker, franchise and codes, and links back to the shop it came from.
Live: mug.neorgon.com (not published yet: see Going live)
/u/?handle, closed until the deployment opens publishingdocs/sources.md.docs/CONTRACTS.md C1).ES modules need an HTTP server (not file://). Four terminals, or background
three of them:
make install # the Convex CLI, pinned (this folder is not a root npm workspace member)
make convex # a LOCAL Convex deployment on 127.0.0.1:3210
make worker-install && make worker-dev # the Worker on :8787, with a local R2
make serve # the pages on http://localhost:8892
Then, once:
make dev-auth # a dev sign-in key, trusted by the dev deployment only
make seed # brands, sources, and six pasted examples to review
Open http://localhost:8892/?convex=http://127.0.0.1:3210 and, to sign in as
the dev admin, add &devtoken=$(make dev-token). The production Clerk key
refuses localhost, which is why dev sign-in exists; production never accepts
its tokens (CONTRACTS C9, A4, A7).
make validate # every test, plain node, no install
mug-site/
├── _templates/ page.html plus one <main> per page; `make pages` writes the pages
├── index.html, mug/, brand/, community/, shelf/, u/, admin/, bot/ generated, never edited
├── css/style.css the design (porcelain tiles, cobalt); css/admin.css for the console
├── js/ app.js picks a page module from <body data-page>; backend.js names every Convex call
├── shared/ the listing contract and every extractor, used by all of the below
├── convex/ schema, tested cores in lib/, functions, the runner's HTTP endpoints
├── worker/ mug-proxy: probe, discover, extract, images, and GET /i/<key>
├── runner/ the local runner (Node, no dependencies)
├── tests/ node --test, including an in-memory Convex that parses the real schema
└── docs/ CONTRACTS.md, sources.md, architecture.mmd and .svg
The owner's steps, in the order the platform needs them.
The Worker. In worker/: npx wrangler r2 bucket create mug-images,
then npx wrangler secret put MUG_PROXY_TOKEN (a long random value), then
npx wrangler deploy. Note its URL.
Convex production. Run npx convex deploy. The first deploy stops on
MUG_DEV_JWKS (CONTRACTS A7). Then set:
npx convex env set --prod MUG_DEV_JWKS off
npx convex env set --prod ADMIN_SUBJECTS <your Clerk user id>
npx convex env set --prod MUG_PROXY_URL <the Worker URL>
npx convex env set --prod MUG_PROXY_TOKEN <the same value>
Deploy again, then run npx convex run --prod seed:sources. Leave
PUBLISHING unset until shared shelves should open.
Images off the Worker (optional, recommended). Give the R2 bucket a custom
domain and set MUG_IMAGES_BASE to it. This takes image traffic off the
Worker's free 100,000 requests a day. The only zone available is
neorgon.org, the CDN's, so this is your call.
The pages. Put the production URL in CONVEX_URL in scripts/pages.py,
run make pages, and commit.
Publish. Follow docs/operations/publishing.md in the monorepo: create
the repo, Pages on mug.neorgon.com (the CNAME is already here), then the
DNS record.
Mug keeps facts, not marketing copy: a shop's own description is kept for the admin's reference and never published. Every image keeps its source address, every mug links to its shop, and the MugBot page tells shop owners how to opt out or ask for a correction.