Community-college student · St. Louis, Missouri · US Central

student portfolio · independent projects

I build software and make it look right.

My personal projects sit at the seam between engineering and design — the point where system architecture and the way an interface feels become the same decision. Function precedes convenience precedes aesthetics.

Current status
Community-college student
Focus
Interfaces, design systems, front-end architecture
Shipped
quiet · Mature Response
Practice
Function → convenience → aesthetics

Selected work

§ 01 / 06

These are independent personal projects, not client or employer work. I chose the problems and final direction. AI coding tools contributed substantially to implementation and review; I decide what to publish and take responsibility for the result. Start with the two public projects, then open any row for the decisions behind it.

Context
Independent personal projects
Project direction
Henry Adams
Implementation
Henry Adams with substantial AI coding assistance
Release decisions
Henry Adams

quiet Personal project · public, MIT 2026

A minimal Jekyll publishing template for people who want to write rather than configure. Fork it, edit one commented file, push. All personalizable settings live in one commented _config.yml, so a fork can change identity, color, typography, and metadata without touching template code.

The engineering position is that a reading page should cost the reader almost nothing. The stylesheet is one unminified 17.3 KiB file, and the entire client-side JavaScript payload is 1,619 bytes — a 600-byte inline theme script and a 1,019-byte copy button, the second of which only loads on pages that contain code. There are zero third-party requests: no web fonts, no CDN, no analytics, and therefore no cookie banner to dismiss.

The core reading experience works without JavaScript. The table of contents and heading anchors are generated in Liquid, footnotes are rendered by Kramdown, and optional theme and copy controls disappear cleanly.

DESIGN-PRINCIPLES.md documents the major decisions with named usability laws and measurements, so a fork can distinguish structural constraints from taste.

Stack
Jekyll · Liquid · CSS
CSS
17.3 KiB · one file
JavaScript
1,619 bytes total
3rd-party requests
0
No-JS
Core reading intact
QA
15-check acceptance matrix
License
MIT
jekyll performance budget a11y progressive enhancement

github.com/hjadmz/quiet

Mature Response Personal project · public, MIT v1.0.2+

A communication coach designed for a local data path: Ollama for inference and SQLite for history, with no account or hosted API key. The default configuration stays on the machine; pointing OLLAMA_URL at another host changes that privacy boundary and triggers a warning.

The model proposes; the code decides. The app parses model output defensively, caps reported confidence using observable signals such as message length, tone clarity, and missing context, then applies six deterministic rules. The generative layer drafts; the tested rules layer constrains the final action.

The prompts draw on Nonviolent Communication, DBT's DEAR MAN, and a cool-off rule informed by conflict research. Parsing and deterministic rules are covered by tests.

Stack
Next.js 16 · React 19
Storage
SQLite, on-device
Model endpoint
Ollama · local by default
v1.0.2 snapshot
25 files · 3,029 lines
Tests
26 passing
Default data path
Loopback only
License
MIT
local-first deterministic rules next.js sqlite

github.com/hjadmz/mature-response

Execution dashboard Private personal application · local-only 2026

The biggest system I've put together so far: a React application that reads a body of canonical planning documents and renders a reconciled queue and decision record from them. It is a derived surface that never outranks its sources — if the app and a source document disagree, the document wins and the app is the bug.

There is no third-party UI kit — no shadcn, Radix, or animation library. The repository implements its own interface primitives; I chose that constraint to study accessibility and motion behavior directly.

It is deliberately not deployed. A loopback-only Node HTTP server fronts the local SQLite store; deployment is a standing policy decision, not a backlog item. The local boundary is deliberate and tested.

Privacy boundaries are enforced in code and verified by guard suites. The shareable-kit build uses an explicit allowlist and SHA-256 manifest; separate endpoint, embedding, and path-traversal guards reject disallowed paths and destinations. The copy pipeline validates before replacing its live output.

Stack
React 19 · TS strict · Vite 6
Styling
Tailwind 4, hand-rolled UI
Interface
9 screens · derived data
Verification
Guard + behavior suites
Store
SQLite · loopback HTTP
Deployment
Off, by policy
local-first privacy by architecture guard tests fail-closed

Private repository — happy to walk through the architecture in an interview.

hjadmz design system Private personal design system v1.2.0

A personal brand system built the way a product design system is built: one source of truth for color, type, space, radius, elevation and motion, shipped as CSS custom properties with a JSON mirror for non-web surfaces. Two type families, four radius tokens, and five duration tokens.

Contrast ratios and WCAG levels are documented alongside text-color tokens, with AAA body text in both light and dark modes. Motion uses an overdamped easing curve and a near-critically damped JavaScript spring, both designed to avoid overshoot.

Ten versioned revisions, each documented in the changelog. Six internal reference kits — site, deck, résumé, social, case study, and documents — consume the shared token foundation and add surface-specific styling.

This page is built on it. Same tokens, same two faces, no third family.

Version
1.2.0
Revisions
10, changelogged
Tokens
CSS + JSON mirror
Kits
6 internal references
Contrast
AAA body · light + dark
design tokens wcag aaa svg semver

