尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證A constellation atlas of hobbies: highlight yours, trace the paths between them, and compare maps with friends
翻譯準備中
正在載入完整 README。
檢視完整 README ↗A constellation atlas of hobbies: highlight yours, trace the paths between them, and compare maps with friends
Aficion lays every hobby on one connected map, with the crafts that sit underneath them drawn on the same canvas rather than hidden in a legend. Mark what you practise and your nodes turn gold, the links between the adjacent ones light up, and two things you thought were unrelated turn out to be two steps apart through a craft you already have. It is for the person with four shelves in one room who has never seen the four as one object, and for the friend they send the link to.
Nothing is scored and nothing is ranked. A suggestion arrives with the sentence that justifies it, built from a shared craft, a shared tag or shared gear, and the map rings the node that sentence names.
Live: aficion.neorgon.com
#node= links remain supported.| Key | Does |
|---|---|
| Drag, wheel or pinch | Pan and zoom the canvas |
| Arrows | Follow a connection in that direction |
| Backspace | Return along your exploration trail |
| Shift + arrows | Pan the camera |
| Enter | Mark or unmark the focused node |
I | Drill into an inner tree |
| Double-click a dot | Open its subtopics |
F | Fit the whole atlas |
M | Fit your own marks |
/ | Focus the search box |
| Escape | Clear a trace, or close the drill-in |
ES modules require an HTTP server (not file://):
make serve
Then open http://localhost:8877.
The taxonomy under data/ is validated by a dependency-free Node script. It
exits 0, or it names the file, the record and the field that is wrong:
make search-index # regenerate after corpus edits
make validate # both languages, browse structure, connected trails, search-index freshness
make test # search, graph navigation, route persistence and concurrent-loading regressions
make pages # refresh crawler pages after corpus edits
Optional browser acceptance checks use Playwright from your development environment (the app has no runtime dependency):
node tools/check-explorer.cjs
node tools/check-explorer.cjs --webkit
node tools/check-atlas.cjs
node tools/check-atlas.cjs --webkit
node tools/check-atlas-branches.cjs
node tools/check-atlas-branches.cjs --webkit
node tools/check-trails.cjs
node tools/check-trails.cjs --webkit
With the preview server running, these check saved collections, subtopic search, browser history, sharing, map navigation, mobile layout, language switching and loading failures. Screenshots are written under /private/tmp/aficion-*.png. Set AFICION_PREVIEW_URL to test a different local port.
Zero build: no bundler, no npm dependency for the app, no backend. The corpus is
static JSON fetched at boot; the profile lives in localStorage and in the URL
fragment.
aficion-site/
├── index.html # HTML shell: header, canvas stage, side panel, dialogs
├── css/
│ └── style.css # All site styles. Identity is --accent only; the rest is CDN base.css
├── js/
│ ├── app.js # Entry point, under 50 lines
│ ├── navigation.js # Explore, category, hobby, collection and atlas routes
│ ├── explorer.js # Browse lists, search, breadcrumbs and collection
│ ├── explore-detail.js # Hobby pages, subtopics, starting exercises and lenses
│ ├── explore-model.js # Search and explained connection queries
│ ├── explore-events.js # Browser navigation and transitions into the atlas
│ ├── state.js # Shared mutable state, localStorage
│ ├── render.js # Builds the ViewModel for the canvas, renders the panel
│ ├── events.js # All wiring. No inline onclick anywhere
│ ├── actions.js # Marking, tracing, flying, drill-in
│ ├── panels.js # Detail, mine, suggestion, compare and build panels
│ ├── modal.js # Native <dialog> helper with focus restore
│ ├── utils.js # escHtml, live region, small helpers
│ ├── alloc.js # Allocated set, gold route, components, bridges, buckets
│ ├── discover.js # Suggestions and the sentence that justifies each one
│ ├── profile.js # URL codec: gzip + urlsafe base64, versioned, migration chain
│ ├── compare.js # Two profiles in, four sets and a per-bucket tally out
│ ├── inner.js # Inner-tree overlay
│ ├── builds.js # Curated builds
│ └── atlas/
│ ├── load.js # Fetches and indexes the corpus, memoised inner trees
│ ├── layout.js # Five deterministic layout recipes from cluster anchors
│ ├── camera.js # Pan, zoom-at-cursor, clamps, flyTo
│ ├── pick.js # Hit-testing with a 12px screen-space floor
│ ├── theme.js # Reads canvas colours from CSS custom properties
│ ├── draw.js # Frame orchestration. ctx.filter is never set: not Baseline
│ ├── draw-edges.js # Edge passes, widest and faintest first
│ ├── draw-nodes.js # Node passes: face, halo, rings per channel
│ └── draw-labels.js # Label placement with collision rejection
├── data/ # The corpus. Content is data, never inside a .js file
│ ├── atlas.json # Clusters, tags, retired ids
│ ├── edges.json # 662 top-layer edges, typed
│ ├── explore.json # Browse directions, example diagram and 30 first experiments
│ ├── search-index.json # Generated index, including every inner subtopic
│ ├── builds.json # 9 curated builds
│ ├── trails.json # 6 guided discovery routes, all following authored edges
│ ├── clusters/*.json # 22 cluster files, 321 hobby nodes
│ └── inner/*.json # 24 inner trees, 178 nodes
├── tools/
│ └── validate-corpus.mjs # 33 structural checks over data/. Plain node, no install
├── docs/
│ └── architecture.mmd # Source for architecture.svg
├── 404.html
├── CNAME
├── Makefile
└── README.md