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:
    12:00:00 AM
    CloudFront
    Requests
    Fetched at:
    12:00:00 AM
    Log Stream NameTimestampMessageIngestion TimeEvent ID
    2026/09/22/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]f84036bd393242d58a4c6a30f9090e421790049638136START RequestId: 0e715751-e19e-42c0-acd6-823d2e6a7b33 Version: $LATEST 179004964715439919440872792881435584637242109955280508901414690226176
    2026/09/22/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]f84036bd393242d58a4c6a30f9090e421790049638246END RequestId: 0e715751-e19e-42c0-acd6-823d2e6a7b33 179004964715439919440875245963407423005787678884290500221180348071937
    2026/09/22/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]f84036bd393242d58a4c6a30f9090e421790049638246REPORT RequestId: 0e715751-e19e-42c0-acd6-823d2e6a7b33 Duration: 109.13 ms Billed Duration: 110 ms Memory Size: 1024 MB Max Memory Used: 208 MB 179004964715439919440875245963407423005787678884290500221180348071938
    2026/09/22/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]f84036bd393242d58a4c6a30f9090e421790049638956START RequestId: 1f69b830-c9e0-4e44-a800-4c3967054378 Version: $LATEST 179004964715439919440891079492498379748218169244264080557849594167299
    2026/09/22/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]f84036bd393242d58a4c6a30f9090e421790049639006END RequestId: 1f69b830-c9e0-4e44-a800-4c3967054378 179004964715439919440892194529758306279375246030177712975924893188100
    2026/09/22/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]f84036bd393242d58a4c6a30f9090e421790049639006REPORT RequestId: 1f69b830-c9e0-4e44-a800-4c3967054378 Duration: 48.70 ms Billed Duration: 49 ms Memory Size: 1024 MB Max Memory Used: 208 MB 179004964715439919440892194529758306279375246030177712975924893188101
    2026/09/22/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]f84036bd393242d58a4c6a30f9090e421790049791396START RequestId: d4ec2512-ba74-4f25-a991-300fd4891a4e Version: $LATEST 179004980046639919444290605090562387940099216891109892527402416537600
    2026/09/22/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]dd35e841e3f344f486c7feaef664cf701790049791582START RequestId: cbd34e4d-dea4-47a0-ac11-716adb7930a3 Version: $LATEST 179004980059639919444294753029169314636003699511619110607299301867520
    2026/09/22/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]f84036bd393242d58a4c6a30f9090e421790049791747END RequestId: d4ec2512-ba74-4f25-a991-300fd4891a4e 179004980046639919444298432652127072188821895928223592102291015663617
    2026/09/22/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]f84036bd393242d58a4c6a30f9090e421790049791747REPORT RequestId: d4ec2512-ba74-4f25-a991-300fd4891a4e Duration: 351.02 ms Billed Duration: 352 ms Memory Size: 1024 MB Max Memory Used: 208 MB 179004980046639919444298432652127072188821895928223592102291015663618
    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