Michael Johnston

Mobile & full-stack developer. I build and ship apps on my own: app, backend, web, store listing. One live on the App Store and Google Play, a second in closed beta.

Get in touch

Stack

Mobile
React Native 0.83, Expo 55, EAS Build and Update, Reanimated, vision-camera, Apple and Google Sign-In
Backend
Firebase Auth, Firestore with security rules and composite indexes, Cloud Functions, Storage, FCM
Web
Next.js 15, TypeScript, React 19, Tailwind v4, Vercel, Firebase Hosting
Python
pandas, NumPy, yfinance, Alpaca
Shipping
App Store and Play review, Data Safety, TestFlight, universal links and App Links, Git

Work

Yo GVL

App Store & Google Play · Community event app · React Native, Firebase · 255 commits · 86k lines

  • Events end to end: create, edit, cancel, templates, recurrence, guest lists, co-hosts, private events.
  • 26 Cloud Functions, 6.2k lines, behind every notification: invites, RSVPs, comments, follows, scheduled reminders, cleanup.
  • QR invite deep links on verified universal links and App Links.
  • Follow graph, host profiles, interest matching, per-event message boards.

Snappled

TestFlight & Play beta · Video party game · React Native, Firebase · 222 commits · 35k lines

  • Answer a prompt in ten seconds of video. The crowd votes, the votes decide the round.
  • In-app capture with vision-camera, client-side compression, expo-video feed.
  • Round engine in four explicit phases: prompt, record, vote, results.
  • Saved clips persist. Everything else is deleted when its prompt expires.

Yo GVL Web

Live · Companion dashboard · Next.js 15, TypeScript, Tailwind v4 · 11.5k lines

  • Same Firestore as the mobile app, so there is no second API tier to keep in sync.
  • App Router route groups, client islands for interactive views, firebase-admin routes for privileged work.

Tracker

Direct download · Personal tracker · React Native, Firebase · 56 commits in 3 days · 6.9k lines

  • Everything is a node. Children, a goal, a tick, a count are optional fields rather than types, so one node can be a folder, a timer and a repeating task at once.
  • Local-first. Timers store an absolute start time, so elapsed time is recomputed and survives a reboot.
  • Firestore sync for shared lists: email invites, membership records, collection-group recovery.

stock-alerts

Source · Screening toolkit · Python, pandas, NumPy, yfinance / Alpaca · 15.2k lines

  • Screens ~500 tickers: indicators, signals, adaptive thresholds, scoring, sector rotation, retrospective grading of earlier picks.
  • suggest_levels reads buy levels off raw OHLCV, from consolidation shelves, pivot lows, unfilled gaps and projected rising MAs, ranked by confluence.
  • fill_levels builds four-rung entry ladders spaced to each stock's own volatility, never overwriting hand-set levels.
  • rate_stocks, the interactive pass: resumable, with muting, snoozing and staleness-driven re-rating.

bigvibestudios.com

Live · Studio site and build catalog · Firebase Hosting

  • Landing pages, direct downloads for the builds that are not on a store, beta-access forms.
  • Serves the .well-known deep-link files and the legal pages both stores require.