Michael Johnston

Lead developer — web & mobile. Building for web and mobile since 2019, full-time since 2025. I work end to end: mobile app, backend, web front end, deployment and store listing. My degree is in psychology, and it is most of how I approach design — build for the person using it, not for the spec.

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.

Snappled TV

Live · Big-screen companion for the game · Vanilla JS, Firebase Web SDK · 302 lines, no build step

  • Enter a four-character join code in any browser and that screen becomes another client rendering the same Firestore game document the phones already watch. It never advances a round or scores anything.
  • Writes exactly one thing — a display claim — so every client reads a single fact, is there a screen, instead of every phase of the app carrying an unless there's a TV branch.
  • Anonymous auth: the rules require a signed-in caller and a television has no account, so knowing the join code is the access grant.
  • Tile count is a function of viewport width, not user agent, so hardware neither of us anticipated still degrades sensibly.

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.

Before this

Software is the second act. The first one was restaurants — more than a decade of it, floor to management.

The Lazy Goat

Greenville, SC · Server · November 2022 – August 2026

Smoke on the Water

Greenville, SC · Manager, Server · December 2021 – October 2022

MAU at BMW

Greer, SC · Production Associate · July 2021 – November 2021

Graham's Landing

Murrells Inlet, SC · Manager, Bartender, Server · August 2012 – August 2020

  • Eight years at one restaurant — the longest run on this page.

Clemson University

Clemson, SC · BA Psychology, minor in Business Administration · 2007 – 2011

What carried over

  • A restaurant ships every night whether or not you are ready. So does a release.
  • Managing a floor is scheduling, ordering, training and owning the outcome — the same loop as owning a product.
  • A psychology degree turns out to be user research under a different name.