A curl View of This Site
Inspired by nytpu’s curl site, I added a terminal view to this Astro site with generated text, a small Netlify switch, and the same content.
Reading nytpu’s Fancy Curl Sites made me want to try something pleasantly unnecessary: let people read this site with curl.
curl https://dondibogusky.com/
The response is readable text, with a little color for headings, full URLs, and the same writing you get in a browser. No terminal application to install. Just a different response to the same page URL.
$ curl -fsS https://dondibogusky.com/
# Dondi Bogusky
Hello, world! I'm a designer and developer leading web platforms and shipping
production code, from SugarCRM and ThreatMetrix to VAST Data, where I took the
site's average search position from 35.7 to 9.1.
Now
Working on fast content sites, durable design systems, and sharper publishing
workflows.
What I'm focused on right now.
Read the full Now page [https://dondibogusky.com/now/]
Web | Information | Print
## Portfolio
Browse the portfolio [https://dondibogusky.com/portfolio/]
### ThreatMetrix website
[https://dondibogusky.com/_astro/web-tmx-2018-03-28.DB5E_sQx_Z1MJFhJ.webp]
Web | Corporate website
### Customer Journey Wheel graphic
[https://dondibogusky.com/_astro/graphic-customer-journey-wheel.BK63PUa-_Z1UCiSL.webp]
Information | Journey diagram
### Boeing Distinguished Lecture poster
[https://dondibogusky.com/_astro/print-boeing-poster.MnVFlT-K_Rlb9Q.webp]
Print | PosterA Good Fit Before I Wrote the Converter
The useful detail in nytpu’s post was the groundwork. Their Gemroff publishing system already supported ANSI text output, so adding curl versions of the blog could build on a capability they already had.
This site had a different head start. Astro builds static HTML. The notes live in MDX. Most of the experience is headings, paragraphs, dates, lists, and links. Vue handles a few bounded interactions; the writing is already there before any client JavaScript runs.
That makes the reading side of this site close to a perfect fit. I could derive another view from the finished HTML without maintaining a second set of articles or changing the original MDX.
The portfolio is the qualification. A terminal can carry the title, context, and description of a poster, but the typography and composition are still in the image. Those entries include direct links to the full-size files. Interactive demos likewise point readers back to the browser.
Build the Text, Then Choose the Response
The implementation has two parts:
- At build time, a script runs after Astro. It uses
html-to-textto convert each eligible page’smaincontent, keeping the reading order and removing browser controls, hidden UI, and modal markup. Small formatters handle code blocks, compact topic labels, and portfolio entries. The build writes plain text and an ANSI version with cyan headings. - At request time, a small Netlify Edge Function recognizes curl’s user agent on
GETandHEADrequests and selects the matching static text file. Browser requests keep the HTML response. Each representation has its own file, keeping the text and HTML variants separate for caching.
Topic-filtered note views are also generated ahead of time. Search is the exception: an edge handler queries a text index produced from the same public pages and returns titles, excerpts, and links. It does not need a database or a browser session.
Make It Useful Beyond the First Command
You can filter notes or search from the shell:
curl --get --data-urlencode 'tag=CSS' https://dondibogusky.com/notes/
curl --get --data-urlencode 'q=astro' https://dondibogusky.com/search/
$ curl -fsS --get --data-urlencode 'tag=CSS' https://dondibogusky.com/notes/
Archive
# Notes: CSS
Short essays and durable notes on content systems, frontend craft, static
publishing, and the habits that keep projects moving.
## Making Contrast a Build Constraint
How this site turns APCA contrast targets into build-time checks for semantic
color roles across light and dark themes.
[https://dondibogusky.com/notes/making-contrast-a-build-constraint/]
August 7, 2026 ~4 min read
Topics: Accessibility, Design, CSS
## How This Site Uses Design Tokens
How this site's layered design tokens keep color, typography, motion, focus,
and expressive pages consistent without replacing Tailwind utilities.
[https://dondibogusky.com/notes/design-system-tokens/]
July 11, 2026 ~3 min read
Topics: Design, CSS, FrontendThe escape hatches matter too. Following nytpu’s example, X-Original: true returns the original HTML. X-Color: false removes ANSI styling for files, pipes, or a quieter terminal:
curl -H 'X-Original: true' https://dondibogusky.com/
curl -fsS -H 'X-Color: false' https://dondibogusky.com/notes/ -o notes.txt
The server cannot see a local NO_COLOR setting or tell whether curl’s output is piped, so that choice is explicit. A short footer points to terminal help instead of repeating every command on every page.
Another Way to Check the Site
Trying the HTML in Lynx uncovered a related problem: CSS gaps had been doing work that the markup should have supported. Tags ran together, and separate mobile and desktop menus both appeared. Semantic lists made those groups readable without the styles. Theme buttons now appear only when the JavaScript that makes them work initializes.
The curl view started as a neat trick. Building it was also a useful check on whether this site’s content could stand on its own. A static publishing site had already done most of the hard work; giving it another way to be read felt like a natural next step.