// available for new work · based remote
<James>
const roles = ['engineer', 'writer', 'product_minded'];

I build, ship, and deliver what matters.

Full-stack engineer who moves fluently between architecture, content, and delivery — turning messy problems into production software. Currently building side apps that people actually use.

</Hankins>
// currently
shipping
Survivor Fantasy League, season 50
writing
The UnOfficial — NBA through May
reading
Shape Up, Ryan Singer
about

Engineering is half the job. Shipping the right thing is the other half.

I'm a full-stack engineer who started out wanting to build the apps I wished existed — a fantasy league for Survivor, a blog that sounds like my group chat, a passport for drinking pints. I kept building them, one at a time, until the pattern clicked: good product is what happens when engineering, writing, and delivery all point the same direction.

So that's how I work. I design data models that make the product feel fast. I write copy that makes features explain themselves. I cut scope when shipping beats perfecting — and I document the why, so the next person (usually future me) doesn't have to guess.

Currently shipping side projects around Next.js + Firebase, writing at The UnOfficial, and always up for a conversation about how to take something from “rough sketch” to “live and used.”

// me.ts

export const me = {

name: 'James Hankins',

pronouns: 'he/him',

location: 'Remote, US',

status: 'available',

roles: ['engineer', 'writer', 'product_minded'],

focus: 'ideas → production',

};

// stats.ts

apps_shipped:
6
case_studies:
2
disciplines:
3
how_i_ship

Six beliefs I bring to every project.

These aren't rules. They're defaults — what I reach for when a decision is still wet. Half came from shipping things that worked; the other half from shipping things that didn't.

  1. 01// principle.1

    Ship the rough thing, then polish in daylight.

    A real draft in users' hands beats a perfect idea in my head. I cut scope to get to feedback, then iterate from what I see, not what I predicted.

  2. 02// principle.2

    Models before UI — good schemas make features cheap.

    The fastest product work I do starts with data. If the shape is right, the UI almost writes itself. If it's wrong, every screen costs more than the last.

  3. 03// principle.3

    Auth is easy; authorization is the product.

    Who can do what — and when — is where real software gets built. Role models, permission boundaries, and invite flows are where the craft lives.

  4. 04// principle.4

    Admin tooling is product stability.

    Every live product needs a way to fix what the UX didn't prevent. Commissioner tools, overrides, and transparency aren't cleanup — they're part of day-one scope.

  5. 05// principle.5

    Write it down, even if it's just for future me.

    Case studies, READMEs, decision notes. If a choice mattered, the reason should outlive the conversation it happened in.

  6. 06// principle.6

    Cut scope; keep the stakes.

    Trimming features is easy. Trimming the thing that makes users care is a mistake. Every cut should keep the story of the product intact.

projects

Apps I built end-to-end.

Side projects I designed, built, and shipped solo — each one a full loop from idea to production.

The UnOfficial screenshot
featured

// flagship

The UnOfficial

An NBA fan blog and publishing platform with a full CMS — multi-writer auth, draft workflows, and a voice that sounds like your group chat.

Next.jsFirebaseCMSAuth
Survivor Fantasy League screenshot

Survivor Fantasy League

A fantasy league app for CBS Survivor — draft contestants, track scores in real time, and compete across leagues all season long.

Next.jsFirebaseReact
Apex Trader screenshot

Apex Trader

A trading dashboard for monitoring markets, tracking positions, and analyzing performance with real-time data visualizations.

ReactData VizFinance
Guinness Passport screenshot

Guinness Passport

A beer diary app for logging, rating, and tracking your Guinness journey across pubs and cities around the world.

ReactNext.jsFirebase
The Pity Tour screenshot

The Pity Tour

An event and tour tracker app — follow live tours, browse upcoming dates, and keep tabs on your favorite acts.

ReactNext.jsEvents
FitForge screenshot

FitForge

A fitness dashboard for planning workouts, tracking progress, and visualizing gains over time.

ReactNext.jsFirebase
timeline

How the three threads came together.

Engineering came first. Writing showed up when I wanted to explain what I built. Product is what happens when both try to talk to a user at the same time.

  1. 2026ship

    Survivor Fantasy League v2

    Scaling a home-grown fantasy league into a multi-league platform — real-time scoring, Google sign-in, and a foundation for season-over-season archives. First multi-league season lines up with Survivor 50.

  2. 2025build

    A year of side apps

    Shipped Apex Trader, FitForge, Guinness Passport, and The Pity Tour back-to-back. Each one a full loop from sketch → schema → UI → live. The pattern that made them possible: reusing Next.js + Firebase as a personal platform.

  3. 2024write

    The UnOfficial launches

    A CMS-backed NBA blog with multi-writer auth, invite codes, and a draft → publish → unpublish lifecycle. Started as a home for my own writing, grew into a small publishing platform with role-based access.

  4. earlierlife

    Pre-portfolio chapters

    Engineering work, product collaborations, and the slow realization that I liked the delivery side of software as much as the building side. (More here soon — this site grows with the story.)

stack

How I build, in words and imports.

The tools I reach for, the things I'm shipping right now, and what I'm learning next. No percentages — just an honest read.

// stack.ts — tools I reach for first

import { React, Nextjs, TypeScript, TailwindCSS } from 'frontend';
import { Nodejs, Express, PostgreSQL, GraphQL } from 'backend';
import { Git, Docker, AWS, Vercel } from 'tools';// + the open web

// building

Shipping

  • Multi-league Survivor Fantasy (season 50 launch)
  • The UnOfficial CMS v2 — scheduled posts & RSS
  • Small-scale AI-assisted scoring workflows

// learning

Exploring

  • Edge-first data patterns (Firestore → Turso)
  • Durable workflows with queues & retries
  • AI evals / product-grade LLM plumbing

// thinking about

Reading

  • Shape Up and appetite-based planning
  • Platform vs. product tradeoffs
  • Writing for readers who can leave
contact

Have something to build? Let's talk.

Whether it's a product idea, a writing collab, or a technical puzzle worth chewing on — the inbox is open. I try to reply within a day or two.

// fastest channels

Email

Hankins.JamesB@gmail.com

LinkedIn

@james-hankins

GitHub

@JamesHankinsDev

// tip: ⌘ K opens the command palette

// send a note

POST /contact