Issue 001 · Work, 2025–2026

Work

Two products, each told in full. Then the archive: the coursework and smaller builds around them, each with something you can check.

Features

01–02 · Case studies

Archive

03–05 · Fall 2025 to now

Shorter entries, in the order they happened. Work done with a team says so, and each entry links to the record where one is public.

  1. UCSB Courses Search

    A full-stack UCSB course search, handed from cohort to cohort since 2021. It already held over 2,200 commits from earlier students and instructors when Matthew's team arrived.

    Four merged pull requests: a clear “no courses found” state (an empty search had looked like a slow one), course IDs that link to their details pages, a paginated admin job log with sort and page-size controls, and a fix for a blank details page.

    Note The course's CI runs coverage and mutation testing (PIT for Java, Stryker for React); several of his commits exist only to close the last gaps. In the earlier team exercises he built one resource end to end: database table, REST controller, React pages, integration and end-to-end tests.

    Technologies: Java / Spring Boot / React / JavaScript

    UCSB Courses Search results for Winter 2022 computer science courses. Columns: Quarter, Course ID, Title and Status. Each course ID, from CMPSC 5A to CMPSC 24, is an underlined link.
    Main search results after PR #28: each course ID now opens that course's details page. Cropped from the pull request's own screenshot; instructor and room columns removed.
  2. Network protocols

    Five projects that work up the network stack: mail sent over SMTP and read back over POP3, an HTTP/1.1 file server on raw sockets, reliable Go-Back-N transport in C, distance-vector routing, and a hangman server in C for three players at once.

    Matthew wrote each protocol to the course's spec. The routing project is shown here because its result is easy to read: every node starts out knowing only its neighbors and ends with the cheapest route to every other node.

    Note Each node sends only when its own table changes. There is no timer, so the simulation ends by itself once every node agrees.

    Technologies: C / Python / Sockets

    Source not published: these are current course assignments.

    The course's four-node test network. E0 to E1 costs 1, E0 to E2 costs 3, E0 to E3 costs 7, E1 to E2 costs 1, E2 to E3 costs 2. The route from E0 to E3 through E1 and E2 is marked in red.13712E0E1E2E3
    E0 forwarding table
    ToCostNext hop
    E00E0
    E11E1
    E22E1
    E34E1
    E0's forwarding table when the run ended, after 54 packets. Its direct link to E3 costs 7. The protocol settled on 4, through E1 and E2. The topology is the course's test network, redrawn.
  3. This publication

    The site you're reading: an editorial portfolio built with Next.js, with its content in Convex behind an authenticated admin (WorkOS AuthKit sign-in, authorization enforced in Convex).

    Its art direction is written down, and most of the rules a machine can check are tests that run before every production deploy.

    Note Visible “chaos” (the tilts, overlaps and torn edges) is deterministic, and one variable, ‑‑chaos, scales all of it. Setting it to zero realigns the whole page.

    Technologies: Next.js / TypeScript / Convex / WorkOS AuthKit / Vitest

    tests/design/rules.test.ts

    describe(“things we never do”)

    • no Math.random anywhere: visible chaos is deterministic
    • no raw z-index outside the token file: use .layer-* inside a .stage
    • no raw hex colors outside the token file, the palette mirror, and OG images
    • no gradient text or glow effects
    • no backdrop blur / glass outside the admin
    • annotation marks are always hidden from assistive tech
    Six of the rules, named as the test file names them. A change that breaks one does not deploy.