Back to home

Changelog

Track every improvement, fix, and new feature shipped on ShipKith.

v1.2.0

Floating tab bar — centered pill + smaller labels

v1.2.0

Floating tab bar + help in header

v1.2.0

Tab bar Uber-style — no shadow, centered, sentence case

v1.2.0

Tab pill — amber halo visible cross-platform + opaque white bg

v1.2.0

Tab pill amber highlight + frosted bg + filled active icons

v1.2.0

Tab pill — centered via Dimensions, no Android shadow, amber halo restored

v1.2.0

Tab pill — marginHorizontal centering + bottom scrim

v1.2.0

Tab pill polish — softer shadow, active pill, FAB above

v1.2.0

Tab pill — radial glow + true center + 1px black border

v1.2.0

Tab pill — scrim under bar via custom tabBar wrapper; Android flush

v1.2.0

Tab pill — taller darker bottom scrim around menu

v1.1.0

Activity: '1 match' pill routes to drop detail (was empty matches screen) + clearer 'suggested carrier' copy

  • fix(activity): suggestion pill routes to drop detail, not matches screen
v1.1.0

Activity: actionable pills replace passive stats on All chip

  • feat(activity): passive stats -> actionable pills (only when count > 0)
v1.1.0

Activity All chip: by-type stat tiles + Most Active highlights

  • feat(activity): All chip dashboard — by-type stats + highlights
v1.1.0

Activity: ALL chip is action dashboard only (no item lists — browse via specific chips)

  • feat(activity): All chip is dashboard-only (action pills + attention banner)
v1.1.0

Activity: attention banner items scoped to current chip (no more trip notifications on Packages tab)

  • fix(activity): attention banner scoped to chip role
v1.1.0

Activity: compact stats + dedupe attention banner

  • fix(activity): compact stats + dedupe attention banner on All chip
v1.1.0

Activity: 'Needs your attention' card lists exact items triggering tab badge

  • feat(activity): action-needed banner shows WHICH items trigger tab badge
v1.1.0

Activity: stats row on All chip (active posts / lifetime earned / delivered)

  • feat(activity): stats row on All chip — active posts + lifetime earned + delivered
v1.1.0

Container detail: accepted items chips now light green (match profile verified style)

  • style(container): accepted items chips -> light green (match profile verified chips)
v1.1.0

Container detail: operator card now tappable -> opens user profile

  • feat(container): tappable operator card -> /profile/:id (matches drop/trip detail)
v1.1.0

Container detail: pro redesign — bigger ship + hero banner + bottom illustration

  • feat(container): pro detail screen — TravelBackground + hero banner + big ship illustration
v1.1.0

Container: popup-gate flow matches trip/drop ID-gate pattern

  • feat(container): popup-gate flow matches trip/drop ID-gate pattern
v1.1.0

Containers: share + edit (owner) — parity with trip/drop

  • feat(profile): 3-dot menu opens Report user action
  • feat(container): share + edit options (parity with trip/drop)
v1.1.0

Feedback: in-app form (rating + category + message) -> backend, Help tab entry

  • feat(feedback): in-app feedback screen + Help tab entry
v1.1.0

PostSheet: locked container row now routes to business verification

  • feat(post-sheet): container row tappable when unverified -> KYB flow
v1.1.0

Profile: 3-dot menu now opens Report user action -> mailto report@shipkith.com

  • feat(profile): 3-dot menu opens Report user action
v1.1.0

Reports: in-app abuse reporting now hits backend (was mailto)

  • feat(reports): submit Report user via API instead of mailto
v1.1.0

Share button now visible to everyone on trip + drop (not just owner) — parity with containers

  • feat(share): Share button now visible to everyone on trip + drop detail
v1.1.0

Ship icons: bigger size + theme blue (was emerald/amber) across search, cargo tab, container detail

  • feat(brand): ship icons -> theme blue + bigger size across app
v1.1.0

Awaiting vs Confirmed split + plain-language stepper

  • ux(match,carry): split awaiting vs confirmed; clearer stepper + title threshold
v1.1.0

Bigger, more readable typography on Home + Carry list cards

  • ux(mobile): bump list-card typography for readability — Uber-grade hierarchy
v1.1.0

Bigger, more readable typography on My Packages active card

  • ux(mobile): bump ActiveDropCard typography to match the wider readability pass
v1.1.0

Money values render in money-green

  • ux(match): money values render in emerald (brand-consistent)
v1.1.0

Native-feel notifications + cancel-pre-payment title fix

  • ux(match,notifications): cancel-pre-payment title fix + native-feel notifications
v1.1.0

Personalized post sheet, sender peek sheet, login locale sync, info on cancelled matches

  • feat(haptics): add expo-haptics for native feedback on notifications
v1.1.0

Plain-language How-it-works + carrier→traveller copy sweep

  • ux+i18n: sub-repo catchup — personalized post sheet, sender peek, login locale sync, cancelled-match info, plain-language How-it-works, carrier→traveller
v1.1.0

