← RESUME
PT · 17:02

LOGAN DAVIS · AFTER HOURS

On the side.

Things I build when nobody's asking: a bear machine that generates Stanley Donwood–inspired modified bears, a mosaic engine in Rust, a read-it-later stack that syncs through one file, and a courtside companion for women's basketball.

  • radiohead-bears

    VANILLA JS · SVG · 2026

    One parametric bear, three renderers. A seeded RNG rolls the geometry — the ears, the eyes, the sawtooth grin — and the same shapes go out flat and clean, through a shaky hand-drawn nightmare pass, or rasterized to a 1-bit grid and eaten by fax damage. The identity lives in tuned parameter ranges, not code: every seed is a reproducible bear that still reads as the bear.

    And every render is a found-paper artifact — a fax sheet, an envelope back, a sketchbook page, a library card. The machine's furniture shares the bear's feed skew; pen marginalia go on top, unskewed, because the pen came after the machine. The two pages below are drawing themselves right now: flicker re-rolls only the bear's skin, and the page holds still. An homage to Stanley Donwood's modified bear.

    NIGHTMARE PASS — REDRAWN LIVE, EVERY 170MS
    THE SAME BEAR, FAXED — RE-NOISED LIVE
    A specimen sheet of twelve clean geometric bear heads, each a different seed: varying ears, eyes, and sawtooth grins, all unmistakably the same bear
    TWELVE SEEDS, ONE BEAR — CLEAN SPECIMENS
  • tessera

    RUST · 2026

    A from-scratch Rust port of primitive: drop in an image and it rebuilds the picture out of geometric shapes — proposing random triangles, keeping the ones that shrink the error, a few hundred times over. Custom scanline rasterizer with zero drawing dependencies, parallel workers, and everything ships as one binary: an axum server with the React UI embedded, streaming each shape over a WebSocket so you can watch the mosaic converge live, then keep the PNG, SVG, or a jittering multi-run GIF.

    The tessera web UI: a drop zone, sample images including the Great Wave, and a history rail showing a finished 600-triangle run at 94.6% fit
    THE WEB UI — DROP AN IMAGE, GET A MOSAIC
    The Great Wave at 25 triangles — rough masses of sea and sky
    25 TRIANGLES
    The Great Wave at 100 triangles — the crest and boats emerging
    100 TRIANGLES
    The Great Wave at 300 triangles — clearly Hokusai
    300 TRIANGLES
    Hokusai's Great Wave off Kanagawa reconstructed by tessera from 600 translucent triangles
    AND AT 600 — 94.6% FIT TO THE ORIGINAL
  • stash

    GO · SWIFT · 2026

    A read-it-later tool that keeps the whole article, not the link. Saving a URL from the terminal fetches the page, strips it to the readable core — Mozilla's readability algorithm — and files title, author, and full text into a single SQLite database. A Bubble Tea TUI lists, filters, and reads everything in place, rendering HTML through Markdown into Glamour; the whole Mac side is one static Go binary, pure-Go SQLite, no CGO.

    My favorite decision is the sync engine that doesn't exist: the database lives in iCloud Drive, and every device just opens the file. No server, no accounts, no protocol. On the iPhone, a SwiftUI companion reads that same file — deliberately read-only, with coordinated file access and JavaScript switched off in the article view — so writes only ever come from the Mac. Save at the desk, read on the couch.

    The stash terminal reader rendering the article 'The software industry: annealing, but wrong' from apenwarr.ca as styled markdown on cream paper, links in green
    READ IN THE TERMINAL — HTML → MARKDOWN → GLAMOUR
    The stash TUI list: 32 saved entries with titles, domains, and dates; the apenwarr.ca article is selected
    THE LIST — 32 ENTRIES, ONE SQLITE FILE
    The same apenwarr.ca article in the stash iOS app: a native dark-mode reader with the site name in the navigation bar
    THE SAME ARTICLE, SAME FILE — IPHONE
  • shegotgame.fyi

    NEXT.JS · 2026 · LIVE

    Women's basketball, glanceable from the stands: every roster, player page, and live box score across the WNBA, NCAA, EuroLeague Women, and Unrivaled. Games refresh themselves while you watch; a player's page follows her across leagues — to Europe, or back through her college years; ⌘K searches everyone.

    Each league is a config entry, not a fork — the routing and data layers are shared, so adding a league is an afternoon, not a rewrite. Mobile-first and dark on purpose: it's built for dim arenas.

    New York Liberty team page on desktop: team leaders led by Breanna Stewart, and the full guard roster with headshots, including Sabrina Ionescu
    NEW YORK LIBERTY — SAME APP, BIG SCREEN
    shegotgame.fyi home: a live WNBA game at halftime in the Today strip, search, and full standings with team logos
    GAME DAY, LIVE
    Sabrina Ionescu's WNBA player page: New York Liberty, yesterday's 17-point game update, season averages
    SABRINA IONESCU · LIBERTY
    The same player's college page: Sabrina Ionescu as an Oregon Duck, with her 2019-20 season averages
    SAME PLAYER, OREGON YEARS
PRESS ~ FOR A TERMINAL