Last updated: 17 July 2026
FlipperHelper Changelog
Public release notes for FlipperHelper, the iOS and Android reselling tracker. First commit on 20 February 2026. Shipped by a solo developer based in London, active weekly, with a full test suite gating every build.
July 2026
17 July — Return dates, flexible “days to sell”, and a customisable Add Item screen (v1.3.0, iOS & Android). You can now mark an item as returnable and set a return deadline — the item list shows how many days you have left, turns red at three days or fewer, and switches to “Too late” once the window closes, so you never miss a shop’s return window on stock that didn’t sell. “Days to sell” can now be measured either from the purchase date or from the date you listed an item, whichever better reflects how you work. The Add Item screen is now yours to shape: a “Customise fields” sheet lets you show only the fields you use — title, market, seller, purchase date, return date — each with a short description, right where you add items, instead of being buried in Settings. Purchase date is now a cleaner date-only picker, and trying to save a haul with no items now explains what a haul is for instead of leaving the Save button greyed out. Fixes: photos taken with the camera are no longer occasionally lost if the phone reclaims memory mid-shot, and the onboarding progress bar no longer overlaps the system status bar (both Android).
12 July — Multiple photos per item. Items can now hold up to 10 photos instead of one — the most-requested change from resellers who wanted to capture the front, back, label, and any flaws of a piece before listing it. Take new photos with the camera or add several from your camera roll at once, and choose which photo is the “main” image shown in your item list. Tap any photo to view it full-screen and zoom in. Every photo’s link is now included when you export to Google Sheets. Photo sync to Google Drive was also made more reliable, so large batches upload without stalling instead of timing out part-way through.
June 2026
20 June — New Zealand Dollar support. NZD (NZ$) is now one of the supported home currencies, bringing the total to six: USD, EUR, GBP, CAD, AUD, and NZD. New Zealand resellers can now set NZD as their home currency, and items bought or sold in NZD convert automatically using the same daily exchange rates as every other currency. The app also picks NZD by default on first launch for iPhones set to a New Zealand region.
April 2026
16 April — iCloud Backup & Restore. Your data is now automatically backed up to iCloud every 5 minutes — enabled by default, works completely offline (iOS syncs when you're back online). Restore from iCloud on the same device or after a fresh install, with a live progress indicator and cancel button if the download is slow. Two independent backup paths now exist: iCloud (automatic) and file export (manual ZIP via share sheet). Google Sheets & Drive export (for desktop analysis) is a separate feature, not a backup. The backup engine was rewritten with a custom ZIP writer that produces reliable archives — the previous system-level ZIP creator could produce files that silently restored as empty. Old backups remain fully compatible. Google Drive export progress (folder IDs, spreadsheet links, sync timestamps) is now preserved when restoring from any backup, so you don't lose your Sheets export setup. The “Backup & Restore” section in Settings is now a single unified section instead of two confusing ones, with clearer labels: “Export to File” and “Import from File” for manual backups. The Google Drive section is renamed to “Google Sheets & Drive” to reflect that it exports both spreadsheets and images.
15 April — Dashboard deep links. The app now registers a custom URL scheme (flipperhelper://) that routes to the Dashboard, Add Item, and Items List screens. Used by the App Store in-app event "Car Boot Season 2026" to jump straight into the right screen.
11 April — Sold button on search results. Requested by a user with ~170 listed items, who pointed out that scrolling a long list to mark a single sale was painful. Search now shows a one-tap sold button on any listed item that hasn't sold yet. Saves a tap-tap-tap.
9 April — Custom dashboard ranges. Before, the dashboard only showed "this month". Now you can pick a custom date range, a specific week, or a specific month — useful for reviewing how a single weekend went, or looking back at March after it ended.
9 April — Dates on entry fees and expenses. If you paid a £5 entry fee on Saturday but only logged it on Sunday, the date used to be wrong. Now you can pick the date when you log any fee or expense. Item costs also show as a separate line in the dashboard summary, so at a glance you can see stock cost vs entry fees, transport, and other expenses.
March 2026
Main theme: UX polish, faster backups, better notifications.
- CSV + GZIP sync — replaced the old JSON export pipeline. Backups are now compressed CSV: smaller files, faster uploads to Google Drive, no backend required. A 100k-item backup round-trips end-to-end.
- Background photo sync — photos keep uploading to Google Drive using iOS background task continuation, even when the app is suspended. Queue is resumed on next launch if interrupted.
- Listing reminder notifications — optional local push reminders for unlisted items. Configurable per day of week and time. No server involved; processed entirely on device.
- Entry fee lifecycle per market — entry fees are now linked to markets. Add a fee once; it auto-suggests for the next visit. Option to disable a market from prompting for entry fees.
- Multi-platform listing flow — list the same item across eBay, Vinted, Depop, Facebook, and others in one pass. Dates and asking prices tracked per platform.
- Device currency on first login — the app now picks your iPhone's region currency by default (GBP, EUR, USD, CAD, AUD, NZD) instead of asking.
- Exchange rates — auto-updated daily, stored for 365 days locally, used for multi-currency profit calculation.
- Data backup and restore — full backup as ZIP archive, including items, markets, sellers, expenses, settings, and photos. Restore works on a fresh install.
- SKU display — tap-to-copy SKU on item details (Crockford Base32 format, e.g.
FH-20D6G0NR). - UX — haptics on delete and save, dropped keyboard on outside tap, scroll to profit after selling, cleanup of new-item state on leave.
- Localization — English as the canonical language; dropped a partial Russian locale that wasn't being maintained.
February 2026 — v1.0 launch
First commit: 20 February 2026. First TestFlight release: 26 February 2026. Initial scope:
- Photo-first item tracking with automatic SKU generation
- 16 listing platforms (eBay, Vinted, Facebook, Depop, Poshmark, Mercari, OfferUp, Craigslist, ThredUp, Etsy, Gumtree, Shpock, Preloved, Nextdoor, Grailed, ShopThing)
- 18 sold platforms (the 16 above plus Car Boot and Sold Offline)
- Markets with optional GPS and radius-based auto-suggestion
- Sellers linked to markets
- Transport expenses by mode (car, bus, train, taxi, van, bike rental)
- Other expenses (packaging, fees, etc.)
- Google Drive integration using the restricted
drive.fileand email OAuth scopes - CSV export that Google Drive auto-converts to a Sheet — no Sheets API required
- Offline-first: fully functional without a network
- iOS 17+ with SwiftUI
- Automatic TestFlight upload on release tag (GitHub Actions + manual code signing)
Testing & QA pipeline
Every release is gated by three layers of automated testing before a TestFlight build goes out.
Swift unit tests
10 test files, 3,424 lines of test code covering the data layer, services, and helpers:
DatabaseTests.swift— SQLite / GRDB queries and migrations (523 lines)DataStoreTests.swift— actor-based DataStore concurrency and persistence (497 lines)StressTests.swift— large-dataset benchmarks (688 lines, see below)ModelTests.swift— Item, Market, Seller, expense models (456 lines)MigrationServiceTests.swift— schema migrations and legacy data imports (333 lines)HelperTests.swift— formatters, currency helpers, utilities (323 lines)ExchangeRateServiceTests.swift— multi-currency rate fetching and caching (192 lines)UUID7Tests.swift— time-ordered UUID v7 generation (165 lines)ExportServiceTests.swift— CSV generation for Google Sheets export (153 lines)SKUGeneratorTests.swift— Crockford Base32 SKU uniqueness and format (94 lines)
Stress tests — 100,000 items
The stress suite loads a generated fixture into the real SQLite database used in production:
- 100,000 items
- 50,000 transport expenses
- 20 markets across multiple currencies
- 50 sellers
- 3 months of purchase history (Jan, Feb, Mar 2026)
Benchmarks on that fixture cover: count-all-items query, fetch-all-item-records, filtered sold-items query, filtered date-range (February) query, monthly aggregation SQL, stats-by-market SQL, CSV export of all 100k items, restore from backup end-to-end, and getMonthlyFinancialSummary through the real DatabaseStore. Each benchmark uses XCTest's measure block so regressions show up as a wall-clock slowdown, not a silent correctness bug. Row counts are asserted after every restore so truncated fixtures fail loudly instead of silently.
Maestro end-to-end tests — 63 flows
FlipperHelper uses Maestro to run UI flows against the simulator. 63 .yaml flow files cover:
- Full item lifecycle: add → list → sell → profit verification
- Multi-currency flows: EUR buy / GBP sell, USD buy / EUR sell, base currency changes
- Payment-method combinations: cash buy / card sell, card buy / cash sell
- Listing on multiple platforms, platform toggles, quick-list icons, unlist / relist
- Selling offline (car boot sales), selling in a different currency, editing a sold item
- Markets: create, edit, delete (with and without items), currency mismatch, GPS geolocation, market currency auto-change
- Sellers: lifecycle, create seller with market, multi-seller per market
- Expenses: entry fees per market, transport (all modes), expense summaries, empty states, edit / delete
- Foreign currency expenses, suggested-amount reuse
- Settings: notifications, platform toggles, edit market, edit seller, danger zone, exchange rates view
- Navigation: all tabs, stress navigation, dashboard stats, long-text edge cases
- Data: full backup flow, rapid item creation, delete item
- App Store screenshot automation (
99_app_store_screenshots.yaml)
Where it's going
For what's being considered next, see the FAQ and the r/flipperhelper subreddit, where shipped changes are announced and requests are collected. If you use FlipperHelper and want something added, the subreddit or email is the fastest way.
Download FlipperHelper on the App StoreGet FlipperHelper on Google Play