Adam Liscia

Full-stack engineer · New York

I build and ship production software. Nerd Leagues is a competitive gaming platform I co-founded and wrote the backend for — Flask and MySQL on AWS, with a React Native app on both app stores. This is its signup curve. Nerd Leagues TV is the second one, and I took that one from empty repo to live site alone.

Nerd Leagues · registered users · May 2024 – Sep 2026

What I've built

Nerd Leagues

Co-founder & full-stack engineer
Dec 2023 – present
nerdleagues.com

  • Python
  • Flask
  • MySQL
  • React Native
  • Expo
  • AWS
  • Socket.IO
  • Anthropic API

A competitive platform for Magic: The Gathering players — league management, ELO ratings, a deck builder, card search, and a set of public analysis tools. I build the Flask backend and the MySQL schema alongside one other engineer, across 98 merged pull requests.

The mobile app is entirely mine — every commit. 44,000 lines of TypeScript across 37 screens, on the App Store and Google Play, with its own Node and Express API that I wrote and deployed to EC2: sign-in with Apple and Google, push notifications, S3 uploads, and a Socket.IO connection that keeps a game in sync with the players on the web.

619users
1,230decks
514games
144articles

The work I'm proudest of is unglamorous. I cut deck-analysis latency from 11 seconds to 25 milliseconds by replacing per-request calls to a third-party API with materialized lookup tables and a seven-day cache — which is what made it viable to take a logged-in-only tool and put it on the public, indexed side of the site.

More recently I built the content pipeline on Anthropic's API: structured JSON output, server-side link validation against a live inventory of every real path on the site, and fail-open degradation so an API outage costs a feature and never a user action.

Nerd Leagues TV

Solo — design to deployment
Jul 2026 – present
nerdleagues.tv

  • Python
  • Flask
  • React
  • Vite
  • MySQL
  • AWS RDS
  • nginx
  • Anthropic API

A curated TV network for tabletop gaming. Hand-picked Twitch and YouTube creators across six games, aggregated into one player you never leave — you change the channel, not the page. Official embeds only, no rehosting.

223creators
3,466videos
6networks
24days to live

I built and deployed this one alone, and the deployment is the part I'd point at. It runs on a 2 GB box that was already hosting three other services — so the systemd unit is capped at 300 MB, because a new site should never be able to take down an existing one. Gunicorn is pinned to a single worker for a reason that's written down next to the setting.

Before it went public I found that the admin authorization check keyed off an environment variable that defaults to development. One missing line in a production config file would have left thirty destructive endpoints open. I rebuilt the check and verified all nine authorization cases against both local and proxied request shapes.

Ingestion is built around somebody else's rate limit. YouTube's search endpoint costs 100 quota units a call, so I don't use it — a full audience sync across 240 channels costs 3 units and runs in 17 seconds. Every video is classified by Claude against a per-game vocabulary, with a fallback path for when the API isn't there.

BarCraft

Solo — every commit
Jun 2025 – present
On the iOS App Store

  • FastAPI
  • SQLAlchemy
  • Alembic
  • TypeScript
  • Expo
  • MySQL
  • OpenAPI
  • pytest

A cocktail spec app for working bartenders — look up a spec, save your own, batch it. Published to the iOS App Store, from a single Expo codebase that also targets web and Android, against a FastAPI backend — with the API client generated from OpenAPI so the two can't drift apart.

300tests passing
20migrations
65decisions logged
4apps, one repo

The interesting problem is ownership. A shared canonical library that every user can edit, without duplicating it per user: editing a classic forks it copy-on-write, resetting deletes the fork, and all of that logic is server-authoritative rather than trusted to the client.

The batch calculator is the part I use at work. It's a pure, unit-tested TypeScript package shared by all three clients — I run the batch cocktail program at a Relais & Châteaux property, and this is that math, written down.

Partway through I moved the production database from PostgreSQL to MySQL — driver, models, migrations and a data-migration script, then redeployed behind TLS. The 300 tests are the reason that was a decision rather than a gamble.

What I work in

Languages
Python, JavaScript, TypeScript, SQL
Backend
Flask, FastAPI, Node, Express, SQLAlchemy, Pydantic, REST, OpenAPI, WebSockets
Frontend & mobile
React Native, Expo, Jinja2, Tailwind
Data
MySQL, PostgreSQL, query optimization, ETL and rollup pipelines
AI
Anthropic API, structured output, LLM classification pipelines
Infrastructure
AWS EC2, RDS and S3, nginx, gunicorn, systemd, TLS, Cloudflare, Git

Before this

I studied mathematics at Stony Brook and spent seven years teaching it — geometry and statistics for the NYC Department of Education, then curriculum design for homeschooled students, where I also taught Python. Around a hundred private students along the way, from pre-algebra to Calculus II.

I've bartended the whole time, and still do. It's why BarCraft exists, and it's where I learned that a system nobody can run under pressure isn't finished.

  • B.S. Mathematics, Stony Brook University
  • Mathematics teacher, NYC Department of Education
  • Data Science Immersive, Flatiron School
  • Math & Python teacher, School for Young Performers
  • Nerd Leagues, then BarCraft and Nerd Leagues TV

Get in touch

I'm looking for engineering work, remote or around New York.

Backend, full-stack, or anything where shipping the whole thing is the job. The fastest way to reach me is email.