尚未检测到更新。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.