Pete Watters

Pete Watters

Writing

  • Dec 2025

    Sharing Code Between a Browser Extension and React Native App

    How we refactored Leather's activity feed into a platform-agnostic features package — sharing queries, types, and business logic across extension and mobile.

    • typescript
    • react-native
    • monorepo
    • architecture
    • leather
  • Feb 2025

    Branded Types for Bitcoin Addresses

    How adding a branded type for BTC addresses caught bugs at compile time and made the send flow safer in Leather's mobile wallet.

    • typescript
    • bitcoin
    • mobile
    • leather
  • Sept 2024

    From Web Components to Native: Shipping a Cross-Platform UI Library

    How we extended a web-first React UI library to support React Native, built components bottom-up, and shipped the first production mobile screen from shared packages.

    • react-native
    • typescript
    • design-systems
    • monorepo
    • mobile
  • Aug 2024

    Three Iterations to Get Container Architecture Right

    How Leather's browser extension went from a global container system to composable page-level headers — across 468 files and two major refactors.

    • typescript
    • architecture
    • browser-extensions
    • leather
  • Oct 2023

    Mnemonic Validation with @scure/bip39

    Adding real-time word validation to a 12/24-word seed phrase input — consolidating BIP39 libraries and catching typos before they cost someone their wallet.

    • typescript
    • bitcoin
    • security
    • leather
  • Dec 2025

    Shipping a 5,000-Line PR Without Losing Your Mind

    Lessons from shipping massive pull requests on a crypto wallet — including a 5,783-addition PR that refactored collectibles across a monorepo.

    • open-source
    • code-review
    • process
    • leather
  • Dec 2025

    Sharing Features Between React Native and a Browser Extension in a Monorepo

    My first monorepo, two rendering targets, one shared feature layer

    • code
  • Nov 2025

    Building a Multi-Protocol NFT Gallery for a Bitcoin Wallet

    Supporting Ordinal Inscriptions, SIP-9 NFTs, Bitcoin Stamps, and BNS Names in a single collectibles experience

    • code
  • Aug 2025

    Personalising Your App with Alternate Icons

    How we implemented 11 app icon options using expo-alternate-app-icons

    • code
  • Jul 2025

    OTA Updates for Financial Apps

    Balancing speed with security using EAS Update for a production crypto wallet

    • code
  • Jul 2025

    Building a Multi-Chain Wallet UI with React Native

    Managing Bitcoin and Stacks in a unified interface with chain-specific balance, send, and receive flows

    • code
  • Jun 2025

    Secure Storage & Biometrics in a Crypto Wallet

    How we protect seed phrases with expo-secure-store and expo-local-authentication

    • code
  • Jun 2025

    Designing a Mobile Deep Link Flow for iOS

    Setting up Apple Universal Links for a React Native crypto wallet — associated domains, entitlements, and the apple-app-site-association file.

    • react-native
    • ios
    • mobile
    • leather
  • Jun 2025

    How We Cut Our Mobile CI Time by 70% with Expo and EAS

    Fingerprinting, EAS Workflows, and Maestro E2E tests for a production crypto wallet

    • code
  • Jan 2025

    The Six-Line Fix: UTXO Consolidation at the Barcelona Offsite

    Sometimes the best code is the code you delete. +6/-10 lines, merged same day.

    • code
  • Dec 2024

    Shipping a Crypto Wallet Mobile App From Scratch (As a React Native Newcomer)

    From zero React Native experience to App Store in 3 months, launching at BTC Vegas

    • code
  • Nov 2024

    FlashList vs FlatList in a Crypto Wallet

    How switching from FlatList to FlashList cut dropped frames and improved scroll performance in Leather's React Native token list.

    • react-native
    • performance
    • mobile
    • leather
  • Sept 2024

    Adding a Hide Balance Feature to a Crypto Wallet

    A privacy feature that touches every balance display in the app — and why the implementation is simpler than you'd think.

    • open-source
    • react
    • ux
    • leather
  • Jul 2024

    Filtering Spam Tokens in a Crypto Wallet

    How we built and evolved a spam filter for token names, symbols and transactions in Leather — from a URL regex to a generic sanitiser across the whole UI.

    • typescript
    • security
    • bitcoin
    • leather
  • Jun 2024

    Building an Installable UI Library from a Production App

    How I extracted 20+ React components from a crypto wallet browser extension into a published, versioned UI library — and then integrated it back.

    • open-source
    • react
    • design-system
    • leather
  • May 2024

    Creating a Panda CSS Preset for a Design System

    How I extracted a wallet extension's theme configuration into a reusable Panda CSS preset package — consolidating tokens, recipes, and semantic styles into a single installable dependency.

    • open-source
    • css
    • design-system
    • leather
  • May 2024

    Displaying Correct Amounts for Legacy UTXOs on Ledger

    A small but critical fix for hardware wallet users — ensuring nonWitnessUtxo transactions display the right amount before signing.

    • open-source
    • crypto
    • bitcoin
    • leather
  • Nov 2023

    Migrating a Design System: Stacks UI to Panda CSS

    Incrementally removing a design system across 500+ files in a production crypto wallet

    • code
  • Nov 2023

    Designing a Monorepo for a Browser Extension and Mobile App

    How I set up and designed the monorepo architecture for Leather wallet — consolidating a browser extension, mobile app, and shared packages into a single repository with automated publishing.

    • open-source
    • monorepo
    • devops
    • leather
  • Oct 2023

    Fixing Modal Routing in a React Browser Extension

    How I refactored overlay modal routing in a browser extension to properly handle background content, direct navigation, and nested route state.

    • open-source
    • react
    • react-router
    • leather
  • Jun 2023

    Migrating Colour Tokens from Brown to Ink

    How we renamed an entire design token vocabulary during Leather's rebrand — and why semantic naming matters more than you think.

    • design-systems
    • css
    • leather
  • Apr 2023

    Making Ethereum Transactions Human-Readable

    Raw blockchain transactions are incomprehensible to most users. Here's how you decode them into something meaningful — and why it matters for crypto UX.

    • code
  • Mar 2022

    Building Coderunner: A Trading Automation Tool at Cryptowatch

    Taking over a prototype and shipping an MVP for custom Python trading scripts at Kraken's Cryptowatch

    • code
  • Jun 2021

    Building the Cryptowatch Cockpit Portfolio Table

    Creating a real-time portfolio management table and trading UI components for Kraken's Cryptowatch platform

    • code
  • Nov 2014

    Evaluating JavaScript Frameworks at Fidelity Investments in 2014

    A look back at evaluating Ember.js vs Backbone/Marionette for enterprise financial applications — and what it taught me about making technology decisions that stick.

    • code
  • Jun 2012

    My First Real Web Application: Building a Telco Monitoring Tool in 2012

    Before React, before frameworks, before crypto — I built an internal monitoring tool at The Now Factory using Java, jQuery, HighCharts, and the Google Visualisation API.

    • code
  • Sept 2010

    My Master's Thesis: Building an Academic Performance Analysis Tool in 2010

    Highlights from my MEng thesis at DCU — a Java web application that used HighCharts, the Google Visualisation API, and linear regression to analyse student academic data.

    • code