community.gifthood.actor.defs

gifthood.community

Documentation

areaView object

The viewer's home browse area and search radius.

Properties

displayName string Optional

Human-readable area name from reverse-geocoding the cell. Display only; absent when the cell has no name.

geohash string Required

The viewer's home area as a geohash, precision 6 (~1.2 km privacy-floor cell).

precision integer Required

Search radius as geohash precision (gh-6 ~1.2 km / gh-5 ~5 km); lower = wider.

View raw schema
{
  "type": "object",
  "required": [
    "geohash",
    "precision"
  ],
  "properties": {
    "geohash": {
      "type": "string",
      "description": "The viewer's home area as a geohash, precision 6 (~1.2 km privacy-floor cell)."
    },
    "precision": {
      "type": "integer",
      "description": "Search radius as geohash precision (gh-6 ~1.2 km / gh-5 ~5 km); lower = wider."
    },
    "displayName": {
      "type": "string",
      "description": "Human-readable area name from reverse-geocoding the cell. Display only; absent when the cell has no name."
    }
  },
  "description": "The viewer's home browse area and search radius."
}
knownFollowers object

No description available.

Properties

count integer Required

Total number of the viewer's follows who follow this account.

profiles array of ref#profileViewBasic Required

A small sample of those known followers (hydrated via profileViewBasic).

View raw schema
{
  "type": "object",
  "required": [
    "count",
    "profiles"
  ],
  "properties": {
    "count": {
      "type": "integer",
      "description": "Total number of the viewer's follows who follow this account."
    },
    "profiles": {
      "type": "array",
      "items": {
        "ref": "#profileViewBasic",
        "type": "ref"
      },
      "description": "A small sample of those known followers (hydrated via profileViewBasic)."
    }
  }
}
preferencesView object

The viewer's personalization settings as one flat bundle. All fields are required — each underlying read applies its own default so the bundle is always complete.

Properties

area ref #areaView Required

The viewer's home area + search radius. Always present for the authenticated viewer (populated server-side from memberArea + geocode; falls back to DEFAULT_AREA when no row exists).

feedSort string Required

The viewer's nearby-feed sort order.

Known values: newest, oldest, nearest
hideClaimed boolean Required

Whether the viewer hides claimed (gone/found) listings from the feed (opt-in; defaults false).

mutedCategories array of string Required

Listing categories the viewer has muted from the feed.

requireAltText boolean Required

Whether the viewer requires a description on every photo they post (opt-in; defaults false).

showAdult boolean Required

Whether the viewer sees adult-flagged listings (opt-out; defaults true).

View raw schema
{
  "type": "object",
  "required": [
    "showAdult",
    "feedSort",
    "mutedCategories",
    "requireAltText",
    "hideClaimed",
    "area"
  ],
  "properties": {
    "area": {
      "ref": "#areaView",
      "type": "ref",
      "description": "The viewer's home area + search radius. Always present for the authenticated viewer (populated server-side from memberArea + geocode; falls back to DEFAULT_AREA when no row exists)."
    },
    "feedSort": {
      "type": "string",
      "description": "The viewer's nearby-feed sort order.",
      "knownValues": [
        "newest",
        "oldest",
        "nearest"
      ]
    },
    "showAdult": {
      "type": "boolean",
      "description": "Whether the viewer sees adult-flagged listings (opt-out; defaults true)."
    },
    "hideClaimed": {
      "type": "boolean",
      "description": "Whether the viewer hides claimed (gone/found) listings from the feed (opt-in; defaults false)."
    },
    "requireAltText": {
      "type": "boolean",
      "description": "Whether the viewer requires a description on every photo they post (opt-in; defaults false)."
    },
    "mutedCategories": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Listing categories the viewer has muted from the feed."
    }
  },
  "description": "The viewer's personalization settings as one flat bundle. All fields are required — each underlying read applies its own default so the bundle is always complete."
}
profileView object

Medium profile view: identity + viewer relationship, as returned per row by the graph lists (followers/follows). Sits between profileViewBasic (cheap, handle-less batch tier) and profileViewDetailed (full counts + known-followers + moderation).

Properties

avatar string Optional

Avatar image URL (proxied). Absent when none.

description string Optional

Bio/description. Absent when none.

did string did Required

DID of the account.

displayName string Optional

Real display name. Absent when none set.

handle string Optional

