Colophon
# how this site is made, features and curiosities
- 2023-09-24first commit of the old site, alvseven.com. a day later, a commit called "production ready"
- 2024-07-31first commit of this repo. alves.sh is a placeholder and the articles live on alvseven.com
- 2024-08-22first article published: type narrowing vs type widening, on alvseven.com
- 2026-07-30the blog moves here, and every old alvseven.com link redirects to the same page on alves.sh
- 2026-09-24three designs on a canvas. the terminal starts as a toggle and ends as the only look
- 2026-09-25the reviews page
- 2026-09-28first workout in the gym log
- 2026-11-04this page
## the name
alves plus a domain, and .sh is the extension of a shell script. I like terminals, so a terminal-like site behind a .sh domain was the obvious match.
## the design
Before any code, there were three directions on a canvas: a minimal site, a bento grid, and the minimal site with a terminal mode you could switch on with >_. The bento grid lost first. Then the toggle took over: the terminal fit the domain and my style better, so it became the whole site.
## favorites
The parts I'm proudest of are the gym log, the Spotify widget and the chess board.
## the shell
Every command is a plain function from what you typed to a result, so they're tested without a browser. There's tab completion, history (arrow up) and a few pipes: head, tail, grep and wc.
## the home page
Every block on the home page is a command and its output: whoami, now.txt, neofetch, the latest articles, the bucket list, Spotify, chess and the gym. Type one of them on any page and you're taken home with it already running.
## shortcuts
1, 2 and 3 open home, writing and reviews, t changes the theme, l the language, and / jumps to the shell. They're off while you're typing, so they never get in the way.
## the window bar
On a computer, the bar at the top works like a terminal window: hi@alves.sh followed by where you are, like ~/writing.
## the gym log
There's no database. An iPhone Shortcut sends the workout to an API on this site, which commits it to a JSON file in the repo, and Vercel redeploys. I can also undo a log or log a past day, and the reply says how many days I trained that week. the full story →
## spotify
The widget asks what's playing every 15 seconds. When nothing is, it shows the last song, which is cached for 5 minutes and the profile for 6 hours, because asking for everything on every poll got the site rate-limited.
## chess
I mostly play on chess.com. Ratings and the last game come from chess.com and lichess, cached for 10 minutes so neither API sees per-visitor traffic. The daily puzzle is lichess's, and your moves are checked against the solution, not against the rules, so there's no chess engine here.
## two languages
English lives at /, Portuguese at /pt, and articles have Portuguese URLs too. Press l to switch. Shell commands stay in English, but their output is translated.
## curl alves.sh
Command-line clients get the home page as plain text, with colors.
## preview images
The cards you see when a link is shared are rendered by a script and committed, not generated on each request.
## fonts
A script trims them down to only the characters the site uses, to keep them small.
## reviews
Every photo goes through one script that crops it to 4:3 and 1200×900, so a phone picture and a screenshot look the same on the page. The price is in reais, plus dollars at the exchange rate of the day the review was written. The rating bar has one # per point. Each review has its own page and preview card, and the category filter lives in the address, so a filtered list can be shared.
## articles
Each one has a table of contents that follows you as you read, the reading time, and a share button. On phones it opens the share sheet, so Instagram works too.
## articles in vim
On a computer, articles have a vim status line at the bottom, and vim's keys scroll them: j and k, d and u, gg to the top, G to the bottom. I'm not a vim nerd, but I like to LARP a little, in honor of a friend :p
## page transitions
Moving between pages uses React's view transitions, so the content swaps smoothly instead of blinking.
## neofetch and uptime
neofetch shows the machine this site is written on, and uptime counts my age and how long I've been coding.
## themes
Dracula because it's famous and I've used it before, Gruvbox because it's cool and reminds me of a friend. Whichever you pick is applied before the first paint, so switching pages never flashes the wrong colors. Dark is the default, whatever your system says.
## the chess board
It's text, not an image: one unicode glyph per piece, drawn from the game's FEN, seen from the side I played.
## no javascript
The collapsible bits (the warning at the top, the gym log, the easter egg in whoami) are plain HTML, so they work with JavaScript off.
## rss
Every article is in feed.xml, in both languages, for anyone who still reads with a feed reader.
# what's next
- -a man page (man alves)
- -a quote of the day page, for my random thoughts
- -a page where visitors can draw and leave their mark on the site forever
- -Most commits happen at 7 PM.
- -53 of the 246 commits were made between midnight and 6 AM.
- -The busiest day had 44 commits: november 4, 2026.
- -Wednesday is the busiest day of the week.
- -Take the last letter of alves and add the domain: s.sh. Read it again: ssh.
- -This repo went quiet for 695 days, from September 2024 to July 2026. The articles kept coming on the old site.
- -The old site's history has commits like "e tome e tome e dalhe" (Brazilian slang, roughly "take that, and that, and let's go") and "design system, layout, we going huge".
- -The first article I started, a type challenge of level extreme, in July 2024, still isn't published.
- -iOS draws ♟ as a color emoji unless you ask for the text version with an invisible character, U+FE0E. The chess board asks.
- -The gym graph is drawn like GitHub's contribution graph, month labels included.
- -The 404 page has a working shell too, so you can `cd` your way out.
- -The favicon is the "a" from the neofetch logo, and it looks like an Among Us crewmate. The bigger icons show the whole word.
- -`help` doesn't list every command.
- -This page was made in 13 commits and about two hours, counting the commit that wrote this line.


