I got rid of HTTP Auth. Having SSH-based auth for a website feels nice!
I feel I'm getting sick. Have not stopped sneezing for hours.
At least auth and mail forwarding is done.
Ended up setting up the email inbound via Google Workspaces. Turns out you can have more than one domain for the same workspace -- sick.
Now, since it's so late, I'll just llm my way into better auth and then catching up the z's before going to work.
Guest list growing!
We are 6 people at the time of writing. 4 out of which will be presenters. Nice!
There's issues with the admin UI still, the password thing based off HTTP Auth is janky. Also, hello@humansandcomputers.com should be an email that sends an email back to both Cora and me.
So, I guess that's my todo list for now:
Switch auth to something better--like SSH key based auth.
Setup a mail forwarding service for inbound. Surely this can run inside the server too!
I am not feeling too inspired today. But I guess that's okay; I shall find solace in Picasso's words:
Inspiration exists, but it has to find you working.
[Sun Mar 08, 2026 9:58 PM PDT]
I will add "Personal Website" to the form. No AI though; you know, just to feel something.
[Sun Mar 08, 2026 10:18 PM PDT]
I have been unable to get much done. It's not my day today.
[Sun Mar 08, 2026 10:44 PM PDT]
I am starting to get into the flow. Seems it took a whole hour.
The next steps are:
After that, I can easily modify the form to write to the new database column for each signup.
[Sun Mar 08, 2026 11:11 PM PDT]
I had to use AI, but at least the website part is done. Had to do it because I have to work tomorrow so there's no time for fun and learning and getting lost in rabbit holes. Sigh. But hey, at least it's done.
Now I am going to get hot reload working so Cora can be more
productive. The --hot flag is not enough for Bun apparently.
This little toy of us is inspiring. Gosh, I missed this electric feeling of creation.
I'll start narrating what went into the site. If anything to organize my own thoughts. Of course, it's also important when trying to unsloppify jailed LLMs like Claude or Codex.
March 1st. Cora and I checked which domains we owned to see
if we could create a club with a sick name in San Francisco -- the
city that lost that which brought it to where it is today; no wonder
people are wondering where we come from or where do we go from here;
we lost touch. We were between lostrequest.com and
humansandcomputers.com.
I guess that request will have to stay hidden until further notice!
As many counter-culture movements, I just wanted to avoid what I'm tired of hearing outside. Vercel, services, clusters, lack of understanding and complexity and recycled ideas sold as new... Ugh!
Back to basics.
There's something beautiful about the classics. Something timeless about Unix, files, open protocols such as HTTP, SSH, and man pages. Initially I thought it was an aesthetics thing; I think it goes further than that. I don't think it's a coincidence that mathematicians and pioneering programmers talk about great design in a divine way. Hopefully someday I'll understand.
This site is just scratching an itch. The equivalent of wanting to avoid busy streets and the metropolitan and wanting to go to the fields where things don't change. Except it's digital. People want to say that technology changes fast, but once you dig deep enough, you realize it's all the same: it's still GNU utils; printers use Apple's CUPS; UTF-8 is from the late 80s and it's a superset of ASCII which is, what, the 60s? You know, when LISP, the language that introduced conditionals, first-class functions, recursion, garbage collection... The more things change...
I think looking back is crucial in a world where everyone is obsessed about what comes next. My ideas come from remembering; rarely from imagination. I wonder if this is true for Cora as well.
I want Humans & Computers (HC) to remain simple and embrace the worse-is-better [^1][^2] philosophy.
[^1]: Worse Is Better [^2]: The Rise of Worse Is Better
Cora needed to clone the repo. git clone cora@hc:/srv/humansandcomputers
was failing. Two issues: the repo wasn't configured for shared group access,
and git's safe.directory check was blocking her.
Fixed it:
core.sharedRepository = group on the repoBoth diego and cora are in the hc group. Push and clone work for both.
This led to a conversation about what we're building. Three projects crystallized:
The idea: your SSH key is your login credential for the website.
$ ssh hc auth
Hello diego! Your login link (valid 60s):
https://humansandcomputers.com/auth/a7f3x9...
You click the link, browser sets a session cookie, you're in. No passwords, no OAuth, no signup form. UNIX users are the identity provider.
We looked at the alternatives:
SSH link + cookie wins: lowest effort, most on-brand, reuses what exists.
A self-hosted git repo browser. Our own GitHub. Read-only web UI to browse repos, commits, files, diffs. Push and clone stay over SSH.
A blog where changes are commits. Not a CMS, not a static site generator. A file. Every edit is a git commit. The commit history is the revision history — diffs show how the thinking evolved. Readers see the current version by default but can explore the history.
The primitive: creating beautiful products on top of solid foundations. Filesystems, git, SQLite, HTML as a rendering format for plain text.
Right now, routes are hardcoded in routes.ts:
"/": () => html("./public/index.html"),
"/signup": () => html("./public/signup.html"),
"/guests": () => html("./public/guests.html"),
Every new page means editing routes.ts. That's fine for 3 pages but won't
scale to a devlog, user profiles, git browser, etc.
The plan: if a file exists, serve it. The filesystem is the router.
public/
index.html → /
signup.html → /signup
guests.html → /guests
devlog/
index.html → /devlog
on-ssh-auth.html → /devlog/on-ssh-auth
Rules:
public/<path>.html or public/<path>/index.html
existsAPI routes stay explicit in routes.ts — they have logic, not just files.
Page routes become implicit — drop an HTML file, it's live.
This is how the devlog gets published: render the .txt file to HTML, serve it at /devlog. Later, the git browser and user profiles follow the same pattern. The filesystem is the CMS.