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:
    9:00:00 AM
    CloudFront
    Requests
    Fetched at:
    9:00:00 AM
    Log Stream NameTimestampMessageIngestion TimeEvent ID
    2026/10/23/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]236957444def442783ef219eae4eeeb21792760438345START RequestId: a3ebaff8-864a-48b1-a1b7-0e4eed64a08f Version: $LATEST 179276044736039979893737537913995292889660145358529282706254254964736
    2026/10/23/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]2fd5c8ad5eb44fd78f52134c1d03539b1792760438398START RequestId: b1713c9f-8e60-4daf-b367-cfc3b6442562 Version: $LATEST 179276044741339979893738719853490815012686710735491318926053723668480
    2026/10/23/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]236957444def442783ef219eae4eeeb21792760438457END RequestId: a3ebaff8-864a-48b1-a1b7-0e4eed64a08f 179276044736039979893740035597457528319451997358975819322742924771329
    2026/10/23/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]236957444def442783ef219eae4eeeb21792760438457REPORT RequestId: a3ebaff8-864a-48b1-a1b7-0e4eed64a08f Duration: 111.41 ms Billed Duration: 112 ms Memory Size: 2048 MB Max Memory Used: 486 MB 179276044736039979893740035597457528319451997358975819322742924771330
    2026/10/23/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]236957444def442783ef219eae4eeeb21792760438463START RequestId: c7476baa-fb15-4876-a36e-7c11e1340f77 Version: $LATEST 179276044736039979893740169401928719503190846573285455212911960653827
    2026/10/23/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]5e2463d1e87d440ba1249d67229e00591792760439404INIT_START Runtime Version: nodejs:24.mainline.v79 Runtime Version ARN: arn:aws:lambda:us-east-1::runtime:b7778d7d9d048df4a9bce496d1cc9424fe9844534468d732394872ce927254bc 179276043990639979893761154403160536819558020274586751291706391068672
    2026/10/23/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]236957444def442783ef219eae4eeeb21792760439856END RequestId: c7476baa-fb15-4876-a36e-7c11e1340f77 179276044736039979893771234339990272661227005828839254380489791373316
    2026/10/23/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]236957444def442783ef219eae4eeeb21792760439856REPORT RequestId: c7476baa-fb15-4876-a36e-7c11e1340f77 Duration: 1392.67 ms Billed Duration: 1393 ms Memory Size: 2048 MB Max Memory Used: 518 MB 179276044736039979893771234339990272661227005828839254380489791373317
    2026/10/23/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]236957444def442783ef219eae4eeeb21792760440351START RequestId: dabc25ed-372e-4506-ae61-120fe5ae3a3e Version: $LATEST 179276044736039979893782273208863545319682066009384215319435251679238
    2026/10/23/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]2fd5c8ad5eb44fd78f52134c1d03539b1792760440410END RequestId: b1713c9f-8e60-4daf-b367-cfc3b6442562 179276044741339979893783588952830258626447480600655887429403756265473
    0 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