Writing
Notes from the codebase.
Things I learn while shipping apps — Flutter patterns, architecture decisions, and the small details that are easy to get wrong.

Mapbox vs Google Maps in Flutter (and Where flutter_map Fits)
Mapbox vs Google Maps in Flutter, plus flutter_map with OpenStreetMap: styling, offline maps, markers at scale, pricing models and keeping your API keys locked down.
Read article →
Upgrading Flutter Projects Without Pain: My Step-by-Step Routine
How I approach upgrading Flutter projects: SDK, packages, Gradle, AGP, Kotlin, CocoaPods and Xcode, one change per commit, with CI catching what I miss.
Read article →
The Flutter Widget Lifecycle Explained: initState to dispose
The Flutter widget lifecycle explained step by step: initState, didChangeDependencies, didUpdateWidget, setState, dispose, the mounted check and common bugs.
Read article →
Generating PDFs and Invoices in Flutter with the pdf Package
How to generate PDFs and invoices in Flutter: the pdf package, embedded fonts, line-item tables, printing and sharing, money formatting, and when to use the server.
Read article →
Accessibility in Flutter Apps: Semantics, Text Scaling and Automated Checks
A practical guide to accessibility in Flutter apps: Semantics labels, tap target sizes, text scaling, contrast, focus order, screen reader testing and guideline tests.
Read article →
Rewriting a Native App in Flutter: Lessons from a Full Migration
What I learned rewriting a production native app as a single Flutter codebase — when a rewrite makes sense, how to plan it, and the mistakes that cost the most time.
Read article →
Flutter Localization in Practice: ARB Files, Plurals, RTL and Runtime Switching
Flutter localization in practice with gen-l10n: ARB files, placeholders, ICU plurals and select, dates and numbers with intl, RTL layouts and runtime locale switching.
Read article →
Feature Flags and Forced Updates in Mobile Apps: Shipping Without Fear
How I use feature flags and forced updates in mobile apps: remote config, kill switches, staged rollouts, minimum versions, in-app updates and API versioning.
Read article →
Taking Over an Existing Flutter App: How I Stabilize an Inherited Codebase
My step-by-step process for inheriting a Flutter app from another developer — auditing, upgrading dependencies, fixing crashes first and shipping improvements without breaking what works.
Read article →
Stripe Subscriptions and Invoicing with .NET: A Backend Guide
Building Stripe subscriptions and invoicing with .NET and Stripe.net: products, prices, Checkout, webhooks with signature checks, idempotency and the customer portal.
Read article →
Keys in Flutter Explained: ValueKey, ObjectKey, UniqueKey and GlobalKey
Keys in Flutter explained with real bugs: how the element tree matches widgets, when to use ValueKey, ObjectKey, UniqueKey, GlobalKey and PageStorageKey.
Read article →
Working With a Remote Freelance Developer: How to Make It Work
How to work with a remote freelance developer: time-zone overlap, async updates, written acceptance criteria, weekly test builds, owning your accounts and clean handover.
Read article →