Pulso now has a native Android app. It signs in against the live API, reads the real collection, and carries the same five tabs as iOS, Collection, Shortlist, Wear, Roadmap and Insights, built from an empty scaffold on a Pixel 9 emulator in a single day.
Parity was the whole brief, and most of the day went on places where Android quietly disagreed with iOS rather than places where it was missing something. Watch of the day sorted never-worn watches last, so the two platforms nominated different watches from identical data. The Sold filter counted gifted watches, so one watch showed under two filters. The sign-in screen had invented its own tagline instead of using "wound, worn and watched." Each of those reads as a bug in Pulso rather than a bug in the Android app, which is the argument for porting the design instead of re-deciding it. So the shortlist tiles have their movement, water and reserve glyphs back, the tab bar is the floating capsule with sentence-case labels rather than Material’s default, and the PULSO masthead collapses over every tab.
On the shared side, the iOS header’s glass band had been swallowing drags across a strip of 42 to 70 points, because it draws over the scroll view and every hit-testable pixel blocks it, wordmark and title included. Band and labels no longer take hits, and the account button and Ask pill are composed after that modifier so they keep theirs. That ships in build 18. Research now returns movement type as its own field rather than leaving it buried in the calibre prose, where three features had been guessing at it and failing on a third of rows, and backfilling from what was already there took owned watches from 65% to 94% without a single API call.
The tab bar that will not restore on scroll-up is still broken and still not mine. A stripped control with no scroll observer, no header and no FAB fails identically, so the next step is ten seconds on a physical phone, not more code.