WORK, WRITING, STUFF

Projects.

Some things I made

Cloudfront viewer info

Various viewer request info generated at edge by this website’s CDN. While this overview page is a static route and is composed of several other page.tsx components, via @slots, the viewer request feature uses the Next.js dynamic headers()  API so it has to live on its own dedicated route. (See Next.js parallel routes docs).

→ Go to viewer info

Go in browser

This widget executes a WASM program, built from Go. The program itself interprets arbitrary JavaScript text input, and evaluates it as Go, using Yaegi.

Output

    CloudFlare turnstile

    A playground to familiarize myself with CloudFlare’s turnstile service. Again, this overview route is static, and the @turnstileslot/page component is an async server component. While parts of it can be statically rendered, it uses the Next.js dynamic cookies() API to power both the "Client" and "Server" results. You can still view the playground below,you'll need to go to the dedicated route for a full working example.

    → Go to working turnstile playground

    Turnstile Playground#

    SiteKeyDescriptionVisibilityDemo
    1x00000000000000000000AAAlways passesvisible
    2x00000000000000000000ABAlways blocksvisible
    1x00000000000000000000BBAlways passesinvisible
    2x00000000000000000000BBAlways blocksinvisible
    3x00000000000000000000FFForces an interactive challengevisible

    https://developers.cloudflare.com/turnstile/troubleshooting/client-side-errors/error-codes/

    https://developers.cloudflare.com/turnstile/get-started/client-side-rendering/#configurations

    Logs viewer

    Pulling logs from AWS CloudWatch logs and displaying them in a reasonably pretty format.

    Function URL Latency
    Latency in milliseconds
    Lambda
    Invocations
    Fetched at:
    11:00:00 PM
    CloudFront
    Requests
    Fetched at:
    11:00:00 PM
    Log Stream NameTimestampMessageIngestion TimeEvent ID
    2026/01/17/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]696a703e6547463cb4534dd77ce52a841768622684389INIT_START Runtime Version: nodejs:22.v70 Runtime Version ARN: arn:aws:lambda:us-east-1::runtime:dd849bc5eb759042eb9a87d38a406e763aeb7832756f411e38151c6c27e4afa2 176862268580139441603836900333441141959965317729864297417104639787008
    2026/01/17/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]696a703e6547463cb4534dd77ce52a841768622684523START RequestId: 671d7a28-66f2-4889-bfcf-5f9c1115d20a Version: $LATEST 176862268580139441603839888633297745063466283516112832297546441162753
    2026/01/17/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]696a703e6547463cb4534dd77ce52a841768622686477END RequestId: 671d7a28-66f2-4889-bfcf-5f9c1115d20a 176862269549639441603883464289415673901096565180963496604192769900544
    2026/01/17/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]696a703e6547463cb4534dd77ce52a841768622686477REPORT RequestId: 671d7a28-66f2-4889-bfcf-5f9c1115d20a Duration: 1953.52 ms Billed Duration: 2085 ms Memory Size: 1024 MB Max Memory Used: 152 MB Init Duration: 131.07 ms 176862269549639441603883464289415673901096565180963496604192769900545
    2026/01/17/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]696a703e6547463cb4534dd77ce52a841768622858489START RequestId: a9303e13-8d29-4cf3-9d83-360b67ed55b2 Version: $LATEST 176862286756439441607719460072505323449126424460053693824227664134144
    2026/01/17/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]696a703e6547463cb4534dd77ce52a841768622858837END RequestId: a9303e13-8d29-4cf3-9d83-360b67ed55b2 176862286756439441607727220731834412105979678890012575454031745318913
    2026/01/17/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]696a703e6547463cb4534dd77ce52a841768622858837REPORT RequestId: a9303e13-8d29-4cf3-9d83-360b67ed55b2 Duration: 346.99 ms Billed Duration: 347 ms Memory Size: 1024 MB Max Memory Used: 155 MB 176862286756439441607727220731834412105979678890012575454031745318914
    2026/01/17/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]844da63881214428a3cd23cc3b17db1d1768622858848INIT_START Runtime Version: nodejs:22.v70 Runtime Version ARN: arn:aws:lambda:us-east-1::runtime:dd849bc5eb759042eb9a87d38a406e763aeb7832756f411e38151c6c27e4afa2 176862286044139441607727466040031595942825624574831230252472759746560
    2026/01/17/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]844da63881214428a3cd23cc3b17db1d1768622858973START RequestId: 87628040-ec9f-4006-933f-a167537c9700 Version: $LATEST 176862286044139441607730253633181412270718316539615311297661007298561
    2026/01/17/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]844da63881214428a3cd23cc3b17db1d1768622860851END RequestId: 87628040-ec9f-4006-933f-a167537c9700 176862286986839441607772134432664252780989517390603907419182502838272
    437 ms ago

    nextjs-components

    React components that I transcribed from Vercel’s Design System, years ago. — See the code on GitHub

    OpenGraph image for the nextjs-components GitHub repository