State-based stepper + dropper-only trip details

  • ux(match): state-based stepper labels + dropper-only trip details section
v1.2.0

Customize your referral code

  • feat(referral): customize your code (vanity codes)
v1.2.0

Invite & Earn — referral program

  • feat(referral): Invite & Earn — mobile UI
v1.2.0

Profile tab, referral shortcut, smoother launch

  • feat(nav+referral): profile tab, header referral button, auth cold-start fix
v1.2.0

Simpler sign-in

  • feat(auth): remove non-functional phone login tab
v1.0.0

Auto-confirm self via user-svc; signup auto-login works regardless of Supabase confirm-email toggle

  • fix(auth): call user-svc auto-confirm-self after signup so auto-login works even with email confirmation enabled
v1.0.0

Auto-login after signup; clearer email-confirmation message

  • fix(auth): auto-login after signup; clear message when email confirmation required
v1.0.0

Email confirmation flow: banner, resend, verify-email web page with deep-link

  • fix(auth): always start unverified after signup; auto-fire ShipKith verification email
v1.0.0

Fix signup trigger (trust_level dropped); surface OAuth error description

  • fix(auth): surface real OAuth error_description instead of generic missing-code message
v1.0.0

Treat email-confirmation-required signup as success, route to login with email prefilled

  • fix(register): treat email-confirmation-required as success; route to login with email prefilled
v1.2.0

Background sweep: drop shell illustration + brand row from all tabs

v1.2.0

Bg consistency: settings + nested stacks

v1.2.0

Brand row: hardcode tagline + shrink-safe layout; drop from Profile

v1.2.0

Edit profile: stop clobbering edits + drop stale city on country switch

v1.2.0

Hero panel shadow + search bg

v1.2.0

How it works: restore steps visibility (min-height fix)

v1.2.0

How it works sheet: smooth scroll + Android nav-safe Got it

v1.2.0

How it works sheet: taller (85-92%) so all 4 steps fit

v1.2.0

Lighter parchment bg v2

v1.2.0

Lighter parchment bg v3

v1.2.0

Lighter parchment bg

v1.2.0

Match: switch to 'View your review' once submitted

v1.2.0

Opaque hero panels (fix Android shadow bleed)

v1.2.0

Profile: add My Reviews (received + given)

v1.2.0

Profile: trips count now reflects completed carrier runs

v1.2.0

Revert: flat parchment bg

v1.2.0

Reviews: label fix + row before Settings + hide root header

v1.2.0

Trip + Drop detail: show real bookings (requests, awaiting, confirmed)

v1.2.0

Wallet activity: human-readable labels + subtitles, reserve_hold context

v1.2.0

Warm-gold bg theme: drop shell illustration, swap to bg.base palette

v1.1.0

Container create: autofill email + phone from profile

  • feat(container): autofill email + phone + whatsapp from profile
v1.1.0

Container create: How it works pill + translucent hero sheet

  • feat(container): How it works pill + translucent hero sheet on container create
v1.1.0

Container create: keyboard dismisses on drag and avoids hiding inputs

  • fix(container): KeyboardAvoidingView + dismiss-on-drag on form
v1.1.0

Container create screen now follows ShipKith design system

  • feat(container): align /container/create with shared design system
v1.1.0

Container delete: confirmation toast + lands on Activity Containers chip

  • feat(container): post-delete flow drops operator on Activity → Containers chip with confirmation toast
v1.1.0

Container posted: celebratory success screen with route + emojis

  • feat(container): celebratory posted screen after publish
v1.1.0

Container: publish CTA for orphan drafts + chip-aware empty state

  • feat(container): publish CTA on draft detail + chip-aware empty state on search
v1.1.0

Container shipments: real backend posting + operator agreement step + Cargo→Containers rename

  • feat(container): real backend posting + agreement step + Cargo→Containers rename
v1.1.0

Hotfix: container API unwrap envelope so Post succeeds

  • fix(container): unwrap {success,data} envelope from trip-svc responses
v1.1.0

Hotfix: container PostSheet eligibility + Kith standing ladder copy

  • fix(post,trust): unlock container row for verified business + fix topOfLadder for kith
v1.1.0

Hotfix: suppress expo-router default header on container screens

  • fix(container): add _layout.tsx so default expo-router header is suppressed
v1.1.0

Carry tab: requests nest inside trips; cancel reason on matches list

  • ux(carry): nest sent requests inside their trip + plain-language cancel reason on matches list
v1.1.0

Fix request title + back-nav + expired-trip self-heal

  • feat(ux): Send/Carry polish — translucent hero, HowItWorks sheet, activity panel
  • chore(release): warn when OTA ships with a dirty working tree
  • fix(match): "Request Details" title for dropper-side pending/accepted; preserve drop sheet on back-nav
v1.1.0

Mobile UX — carrier refuse-pickup button (misdeclared / contraband)

v1.1.0

Mobile UX — drop-edit locked once committed (post-agreed)

v1.1.0

Mobile UX — dropper-no-show button + plain-language cancel reasons

