This website has links. They work quite well. Click an article, read the article. A thoroughly established arrangement.

It also has a terminal.

No visitor research demanded one. It sounded fun to build, and a website about making stuff seemed like a reasonable place to put it.

A prompt with a small vocabulary

The terminal looks like a console: dark background, green text, an ASCII wordmark, and a command prompt waiting for something to happen.

Try this:

articles
read 1

The first command lists the published articles. The second displays a preview of the first result inside the terminal. Use open 1 to visit the page, or clear to clear the output.

Plain phrases work too. “Show me articles” opens the article list. “Who is Jonas?” searches the content. “Surprise me” picks an article, game, or Spindling.

There is a limit to the conversation. Asking for a five-year business plan is unlikely to produce one. That may be a feature.

What happens after Enter

When Astro builds the site, the terminal gets an index of published articles, Spindlings, documentation, people, and a few other pages. Entries contain a title, description, internal link, search keywords, and a text preview where available. Draft and future-dated articles stay out.

The index is included in the page. A TypeScript function reads the submitted command and decides what to do with it.

Some inputs have explicit meanings: help, games, random, clear. Others go through a small search function. Matches in titles rank above matches in descriptions and keywords, which rank above matches in the body text.

“Show me articles” feels conversational because it is a recognised phrase. There is no language model interpreting it at runtime. The work is ordinary parsing and search, wrapped in a familiar interface.

Typing a command does not send the prompt to a backend. Opening a result navigates to its page in the usual way.

Small conveniences matter

The up and down arrows revisit command history. Tab completes a uniquely matching command. Escape clears the input. Result numbers refer to the latest result list, and each result is also a clickable link.

Those details make the terminal pleasant to use. Without them, it would mostly be a text field in costume.

The boundaries are deliberately small. History lasts for the current page session. Output is capped so a long conversation cannot keep filling the page indefinitely. Commands never run shell code; typing sudo produces a joke rather than an exciting incident.

The ordinary article and project pages remain available. Nobody has to learn a command to read something here.

Unnecessary can still be well made

The terminal started as part of the ASCII footer. Moving it to a dedicated page gave it room to behave like a terminal, with scrollback, a readable prompt, and less surrounding furniture.

It is a small example of taking a silly idea seriously enough to make it enjoyable. The purpose can be playful while the interaction still deserves care.

There does not have to be a grand justification. A little curiosity, a manageable scope, and something that feels nice to use are enough for this one.

Type surprise me. Consider the resulting game a highly unofficial meeting.