Glossary · อภิธานศัพท์
Every word GEIST uses, in English and Thai. These are the same terms the product, the CLI and the docs are checked against — one list, so they cannot drift apart.
Identity & membership
- Accountบัญชีบัญชี คืออะไร?
- the authentication identity: a row in Supabase auth.users. Created when someone signs in (Discord, GitHub, Google, or email magic link). This is the technical credential, not the public persona. See ADR-007.
- Memberสมาชิกสมาชิก คืออะไร?
- a community participant (the human). Every Member is backed by one User/Account and is represented publicly by a Profile.
- Profileโปรไฟล์โปรไฟล์ คืออะไร?
- the public identity of a Member; the public.profiles row, 1:1 with the User/Account. Holds handle, display name, avatar, bio, and links. A Profile is complete once it has a handle (onboarding done).
- Handleแฮนเดิลแฮนเดิล คืออะไร?
- a Member's unique, case-insensitive public identifier (e.g. nuch), shown and linked as @handle (the public page lives at /@handle).
- Lead Petสัตว์เลี้ยงหลักสัตว์เลี้ยงหลัก คืออะไร?
- the Pet a Member chooses to lead their Page hero. Defaults to the Member's most-adopted published Pet when unset; only a Member's own published Pet can be their Lead Pet, and the Page falls back gracefully if it is later deleted/unpublished. See ADR-056 (Page v2).
- Earned Badgeแบดจ์ที่ได้รับแบดจ์ที่ได้รับ คืออะไร?
- qualitative recognition derived from a Member's real contribution stats (published Pets, total adoptions, followers) via deriveBadges(). Non-gameable — the counts come from others, not self-action — and shown as calm labels, never as a rank or a displayed number (guardrail ①). See ADR-027.
- Builderนักสร้างนักสร้าง คืออะไร?
- the collective identity of the GEIST community: everyone here is a builder. A Builder is not a title but a decision — anyone who acts on the fact that they now can (the belief; see docs/CONCEPT.md, docs/BRANDING.md, ADR-118). builder is allowed as a person too ("a builder like you"); the account-and-role noun for one individual is a Member.
Not: maker (as-person) · user (as-person)
The brand
- GEISTGEISTGEIST คืออะไร?
- the name of all of it: the brand, the native desktop app, the geist:// URL scheme, the geist CLI, and this website. heygeist.com is GEIST; there is no separate name for the site. The four senses were never ambiguous to a Member, and all of them keep the word. Note heygeist/geist-hub is a different product in the same org, so "hub" is spoken for and is not revived as a name here.
Not: Pet Hub · GEIST Platform (docs-only)
Product surfaces (the world the terms live in)
- Pageเพจเพจ คืออะไร?
- a Member's living public page at /@handle: their Lead Pet, identity (bio, links, structured fields), recent ships, Pinned, Earned Badges, and one Open in GEIST. The lite Page (/lite/@handle) is its read-only, no-install preview variant. Renamed from Desk. The schema deliberately keeps the old word (desk_guestbook, desk_showcase, desk_id, desks), so desk is allowed db-only rather than retired outright — the same trade already made for user and shipMoment. desktop is a different word and is never affected by this rename. The coinage "The Digital Desk" for the community's Discord home stays retired; say the GEIST Discord, or simply Discord. See ADR-044, ADR-046, and ADR-056 (the getDesk read-model behind it).
- Pinnedปักหมุดปักหมุด คืออะไร?
- a small, ordered, capped set of Pets a Member pins to their Page to express taste; may include any published Pet (own or others'). Distinct from a Collection, which holds only its owner's own Pets, carries a title and a slug, and is reviewed before anyone else sees it — Pinned is neither named nor reviewed, and it lives on a Member's Page rather than on the Catalog. The verb is pin; the set is Pinned. Renamed from Desk Showcase; the table stays desk_showcase. (Page v2.)
- Petสัตว์เลี้ยงสัตว์เลี้ยง คืออะไร?
- the creature: a small animated character that lives beside a Member's AI agent, listed in the Catalog (/pets); always a conforming ADR-006 spritesheet. A Pet is either curated (system-owned, owner_id null) or Member-uploaded (owned by a Member via their Profile). The catalog is currently all Member-uploaded — curated is a latent capability (the schema allows it) but nothing is seeded. A Member may own many Pets. A Member-uploaded Pet is a draft until its owner publishes it. See ADR-009.
- Catalogแคตตาล็อกแคตตาล็อก คืออะไร?
- the public browse surface for Pets at /pets: every published Pet, discoverable by free-text search, Trait filter, and sort. Distinct from a Pinned (one Member's pinned taste) — the Catalog is the whole published set, unfiltered by curation. The Catalog extends continuously as you scroll rather than by page; search, trait, and sort live in the URL and are shareable, but a scroll position is not. See ADR-018 (URL-driven discovery) and ADR-084 (cursor-paged infinite scroll). Collections sit beside the Pets. A Collection is a named, reviewed set of one Member's own Pets; the Catalog carries the published ones as their own section, and each has a page at /collections/<slug>. ADR-160 amends ADR-149: the admin-curated editorial shelves ADR-149 removed stay removed, and what came back is the half ADR-028 deferred — a Member curating their own Pets. The Catalog itself is still the whole published set, unfiltered by curation. The singular /collection is an unrelated feature — see Skin. Collection has no entry of its own yet: its Thai label is the owner's under #656, and #763 makes a concept unaddable without one.
- Traitนิสัยนิสัย คืออะไร?
- a Pet's temperament label (Calm, Cheerful, Dreamy, Energetic, …), chosen at upload (up to 3) and the Catalog's filter axis. Heed the name clash: the domain and the UI both say Trait, but the code and the schema call it a tag (PET_TAGS, pets.tags, ?tag=). Say Trait when talking to a Member, tag when talking to the database.
- Pet Ownerเจ้าของสัตว์เลี้ยงเจ้าของสัตว์เลี้ยง คืออะไร?
- the Member who uploaded a Member-uploaded Pet; shown as by @handle on the catalog tile and detail page. Curated Pets have no owner.
- GEIST appแอป GEISTแอป GEIST คืออะไร?
- the native desktop client registered to the geist:// URL scheme; it runs Pets and is the target of Open in GEIST. Distinct from the GEIST website (this app, whose Catalog lives at /pets) — both are GEIST. See ADR-011.
- GEIST CLICLI GEISTCLI GEIST คืออะไร?
- the terminal client a Member (or their agent) uses to post to the Feed. The command is geist; the npm package is @heygeist/cli. These are two different names and only one of them is a name a Member types — the package name appears once, in an install line. @geist/cli is retired: that scope was never ours, nothing was ever published under it, and the rename landed 2026-08-02 (#810, with ADR-113 §6 amended in place). Published to npm 2026-08-08 at 0.2.0 — npm i -g @heygeist/cli is a real instruction now, and the one-way door ADR-113 §6 named is open: the package name is permanent. What it may post is governed by ADR-107, not by this entry.
- blog postบทความบทความ คืออะไร?
- one long-form article at /blog/<slug>, written to bring people who have never heard of GEIST to GEIST. Not a Post. A Post is one row in feed_posts and belongs to the Feed, where everything is a post; a blog post is a markdown file a writer owns, has no row of its own, and never appears in the Feed. The English compound is what keeps the two apart — say blog post, never a bare post, for this concept. Thai separates them further: บทความ shares nothing with the Feed's โพสต์, so the two cannot be confused in Thai at all. Per ADR-106 a term may legitimately differ per locale — these are names, not translations. Every blog post carries exactly one ask. See ADR-117 §7 (the noun) and §5 (the single ask).
- What's NewWhat's NewWhat's New คืออะไร?
- the GEIST app's release history on the website, at /whats-new: one entry per shipped macOS version, mirrored from the public heygeist/geist-public releases into docs/app-release/ and landed through a pull request, never fetched live. A withdrawn version stays listed and is marked as such — someone whose app will not launch after updating needs that page to exist. It is the site's only surface for app releases — a Pet's Release is a different sense of the word; see that entry. The website's own notes at /releases — called the platform archive while it existed — were removed by ADR-126 §5, and its three URLs redirect here. The two had to be separate collections while both existed, because both products shipped a v0.1.0 and a v0.2.0 meaning entirely different things; the site now carries one timeline, and it is the app's. What's New is registered in src/lib/nav.ts the way /blog is, so it appears in the sidebar, ⌘K, the marketing header and the footer. See ADR-123 for the surface and ADR-126 for the nav and the removal. - _Note_ The Thai label is the English words in Latin script (owner's call, 2026-08-16), following Challenge / GEIST / Hatch Night / API. Unlike Challenge — whose transliteration shipped by default while the decision sheet's slot sat blank — this one was chosen deliberately, with the plain-Thai option (บันทึกการอัปเดต) considered and rejected. That word is now retired: it was the old nav.releases label and, being unqualified, is enforced by the Biome word rules.
- Go linkGo linkGo link คืออะไร?
- a short, permanent URL at /go/<slug> that an admin mints so a post can carry a GEIST-owned link instead of a bare github.com one. It is a general shortener, not a download tool: a Go link may point at a GEIST route, a GEIST app release asset, or an allowlisted external host, and one module (src/lib/links/guard.ts) is the only place that is decided. It renders a card and continues in JavaScript, which is what lets a robot keep the preview and a person get the file — so its two counts, a view and a follow, are never added together. A Go link never 404s and its slug is never reused. See ADR-146. - _Note_ The Thai label is the English words in Latin script, following What's New — the closest precedent, also a website surface noun. Ratified by the owner 2026-08-23, having been proposed as provisional; the plain-Thai alternative (ลิงก์สั้น) was the considered option and was not taken.
- SeriesSeriesSeries คืออะไร?
- GEIST's monthly themed set of Pets, told as a story: a number and a name, a story, its art, and a lineup of Pets that each carry one line about their part in it. One Pet in the lineup may be held back as the secret Pet: it is never released, and a Member gets it only by a Claim inside the window. A Series runs for one window that every Pet in it shares, and it keeps a page at /series/<slug> that never moves; /series shows the one running now. A Series reaches the Spotlight carousel on /pets only when an admin puts it there: it shows as one Series slide while it runs, and as a teaser before it opens. A new Pet can be uploaded straight into the lineup; it is released when the Series opens, and until then its release follows the Series: move the opening and the Pet moves with it. The week a Series is open is its drop: Members Collect its Pets and Claim its secret. See ADR-170, ADR-172, ADR-174, ADR-176 and ADR-177. - _Note_ The Thai label is the English word in Latin script, following Release and What's New (ADR-170).
- SpotlightSpotlightSpotlight คืออะไร?
- the ordered list an admin curates for the carousel at the top of /pets. Each item is a Series or a Pet, and the list has no dates: an item leaves by itself when its own thing ends (a Series when it closes, a limited edition on its final day), and a Pet otherwise stays until an admin removes it. Limited editions that can still be adopted join after the list without being added. The five other pages that show Spotlight Pets show the carousel's Pets in the same order. An admin adds to Spotlight; a Series page has a Show in Spotlight switch. See ADR-172 and ADR-174. - _Note_ Never "pin" for this: Pinned is a Member's Page. The Thai label is the English word in Latin script, following Series.
- Silhouetteภาพเงาภาพเงา คืออะไร?
- the one-colour shape of a Pet that is not public yet, cut from its Idle frame when the Pet is uploaded. Before a Series opens, and for its secret Pet until the reveal moment, the Series page and its Spotlight teaser show silhouettes in the lineup's seats, with no names. It is the only image of a Pet that may be public before its Release. See ADR-174. - _Note_ The Thai label is agent-proposed (2026-09-25) and awaits the owner's review.
Not: Digital Desk · Desk (as-name)
Not: Desk Showcase (as-name)
Not: companion · living pet · buddy · codex (as-creature) · friend (as-creature) · geist (as-creature)
Not: @geist/cli
Not: Changelog (as-name) · Release notes (as-name)
Not: short link (as-name) · shortlink (as-name) · vanity URL
Lifecycle (how a Pet begins, and how it travels)
- hatchฟักฟัก คืออะไร?
- bring a new Pet into existence: a Member creates their own Pet (/hatch). Nothing is taken from anyone.
- ReleaseReleaseRelease คืออะไร?
- the moment a Pet goes public. Before it, the Pet is hidden from everyone but its owner and admins: absent from the Catalog, its own page, the Feed and the GEIST CLI, as if it did not exist. From it on, the Pet can be adopted, its Feed post appears, and the Catalog's newest-first order places it at this moment rather than at its upload. Every Pet has a release time; a Pet nobody scheduled was released when it was uploaded. Only an admin schedules one, and only on an Official Pet — a house Pet or an artist collaboration. A release can be moved at any time, even after it has passed: moving a live Pet's release into the future returns it to hiding until the new time, and its Feed post hides and returns with it. Members who already adopted it keep it. A release never skips review — an unapproved Pet stays hidden whatever its release time. While a Pet waits for its release, its owner sees a countdown to it. See ADR-168. One word, two senses. A Pet's release is unrelated to a GEIST app release listed on What's New; the two never share a surface, so both keep the bare word. Say Pet release or app release wherever both could be meant. Drop is not a synonym: Hatch Night already uses it for the season's eggs. - _Note_ The Thai label is the English word in Latin script (owner's call, 2026-09-16), following What's New. ปล่อย was considered and rejected: beside สัตว์เลี้ยง it reads as setting a pet free, and ปล่อยของ is already ship's label. Debut / เปิดตัว was the other candidate.
- adoptรับเลี้ยงรับเลี้ยง คืออะไร?
- take an existing published Pet home from another Member. This is what the catalogue's counters count: pets.install_count, /api/adopt (the ADR-032 beacon), and the manifest fetch behind them are all recording adoptions. The phrases "total hatches" and "most hatched" named this act and are retired.
- collectเก็บเก็บ คืออะไร?
- take a released Series Pet onto your account, free and for good. A Member must be signed in; the Pet then waits on the account for the GEIST app. Collecting all of a Series' Pets inside its window opens the road to its secret. Distinct from Adopt, which hands a Pet to the app, and from Hatch, which makes a new one. See ADR-176. - _Note_ member_skins.source = 'collect' is the older free catalogue collect on /collection; a Series collect carries its own source value.
- claimรับรับ คืออะไร?
- take a Series' secret Pet, possible only inside the Series window, by one of three roads: complete the Series (collect all its Pets, then tap Complete the Series), Collect together (a friend collects their first Pet through your link, and you both claim), or an email code. Each claim carries a number within its Series, shown only to its Member on their completer card. After the window closes nobody can claim; the secret is gone for good. See ADR-177.
- Open in GEISTเปิดใน GEISTเปิดใน GEIST คืออะไร?
- the member-facing action that performs an Adopt in one step, handing a published Pet to the GEIST app via its geist://pet/import deep link; the primary alternative to fetching the Pet's package by hand. Import is the wire's word for this, never the Member's. See ADR-011. download stays retired; the macOS app installer keeps its own labels as allowed phrases (Download for Mac, Download GEIST, Your download is starting), and its URLs as wire-only allows (owner ruling on #1131, 2026-09-26).
- Wishคำขอคำขอ คืออะไร?
- a Member's public ask for a Pet that does not exist yet, written on the board at /wishes and ranked by votes. A Wish is open: nobody claims one, and any number of Pets may answer the same Wish (pets.wish_id). Only its author may mark it answered, and answering hides nothing — the Wish and the Pets that answered it stay readable. Sits upstream of Hatch: between wanting a Pet and somebody making one, which had no home before. Framed as an idea queue for Hatchers, not a shop — there is no guarantee any Wish is answered, so the word for it is a wish, never an order. Request is retired as a name for this concept: skin_swaps.requested_pet_id already means "the Pet I want in trade", and one schema cannot hold two senses of the word. See ADR-128.
Not: download (as-name) · total hatches · most hatched · most-hatched · install (as-name) · import (as-name)
Not: Pet Import · download
Not: bounty · commission · wishlist · request (as-name)
Collectibles & shelves
- Skinสกินสกิน คืออะไร?
- a Pet's cosmetic look, owned by a Member and carried on the wire (the skin= param on geist://pet/import). A skin is just a look is a definition, not a second name. A Member's own skins live at /collection, singular — the page titled "Your collection". Gift and Swap are retired: a Skin never moves to another account. See ADR-180. Read that path twice. /collection singular is this Skins page. /collections plural is the Catalog's Collections — a named set of a Member's Pets, an unrelated feature (see Catalog). Two adjacent paths name two unrelated things, and the collision is deliberate and permanent: ADR-160 §4 kept the obvious URL for each rather than renaming one. Neither is a typo for the other, and a change to one must never be applied to the other.
- Pet Cardการ์ดสัตว์เลี้ยงการ์ดสัตว์เลี้ยง คืออะไร?
- the keepsake picture a Member gets for each Series Pet they collect: the Pet on the Series colour with the Pet's name, the Member's name and the time on the front, and one diary line in the Pet's voice on the back. The completer card is its sibling, one per Claim, carrying the claim's number and road. Both are free to share, not to sell. Distinct from the Catalog's Pet tile. See ADR-176.
- Binderแฟ้มการ์ดแฟ้มการ์ด คืออะไร?
- the tab on "Your collection" that holds a Member's Pet Cards and completer cards, grouped by Series, newest first.
- Catalog numberหมายเลขแคตตาล็อกหมายเลขแคตตาล็อก คืออะไร?
- the permanent number GEIST gives each Pet it made, shown GEIST-0042, assigned once in release order and never reused. Member-uploaded Pets have none. See ADR-179.
- Certificateใบรับรองใบรับรอง คืออะไร?
- the record that a Member collected, claimed or earned a Pet, with its certificate number: one running count per Pet (Rory · S2 · #1204 inside the Series window, Rory · #3121 after it), never reused. A Member who removes the Pet and collects it again gets the same number back. GEIST signs it and hands it to the GEIST app with the Pet; it names the collector by @handle, never by email. Collects in the first minute of a Series window get their numbers by a random draw. Distinct from the completer number a Claim carries. See ADR-179.
- Genuineของแท้ของแท้ คืออะไร?
- the mark the GEIST app shows on a Pet whose files match a GEIST art proof. A copy is never blocked: a changed file reads Modified, and still runs. See ADR-179.
- Recipeสูตรสูตร คืออะไร?
- a Pet-stamped build snapshot a Member can share (/recipes, the recipes table, recipe.json on the wire). Build snapshot and manifest are definitions of a recipe, not competing names for it.
- Savedบันทึกไว้บันทึกไว้ คืออะไร?
- the Pets a Member has bookmarked. A bookmark is a pointer, revocable at any time. Favorite and heart retire into Saved.
Not: look (as-name)
Not: build snapshot (as-name) · manifest (as-name)
Not: favorite (as-name) · favourite (as-name) · heart (as-name)
Crews & chapters
- Crewกลุ่มกลุ่ม คืออะไร?
- a self-formed, capped group of Members. A Crew is a group of people; it is not a place.
- Chapterแชปเตอร์แชปเตอร์ คืออะไร?
- an optional regional tag on a Crew — a place label, nothing more. Decided on schema evidence: chapters(slug, name, region) has no members, no owner and no event relation, and the create-crew form itself calls it "(optional — your local meetup tag)". A chapter has no agency: copy that gives it one ("your chapter runs the room") describes a body the product does not implement. The schema is right; the copy overclaims, and the copy is what changes (#654).
The Feed (community broadcast)
- postโพสต์โพสต์ คืออะไร?
- one row in public.feed_posts: a thin spine record pointing at a richer source, rendered by the single PostCard (ADR-004). Post is the concept; everything in the Feed is a post, and its Post Kind says what sort. The community broadcast surface is the Feed at /feed, which is also a signed-in Member's home (ADR-065, ADR-082). The Feed is strictly reverse-chronological — there is no ranking, by decision. Not a blog post — that is a markdown article at /blog/<slug> with no feed_posts row and no presence in the Feed; in Thai the two share nothing (โพสต์ vs บทความ).
- Post Kindประเภทโพสต์ประเภทโพสต์ คืออะไร?
- what a Post is, and therefore how its lead reads: ship (a work session's outcome), text (composed directly), challenge_entry (a post carrying a Challenge), and pet (mirrored when a Pet is published — ADR-083 — and shown only from the Pet's Release, dated at it). Ship and pet rows arrive via SECURITY DEFINER triggers, so the Feed's head mutates without anyone acting on the page.
- shipปล่อยของปล่อยของ คืออะไร?
- a kind of post: a Member's record of a work session's outcome (shipped, or didn't) starring one Pet, with its own share surface at /m/<shareId>. The humble flex — the Pet speaks for the Member, so the highest-value content is the default rather than an opt-in. "Ship Moment" is retired as a noun: a ship is a post, not a separate object. The /api/ship-moment route still carries the old word because its caller is the desktop app; that rename ships after the app does (#658).
- Blockบล็อกบล็อก คืออะไร?
- one typed, immutable unit of a Post's content, stored in the ordered feed_posts.blocks array: markdown · code · link preview · agent-status · milestone · media · poll (ADR-075). Blocks are the write model too — the composer's editor is input-only, and the read path carries no editor. A post holds at most 10 Blocks.
- Cheerเชียร์เชียร์ คืออะไร?
- a Member's public applause on a Post (post_cheers). Cheer is counted and shown, because the Challenge leaderboard ranks on it. Distinct from Warmth below — the two are deliberately different concepts that happen to share a gesture, which is why they are two modules and not a duplication.
- Warmthความอบอุ่นความอบอุ่น คืออะไร?
- affection shown to a Pet (pet_cheers), deliberately non-numeric: never a count, never a rank (ADR-068). Currently dormant — in the code, switched off on live surfaces. Bringing it back is a decision, recorded in an ADR.
- Lensมุมมองมุมมอง คืออะไร?
- which slice of the Feed a Member is reading: All (default) or Following. A Lens filters; it never reorders.
- ChallengeChallengeChallenge คืออะไร?
- a time-boxed community prompt with its own lifecycle (upcoming → active → closed) and a cheer-ranked, per-Challenge, ephemeral leaderboard (ADR-070). A Challenge Entry is a Post carrying a Challenge — entries live in the Feed, not in a separate table.
- Viewerผู้เข้าชมผู้เข้าชม คืออะไร?
- the reading Member's relationship to a given Post: has cheered it, follows its author, is its author. Distinct from the Member (who they are) — the Viewer is reader-relative and per-post, and it is computed once for a page of posts rather than per surface.
- Discussionพูดคุยพูดคุย คืออะไร?
- the threaded replies under a Post (post_comments), visually clamped to three levels of indent regardless of true depth. Removing a comment is a soft-delete that orphans its replies, which are promoted to roots (ADR-073). The Page's Guestbook is the same domain act over a different subject.
Not: Ship Moment