Live-resolved handle (without leading @). Absent when unresolvable.

hiddenByOptOut boolean Optional

True when this account self-labeled !no-unauthenticated and the request is anonymous: all other optional fields are withheld. Never present for signed-in viewers.

viewer ref #viewerState Optional

Viewer-relative relationship state (following/followedBy/blocking/blockedBy/muted); absent for logged-out viewers.

View raw schema
{
  "type": "object",
  "required": [
    "did"
  ],
  "properties": {
    "did": {
      "type": "string",
      "format": "did",
      "description": "DID of the account."
    },
    "avatar": {
      "type": "string",
      "description": "Avatar image URL (proxied). Absent when none."
    },
    "handle": {
      "type": "string",
      "description": "Live-resolved handle (without leading @). Absent when unresolvable."
    },
    "viewer": {
      "ref": "#viewerState",
      "type": "ref",
      "description": "Viewer-relative relationship state (following/followedBy/blocking/blockedBy/muted); absent for logged-out viewers."
    },
    "description": {
      "type": "string",
      "description": "Bio/description. Absent when none."
    },
    "displayName": {
      "type": "string",
      "description": "Real display name. Absent when none set."
    },
    "hiddenByOptOut": {
      "type": "boolean",
      "description": "True when this account self-labeled !no-unauthenticated and the request is anonymous: all other optional fields are withheld. Never present for signed-in viewers."
    }
  },
  "description": "Medium profile view: identity + viewer relationship, as returned per row by the graph lists (followers/follows). Sits between profileViewBasic (cheap, handle-less batch tier) and profileViewDetailed (full counts + known-followers + moderation)."
}
profileViewBasic object

Minimal display identity for a poster/card: the resolved display name + avatar. Server resolves these via the gifthood-over-Bluesky merge.

Properties

avatar string Optional

Resolved avatar image URL (gifthood, or the Bluesky fallback). Absent when no avatar is known.

did string did Required

DID of the account.

displayName string Optional

Resolved display name (the gifthood profile name, or the Bluesky fallback). Absent when no name is known.

hiddenByOptOut boolean Optional

True when this account self-labeled !no-unauthenticated and the request is anonymous: all other optional fields are withheld. Never present for signed-in viewers.

View raw schema
{
  "type": "object",
  "required": [
    "did"
  ],
  "properties": {
    "did": {
      "type": "string",
      "format": "did",
      "description": "DID of the account."
    },
    "avatar": {
      "type": "string",
      "description": "Resolved avatar image URL (gifthood, or the Bluesky fallback). Absent when no avatar is known."
    },
    "displayName": {
      "type": "string",
      "description": "Resolved display name (the gifthood profile name, or the Bluesky fallback). Absent when no name is known."
    },
    "hiddenByOptOut": {
      "type": "boolean",
      "description": "True when this account self-labeled !no-unauthenticated and the request is anonymous: all other optional fields are withheld. Never present for signed-in viewers."
    }
  },
  "description": "Minimal display identity for a poster/card: the resolved display name + avatar. Server resolves these via the gifthood-over-Bluesky merge."
}
profileViewDetailed object

Rich single-account profile: identity + counts + viewer relationship + known-followers + moderation.

Properties

avatar string Optional

Avatar image URL (proxied). Absent when none.

banner string Optional

Banner image URL (proxied). Absent when none.

createdAt string datetime Optional

Bluesky account creation time (account age).

description string Optional

Bio.

did string did Required

DID of the account.

displayName string Optional

Real display name (nullable — the client does the @handle fallback). Absent when none set.

followersCount integer Required

Number of accounts following this account.

followingCount integer Required

Number of accounts this account follows.

handle string Optional

Live-resolved handle (without leading @). Absent when unresolvable.

hiddenByOptOut boolean Optional

True when this account self-labeled !no-unauthenticated and the request is anonymous: all other optional fields are withheld. Never present for signed-in viewers.

joinedAt string datetime Optional

Gifthood join date ('neighbor since').

knownFollowers ref #knownFollowers Optional

Followed-by-people-you-follow sample; absent logged-out / own-profile / none.

listingsCount integer Optional

Number of the account's publicly-visible listings (includes claimed/'gone'; excludes taken-down and, for a non-consenting viewer, adult). Viewer-relative; the handler always emits it.

pronouns string Optional

No description available.

sprite string Optional

rpg.actor sprite-sheet URL. Absent when none.

