Pubky profile & contacts — outstanding work
Purpose: Issue planning and AI context for what is still open after the big Pubky PRs (e.g. bitkit-android#824, bitkit-ios#476). Each [ ] is a candidate ticket or subtask.
Explicitly closed / do not re-file (unless product changes): Android “Deriving your keys” on create; contact import count / no obvious hard cap in PubkyRepo.prepareImport; blocking add-self + invalid pubky (logic works); “Your Pubky” on profile edit vs “Pubky” on contact edit (intentional); contacts list section layout; iOS Continue on create profile is disabled when name is empty (CreateProfileView); iOS simulator paste garbling; testing blocked by homegate/network; Disconnect / profile__sign_out_* only on rare empty or failed profile load on Profile (not the normal loaded-profile path).
Shared (both apps)
Android-only nuance (same tickets as above, implementation detail)
iOS-only nuance (same tickets as above, implementation detail)
Not work items (context for AIs / triage)
- Sim-only clipboard weirdness.
- Homegate down → cannot test “create in Bitkit”. (only local docker-homegate supported atm. see: https://github.com/synonymdev/bitkit-e2e-tests/tree/main/docker)
profile__sign_out = “Disconnect” on empty/failed profile screen — different from Delete profile on edit; not visible on happy path.
Re-verify on your target branch before closing tasks.
Pubky profile & contacts — outstanding work
Purpose: Issue planning and AI context for what is still open after the big Pubky PRs (e.g. bitkit-android#824, bitkit-ios#476). Each
[ ]is a candidate ticket or subtask.Explicitly closed / do not re-file (unless product changes): Android “Deriving your keys” on create; contact import count / no obvious hard cap in
PubkyRepo.prepareImport; blocking add-self + invalid pubky (logic works); “Your Pubky” on profile edit vs “Pubky” on contact edit (intentional); contacts list section layout; iOS Continue on create profile is disabled when name is empty (CreateProfileView); iOS simulator paste garbling; testing blocked by homegate/network; Disconnect /profile__sign_out_*only on rare empty or failed profile load on Profile (not the normal loaded-profile path).Shared (both apps)
Wallet backup → restore → Pubky still disconnected
Flow: create profile → backup → reset wallet → restore. Expected eventually: same wallet seed should restore on-chain + LN state and Pubky session/credentials (or clear product rule + UI). Today: user lands disconnected; needs backup/restore + Pubky migration work (not done in the feature PRs; author pointed to a follow-up PR for restore).
Delete profile — confirm copy parity (iOS shorter than Android)
profile__delete_confirm_title+profile__delete_confirm_description(longer: current profile data, can create again for this pubky later) invalues/strings.xml.profile__delete_title+profile__delete_description— e.g. “This will delete your Pubky profile.” inen.lproj/Localizable.strings— less detail than Android. Align body copy and Transifex.Add contact — same messages for invalid key and add-self (cross-platform + E2E)
contacts__add_error_invalid_key,contacts__add_error_self(AddContactScreen/AddContactViewModel).slashtags__contact_error_key,slashtags__contact_error_yourselfinAddContactSheet— different keys and tone (e.g. “This is not a valid key.” vs Android wording). Unify English and translation keys for parity and stable E2E selectors.Empty contacts list (only “My profile”) — layout + CTA vs Figma and each other
Screenshot-level gaps: order of empty copy vs primary button (iOS: text then button, centered; Android:
ContactsScreenEmptyState— buttoncontacts__intro_add_contactthencontacts__empty_state, top-biased). Label: iOS empty CTA often usescontacts__add_button→ “Add”; Android “Add Contact”. Reconcile to one Figma spec and matching strings. 👇Shared form: Android
ProfileEditFormusesprofile__edit_bio_placeholder— “Short note. Tell a bit about yourself.” for all users of the form; iOSProfileEditFormViewbioSectionusesprofile__create_bio_placeholder(same first-person idea). For editing another user’s contact, that copy is wrong. Add e.g.contacts__edit_bio_placeholder(or equivalent) and pass it fromEditContactScreen/EditContactViewonly. 👇ProfileEditForm.kt— delete block usesPrimaryButtonwithic_trash+deleteLabel(red). Used for both profile and contact edit.ProfileEditFormViewdeleteSection—CustomButtonwithImage("trash")+ label. Review asked for contact delete without this pattern; align contact (and if needed profile) to current Figma. 👇“Please note…” / public profile line — copy + placement (Figma) on profile edit and contact edit
ProfileEditForm+EditProfileScreen/EditContactScreenusefooterNote/profile__edit_public_note(and contact may pass a different or no footer — verify what contact edit should show in Figma). iOS:EditProfileViewsetsfooterNote: t("profile__edit_public_note");EditContactViewusesfooterNote: nilfor the form — if Figma shows a line on both, add the right key(s) toLocalizable.stringsand wire.ProfileEditFormView, the footnote is rendered infooterBar(safeAreaInsetStacked above Cancel / Save). Figma’s order / region is wrong here (user: note is incorrectly above the action buttons). Fix: Move the public note to the position in the Figma file (often in the scroll with the form, or a specific margin relative to actions — not stuck in the bottom chrome above CTA). Android:footerNotecurrently sits in the scrolling column withshowFooterNotebefore the in-form Save/Cancel row — still reconcile text + vertical position with the same Figma as iOS.contacts__add_privacy_noticeon Android,contacts__add_disclaimeron iOS) — if Figma also changed that line, include in the same design pass or a linked ticket.Product / QA follow-ups (if not shipped): profile QR and home
From Android QA: e.g. tap profile QR to copy pubkey (like other sheets); paste pubkey on home to decode/handle (like other deep flows). Backlog until implemented; confirm scope with product.
Figma pass — other gaps (not covered by the “Please note / footnote” item above)
Do not reopen closed nits. Re-check: dialog chrome, any remaining “please note” on add-contact if split from edit, one-off dialog/sheet treatments. Tracked as one sweep or split by screen.
Android-only nuance (same tickets as above, implementation detail)
Empty state implementation lives in
ContactsScreen.ktEmptyState(button-then-text, top spacing). iOS:ContactsListViewemptyContent.After adding link we get back to edit profile and the keyboard becomes active - seems unnecesary.
link rows look disabled;
post–delete profile navigation vs Figma
iOS-only nuance (same tickets as above, implementation detail)
Delete/placeholder/validation items above touch
EditProfileView/EditContactView+ProfileEditFormView+Localizable.strings.bottom gradient on long edit; link field affordance; import avatar stack;
post–delete profile navigation vs Figma
Not work items (context for AIs / triage)
profile__sign_out= “Disconnect” on empty/failed profile screen — different from Delete profile on edit; not visible on happy path.Re-verify on your target branch before closing tasks.