Marcus Sakoda
00 — Cover
Senior Frontend Engineer Elk Grove, CA Open to remote

Eight years of interfaces, built on an illustration degree.

Angular is where I go deepest. React is where I build most now. Either way the work I care about is the part users actually feel: loading states, race conditions, keyboard paths, and what happens the moment the network drops.

01 — Selected work

Selected work

Three projects

Each of these shipped and runs somewhere you can click. The note in the margin is the decision I would want to talk about first.

Bogey Run

Live

A roguelike golf game that runs entirely in the browser.

Runs are seeded, so the same seed produces the same course and the same shot physics every time. That made the whole thing testable: I can replay a broken run instead of trying to reproduce it by hand. Run state and round state are kept in separate Zustand slices, which is what made save and resume fall out for free rather than becoming its own feature.

Next.jsReactTypeScriptZustandTailwindGitHub Pages

Seeded RNG plus split state. Replay a bug instead of hunting it.

Focused Reader

Live

An EPUB speed reader that works with the network off.

Unpacks EPUB archives in the browser with JSZip and keeps them in IndexedDB, so a book is parsed once and opens instantly after that. Three display modes: single word, stream, and follow. Text to speech chunks by sentence rather than by DOM node, which is what stopped playback stalling every time it hit a markup boundary. Firebase handles sign in and a Firestore devices map syncs reading position across machines.

JSZipIndexedDBFirebase AuthFirestoreWeb Speech API

Chunk by sentence, not by node. Node boundaries were the whole bug.

Fleet Dashboard

Live

An endpoint monitoring dashboard, built in a day.

A virtualized device list on top of TanStack Query v5. Polling shuts off once a device reaches a terminal state instead of running forever, and actions apply optimistically with rollback when the server disagrees. I built it fast to have something concrete to point at, and it ended up being the clearest example I have of how I think about a data layer.

Next.jsTanStack Query v5TypeScriptVirtualization

Polling that knows when to stop. Terminal states end the loop.

02 — Also built

Also built

No demo, still worth reading

Tools I wrote for myself. They are not clickable, so they get a paragraph instead of a screenshot.

Job alert daemon

Node service that scrapes listings on a thirty minute cron, writes them to SQLite through node:sqlite, and emails new matches through Resend. Exponential backoff on 429s and a PID lock so a second instance can never start.

NodeSQLitenode-cronResend

RxJS pattern set

Worked implementations of the patterns that come up in interviews and in real code: typeahead with debounce and switchMap, infinite scroll on scan and exhaustMap, pagination through combineLatest, and race condition guards.

RxJSTypeScript

Async React curriculum

A set of lessons I wrote while working through effect cleanup, AbortController, stale writes, state machines, caching, and retry. Written to be handed to someone else, which is the part that made me learn it properly.

ReactTypeScript
03 — The other half

The other half

BFA, Academy of Art University

I have a BFA in illustration and I still take caricature work. It is not a curiosity at the bottom of the resume. Spacing, hierarchy, edge control, and knowing when something is finished are the same judgment in both jobs, and I got them here first.

04 — Contact

Looking for a senior frontend team that ships.

Remote preferred. Happy to talk through any of the above in detail, including the parts that did not work the first time.