spriteColumns integer Optional

Walk-cycle column count when a sprite exists.

verification unknown Optional

Bluesky verification status, passed through opaquely (not rendered yet; backlog #8).

viewer ref #viewerState Optional

Viewer-relative relationship state; absent for logged-out viewers.

website string Optional

No description available.

View raw schema
{
  "type": "object",
  "required": [
    "did",
    "followersCount",
    "followingCount"
  ],
  "properties": {
    "did": {
      "type": "string",
      "format": "did",
      "description": "DID of the account."
    },
    "avatar": {
      "type": "string",
      "description": "Avatar image URL (proxied). Absent when none."
    },
    "banner": {
      "type": "string",
      "description": "Banner image URL (proxied). Absent when none."
    },
    "handle": {
      "type": "string",
      "description": "Live-resolved handle (without leading @). Absent when unresolvable."
    },
    "sprite": {
      "type": "string",
      "description": "rpg.actor sprite-sheet URL. Absent when none."
    },
    "viewer": {
      "ref": "#viewerState",
      "type": "ref",
      "description": "Viewer-relative relationship state; absent for logged-out viewers."
    },
    "website": {
      "type": "string"
    },
    "joinedAt": {
      "type": "string",
      "format": "datetime",
      "description": "Gifthood join date ('neighbor since')."
    },
    "pronouns": {
      "type": "string"
    },
    "createdAt": {
      "type": "string",
      "format": "datetime",
      "description": "Bluesky account creation time (account age)."
    },
    "moderation": {
      "ref": "community.gifthood.feed.defs#moderationView",
      "type": "ref",
      "description": "Active soft moderation signal on this account, if any. Reuses feed.defs#moderationView (cross-ref, NOT re-declared)."
    },
    "description": {
      "type": "string",
      "description": "Bio."
    },
    "displayName": {
      "type": "string",
      "description": "Real display name (nullable — the client does the @handle fallback). Absent when none set."
    },
    "verification": {
      "type": "unknown",
      "description": "Bluesky verification status, passed through opaquely (not rendered yet; backlog #8)."
    },
    "listingsCount": {
      "type": "integer",
      "description": "Number of the account's publicly-visible listings (includes claimed/'gone'; excludes taken-down and, for a non-consenting viewer, adult). Viewer-relative; the handler always emits it."
    },
    "spriteColumns": {
      "type": "integer",
      "description": "Walk-cycle column count when a sprite exists."
    },
    "followersCount": {
      "type": "integer",
      "description": "Number of accounts following this account."
    },
    "followingCount": {
      "type": "integer",
      "description": "Number of accounts this account follows."
    },
    "hiddenByOptOut": {
      "type": "boolean",
      "description": "True when this account self-labeled !no-unauthenticated and the request is anonymous: all other optional fields are withheld. Never present for signed-in viewers."
    },
    "knownFollowers": {
      "ref": "#knownFollowers",
      "type": "ref",
      "description": "Followed-by-people-you-follow sample; absent logged-out / own-profile / none."
    }
  },
  "description": "Rich single-account profile: identity + counts + viewer relationship + known-followers + moderation."
}
viewerState object

The requesting account's relationship to this profile, resolved server-side from the session. Absent for logged-out viewers.

Properties

blockedBy boolean Optional

True when this account has blocked the viewer.

blocking boolean Optional

True when the viewer has blocked this account.

followedBy boolean Optional

True when this account follows the viewer back.

following string at-uri Optional

AT-URI of the viewer's follow record for this account; present when the viewer follows them.

muted boolean Optional

True when the viewer has muted this account.

View raw schema
{
  "type": "object",
  "properties": {
    "muted": {
      "type": "boolean",
      "description": "True when the viewer has muted this account."
    },
    "blocking": {
      "type": "boolean",
      "description": "True when the viewer has blocked this account."
    },
    "blockedBy": {
      "type": "boolean",
      "description": "True when this account has blocked the viewer."
    },
    "following": {
      "type": "string",
      "format": "at-uri",
      "description": "AT-URI of the viewer's follow record for this account; present when the viewer follows them."
    },
    "followedBy": {
      "type": "boolean",
      "description": "True when this account follows the viewer back."
    }
  },
  "description": "The requesting account's relationship to this profile, resolved server-side from the session. Absent for logged-out viewers."
}

Lexicon Garden

@