Software Engineer — Web Developer — UI/UX Designer

Howdy, I'm
Jackson Schacher

Full-Stack Engineer

Full-stack software engineer with 6+ years building, deploying, and scaling production web applications. Strong in React/Next.js, distributed API design, and AWS cloud architecture — owning systems end-to-end across performance, reliability, observability, and long-term maintainability. Daily practitioner of AI coding agents to accelerate delivery.

6+
Years Experience
3
Certifications
3+
Shipped Projects
Jackson Schacher
01

Core Expertise

Front-End Development

6+ years

Crafting fast, responsive, and accessible interfaces with TypeScript, React, and Next.js, plus Vue and Angular. Focused on performance, usability, and cross-browser reliability.

Back-End Development

5+ years

Building scalable APIs and server-side systems with Node.js, Python, and .NET. Engineering REST and GraphQL integrations across distributed services, with PostgreSQL and MongoDB modeling, SQL optimization, and caching under load.

Cloud & DevOps

5+ years

Designing AWS infrastructure for distributed workloads, background processing, and scalable API services. Experienced with Terraform, Docker, CI/CD pipelines, and production monitoring.

Software Architecture

3+ years

Architecting maintainable, scalable systems and owning them end-to-end — performance, reliability, observability, and long-term maintainability. Comfortable evaluating trade-offs and guiding technical direction across teams.

UI/UX Design

6+ years

Designing intuitive, user-centered experiences using Figma and Adobe Creative Suite. Skilled in research, wireframing, prototyping, and usability testing to deliver clean, thoughtful interfaces.

AI-Accelerated Development

1+ years

Shipping with Claude Code, Copilot, and Cursor as part of the daily workflow, plus custom LLM agents and MCP integrations to speed delivery, raise test coverage, and automate documentation.

02

Toolkit

Languages
TypeScript
JavaScript
Python
C#
Golang
C++
HTML 5
Frameworks & Libraries
React
Next.js
Node.js
Vue
Angular
.NET
Tailwind
Sass
Bootstrap
Vuetify
Material Design
Data & APIs
REST
GraphQL
PostgreSQL
MongoDB
SQL Optimization
Cloud & DevOps
AWS
Terraform
Docker
CI/CD
Observability
Git
Mapbox
Atlassian
Jira
VS Code
AI Development
Claude Code
GitHub Copilot
Cursor
Custom AI Agents
MCP
03

Selected Work

Salmonid Data Sim & Visualizer

Three.js
GLSL
Boids
DART Data

A Three.js flocking simulation of real Snake River fish passage — Reynolds boids (separation, alignment, cohesion) styled as the salmon run sweeping past a fixed underwater camera at Lower Granite Dam, with GPU caustics, volumetric light shafts, and a HUD reporting real daily counts published by Columbia Basin Research DART.

Challenge

The scene needed to read as one physical place lit by one sun, not a fish model floating over a generic ocean shader. Every surface — the water's fresnel shading, the riverbed, the light shafts, the drifting silt, even the lit flank of the fish themselves — samples the same real-time caustics texture, so moving the sun slides one light net across all of it instead of several effects drifting out of sync.

Process

The flocking engine is dimension-agnostic 2D boids over a spatial grid, reinterpreted as world X/Z only at the render boundary. Five of the eight DART-tracked species drive the flock; each authored fish model is a single skinned mesh with a baked Vertex Animation Texture, drawn as one InstancedMesh per species with tailbeat rate derived from real per-fish swim speed rather than a fixed frequency. Everything that plots against the timeline — the HUD's chart, the data-plates drawer, the fish viewer's sparkline — shares one date-to-x mapping, so the scrubber cursor never reads against two curves differently.

Outcome

Ten counting seasons (2006–2015) of real Lower Granite adult passage counts are vendored and swappable from a season select, rebuilding the chart, HUD, and plates in place. A slide-in drawer surfaces the season against its ten-year mean, species composition, river conditions, and run history, and a separate labeled fish viewer holds its anatomy callouts steady under a swimming, turning fish by pointing each leader line at the animated vertex while laying the label out against the resting one.

The season drawer against its ten-year mean, species composition, and river conditions
The trigger-candidate console backtesting excess-heat cover against 19 years of NOAA station data

ParaLayer

Docker
Postgres
Redis
NOAA API

A calibration tool for parametric weather insurance that backtests trigger thresholds against 20 years of NOAA data and scores basis risk before a policy is ever sold.

Challenge

A product that's never been sold has no claims history to validate against, so there's nothing to measure basis risk against. Using NOAA's Storm Events Database as a loss proxy solves that, but a proxy can be wrong, so every backtest also fits a held-out logistic regression to flag when the local data is too thin to trust the basis-risk number at all.

The basis-risk breakdown against documented loss, with the held-out AUC flagging how far to trust the proxy
Process

An organization defines a trigger candidate, a peril, station, threshold, operator, and window, which queues a backtest job on Redis for a worker to pick up. The engine slices two decades of NOAA GHCN-Daily observations into consecutive, non-overlapping windows the length of the policy term, computes the peril's aggregate for each one, and checks it against NOAA's Storm Events Database as an independent proxy for real documented loss. A logistic regression fit on the same windows reports a held-out AUC alongside the result, so a low-signal station reads as "the proxy can't judge this threshold" rather than as a false failure.

Outcome