Sovereign Archived personal prototype · local-only 2026

An archived local Mac voice-assistant prototype that connected speech-to-text, a local language model, speech synthesis, and a SwiftUI orb through a WebSocket bus. It was an interface experiment, not a hosted service.

The default configuration put an explicit confirmation gate before proposed shell, file-write, or AppleScript actions. That boundary mattered more than making the assistant feel autonomous.

Project notes record roughly 2.5 seconds end-to-end on an M4 Pro. That is a machine-specific measurement, not a general performance promise.

It remains offline because it depends on a local microphone and local models, and because publishing its machine-action surface would change the safety model.

Stack
Python 3.12 · SwiftUI · WebSocket
Speech to text
Parakeet · local
Inference
Ollama · local
Speech
Kokoro / MLX · local
Safety
Explicit confirmation gate
Status
Archived · local-only
voice interface local models confirmation design

This page Personal portfolio · public 2026

Plain HTML, CSS, and JavaScript, published through the repository's Jekyll build. No application framework or client runtime dependencies; no third-party requests on initial load beyond the hosting provider serving the page.

The brand faces are self-hosted and subset to the characters this page uses, which took 1.14 MiB of source TTF files down to 94.2 KiB of WOFF2 across five weights. The wordmark is real outlined path geometry rather than text set in a font, so it renders identically whether or not Inter loads. Theme resolves before first paint, so there is no flash of the wrong palette.

Interactive controls use native HTML — links, buttons, inputs, <details>/<summary>, and <dialog> — rather than div-based widgets. The platform supplies baseline semantics; JavaScript adds palette behavior and focus restoration. Motion respects prefers-reduced-motion; project disclosures remain readable without JavaScript, and document order remains sensible without CSS.

Project direction
Henry Adams
Implementation + review
Substantial AI contribution
Runtime dependencies
0
3rd-party requests
0 on initial load
Fonts
94.2 KiB · subset
Contrast
AAA body text
No-JS
Core content intact
vanilla a11y performance progressive enhancement

Decision framework

§ 02 / 06

I use three gates in order: Function, Convenience, then Aesthetics. Visual polish cannot compensate for a product that fails its job. Try the framework on a decision of your own.

The interactive checker is unavailable. Apply the gates in order: Function, then Convenience, then Aesthetics.

Awaiting input Name a decision, then open the gates it genuinely passes.

Stack

§ 03 / 06

What I reach for — chosen for ownership and longevity. I'd rather know a small set deeply than collect logos.

Language

  • TypeScript
  • JavaScript
  • HTML & CSS

Framework

  • React
  • Next.js
  • Vite
  • Jekyll · Liquid

Styling

  • Tailwind CSS
  • Design tokens
  • Hand-rolled primitives

Design

  • Figma
  • Type & color systems
  • WCAG / accessibility

Data & runtime

  • Node
  • SQLite
  • Zod

Environment

  • Git & GitHub
  • VS Code · Claude Code
  • Local models via Ollama

Working principles

§ 04 / 06

Working vocabulary. A principle with a short name can be invoked mid-sentence — by me or by anyone I work with — which is most of what makes it useful. This is the list I run on.

ship > optimize
The tiebreaker. A B+ thing that exists beats an A+ thing that doesn't. A perfect blueprint that is never built creates less value than an excellent imperfect thing that does.
FCA
Function → Convenience → Aesthetics, in that order. Visual polish cannot compensate for a product that fails its job.
Minimum viable complexity
Every artifact justifies its existence. The test is blunt: does removing this break something?
Props vs. tools
Does this thing do work, or does it perform an identity? Buying the feeling of a workshop is not the same as equipping one.
Say who did what
Separate project ownership from implementation authorship. When AI produced a substantial share, say “substantial” rather than merely “assisted.”
Derived never outranks source
When a generated view and its source disagree, the source is right and the view is the bug. Applies to caches, dashboards, and documentation alike.

Now

§ 05 / 06

Current and honest, including the parts that are still targets rather than outcomes. I'd rather be checkable than impressive. Last updated .

Current
Community-college student completing an associate degree and transfer prerequisites. The work here is independent and personal, not client or employer work.
RIT plan
Not enrolled. I plan to apply to transfer into Human-Centered Computing; if admitted, I currently expect to explore Design and Front End Development, subject to RIT advising and degree requirements.
Shipped
quiet — a minimal Jekyll publishing template. Mature Response — a local-first communication coach.
Building
Portfolio case studies. The execution dashboard remains local-only by design.

Contact

§ 06 / 06

No form, no funnel, no newsletter. GitHub is the current public front door. Open a repository issue when the question belongs to that project.

Writing
hjadmz.com/blog
Handle
hjadmz · public handle
Based in
St. Louis, Missouri
Timezone
US Central (CT)
Contact for
Project feedback · collaboration
Open GitHub

For opportunities: include the context and what you need the person to own.

For projects: include the users, brief, and primary constraint.