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:
    8:00:00 AM
    CloudFront
    Requests
    Fetched at:
    8:00:00 AM
    Log Stream NameTimestampMessageIngestion TimeEvent ID
    2026/02/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]98a0d6d8aebc4eec8fc94e66ee9f26191770728491528INIT_START Runtime Version: nodejs:22.v72 Runtime Version ARN: arn:aws:lambda:us-east-1::runtime:5e3c80f22edec71979fb474ea310e6e652f1e127086be7eb20d12b0b26666cc1 177072849751339488564905344419199666070258429991480359953612090376192
    2026/02/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]98a0d6d8aebc4eec8fc94e66ee9f26191770728491660START RequestId: 397b1ec8-9e63-43fd-9e20-9d036d724f4f Version: $LATEST 177072849751339488564908288117565872112513112706292349537330879791105
    2026/02/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]98a0d6d8aebc4eec8fc94e66ee9f26191770728493543END RequestId: 397b1ec8-9e63-43fd-9e20-9d036d724f4f 177072849751339488564950280420774705275888624463799746402046640914434
    2026/02/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]98a0d6d8aebc4eec8fc94e66ee9f26191770728493543REPORT RequestId: 397b1ec8-9e63-43fd-9e20-9d036d724f4f Duration: 1882.26 ms Billed Duration: 2012 ms Memory Size: 1024 MB Max Memory Used: 150 MB Init Duration: 128.98 ms 177072849751339488564950280420774705275888624463799746402046640914435
    2026/02/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]98a0d6d8aebc4eec8fc94e66ee9f26191770728563004START RequestId: 96c57ad4-c0bf-494a-8b9b-bc5cf9fd0a93 Version: $LATEST 177072857203639488566499312483009840890012929451569140775634812272640
    2026/02/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]98a0d6d8aebc4eec8fc94e66ee9f26191770728563079END RequestId: 96c57ad4-c0bf-494a-8b9b-bc5cf9fd0a93 177072857203639488566500985038899730686748544630439589402747760803841
    2026/02/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]98a0d6d8aebc4eec8fc94e66ee9f26191770728563080REPORT RequestId: 96c57ad4-c0bf-494a-8b9b-bc5cf9fd0a93 Duration: 75.26 ms Billed Duration: 76 ms Memory Size: 1024 MB Max Memory Used: 154 MB 177072857203639488566501007339644929217371686166157862051109266784258
    2026/02/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]98a0d6d8aebc4eec8fc94e66ee9f26191770728564847START RequestId: 72edc0b7-331c-467e-ae90-586a82e7ddbc Version: $LATEST 177072857203639488566540412756410732828462779780345631705890334179331
    2026/02/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]98a0d6d8aebc4eec8fc94e66ee9f261917707285652602026-02-10T13:02:45.260Z 72edc0b7-331c-467e-ae90-586a82e7ddbc WARN Skipping CRC64NVME checksum validation: Please check whether you have installed the "@aws-sdk/crc64-nvme-crt" package explicitly. You must also register the package by calling [require("@aws-sdk/crc64-nvme-crt");] or an ESM equivalent such as [import "@aws-sdk/crc64-nvme-crt";]. For more information please go to https://github.com/aws/aws-sdk-js-v3#functionality-requiring-aws-common-runtime-crt 177072857203639488566549622964177725975820234031992235479192304091140
    2026/02/10/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]98a0d6d8aebc4eec8fc94e66ee9f26191770728565482END RequestId: 72edc0b7-331c-467e-ae90-586a82e7ddbc 177072857203639488566554573729611799774157654961448763415446631743493
    537 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