Skip to content

Bio

I build software: apps, websites, CLI tools, automations, whatever the problem needs, and I've been doing it for pay since 2019. I built Burn, a fitness app for an influencer with two million followers that's passed $1.3M in lifetime revenue, and I'm one of two engineers on RIDR, a mountain biking app that hit 4,500+ riders in its first three months. Most days Claude sessions work the tickets in parallel while I QA what comes back, triage bugs, and talk to the people who need the work done.

Featured work

Other work

Other projects, grouped by kind, with links to details, code, and live sites
ProjectDescriptionLinks
paid work
LinkFrontAffiliate app for athletes modeled after Shop LTK, built at Smash Creative as an installable web app. I built the Expo app nearly solo and most of the Laravel API.
Prospect SportsProspect SportsSports-betting PWA for trading players and competing in games, built on contract for a startup. Never finished, and it runs on fake data.Site ↗︎
SmashboardsSmash Creative's project dashboard, joining Asana projects with Harvest time and invoices. I inherited it in 2023 and modernized it: TypeScript, React Query, Clerk auth, Vitest.
Bioworld Merchandising WebsiteSquarespace Developer Platform build for Bioworld Merchandising, with a React timeline by year deployed into the template. Client work, winter 2020 to 2021.
Blitz ReaderBlitz ReaderChrome extension that speed-reads a page's text one word at a time at a chosen words per minute, with the focal letter highlighted. Paid freelance work.
MSNY Company WebsiteMSNY Company WebsiteShowcase site for Media Solutions of New York, a video production company. Paid freelance work.Site ↗︎
side projects
Burn RebuildA ground-up rebuild of Burn on my own time. Never shipped.Read more about Burn Rebuild
Pulsechain to Coin TrackerPulsechain to Coin TrackerConverts Pulsechain explorer exports into the CSV format Coin Tracker imports. The conversion logic is mine; the front end was generated with Replit.Code ↗︎
Minecraft LocationsMinecraft LocationsSaves the coordinates of places in Minecraft so you can find your way back to them, plotted on a map.Site ↗︎
The Brilliance AppThe Brilliance AppCRM, events, inventory, and staff management for the lighting company I worked for. A hobby project, built hoping to modernize its systems.Code ↗︎
tools
Commit AnalyzerCLI that has an LLM label every commit in a repo as a feature, tweak or process change, then writes a CSV and a report. On npm. I used it to build the evidence behind my résumé.Code ↗︎
add-ts-expect-errorts-morph codemod that adds @ts-expect-error above every current type error, for when a tsconfig change surfaces more than one sitting can fix. Built during the V Hub contract.Code ↗︎
airtable-schema-genCLI that generates Zod schemas and a typed accessor for an Airtable base. On npm. Built during the V Hub contract.Code ↗︎
take-homes
PlantifilmPlantifilmMovie dashboard built as a take-home for Plantiful: browse by category, search, and detail pages against their test API.Code ↗︎Site ↗︎
Manatee Ticker AppManatee Ticker AppStock quote lookup built as a take-home: a React front end on a tRPC API, with Cypress tests.Code ↗︎Site ↗︎
coursework
Rock The VoteRock The VoteReddit-style voting on political issues, with accounts and comments. A V School assignment on the MERN stack.Code ↗︎
Crypto RankingsCrypto RankingsRanks cryptocurrencies by market cap from the Nomics API, with favorites and coin detail pages. A V School assignment.Code ↗︎Site ↗︎
Zen GardenZen GardenA responsive clone of the CSS Zen Garden home page, built at V School to practice HTML and CSS.Code ↗︎
Get BusyGet BusyFind and attend events near you, in the spirit of Meetup and Eventbrite. A General Assembly group project.Code ↗︎Site ↗︎
Food LogFood LogNutrition tracker that logs meals through Nutritionix's natural-language API. Built at General Assembly, for web and mobile from one codebase.Code ↗︎Site ↗︎

Capabilities

Mobile

Growth & support SDKs

One init layer for Mixpanel, AppsFlyer, GrowthBook flags, Intercom, Smartlook, Referral Factory, and App Tracking Transparency.

Media pipelines

Cached exercise video with background audio, image capture and sharing, right-sized thumbnails, and S3 uploads with signed URLs.

Native modules & build config

Expo config plugins, EAS build hooks, and dev-client versus Expo Go targeting across four build profiles.

Platform upgrades & migrations

Three Expo SDK upgrades with React Native 0.74 to 0.76, RevenueCat SDK 4, gluestack v0 to v1, and moment to dayjs across a monorepo.

Push notifications & deep linking

Expo push with Intercom, AppsFlyer OneLink deep links, and push-tap navigation that queues during a live ride.

PWA delivery

An Expo Router app built as an installable web app with Progressier, an add-to-home-screen gate, and a Metro web export.

Ride recording & GPS resilience

Idempotent uploads keyed by a client id, crash recovery from snapshots, stationary-drift gating, and a no-GPS watchdog.

Subscriptions & in-app purchases

RevenueCat paywalls and entitlements on iOS and Android, StoreKit test configs, and RevenueCat webhooks on the server.

Front end

Admin dashboards & internal tools

A Rails CRM, an Asana and Harvest dashboard, a student DataTable, and map review tooling for trail imports.

Chrome extension development

