Skip to content
Bryce Newell
All work

Solo project · Android app · Live on Google Play

POITracker

Never forget a hidden gem or a breathtaking view again. A travel companion I designed, built and shipped to Google Play on my own.

  • Dart
  • Flutter
  • Riverpod
  • SQLite
  • Firebase
  • Google Maps
  • Kotlin
  • TypeScript
Three phone screens from POITracker: a map of saved places, a place detail with Street View, and a colour-coded list in dark mode.

Three phone screens from POITracker: a map of saved places, a place detail with Street View, and a colour-coded list in dark mode.

Screenshots are from the Google Play listing. Google Play is a trademark of Google LLC.
Platform
Android, on Google Play
Role
Solo developer: design, build and release
Built with
Dart and Flutter, Firebase backend
Status
Live and in active development

In the app

  • POITracker's map view showing saved places as pins around Port Dickson, with collection tabs along the top.

    POITracker's map view showing saved places as pins around Port Dickson, with collection tabs along the top.

    Your places on an interactive Google Map

  • POITracker's list view in light theme with colour-coded category rows and thumbnails.

    POITracker's list view in light theme with colour-coded category rows and thumbnails.

    Colour-coded categories in the list

  • POITracker's list view in dark theme with colour-coded rows.

    POITracker's list view in dark theme with colour-coded rows.

    Light and dark themes throughout

  • A POITracker place detail screen with a Street View panorama, photos section, address, navigate and reminder buttons, and nearby businesses.

    A POITracker place detail screen with a Street View panorama, photos section, address, navigate and reminder buttons, and nearby businesses.

    Street View, photos, reviews and reminders per place

Features

  • 01

    Instant capture

    Save a spot from your GPS in one tap, from typed coordinates or an address, a map long-press or a place search, with duplicate detection before it is saved.

  • 02

    Interactive map

    Browse every place on Google Maps with colour-coded markers, filter by favourites, rating or category, and jump straight into turn-by-turn navigation.

  • 03

    Organise your way

    Unlimited colour-coded categories, custom tags, and collections, including shared collections, plus reusable filter and sort presets.

  • 04

    Photos and Street View

    Attach multiple photos to each place and preview 360° Street View panoramas where they are available.

  • 05

    Reviews and reminders

    Rate and review places, mark favourites, and schedule date-and-time reminders so you remember to revisit them.

  • 06

    Insights dashboard

    Charts of activity by day, weekday, hour and month, category distribution, review trends and location hotspots, filtered by date range.

  • 07

    Backup and portability

    Opt-in cloud sync with recovery snapshots, plus separate encrypted offline export and import for taking your data anywhere.

  • 08

    Private and secure

    Biometric unlock, auto-lock, a security dashboard, granular consent controls, and tools to export or delete your data.

  • 09

    Home-screen widgets

    Native Kotlin quick-save widgets in four sizes, so a place is one tap away from your home screen.

Under the hood

Offline-first, with sync you control

Everything is stored in a local SQLite database, so the whole app works with no signal. Cloud sync is opt-in and runs while the app is open: it covers place metadata only, photos stay on the device, and concurrent edits are surfaced as an explicit keep-device or keep-cloud choice instead of being overwritten. Pro and Lifetime accounts also get up to seven rolling daily recovery snapshots, served by TypeScript Cloud Functions.

Security and privacy by design

Sensitive data is protected with AES-GCM encryption, with keys held in platform secure storage, and exports can be encrypted. The app supports biometric unlock and auto-lock, Firebase App Check, GDPR-style consent controls, and in-app data export and account deletion.

Clean, tested architecture

A feature-first structure with Riverpod state management, repositories for data access and a service layer for business logic. Over 300 automated tests cover models, repositories, services and screens, and a GitHub Actions pipeline runs analysis, tests with coverage, Firestore security-rules tests and the Android App Bundle build.

Subscriptions done properly

Free, Pro and Lifetime tiers are sold through Google Play Billing. Purchases are verified server-side by a Cloud Function, and features are gated through reactive Riverpod providers and tier-aware widgets so access always matches the user's entitlement.

By the numbers and the stack

56k
lines of Dart in the app
300+
automated unit and widget tests
4
quick-save home-screen widget sizes
7
rolling daily recovery snapshots for Pro and Lifetime
  • App

    • Dart
    • Flutter
    • Riverpod
    • Freezed
    • fl_chart
  • Data and sync

    • SQLite (sqflite)
    • Cloud Firestore
    • Secure storage
    • Offline sync queue
  • Backend

    • Firebase Auth
    • Cloud Functions (TypeScript)
    • App Check
    • Crashlytics
    • Analytics
  • Platform and device

    • Google Maps and Street View
    • Geolocation
    • Local notifications
    • Biometrics
    • Kotlin widgets
  • Quality and release

    • flutter_test and Mockito
    • Firestore rules tests
    • GitHub Actions CI
    • Google Play Billing

The story

Building it solo

POITracker is a map-first travel companion for capturing and organising points of interest, from a quick GPS save to a full library of places with photos, reviews, reminders and Street View.

I built it entirely on my own as a personal project, not formal employment: the product design, the Flutter and Dart app, the native Android home-screen widgets in Kotlin, the Firebase backend with TypeScript Cloud Functions, the automated tests and CI pipeline, and the release to Google Play.

Working solo meant owning every trade-off end to end. I kept the app fully usable offline, made sync opt-in and conflict-aware rather than silently overwriting data, kept photos on the device, and treated privacy controls, encrypted exports and subscription gating as part of the architecture instead of an afterthought.

It is live on Google Play and still in active development.