Skip to content

brand functionality enhancements#125

Merged
rishibalakrishnan merged 5 commits into
mainfrom
feat/brand-follows-account
Jul 13, 2026
Merged

brand functionality enhancements#125
rishibalakrishnan merged 5 commits into
mainfrom
feat/brand-follows-account

Conversation

@rishibalakrishnan

@rishibalakrishnan rishibalakrishnan commented Jul 12, 2026

Copy link
Copy Markdown
  1. Follows brand configured labeler on account creation and adds following timeline if omitted from brand configured feeds
  2. Adds runtime theming for the mobile apps. Infers brands from the user's PDS and allows selecting a community on sign-up. No explicit community switching functionality - community is tied to account so theming only switches when switching accounts associated with different communities.

…tion

resolveBrandConfig now normalizes the ingested config (both the injected
window.__BRAND_CONFIG__ path and the dev fallback) so feeds.defaultPinned
always contains exactly one Following timeline entry, appended if missing,
with any following-mis-typed-as-feed entry stripped. Backstop for a served
config that omits Following (stale cache / service-down / upstream bug) and
covers both new-account write paths (onboarding StepFinished and agent.ts).
…services

Add a `services.moderation` field (DIDs of moderation services) to the
community brand config and, on onboarding completion, subscribe the new
account to each configured labeler via agent.addLabeler, caching the
result with saveLabelers. Best-effort: a failed subscription is logged
and does not block onboarding. Blacksky's default config subscribes to
the Blacksky labeler.
On native there is no hostname signal (unlike web, where bskyweb injects the
brand by Host), so the app now resolves a community brand from the active
account and re-themes live on account switch:

- resolveBrand: resolve by stamped communitySlug → Latinsky handle carveout →
  PDS host (GET /brands/resolve). The Blacksky PDS is the default/shared PDS and
  is never resolved by PDS (its config is bundled); the host is derived from the
  default brand config.
- BrandProvider holds config in state + exposes a setter; ALF re-themes via its
  existing brand props, no remount.
- useCommunityBrandSync (native) seeds from a per-account MMKV cache (no flash),
  reconciles against the brand service, and resets to the bundled Blacksky brand
  on logged-out surfaces (incl. "add another account" mid-session).
- Signup: a "Community" step with Blacksky as the default option and other
  published communities in a dropdown; the choice sets the PDS and stamps the
  community slug on the created account.

Web behavior is unchanged.
…h icons

Replace the plain Select dropdown with an AccountList-style list: a rounded,
bordered container with one row per community (logo + display name + PDS host)
and a check on the selected one. Blacksky leads (bundled Logo); other
communities show their brand logo, falling back to a theme-colored initial tile.
@rishibalakrishnan rishibalakrishnan force-pushed the feat/brand-follows-account branch from 5b9b5ed to 2de7e3a Compare July 12, 2026 19:23
@github-actions

github-actions Bot commented Jul 12, 2026

Copy link
Copy Markdown
Old size New size Diff
9.08 MB 9.09 MB 7.33 KB (0.08%)

The subscribeToBrandModerationServices test tripped CI lint (require-await on
non-awaiting async mocks, no-explicit-any on the agent cast). Drop `async` from
the addLabeler mocks (Promise.allSettled captures their sync return/throw) and
replace `as any` with a typed `Parameters<>` cast. Behavior unchanged (16 tests
pass); also reformatted for prettier.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@rishibalakrishnan rishibalakrishnan changed the title Add community / brand theming for native app brand functionality enhancements Jul 13, 2026
@rishibalakrishnan rishibalakrishnan merged commit ba972a9 into main Jul 13, 2026
15 of 16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant