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:
    10:00:00 PM
    CloudFront
    Requests
    Fetched at:
    10:00:00 PM
    Log Stream NameTimestampMessageIngestion TimeEvent ID
    2026/09/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]aaa25ce2786a4b3f8f3c38c1db0b3fce1789005825633INIT_START Runtime Version: nodejs:24.mainline.v55 Runtime Version ARN: arn:aws:lambda:us-east-1::runtime:dd09ef1b17ddb706b5ccd5facec44a9954fa6d8e003984ad01974c818c62990a 178900582984839896163076128437953919859223063670762536361276408659968
    2026/09/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]aaa25ce2786a4b3f8f3c38c1db0b3fce1789005825806START RequestId: 69fb6263-7d34-4ca8-b7ef-82daf386a5da Version: $LATEST 178900582984839896163079986466873265657026549350023704527816943271937
    2026/09/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]aaa25ce2786a4b3f8f3c38c1db0b3fce1789005828265END RequestId: 69fb6263-7d34-4ca8-b7ef-82daf386a5da 178900582984839896163134823999316452459331585681256146848760149114882
    2026/09/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]aaa25ce2786a4b3f8f3c38c1db0b3fce1789005828265REPORT RequestId: 69fb6263-7d34-4ca8-b7ef-82daf386a5da Duration: 2457.49 ms Billed Duration: 2628 ms Memory Size: 1024 MB Max Memory Used: 167 MB Init Duration: 169.60 ms 178900582984839896163134823999316452459331585681256146848760149114883
    2026/09/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]2d510c5299a84cbaacd6de038f547b611789006099825INIT_START Runtime Version: nodejs:24.mainline.v55 Runtime Version ARN: arn:aws:lambda:us-east-1::runtime:dd09ef1b17ddb706b5ccd5facec44a9954fa6d8e003984ad01974c818c62990a 178900610381039896169190814365429428479978225012580421825624839487488
    2026/09/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]2d510c5299a84cbaacd6de038f547b611789006099976START RequestId: ba0aae60-ba17-491b-ba0c-a31d1ffbeeb9 Version: $LATEST 178900610381039896169194181777954406604072596906039591728212242530305
    2026/09/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]2d510c5299a84cbaacd6de038f547b611789006101907END RequestId: ba0aae60-ba17-491b-ba0c-a31d1ffbeeb9 178900610381039896169237244516932769237358902378024075714280290713602
    2026/09/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]2d510c5299a84cbaacd6de038f547b611789006101907REPORT RequestId: ba0aae60-ba17-491b-ba0c-a31d1ffbeeb9 Duration: 1930.37 ms Billed Duration: 2079 ms Memory Size: 1024 MB Max Memory Used: 146 MB Init Duration: 148.29 ms 178900610381039896169237244516932769237358902378024075714280290713603
    2026/09/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]2d510c5299a84cbaacd6de038f547b611789006333146START RequestId: fdab271d-58ba-4b70-8052-d71587505516 Version: $LATEST 178900634216639896174394046535895792002272635256103295512505544409088
    2026/09/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]2d510c5299a84cbaacd6de038f547b611789006333228END RequestId: fdab271d-58ba-4b70-8052-d71587505516 178900634216639896174395875197002071513370241185001652678149034803201
    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