Easy-to-manage touch screens
무료 오픈소스 터치스크린으로 USB 설정 가이드, 드래그‑드롭 편집기, 로컬 제어를 제공하며 Home Assistant용으로 제작되었습니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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