Skip to content

feat(onboarding): redesign signup + onboarding to the Blacksky Figma - #164

Open
rishibalakrishnan wants to merge 34 commits into
feat/gatekeeper-device-attestationfrom
feat/onboarding-redesign
Open

feat(onboarding): redesign signup + onboarding to the Blacksky Figma#164
rishibalakrishnan wants to merge 34 commits into
feat/gatekeeper-device-attestationfrom
feat/onboarding-redesign

Conversation

@rishibalakrishnan

Copy link
Copy Markdown

What

Redesigns the signup + onboarding flow to the Blacksky Figma, with a shared onboarding-chrome component set.

Screens

  • Splash — cookout landing (native)
  • Choose your handle — community picker (published brands via the brand service) with an inline handle-domain sub-picker
  • Get started — email / password / date of birth
  • Create your profile — handle
  • Security — device attestation → captcha
  • Add a profile picture
  • Find your people — community starter packs with per-pack "Follow all"
  • Belong, safely — community moderation
  • Keep it in the community — Blacksky-only posts (shown only for blacksky.app handles)
  • Have a say — People's Assembly
  • Welcome

Notes

  • Shared chrome: AppBar, Eyebrow, PrimaryButton, InputGroup + FieldGroupCard, SelectionRow.
  • Brand fonts (Baste B, Azeret Mono, Rubik) wired for web via @font-face.
  • Account-creation / verification wiring is unchanged from main (Signup/state.ts diff is limited to the community-first step order).
  • Feed pinning falls back to the brand's default pinned feeds.

Base

Stacked on #159 (device attestation) — base is feat/gatekeeper-device-attestation. Retarget to main once #159 merges.

Testing

typecheck + unit tests green; flow verified via web render in light and dark.

On native, when a device attestation token is available, build the attest
gate URL (/gate/signup/attempt-attest) and load it optimistically, falling
back to the standard captcha URL if the attest endpoint fails to load (e.g.
a PDS that has not shipped the route yet). Web and tokenless native signups
go straight to the captcha as before, so account creation never breaks on a
PDS that lacks the attestation route.
Bundle the Baste B (Regular) heading font and register it alongside the
already-bundled Azeret Mono across the web/iOS and Android font lists.
Add font_mono and font_heading atoms plus an applyFonts escape hatch so an
explicit brand family survives the theme-font override on both platforms.
Replace the raw react-native Text stopgap with ALF Text + a.font_mono, drop
the double uppercasing (keep textTransform, remove the JS toUpperCase), and
tidy spacing/color intent. Move the Platform.Version shim into the shared jest
setup and cover the null-render case.
…m props, and gated AppBar help

- InputGroup label/supporting/error text now use theme tokens (t.atoms.text,
  text_contrast_medium, palette.negative_500) so they render in light theme;
  split input-on-card color into INPUT_TEXT_COLOR
- forwardRef to the underlying TextInput and pass through autoComplete,
  textContentType, onSubmitEditing, returnKeyType, blurOnSubmit, autoFocus,
  onFocus/onBlur, maxLength, autoCorrect, editable + onPress (non-text fields)
- error/focus border colors and aria-invalid + accessibilityHint on invalid
- stop force-uppercasing the typed value (opt-in via uppercaseValue)
- AppBar renders help only when onHelp is set, with a spacer otherwise
Rebuild StepHandle on the shared onboarding chrome (AppBar, Eyebrow,
InputGroup, SelectionRow, PrimaryButton) and replace the domain dropdown
with a radio SelectionRow list. Preserves handle validation, availability
checking and suggestions. Adds availableHandles to the dev-fallback brand
config so the domain options appear locally.
Reorder the post-account onboarding step machine to
profile → pin-feeds → belong → blacksky-only → assembly → finished
and drop the interests step. Add pinFeedsStepResults state with a
setPinFeedsStepResults action, route the four new educational/feed
steps to minimal chrome-shell placeholders, and pin the user-selected
feeds on finish (falling back to the brand default set when none are
chosen).
The redesigned chrome steps own their own AppBar and inline action button,
so the shared Layout no longer wraps them in the legacy back-button header
and portal footer. Those outlets remain for the not-yet-restyled finished
step, which still drives them via OnboardingHeaderSlot/OnboardingControls.
… steps

Add real Figma copy and static ALF skeleton graphics to the three
educational onboarding steps: flagged-post moderation stack (Belong),
Blacksky-only skeleton post card (BlackskyOnly), and People's Assembly
statement card with vote pills (Assembly). Graphics are decorative,
theme-aware, and not wired to live data.
Replace the 3-substep ValuePropositionPager with a single chrome Welcome
screen (AppBar, Eyebrow, brand welcome heading, Logomark, PrimaryButton)
and retire the Layout legacy-chrome special-case now that no rendered step
uses the header/footer portals.
…eate Profile

Make the community picker the first signup step on every platform and restyle
it to the redesigned "Choose your handle" screen (bare chrome: app bar, eyebrow,
Baste-B heading, community rows with brand-colored icons, consent line, primary
+ outline actions). Move handle-domain selection out of "Create your profile",
which is now a handle-only screen. Selecting a community sets serviceUrl, which
drives describeServer and the resulting handle domain. Order is now
COMMUNITY -> INFO -> HANDLE -> CAPTCHA; createAccount/verification unchanged.
…ndle

Fold handle-domain selection into each community row: the selected community expands to show its handle domains as radio sub-rows; single-handle communities render as a plain radio row; others show a collapsed disclosure row that expands on select. Adds a disclosure (chevron) mode to SelectionRow.
…rted layout

Replace InputGroup per-corner/position border drawing with a single fully-rounded filled input and a new FieldGroupCard wrapper that provides the outer bordered card. The position prop is replaced by a showDivider boolean that renders a thin inter-field divider inside the card. Update StepInfo and StepHandle to wrap their fields in FieldGroupCard with the Figma vertical rhythm.
@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Old size New size Diff
9.16 MB 9.16 MB -158 B (-0.00%)

@rishibalakrishnan

Copy link
Copy Markdown
Author

@github-actions ota

@rishibalakrishnan

Copy link
Copy Markdown
Author

@github-actions ota

@github-actions

github-actions Bot commented Aug 12, 2026

Copy link
Copy Markdown

Your requested OTA deployment was published to channel pull-request-164.

Note

On-device apply works on TestFlight and development builds only. Production builds keep the anti-bricking safety net (disableAntiBrickingMeasures is off), so the deep link below is a no-op there.

blacksky://intent/apply-ota?channel=pull-request-164

Generated by PR labeler 🤖

@rishibalakrishnan

Copy link
Copy Markdown
Author

@github-actions ota

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