Conversation
The badge shared a Row with the label, so label and badge centred as a group and pushed the label off the tab centre. Design centres the label in the cell and right-aligns the badge. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Top bar, tabs and the footer button were Column siblings, so nothing could scroll underneath them. Layer them over the list with haze, as the handoff does, and reuse the blur style via rememberChromeHazeStyle. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Subscribe used purple and cancel/delete used red. The handoff frames use Brand/Bitkit #FF4400 for every swipe knob; purple there is the auto-pay toggle, not the knob. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Delete sheet title gains its question mark, the created summary uses a comma instead of a middot, and the cadence labels use title case. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A subscription cancelled without a fixed end date failed both arms of shouldShowTiming, so the right-hand cell rendered empty instead of the EXPIRED date the handoff shows. Fall back to the last paid period end. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Delete reused the cancel X, and the payments metric used the received arrow. The handoff uses a trash can for delete and a coins glyph for the payments count. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The detail RENEWS/EXPIRED cell used MMMM d, yyyy while the handoff and the list rows both show MMMM d. Reuse formatShortDate and drop the now unused formatFullDate. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The handoff titles these rows with the subscription name over the date and omits the bitcoin symbol; the contact name and symbol stay on the Payments tab, which does show both. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The handoff keeps the note as the subtitle and replaces the fiat line with "pending". Drop the now unused waiting_for_recipient string. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The handoff sizes the contact card to its content and rules a divider after the contact and tags sections. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The description rendered at 15sp semibold; the handoff sets the paragraph in 17sp regular and keeps the benefit bullets semibold. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Delete reused the cancel cross. Add the handoff's trash illustration as webp across mdpi through xxxhdpi and keep the cross for cancel. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The handoff uses the same torn note card the activity detail already draws. Extract ZigzagDivider into ui/components and reuse it instead of the plain rounded rect. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
iOS already exposes SubscriptionRow-<id>; Android rows carried no tag. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Cover create and propose, review and subscribe, cancel and delete, and the Payments tab. No journey covered subscriptions before. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Import ordering after the haze and zigzag changes, plus the Canvas and Path imports left unused by extracting ZigzagDivider. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Contributor
Regtest APKDownload bitkit-dev-debug universal APK (expires in 30 days). |
jvsena42
marked this pull request as draft
September 15, 2026 13:04
Right-aligning the badge stranded it at the tab edge whenever the tab was wide, which is every two-tab row. Place it relative to the label instead, and cap the label width so it truncates before reaching the badge. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
showSymbol and the status replacement acted on the primary and secondary lines, so with fiat as the primary display they suppressed the fiat symbol and replaced the bitcoin amount. Address bitcoin and fiat directly instead. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The handoff fills both full-screen frames with Base/Black and gives the bottom modal its own gradient from Gray6 down to black. The app applied the same white-wash gradient to all three. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Without an eligible recipient the footer never renders, so nothing supplied navigationBarsPadding and content sat under the navigation area. Fall back to the inset, and ignore a stale footer measurement. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Accepting a proposal opens the send flow or the Subscribed confirmation rather than returning to the list, and payment history only exists once a payment completes. Creator deletion needs its own pending proposal, since a cancelled subscription no longer offers Delete and one with paid periods stays in CREATED. Set a description so More Info is reachable. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The badge made its tab taller than the others, so that tab's indicator sat lower than the rest. Reserve the badge height on every tab. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The handoff blurs the list only through the button itself, leaving the rest of the row sharp. Drop the full-width blurred band and pass the haze state to the Create button so the blur follows its pill. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
jvsena42
marked this pull request as ready for review
September 15, 2026 14:37
The Layout placed both children with absolute coordinates, so the badge stayed physically right of the label in RTL where the previous CenterEnd alignment had followed the direction. Update the journey step, which still described the old right-edge placement. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Master's merge added a suites table, an identifier table and a porting rule that this suite predates. List it, record the Android and iOS row identifiers alongside the parallel Payment Request entry, and mark the suite as not yet ported. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Every other confirm swipe follows the rail — send, savings, spending, external — and the success confetti already did too. Subscriptions were the exception, hardcoding one colour. Derive it from the accepted endpoints, preferring lightning the way payablePreferenceOrder does. Cancel and delete stay brand: they spend nothing. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This was referenced Sep 15, 2026
jvsena42
force-pushed
the
fix/subscriptions-design-parity
branch
from
September 15, 2026 17:30
62c5989 to
9a9fe76
Compare
Accepted endpoints alone are not enough: a wallet with no usable spending balance would get the purple knob and then be sent down the savings path anyway. Require the amount to fit maxSendLightningSats too. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
jvsena42
force-pushed
the
fix/subscriptions-design-parity
branch
from
September 15, 2026 17:36
9a9fe76 to
bfdda4d
Compare
The handoff's Balance component has no symbol node on this screen, just the sign, a 6pt space and the digits. Falling back to rememberMoneyText's default keeps the fiat symbol and drops the bitcoin one, and the sign now has its separating space. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
This PR brings the Subscriptions screens back in line with the
Handoff v62designs after driving the whole flow on an emulator and comparing every screen against its frame.Layers the top bar, tabs and footer button over the list, so rows scroll underneath them instead of stopping short. The two screens involved were plain columns, so nothing could overlap; the Payments tab inside Subscriptions gets the same treatment. The header blurs as a bar, while the footer button blurs only through its own pill the way the handoff does, leaving the rest of the row sharp.
Centres the Payments tab label and places the badge just after it, so the label no longer shifts to make room and the badge is not stranded at the tab edge on a wide tab. Every tab also reserves the badge height, so one tab carrying a badge no longer drops its indicator below the others.
Switches every swipe-to-confirm knob to brand orange. Subscribe used purple and cancel/delete used red; the handoff uses
#FF4400for all of them.Adds the trash illustration and icon to the delete sheet and button, which were reusing the cancel cross.
Fills the expired detail's empty right-hand cell with its
EXPIREDdate, drops the year from detail dates, and swaps the payments metric to the coins glyph.Titles subscription detail payment rows by subscription name over the date and drops the bitcoin symbol there. The Payments tab keeps contact names and the symbol, which is what its frame shows.
Shows
pendingin place of the fiat amount on outgoing payment requests, sizes the request details contact card to its content, rules dividers after its contact and tags sections, gives its note the torn paper edge, and drops the bitcoin symbol from its signed amount — the handoff's Balance component there is just a sign, a 6pt space and the digits.Corrects copy: the delete sheet's question mark, a comma in the created summary, and title case on the cadence labels.
Uses the frame fills from the handoff: flat
Base/Blackbehind the subscription detail and payment request details, and the bottom modal's own Gray6-to-black gradient behind the sheets, in place of the shared white-wash gradient on all three.Blur reuses the existing haze setup, with the style hoisted out of
PinnedTabsScaffoldso both screens share it. The torn note reuses the zigzag the activity detail already drew, extracted toui/components; it was the only copy in the app.All five review findings are addressed and resolved: money cell options now resolve against the selected currency rather than line position, the request list falls back to the navigation bar inset when no footer renders, the tab badge no longer strands or overlaps, and both journeys were corrected against the actual accept and delete gating.
Three gaps are intentionally left out because they are unbuilt design rather than regressions, and each needs a product decision: the Edit button on the created detail, the Renew button on the expired detail, and the Automatically pay this subscription toggle on Review & Subscribe. All three are missing on iOS too. Discover is excluded as before.
iOS shares several of these gaps — no-blur chrome, the cross-for-trash delete sheet, the red knob, and dates carrying the year. iOS additionally renders dates day-first where the design and Android are month-first, and its subscription detail avatar is circular where the design uses a rounded square. Those are reported here rather than fixed.
Design
Preview
Figma on the left, this branch on the right. Test wallet data differs from the mockup data, so compare layout and treatment rather than values.
pendingin the fiat slot, symbol retainedEXPIREDcell filled, no yearQA Notes
Manual Tests
Paymentsstays centred in its half.pendingwhere the fiat amount sits, with the note or date as subtitle.RENEWSshows a date with no year; payment rows are titled by subscription name with the date beneath and no bitcoin symbol.Cancel: sheet shows the cross illustration and an orange swipe knob.PAYMENTSuses the coins glyph andDeletecarries the trash icon.Delete: title readsDelete Subscription?, illustration is the trash, knob is orange, summary reads1 subscriber, N payments.EXPIREDwith a date instead of sitting empty.regression:Overview with no subscriptions: the welcome empty state still fills the screen between the tabs and the Create button.regression:Activity → open a Lightning payment with a message: the invoice note still renders with its torn top edge.regression:Settings, Shop Discover and All Activity: pinned tab headers still blur correctly after the shared haze style moved.Automated Checks
SubscriptionsScreenTest.ktcovers the expired detail falling back to the last paid period end, and a fixed end date winning over paid periods.journeys/subscriptions/documents create-and-propose, review-and-subscribe, cancel-and-delete and the Payments tab. No journey covered subscriptions before.just compile,just testandjust lintpass locally; detekt reports no new findings for the touched files.