Each run returns a false trigger rate and a missed loss rate, one per side of the contract, averaged into a single basis-risk score, plus a threshold sweep suggesting where to write the trigger for a target return period. Both NOAA datasets are cached in Postgres so re-ingestion only tops up new records, and while the demo console's tenants are fake, every backtest on screen runs on the same real weather and loss data a user's own candidate would.

A finished backtest: fire rate, return period, basis risk, and the suggested threshold for a target return period
This vs That screenshot

This vs That

MongoDB
Next.js
Cloudinary
Auth0

A real-time, browser-based party game in the spirit of Jackbox's Bracketeering, where a room of players votes head-to-head on prompts and watches everyone else's picks land live.

Challenge

Websockets need a long-lived process, which doesn't fit a serverless app host, but shipping the whole Next.js app onto EC2 just to serve /ws upgrades wastes the build and dependency surface. Splitting the realtime runtime into its own minimal Node process, fronted by Nginx and backed by MongoDB for reconnect hydration, let each half run on the infrastructure it's actually suited for.

Process

The websocket layer used to live inside the main Next.js runtime, so an EC2 host serving only socket connections still had to carry the full app's build and dependency surface. It's since been split into two runtimes: Amplify hosts the Next.js frontend and API routes, while a standalone Node process on EC2 handles only /ws upgrades, sharing a room-lifecycle module that manages reconnect hydration, TTL-based expiration, and vote broadcast to everyone in the room. PowerShell bootstrap scripts drive the EC2 side end to end, pulling the repo, installing just the realtime-runtime dependency set, wiring up the systemd service, and fronting it with an Nginx reverse proxy with optional Let's Encrypt TLS.

Outcome

The split keeps the EC2 dependency and build surface down to a handful of realtime-only packages, no Next.js build required, while Amplify keeps owning the app deploys it's actually suited for. Rooms persist snapshots to MongoDB so players can reconnect and rehydrate state after a drop, and both session expiration and idle in-memory cleanup run on their own configurable TTLs, so a play session self-destructs 30 minutes after creation without any manual upkeep.

The home dashboard tracking prospector level, XP, and streak alongside the Find Gems and My Collection entry points

Game Gem

OpenAI
Lambda
IGDB API
Next.js

A discovery tool, wrapped in a retro 8-bit gemstone-mining theme, that turns a plain-language vibe into a short list of IGDB-backed game recommendations you dig up as rated "gems."

Challenge

A vague mood like "cozy but a little spooky" isn't something a keyword filter or static tag search can resolve into good picks. Pairing IGDB for accurate, real-time game metadata with an LLM for the actual reasoning splits the problem cleanly: one system supplies ground truth, the other supplies judgment, and the loading screen's elapsed-time progress bar hides the latency of that round trip without ever lying about being done.

The Find Gems screen turning a free-text mood, an optional reference game, and mode/genre filters into a structured query
Process

On the Find Gems screen you describe a mood in free text, optionally point it at a game you already liked via IGDB autocomplete, and filter by genre, mode, and keyword tags pulled live from IGDB. Submitting POSTs that payload to a Next.js API route, which forwards it through API Gateway to an AWS Lambda that queries an LLM and returns a handful of recommendations with a natural-language reason for each, while IGDB's own OAuth credentials stay server-side and never reach the browser. Each result comes back as a "gem" with its IGDB cover art, summary, and a rarity tier (Common/Rare/Epic/Legendary) derived from its community rating.

Outcome

The result turns a vague "something like Hollow Knight but shorter" into concrete, explained picks instead of requiring you to already know what to search for, combining a real game database for accurate metadata with an LLM for the actual matching. A lightweight gamification layer, XP, prospector levels, visit streaks, and achievements, persists in the browser via localStorage to encourage repeat use without requiring an account, with an Amplify/Cognito backend scaffolded for a future move off local storage.

The gem collection with rarity tiers, a genre field guide, and achievements persisted entirely through localStorage
04

Experience

Sekady Capital logo

Full-Stack Software Engineer

Sekady Capital — Fruitland, ID

  • Owned major product areas end-to-end, from design through production rollout, instrumentation, and long-term maintenance.
  • Engineered REST and GraphQL integrations across distributed services, reducing integration failures and improving cross-service data consistency under load.
  • Designed and maintained AWS infrastructure supporting distributed workloads, background processing, and scalable API services.
  • Used Claude Code, Copilot, and custom LLM agents to accelerate delivery, improve test coverage, and automate documentation.
2021 — 2026
Developmental Concepts | Consumer Direct Care Network Idaho logo

Behavioral Support Specialist

Developmental Concepts | Consumer Direct Care Network Idaho — Boise, ID

  • Designed data-driven support programs built on daily behavioral logging and analysis.
  • Solved problems under pressure using structured crisis-management techniques.
2014 — 2021
Galexis Technology logo

Technical Support Analyst

Galexis Technology — Pullman, WA

  • Deployed infrastructure for mid-to-large organizations across cloud-native and on-prem systems.
  • Configured networks and maintained environments across diverse corporate deployments.
2013 — 2014
05 — GET IN TOUCH

Let's build something great.

Open to full-stack engineering roles building and scaling production web applications — React/Next.js, distributed APIs, and AWS. Reach out below, or grab my resume.

Download Resume
© 2026 Jackson Schacher — Built with Next.js, React, and MUI. All rights reserved.