A Manifest V2 speed reader that walks the page DOM and streams one word at a time into an overlay.

Client & marketing sites

React brochure sites deployed to Surge, a Squarespace Developer Platform template with an embedded React timeline, and Astro sites for the family studio.

Data visualization

Victory charts behind date and brand filters, Nivo budget charts replacing react-vis, Recharts on web admin.

Payments & checkout

Authorize.net card charges with client-side validation and Jotform registration for a $300-a-ticket event, and RevenueCat on mobile.

Web performance

Lighthouse-driven: this site's First Load JS from 171 to 110 kB, ISR instead of force-dynamic, purged CSS and subset fonts on static sites.

Back end

Auth & sessions

Better Auth, SuperTokens, Clerk, Firebase Auth, and Sanctum, plus hand-rolled JWT sessions and account migration between providers.

Bulk import, ETL & sync

OpenStreetMap trails at country scale, Awin affiliate feeds into Laravel, Airtable to Firestore sync, and CSV converters with tests.

Caching & performance work

A Firebase cache with a 24-hour TTL in front of Notion, batched Harvest calls under a rate limit, and bounded Convex reads for a country-scale map.

Content modeling & CMS migration

Sanity schemas and GROQ, a zero-downtime Strapi to Sanity migration through a dual Prisma schema, and Decap for a client site.

Database operations & backups

Backup and restore scripts per environment, hourly backups from CI, and proxied access to production Postgres.

Email & transactional messaging

SendGrid campaigns driven from Airtable scripts, Resend invites, and React Email templates sent over SMTP.

Geospatial

OpenStreetMap trail import, elevation from terrain tiles, ride-to-trail matching, and a versioned map dataset served from a CDN.

Progression, gamification & challenge engines

Goal-based workout progression for Burn, and a typed challenge task evaluator with XP, streaks, and QR tasks for RIDR.

Real-time data modeling

Convex schemas, migrations, crons, and workflows, kept backward compatible with the app already in the stores.

Relational data modeling & migrations

Schema design and migrations in Rails, Prisma, Drizzle, and Convex, with seeds for every environment.

Third-party API integration

Google Calendar two-way sync, Asana and Harvest joined by project code, Notion, Airtable, Awin, Jotform, Apify, Figma, Linear, and ClickUp.

Typed API design

tRPC with Zod validation over Express, Prisma or Drizzle on Postgres, with trpc-panel for exploration.

Webhook-driven automation & retention

RevenueCat webhooks into Postgres, hourly jobs behind a Redis lock, and Scribeless letters to users who convert or churn.

Ship & verify

Agentic delivery pipeline

A ticket orchestrator on Sandcastle and ClickUp, pooled git worktrees, and board status driven from CI.

CI/CD pipelines

GitHub Actions and GitLab CI: tag-driven staging and production, quality gates that block deploys, and Slack alerts on failure.

Containers, hosting & infrastructure

Docker and Fly.io deploys, Terraform for Fly, and hosting on Heroku, Vercel, DigitalOcean, and shared hosts over rsync.

Mobile release engineering

EAS builds, OTA updates, and staged native releases driven from CI.

Observability

Sentry with source maps on mobile, web, and Node, plus PostHog events, insights, and alerts.

Secrets & environment management

Doppler per environment on every Smash repo, the 1Password CLI for scripts, and secrets pushed into EAS.

Testing

Vitest and convex-test on the backend, Cypress and Maestro end to end, Jest and supertest on APIs.

Tools

Agent & MCP tooling

A published MCP server, agent CLIs, and Claude Code wired into CI.

CLI tools & npm publishing

commit-analyzer and airtable-schema-gen on npm, a ts-morph codemod, and an MCP server for Figma comments.

Code quality tooling & codemods

PHPStan and Rector pipelines, a ts-morph codemod, and lint, format, and type gates on every pull request.

LLM API integration

Small tools on the OpenAI and Anthropic APIs: commit labeling, Figma frames to Linear issues, an LLM file organizer, Whisper transcription.

Monorepo tooling

Lerna and Yarn workspaces since 2018, an Nx monorepo on Nx Cloud, Turborepo with pnpm catalogs, and layer-boundary linting.

Other

Home automation scripting

Home Assistant automations, scripts, and dashboards kept in git, and a Philips Hue library for Scriptable driven from Siri Shortcuts.

Stack

About

I got into software trying to build myself an Ironman-inspired personal trainer: a home-gym tracker in Excel that told me exactly what to do each session, progressive overload automated in spreadsheet formulas, all before I knew anything about real programming. Chasing that led me to General Assembly's Web Development Immersive. I was done with lighting production and wanted work I could do from anywhere.

It took two more years to land the first job. In between came paid freelance work (the MSNY site, a speed-reading Chrome extension) and a CRM I built to try to modernize the lighting company's systems. Since then I've worked inside product teams and directly with clients, mostly on React and React Native codebases, usually across the whole stack rather than one slice of it.

These days I'm one of two engineers on RIDR, and on the side I take on website work through Benzinger Media, my family's web studio. I work remotely from Thailand. If you're hiring a senior full-stack engineer, or have a project that needs one for a while, my email's below.

Get in touchsteve.rodri91@gmail.com
GitHub ↗︎LinkedIn ↗︎© 2026 steve rodriguez