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 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#
| SiteKey | Description | Visibility | Demo |
|---|---|---|---|
1x00000000000000000000AA | Always passes | visible | |
2x00000000000000000000AB | Always blocks | visible | |
1x00000000000000000000BB | Always passes | invisible | |
2x00000000000000000000BB | Always blocks | invisible | |
3x00000000000000000000FF | Forces an interactive challenge | visible |
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.
| Log Stream Name | Timestamp | Message | Ingestion Time | Event ID |
|---|---|---|---|---|
| 2026/10/07/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]93ce57efccc048a182c3ecc51904aa32 | 1791367227491 | START RequestId: 3729852b-f4c2-420e-a547-c4811149da4c Version: $LATEST | 1791367236563 | 39948824097275032746279034230714192940093064711412711424 |
| 2026/10/07/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]93ce57efccc048a182c3ecc51904aa32 | 1791367227577 | 2026-10-07T10:00:27.577Z 3729852b-f4c2-420e-a547-c4811149da4c INFO {"event":"r2.query.start","queryName":"otel.load_trace","traceId":"a3e8380e325b9cba7e91c9deb21ab9fd","spanId":"7f51e38ec311a0d0"} | 1791367236563 | 39948824099192896833352667820886264711540823800927027201 |
| 2026/10/07/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]93ce57efccc048a182c3ecc51904aa32 | 1791367227577 | 2026-10-07T10:00:27.577Z 3729852b-f4c2-420e-a547-c4811149da4c INFO {"event":"r2.query.start","queryName":"otel.list_traces","traceId":"a3e8380e325b9cba7e91c9deb21ab9fd","spanId":"37581f169bc402df"} | 1791367236563 | 39948824099192896833352667820886264711540823800927027202 |
| 2026/10/07/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]93ce57efccc048a182c3ecc51904aa32 | 1791367228448 | 2026-10-07T10:00:28.448Z 3729852b-f4c2-420e-a547-c4811149da4c INFO {"event":"r2.query.finish","queryName":"otel.list_traces","traceId":"a3e8380e325b9cba7e91c9deb21ab9fd","spanId":"37581f169bc402df","durationMs":871,"readMs":869,"rows":40} | 1791367236563 | 39948824118616845901272840577163875327017546672635969539 |
| 2026/10/07/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]93ce57efccc048a182c3ecc51904aa32 | 1791367228694 | 2026-10-07T10:00:28.694Z 3729852b-f4c2-420e-a547-c4811149da4c INFO {"event":"r2.query.finish","queryName":"otel.load_trace","traceId":"a3e8380e325b9cba7e91c9deb21ab9fd","spanId":"7f51e38ec311a0d0","durationMs":1117,"readMs":1116,"rows":2} | 1791367236563 | 39948824124102829220111373869981662022089043603107151876 |
| 2026/10/07/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]93ce57efccc048a182c3ecc51904aa32 | 1791367229103 | END RequestId: 3729852b-f4c2-420e-a547-c4811149da4c | 1791367236563 | 39948824133223834006310398734869770795602223459053142021 |
| 2026/10/07/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]93ce57efccc048a182c3ecc51904aa32 | 1791367229103 | REPORT RequestId: 3729852b-f4c2-420e-a547-c4811149da4c Duration: 1611.43 ms Billed Duration: 1612 ms Memory Size: 2048 MB Max Memory Used: 758 MB | 1791367236563 | 39948824133223834006310398734869770795602223459053142022 |
| 2026/10/07/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]93ce57efccc048a182c3ecc51904aa32 | 1791367291137 | START RequestId: 9ce23581-b74e-48dc-afbf-b176d693fc55 Version: $LATEST | 1791367300156 | 39948825516628261651959074773775647697105970033693818880 |
| 2026/10/07/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]93ce57efccc048a182c3ecc51904aa32 | 1791367291227 | 2026-10-07T10:01:31.227Z 9ce23581-b74e-48dc-afbf-b176d693fc55 INFO {"event":"r2.query.start","queryName":"otel.list_traces","traceId":"aa3caf617d39ac1e9bef0499db91067a","spanId":"b23d3cb4fbb6aeba"} | 1791367300156 | 39948825518635328719826830856513862341644322569232056321 |
| 2026/10/07/web-production-MyWebServerUseast1Function-tohtrofa[$LATEST]93ce57efccc048a182c3ecc51904aa32 | 1791367291227 | 2026-10-07T10:01:31.227Z 9ce23581-b74e-48dc-afbf-b176d693fc55 INFO {"event":"r2.query.start","queryName":"otel.load_trace","traceId":"aa3caf617d39ac1e9bef0499db91067a","spanId":"0fb1fe8c6ef34135"} | 1791367300156 | 39948825518635328719826830856513862341644322569232056322 |
nextjs-components
React components that I transcribed from Vercel’s Design System, years ago. — See the code on GitHub