v1.1.0

Polished Send / Carry redesign + reschedule lifecycle

v1.1.0

Reschedule + receiver-unreachable lifecycle

  • feat(match): reschedule banner, receiver-unreachable, refuse-pickup, plain-language cancel copy
v1.1.0

Trip card: SENT badge for outgoing requests

  • ux(carry): SENT badge on collapsed trip card
v1.2.0

Activity tab labels fit when translated

  • fix(activity): segmented tab labels fit when translated
v1.2.0

Hero options carousel on Search tab

  • feat(search): hero options carousel — Send/Carry/Cargo/Communities
v1.2.0

Full French translation and polish

  • Full French: the entire app now speaks French end-to-end, including the wallet and verification screens.
  • Your language choice on the welcome screen now sticks to your account after you sign in.
  • A few polish touches on the identity-verification flow.
v1.2.0

New onboarding experience

  • A brand-new welcome experience: redesigned onboarding with fresh illustrations introducing Send, Carry, and Trust.
  • Cleaner, smoother visuals across the intro screens.
v1.2.0

Quick language switch and account deletion

  • Quick language switch: tap EN/FR right in the top bar on any tab — no more digging into Settings.
  • You can now delete your account from Settings → Danger Zone, with a clear confirmation step.
  • Sign out is now visually calmer (it's no longer styled like a destructive action).
v1.2.0

Refined header sizing

  • Refined, slightly smaller screen headers throughout the app for a cleaner look.
v1.1.0

Help tab: Send feedback tile now visible (was on wrong screen)

  • fix(help): Send feedback action on the actual Help tab (not just settings/help)
v1.1.0

Faster traveller profile + readable Trip Details texts

  • ux+perf(mobile): faster traveller profile open + Trip Details readability pass
v1.1.0

My Trips card shows route once with flags inline

  • ux(mobile): TripBridgeCard route shown once, with flags inline on the title
v1.1.0

Pin View Requests + Edit Trip; accepted items no longer wrap

  • fix(trip-detail): pin View Requests + Edit Trip; stop wrapping accepted item labels
v1.1.0

Theme card-text tokens + visible airplane icon between route cities

  • ux(mobile): theme-level card text tokens + airplane icon visibility fix
v1.1.0

Trip card route endpoints + capacity label; My Packages says 'package'

  • ux(mobile): TripCard route endpoints + capacity label cleanup; package card copy
v1.1.0

Trip card: route name never truncates; bar matches My Trips

  • ux(mobile): TripCard route never truncates; bar matches My Trips look
v1.1.0

Trip Details readability + bolder accepted/restricted item icons

  • feat(trip-detail): Uber-style readability — bigger text, bolder icons, rose-themed restricted items
v1.1.0

TripCard route matches DropCard; capacity is just 'Xkg available'

  • ux(mobile): TripCard route layout matches DropCard; capacity reads as plain "Xkg available"
v1.0.0

Phase 10 — Pawapay MoMo deposit for African droppers via USSD push

  • feat(pay): Phase 10 — Pawapay MoMo deposit for African droppers (USSD push to phone)
v1.0.0

Phase 11 — saved MoMo as first-class payment method

  • feat(payments): Phase 11 — saved MoMo as first-class payment method (polymorphic user_payment_methods, auto-save on deposit, one-tap chips on pay screen)
v1.0.0

Phase 8 — saved Stripe cards on pay screen, auto-saved on first use

  • feat(pay): surface saved Stripe cards in PaymentSheet via Customer + EphemeralKey; new cards auto-save for next time
v1.0.0

Wallet ledger Phase 1: read-only Wallet screen with balance, pending hold, history

  • chore(release): always quote changelog titles to survive YAML colons
  • feat(wallet): add read-only Wallet screen — available + pending balance, lifetime earnings, recent ledger entries
v1.0.0

Wallet Phase 2 — Stripe Connect Express onboarding and standard withdraw

  • feat(wallet): Phase 2 — Stripe Connect Express onboarding + standard withdraw flow + payout history
v1.0.0

Wallet Phase 3 — instant payouts, auto-payout toggle, Apple/Google Pay

  • feat(wallet): Phase 3 — instant payouts with fee preview, auto-payout toggle, Apple/Google Pay enabled in PaymentSheet
v1.0.0

Wallet Phase 4 — DAC7 tax info, German locale, EU rollout readiness

  • feat(wallet): Phase 4 — DAC7 tax info collection, German locale, EU readiness
v1.0.0

Wallet Phase 5 — Paystack MoMo automation for Cameroon, Ghana, Nigeria, Kenya, Cote d'Ivoire

  • feat(wallet): Phase 5 — Paystack MoMo onboarding for African carriers
v1.0.0

Wallet Phase 6 — chargeback reserve, reconciliation cron, dispute auto-evidence skeleton

  • feat(wallet): Phase 6 — surface 60-day chargeback reserve balance
v1.0.0

Wallet — replace Paystack with Pawapay; Cameroon + 19 other African countries now covered

  • feat(wallet): swap Paystack for Pawapay; Cameroon now covered along with 19 other African countries via one integration
v1.0.0+22

New Standing vocabulary — Kith, Familiar, Regular, Elder, Pillar

We're retiring the old "Basic / Verified / Pro / Gold" tiers. They felt generic and didn't reflect what trust actually means in our community.

Standing now uses culturally-grounded vocabulary:

  • Kith — you're family from day one.
  • Familiar — known faces who've travelled before.
  • Regular — a steady, reliable presence.
  • Elder — long-standing community member.
  • Pillar — the carriers others build their plans around.

Existing accounts have been mapped to the equivalent new tier — no progress is lost. The shipping caps and fee discounts attached to each level are unchanged.

Verification (email, phone, government ID, business) is now an independent axis: it's binary per item, displayed as ticks on your profile. You can be a Pillar with no government ID, or a Kith with full KYC — they answer different questions.

v1.2.0

Lower payout minimum to /bin/zsh.50 for testing

v1.2.0

Phone field on profile + CA transit/institution split

v1.2.0

user-svc KYC fields exposed + phone field re-ship

v1.2.0

Bottom sheets: tap backdrop to dismiss + Android nav inset for footer buttons

v1.2.0

Fix Android nav bar safe-area: wire SafeAreaProvider + all screens respect bottom edge

  • feat(payments): live mode + carrier payout chooser + Africa card hint
  • chore(eas): auto-publish Internal Testing releases with versionName + versionCode label
  • fix(eas): drop unsupported releaseName field (Play auto-names from bundle version)
v1.2.0

Fix Android swipe gestures: wrap app root in GestureHandlerRootView

  • fix: scope safe-area paddingBottom fixes to Android only (iOS unchanged)
  • feat(android): install react-native-edge-to-edge for proper Android 15+ insets globally
v1.2.0

Fix Android tab bar safe-area: dynamic paddingBottom from useSafeAreaInsets

  • fix(safe-area): wire SafeAreaProvider at root + bottom edge on all screens
  • fix(splash): wire expo-splash-screen config plugin to kill Android 12+ default flash
  • fix(android): disable edge-to-edge so nav bar gets its own space (not overlay content)
  • fix(android): install react-native-edge-to-edge for proper Android 15+ inset handling
  • fix(android): lower targetSdk to 35 so edgeToEdgeEnabled=false is honored
  • fix(android): explicit useSafeAreaInsets in login + revert edgeToEdge/sdk35 experiments
v1.2.0

Hotfix: bottom sheets stay open on content tap (was dismissing on whitespace tap)

v1.2.0

iOS Modal stacking: dismiss agree modal before opening consent sheet

v1.2.0

Match agree: show consent sheet for all standings + surface real error messages

  • fix(android): wrap app root in GestureHandlerRootView so Swipeable works
v1.2.0

Scope safe-area paddingBottom fixes to Android only (iOS unchanged)

  • fix(tabs): dynamic tab bar paddingBottom from useSafeAreaInsets
v1.1.0

BUSINESS pill on verified-business trip cards

  • feat(search): show BUSINESS pill on verified-business carrier cards
v1.1.0

Business verification UX: step indicator + post-save scroll

  • feat(kyb): step indicator + post-save scroll on business verification
v1.1.0

ID-verified gate on trip + drop create

  • feat(gate): block trip + drop creation until ID is verified
v1.1.0

Inline helper text on trip create offer rows

  • feat(trip): inline helper text on rate + min kg rows in CREATE TRIP
v1.1.0

Loud finish-setup state for incomplete business profile

  • feat(trust): loud action-needed state for incomplete business profile
v1.1.0

Loud pending state on business trust card

  • feat(trust): make pending/rejected business state visually loud
v1.1.0

Pinned search brand row + unified category emojis with package details

  • feat(mobile): pin search brand row + unify category icons with package details
v1.1.0

Polished read-only review state for business verification

  • feat(trust): polished read-only review state for locked business profiles
v1.1.0

Role label inline on non-business cards

  • feat(business): Verified Business badge across cards + details + profile
  • fix(gate): zoom shell illustration into card so airplanes/globe show
  • fix(search): role label back inline (right-centered) for non-business cards
v1.1.0

Search brand row horizontal padding fix

  • fix(search): add horizontal padding to pinned brand row
v1.1.0

Shell background on ID verification gate modal

  • fix(gate): use shell-background illustration on ID verification modal
v1.1.0

Step 1 collapses to summary on business verification

  • feat(trust): collapse step-1 form once saved on business verification
v1.1.0

Tappable match cards on Trip/Drop published screen

  • fix(posted): make match suggestion cards tappable
v1.1.0

Verified Business badge across cards, details, profile

  • feat(business): Verified Business badge across cards + details + profile
v1.1.0

Verified Business badge replaces ambiguous BUSINESS pill

  • fix(search): use canonical Verified Business badge on trip cards
v1.1.0

Wider rate pill + blue info hint on trip create

  • fix(trip): widen rate pill + style helper text as info hint
v1.0.0

Business upgrade: FR translations + bigger animation

  • feat(trust-business): add fr translations + bigger animated halo + sparkle wiggle
v1.0.0

Carrier-facing drop details redesign

  • feat(drop-detail): redesign carrier-facing items breakdown
v1.0.0

Drop creation: bottom-sheet item picker

  • feat(drop): bottom-sheet item picker, total weight/value labels
v1.0.0

Fix realtime postgres_changes-after-subscribe crash

  • fix(realtime): tear down stale channel before re-subscribing
v1.0.0

Handoff UI polish: caption + stacked consent buttons

  • fix(handoff): cleaner segmented control + stacked consent buttons
v1.0.0

Trip create: hub-first handoff with consent gate

  • feat(trip): hub-first handoff section with consent gate for direct
v1.0.0

Trip create: ShipKith hub chips

  • feat(trip-create): toggleable ShipKith hub chips for pickup + delivery areas
v1.0.0

Verified chips emerald, profile header fix, confirm-pickup keyboard, expired trip status

  • fix(profile): verified chips emerald + tick, fix PROFILE.PROFILE header, confirm-pickup keyboard layout, expired trip status
v1.2.0

Stripe Connect Custom infra: bank-entry, KYC gate, i18n, error states

v1.2.0

Phase 1.5: carrier payout chooser + Africa card hint + MoMo deposit gate

v1.1.0

Activity: suggested carriers chip on package cards + amber route

  • feat(activity): suggested carriers chip on package cards + amber route
v1.1.0

Carriers tab + brushed-metal route block + centered tabs

  • refactor(search-results): metal route block + centered tabs + carriers label
v1.1.0

Drop detail: requester card visible to non-owners

  • feat(drop-detail): show requester card to non-owners
v1.1.0

Drop help from profile + black/white mode chips + content-sized tabs for translations

  • fix(mobile): drop help from profile, B&W mode chips, content-sized tabs
v1.1.0

Help brand colors (WhatsApp green, Instagram pink) + Requests tab no longer shows mode chips

  • feat(mobile): brand-colored help tiles + drop mode chips on requests
v1.1.0

Help tab + role labels in search results + grouped All view

  • feat(mobile): help tab + role labels + grouped search results
v1.1.0

Package icon centered in route + bolder traveller meta (date/kg)

  • style(search-results): package icon centers route, bolder traveller meta
v1.1.0

Restore golden package tile (centered between route endpoints)

  • fix(search-results): restore golden package tile in middle of route
v1.1.0

Segmented sub-filters across tabs + My Activities title + main chip color swap

  • refactor(mobile): segmented sub-filters + main chip color swap + activity title
v1.1.0

Segmented tabs: white text and icons across all states

  • style(theme): segmented control tabs use white text/icons across states
v1.1.0

Tighter vertical padding on route blocks (carriers and packages)

  • style(search-results): tighten vertical padding on route blocks
v1.1.0

Trip share + messages cold-load fix (Universal Links infra ready, native rebuild pending)

  • feat(mobile): default landing on Search + activity route matches search-results
  • feat(mobile): trip share + universal-links config + messages loading fix
v1.1.0

Unified tab chrome (brand row + 2xl padding) + slate icon tiles + help moved to tab

  • refactor(mobile): unify tab chrome, slate icon tiles, drop help from settings
v1.0.0

Communities list fix

  • feat(trust): bigger ladder labels + pulse, stagger fade-in, animated progress fill
  • fix(theme): expose navIconTile.iconSize=26 and use it across nav-tile screens
  • feat(release): add What's New screen + release.sh helper
  • fix(whats-new): use screenRootStyle so global TravelBackground shows
  • fix(shell): wrap whats-new + business verification in ScreenShell
  • fix(whats-new): register screen with headerShown: false to hide native bar
  • fix(register): match login header layout — language pill inline with ShipKith brand
  • fix(register): increase top padding above 'Already have an account' footer
  • fix(release): hide .env during eas update so dev URLs don't leak to OTA
  • fix(settings): remove duplicate Change Password row from Account section
v1.0.0

Drop creation: items + categories unified into one picker

  • feat(drop): unify items + categories into a single per-item picker
v1.0.0

Edit trips from My Bridges + communities list fix

  • fix(communities): correct double-unwrap of API data in list/detail screens
  • feat(activity): manage trip button in expanded bridge card
v1.0.0+25

Over-the-air updates fixed — TestFlight build 25

Internal infrastructure release — no UI changes, but a critical fix for our update pipeline.

  • iOS build 25 ships with the expo-updates runtime baked in for the first time, so future improvements can reach testers without a full TestFlight redeploy.
  • The EAS update channel is now correctly bound to the production branch — previously, published updates weren't reaching installed builds.
  • Going forward, JS-only changes (UI tweaks, copy edits, bug fixes) appear on tester devices on the next cold start; only changes that touch native modules require a fresh TestFlight build.
v1.0.0

Post-publish success screen with live match radar

  • feat(posted): celebratory success screen with live match radar after publish
v1.0.0

Refreshed Manage trip action row

  • feat(bridges): refresh manage-trip CTA — emerald action row instead of black slab
v1.0.0

Standout business upgrade callout

  • feat(trust): outstanding business upgrade callout, hide for business accounts
v1.0.0+25

Trust card polish — visible rating star, animations, bigger ladder labels

Visual refinements to the Trust & Verification screen so your standing progress reads at a glance, plus the first What's New screen.

  • The "Rating ≥ 4.0" requirement now shows the star inside an amber pill — visible at every contrast level.
  • Ladder labels (Kith / Familiar / Regular / Elder / Pillar) are larger, with stronger weight and more breathing room.
  • Animated progress: the trips bar fills smoothly from 0 to your current count on open, and the dot for your current standing pulses gently to draw the eye.
  • Profile, settings, and trust nav tiles use a shared near-black tile token for consistent contrast across the app.
  • New What's New entry under Settings → Support, fetching this changelog directly so future updates are visible without leaving the app.
  • Business Verification and What's New screens now show the global travel illustration consistent with the rest of the app.
v1.2.0

Activity: 'Booked' status + show traveller name (was 'No traveller assigned' even after match)

v1.2.0

Activity: pills now tappable ('in transit' → Packages/Active, 'drafts' → Packages/Drafts)

v1.2.0

Activity pills: route 'drafts'/'in transit' tap to the chip that actually contains the items

v1.2.0

Activity pull-to-refresh + on-focus refetch + broader match cache invalidation (status changes propagate everywhere now). Trip card variants: DELIVERING (emerald + bar) + ALL DELIVERED (strong emerald) + AWAITING SENDER hint.

v1.2.0

Activity tab: error boundary around chip panels (shows stack instead of crashing app)

v1.2.0

Activity: trip card shows IN TRANSIT/BOOKED/ARRIVED derived from match + flight date (stop showing POSTED on booked or in-flight trip)

v1.2.0

Fix Activity Packages crash on Android (agreed/picked_up/arrived used undefined color palettes)

v1.2.0

Fix double-tap on cards. Activity + Search ScrollViews: keyboardShouldPersistTaps=handled. Search panresponder stricter (24px + 2.2x ratio). Trip card outer tap navigates; chevron toggles expand. delayPressIn=0 on touch rows.

v1.2.0

Hotfix 2: scroll restored inside consent sheet + bottom-sheet backdrop now top-only flex region

v1.2.0

Hotfix: formatDisplayName accepts string + null/undefined (fixes Cargo/Activity crash on Android)

v1.2.0

Match: Confirm Delivery CTA + arrival-date gate (server + client) + Waiting on arrival badge

v1.2.0

Match detail: 'Waiting on [name]' badge when next action is on the other party

v1.2.0

Match: hide 'Waiting on' badge when current user has the action (was wrongly shown on sender during pickup confirm)

v1.2.0

Packages list: booked cards now visually distinct (green tint + left bar + airplane icon vs amber 'still looking')

v1.2.0

Pickup: hide Confirm Pickup CTA once traveller confirmed + show 'Waiting on sender' badge

v1.2.0

Review screen: resolve reviewee name (was Unknown)

v1.2.0

Sender CTA on BookedTravellerCard — Confirm Receipt button when status=delivered, I handed over the package when paid, Receipt confirmed when completed. Stops sender from staring at advice copy with no button.

v1.2.0

Sender Packages list: action-required visual when carrier marked delivered — amber card border + 'ACTION REQUIRED · TAP TO CONFIRM RECEIPT' top banner + 'CONFIRM RECEIPT →' pill replaces green DELIVERED. Sender can't miss the pending action anymore.

v1.2.0

Shipment details: new BookedTravellerCard with stage-aware copy (replaces stale 'Sent X ago' on locked-in bookings)

v1.2.0

Shipment details: 'Your traveller' section + green theme after booked (was 'Requests sent' alarm for everything)

v1.2.0

Status pill: single source of truth — picked_up renders as IN TRANSIT everywhere (DropDetailsSheet + ActivityPanel + match screen all use shared getStatusDisplay util)

v1.2.0

Tap-once on cards + sticky CTA on booking details

v1.2.0

Trip card: ARRIVED state distinct visual — amber tint + left bar + location icon + 'Flight landed, confirm delivery' hint (was indistinguishable from POSTED)

v1.2.0

Trip card: booked-load bar emerald (was blue, clashed with amber AVAILABLE chip). Drop duplicate 'available' from progress legend — header chip is the single source. Legend shows rate + any pending earnings.

v1.2.0

Trip card: drop duplicate $ totals — header EARNINGS chip is the single source. Section headers (CONFIRMED / AWAITING PAYMENT) no longer repeat the same number. Progress legend handles pending overflow.

v1.2.0

Trip complete: gate on departure_date < now (no closing before flight) + booked_kg == 0

v1.2.0

Trip-expanded item: single full-width primary CTA showing next required action (Confirm Pickup -> Confirm Delivery -> Awaiting Sender). Message button removed. Flight-arrival gate mirrored client-side.

v1.2.0

Trip expanded view: drop redundant CAPACITY/AVAILABLE/EARNINGS stats bar. Single 'Trip space' progress bar with inline 'Xkg available @ rate' + earnings. Hide capacity stats once flight has landed or trip is delivering/done.

v1.2.0

Trips list sorted by departure_date — past/in-flight first (most-recent on top), upcoming below sorted by nearest flight first

v1.2.0

Trips: 'Mark trip complete' CTA for carriers + auto-complete trigger when all matches settle

v1.1.0

Drafts tab in My Activities

  • feat(activity): DRAFTS tab between ACTIVE and HISTORY
v1.1.0

Flight times on airport codes + lock last-active mode chip

  • feat(mobile): flight times on ETH/DLA airport codes + lock last-active mode chip
v1.1.0

Gate trip create continue on resolved handoff

  • fix(trip): gate Continue on resolved pickup + delivery handoff
v1.1.0

Green ID-verified checkmark on cards + auth flicker hotfix

  • feat(mobile): green ID-verified checkmark on cards + auth flicker hotfix
v1.1.0

KYC back-of-ID step for ID cards and licenses

  • feat(kyc): back-of-ID step for national_id + drivers_license
v1.1.0

KYC identity step collecting legal name + DOB

  • feat(kyc): identity step capturing legal name + date of birth
v1.1.0

Louder labels neutral icons on trip create offer rows

  • fix(trip): louder labels + neutral icons on YOUR OFFER
v1.1.0

Per-publish agreement step on trip + drop with audit trail

  • feat(create): per-publish agreement step for trip + drop with audit trail
v1.1.0

Personal name on cards, business name only as detail-screen info

  • feat(business): keep personal name on cards, show legal name as info hint
v1.1.0

Shell illustration backdrop on ID gate modal

  • fix(gate): shell illustration backdrop under dark slate veil
v1.1.0

Tap requester on drop detail + emerald ID-verified check on detail screens

  • feat(mobile): tap requester on drop detail → profile + emerald id-verified check on detail screens
v1.1.0

Trip detail: depart/arrive dates split left+right with times

  • feat(trip): split date strip into DEPART/ARRIVE columns + show times
v1.1.0

Booking details — fix wording on trip details fallback

v1.1.0

Booking details — friendly fallback when trip details are private

v1.1.0

Booking details — surface trip departure date prominently

v1.1.0

Drop sheet — alarming amber requests section at top with heartbeat pulse

v1.1.0

Drop sheet — request card focuses on carrier + trip date + status

v1.1.0

Drop sheet — request card uses plain language status sentences

v1.1.0

My Packages — request badge on item card, requests inside drop sheet

v1.1.0

Tabs — black track, white active card, gray inactive

v1.1.0

Tabs — bolder labels, larger filled icons

v1.1.0

Tabs — edge-to-edge capsule, fixed label sizing

v1.1.0

Tabs — pressed-in active pill, rounded edges, brighter inactive

v1.1.0

Tabs redesign — icon-stacked with accent bar

  • fix(eas): switch Android submit to releaseStatus=draft
  • fix(payments): show Add Mobile Money by default, hide only for card-only corridors
  • ui(payments): brand chips on Add Mobile Money + distinct CTA colors
  • fix(auth): clear all cached queries on sign-in/out, not just user keys
  • fix(activity): move expired trips to History tab
  • ui(activity): dim expired trips so they read as past, not active
  • ui(activity): restore full opacity on expired trips when expanded
  • fix(i18n): add missing trip.detail.title + loading keys
  • feat(ux): Phase A naming sweep — Drop→Shipment, Match→Booking, Bridge→Activity
  • feat(ux): Phase B IA — split Search into Send + Carry tabs
  • feat(ux): Phase C empty-state + copy rewrite
  • feat(ux): Phase D — restrict illustrated background to Profile only
  • feat(ux): Phase D — Send hero + drop the redundant Send/Travel toggle
  • feat(ux): Phase E — first-run tour rewritten as Send / Carry / Trust
  • ux: question-form hero copy + drop Activity subtitle
  • ux: separate carrier activity into the Carry tab
v1.1.0

Tabs redesign — soft segmented capsule

v1.1.0

Tabs — soft track, white pill, emerald active accent

v1.1.0

Tabs — stack icon over label, full bold text

v1.1.0

Tabs — swipe between Send/Carry tab views

v1.2.0

Smoother launch and resilient sign-in

  • Smoother launch: fixed a rare startup race that could briefly flash an error right after opening the app.
  • More resilient sign-in: the app now refreshes your session automatically instead of getting stuck on a stale login.
v1.2.0

Manual MoMo (Cameroon) — admin-mediated collection flow

v1.2.0

Signup country picker, sender KYC drop, KYC address+tax-id, mini-Phase 4 payout routing

v1.2.0

Withdraw — clean manual flow + city required on country change

v1.2.0

Withdraw — no minimum on manual payout path

v1.1.0

Cargo goes live — verified businesses post containers, senders contact off-app

  • feat(cargo): live browse + post for container shipments — Verified Business only, off-app contact via WhatsApp/phone/email
v1.1.0

Default text readability bump + professional chip layout for accepted/restricted items

  • feat(theme): bump default text readability + Trip Details accepted/restricted as pill chips
v1.1.0

Home TripCard: tighter route padding + larger plane icon

  • fix(home-tripcard): tighter route padding + larger plane icon (18→26)
v1.1.0

New Cargo tab — join the waitlist for full-container shipments

  • feat(cargo): add Cargo tab as join-the-waitlist placeholder for container shipments
v1.1.0

New Search tab with dedicated results screen + transport mode filter chips

  • feat(search): new Search tab + dedicated /search/results screen with All/Travellers/Requests tabs and Plane/Cargo/Vehicle mode chips
v1.1.0

Open Requests filtered by your most-approaching trip

  • fix(carry): Open Requests filtered by most-approaching trip
v1.1.0

Open Requests: half-centered separator between rows

  • fix(carry): half-centered separator between Open Requests rows
v1.1.0

Open Requests rows: bigger route + reward, plus category icon badge

  • feat(carry): bigger route + reward, plus category badge on Open Requests rows
v1.1.0

Open Requests separator centered again

  • fix(carry): Open Requests separator centered again
v1.1.0

Open Requests separator left-aligned, longer + darker

  • fix(carry): Open Requests separator left-aligned, longer + darker
v1.1.0

Payments now live inside Wallet + new Help row with WhatsApp support

  • feat(profile): merge Payments into Wallet; add Help row with WhatsApp support deep-link
v1.1.0

Readable text everywhere (xs floor lifted) + Trip Details vertical item rows

  • feat(ui): app-wide tiny-text floor (xs→14, no fontSize<12); Trip Details vertical item rows; readable disclaimer + pickup chips
v1.1.0

Search results: package + traveller cards now share the same route endpoint layout; cleaner meta row

  • refactor(search-results): unify route endpoints across cards; bigger 3-slot meta; clean dead styles
v1.1.0

Search results polish: distinct request card, verified+business badges, content-sized tabs

  • fix(search-results): distinct request card with brown package icon; verified dot + BUSINESS pill; rating defaults to 5; content-sized tabs
v1.1.0

Search results polish: shipping-label request card, goldish border, centered+bolder tabs, default avatar

  • fix(search-results): shipping-label request card; goldish border; centered/bolder tabs; default avatar; inline verified tick
v1.1.0

Search results: shadowed route blocks, real avatars, category icons, swipeable tabs

  • feat(search-results): redesigned cards — shadowed route block, real avatars, category icons, uppercase swipeable tabs, abbreviated header
v1.1.0

Three-tab IA: Search · Activity · Messages — Send/Carry/Cargo collapsed into Activity

  • feat(ia): collapse Send/Carry/Cargo into Activity tab — 3 visible tabs (Search/Activity/Messages); 4-chip filter; results screen header fixed; Search tab no longer shows inline carrier list
v1.1.0

Mobile Money as a saved payment method

A fresh TestFlight + Play Internal build — install the new version to pick this up.

  • Add Mobile Money to Payment Methods. Droppers in supported African countries can now save a Mobile Money number ahead of time. It shows up at checkout as a one-tap option, just like a saved card.
  • Country-aware Payments screen. The "Add Mobile Money" entry only appears for users whose country supports Pawapay corridors (CM, CI, GH, KE, NG, SN and others); everyone else still sees the familiar "Add card" flow.
  • Smarter empty state. First-time visitors in MoMo countries see copy that mentions both options instead of card-only language.

Behind the scenes, a new POST /v1/payment-methods/momo endpoint registers the number idempotently (safe to call repeatedly). Saved numbers are unverified until the first successful Pawapay deposit, after which they auto-flip to verified.

This release also bumps the app to Expo SDK 55 and ships a fresh native build, which is why eas update was the right tool for previous releases but not this one — mixed SDK 54/55 native modules had blocked the OTA channel.

v1.0.0+23

Handoff QR codes + venue picker + direct-handoff consent

The biggest update in the lifecycle so far. You can now physically transfer a match between two phones using a QR code.

  • New HandoffCodeCard on every match — shows an 8-character code as both a QR and human-readable text. Use it whether you're handing off direct or through a partner Hub.
  • New venue picker at the moment of acceptance: choose Direct (meet in person) or Hub (drop at a partner shop). The choice is visible to both sides for the rest of the flow.
  • Direct-handoff consent: for higher-value matches, both sides scroll-and-acknowledge a short safety note before confirming a direct meeting. Hub handoffs skip this step.
  • Behind the scenes: 8 partner Hubs in our pilot can now scan codes via the Hub PWA, photograph parcels at intake, and accept or refuse handoffs with structured reasons.