GEIST

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.

Not: maker (as-person) · user (as-person)

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.

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).

Not: Digital Desk · Desk (as-name)

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 editorial Collections (ADR-034, admin-curated). The verb is pin; the set is Pinned. Renamed from Desk Showcase; the table stays desk_showcase. (Page v2.)

Not: Desk Showcase (as-name)

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.

Not: companion · living pet · buddy · codex (as-creature) · friend (as-creature) · geist (as-creature)

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) and from Collections (admin-curated shelves) — 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).
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.

Not: @geist/cli

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).

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. Hatch Night — the named community ritual, hatch_nights, hatch_night_rsvps — sits on this create sense and keeps the word.
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.

Not: download (as-name) · total hatches · most hatched · most-hatched · install (as-name) · import (as-name)

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.

Not: Pet Import · download

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.

Not: look (as-name)

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.

Not: build snapshot (as-name) · manifest (as-name)

Savedบันทึกไว้บันทึกไว้ คืออะไร?
the Pets a Member has bookmarked. A bookmark is a pointer, revocable at any time. Favorite and heart retire into Saved.

Not: favorite (as-name) · favourite (as-name) · heart (as-name)

Collectionsคอลเลกชันคอลเลกชัน คืออะไร?
admin-curated editorial shelves of Pets (ADR-034). Always plural, always editorial. Distinct from Pinned (one Member's pinned taste) and from the merged Saved surface (one Member's own things).

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). 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).

Not: Ship Moment

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.