My personal site

bentossell.com. It’s what I’m doing now and what I did before, and it’s where the things I build end up: bentossell.com/devices, bentossell.com/council-spend, and the rest.

bentossell.com
bentossell.com: the red mascot on a line at the top, Ben Tossell, a line about Ben, a bensbites.com link card, and a timeline of builds starting with devices

Where it started

Every version of my site has been a bit of a toy. The last one was a terminal: you typed commands to find out about me, and there were games in it. Space invaders, snake, tetris.

~/repos/bentossell/index.html
The old terminal site: BEN TOSSELL in orange block letters, builder. investor. dad., welcome to my cli. type help to see commands, and buttons for whoami, now, investments and tools

In August I wanted something new. I’d been looking at ryOS and Alana Goyal’s Notes, two personal sites that work like little operating systems, and I wanted mine to be as unique. My first idea was to make it look like an agent app. Each thread could hold something different: about me, my investments, products I like.

How I got the first version, with mock content and my notes drawn over it, is on Prototyping.

100x this

By the evening it worked. So I asked Droid for more:

i want to make developers who visit this site think
'wow - what an awesome website'. given what we've got,
what could 100x this? i want it to be really
impressive, a ton of attention to detail, easter eggs
and things people can 'discover'.

publishable via here.now

make them ambitious

It went for it. Skins to make it look like different agent apps, a command palette, a terminal in the sidebar, a pet dog, and /grill-me.

~/repos/bentossell-agent/index.html
The agent-app version of the site: threads down the left (About me, Investments, Products I use, Now, Previously), a question and answer in the middle, a panel of files on the right, and a chat box at the bottom
~/repos/bentossell/todos.md

Medium complexity — interactive features

  • add pet functionality from the sprites […]
  • keyboard shortcuts command palette - add link from settings
  • add a terminal experience that opens in the sidebar
  • /grill-me skill the user invokes - the agent interviews the visitor, builds a visitor.md profile in real time […]

High complexity — agent and platform systems

  • add ai functionality?
  • canvas 'mini-app' preview?
  • artifacts in the sidebar?
  • usage reset - if we add ai for chat, let people ask n messages and then have to enter api key to stop abuse?
  • I want to add the thinking + tool calls. maybe all messages should be streamed in?
  • a richer llms.txt that we use as the knowledge base for responses? compiled from searches of me from the web?

By about 10pm I had a long list of things the site could become.

I slept on it and hated the whole thing.

It was too complicated for a personal site. If I made it look like a real agent, I would want to make it a real agent. There would always be another button, interaction or easter egg to add.

Scrap it

After all those versions of the agent one, I knew what I wanted, so I drew it in tldraw. A file tree, with my notes in the margin. I’d seen a personal site by Daniel White that used a file tree as a timeline: what he’s doing now and what he did before, as nested items.

Ben’s drawing in tldraw: # [@bentossell](x.com/bentossell), two lines about him, a ## Now tree with bens bites and investor, a ## Previously tree, a pink note saying markdown formatting tags, and orange arrows to two Ben’s Bites post previews

nah scrap this whole site, i dont like this direction anymore. instead, create the site based on the image attached. the arrows and annotations should appear on hover - make sure when hovering and the substack preview posts come up a user can click to open it (in a new tab). all links should open in a new tab.

the 'trees' should collapse/expand.

original canvas file is ~/tldraw/site.tldraw

My instructions asked for three versions of any design, so I got three (Prototyping). They were the same page at three different widths, with the notes moved about.

I’d drawn a v2 in the same file, without the hover arrows. That was the one I wanted:

The v2 frame in Ben’s tldraw file: # @bentossell in a handwritten font, the two lines about him, a ## Now tree with bens bites (two post previews side by side under it) and investor with the portfolio, and a ## Previously tree; no notes or arrows

no this looks like dogshit.

look at ~/tldraw/site.tldraw again - focus on the v2 frame.

the handwritten font is shantell
no hover annotations or arrows
tree lines should be touching - no gaps
collapsed by default, expandable
when expanding the line 'bens bites' show the two images side by side, hyperlink them to the real post urls from bensbites.com

only create one version.

I didn’t need three versions this time, because I’d already drawn it. Then it was small rounds on how it felt: what’s open when you land, where the tree lines stop.

bentossell.com
The tree site: # @bentossell, a line about Ben, and a ## Now tree with bens bites, building (seven builds) and investor, with a hand-drawn expand bracket

One file

I wanted to change what’s on the site without trawling through a bunch of code.

i want this content to be in a md file i can edit easily. remove all the files we're now no-longer using.

~/repos/bentossell/content.md
# [@bentossell](https://x.com/bentossell)

a self-taught internet builder (i can't code). i make sites and apps with agents all day and explain how it works as i'm learning.

<!-- expand-annotation: expand -->

## Now

- [bens bites](https://bensbites.com)
<!-- always-expanded -->
- building
  - [agent words](https://bentossell.com/words/) — a visual dictionary
  - [design words](https://bensbites.com/design-words) — a visual dictionary of design
  - [mascot](https://bentossell.com/mascot/) — animate your own mascot
  - [devices](https://bentossell.com/devices/) — drag through 50 years of devices
  - [realtime-tokens](https://bentossell.com/realtime-tokens/) — live OpenRouter model traffic
  - [token activity](https://bentossell.com/token-activity/) — every token my agents use, by day
  - [bg-gone](https://bentossell.com/bg-gone/) — remove image backgrounds in your browser
- investor
  …

Markdown is plain text with a small amount of formatting. A heading starts with a #, for example. The page reads the file and draws the tree from it. Every heading, every branch, every link. Then:

so if i change content in content.md it'll sync to the site when published?

Yes, once it’s published again. Changing the file on my laptop changes my copy. The site changes when the new copy goes up.

That’s why the building list was there. For a month, putting something new on my site was one more line in content.md.

On my domain

The site was on a here.now address. I wanted it on bentossell.com:

deploy via here.now but use my custom bentossell.com domain (hosted on vercel). use [@Chrome](plugin://chrome@openai-bundled) to add the domain to here.now and connect the dns / nameservers / whatevers needed.

The agent used Chrome to add the domain in here.now. here.now said which records it needed, and the agent changed them in Vercel, where my domain lives. A domain such as bentossell.com is a memorable address. DNS records tell browsers which server should answer when someone visits it:

It took about 20 minutes to settle, which is normal when an address starts pointing somewhere new. I checked whether here.now needed the project on GitHub. It didn’t. The agent published the files straight from the folder on my laptop.

The day before, I’d moved the domain to Vercel, so all my domains are in one place. I was sure it was on Squarespace. It was on Cloudflare, and Squarespace was an old link to a site I don’t use. I’d told the agent to look first and not change anything, so it found that out before it touched anything.

Little things

The new site was deliberately more basic, so small details made a bigger difference. I drew a little mascot in the same tldraw file, and now he walks along the top of the page. How he got there is on Mascot.

A week later, here.now’s analytics showed a lot of missing pages:

in my here.now analytics i can see a bunch of 404s. we need to fix that.

Most were bots trying addresses like /wp-admin, looking for a WordPress site to break into. Nothing to fix there. The real ones were old links to my blog and the little icon browsers ask for. It fixed those. Then I asked for a fun 404 page, with the mascot on it:

bentossell.com/nothing-here
The 404 page: the mascot on the top line, # 404, this page isn’t here. it might never have been., and a tree of links back to the site and the builds

How it works

My site is static. Everything shown on the page is in the files. A dynamic site pulls information from somewhere else, such as an API or database.

I only needed something dynamic once, for the picture that shows up when someone shares a link to realtime-tokens. Its numbers change every five minutes, so a fixed picture would be out of date by the time anyone saw it:

for bentossell.com (~/repos/bentossell) i need to setup a share image for any social platforms. i also just added a new site to it bentossell.com/realtime-tokens - so i'd want a dynamically generated social share image for that (the data changes on the site so it should change depending on when a user shares the url) - how do i need to think about this whole setup?

The homepage’s share picture: Ben Tossell in handwriting, builder and investor on a branch of the tree, and the line things I’m doing, things I’ve done, and links I keep

The homepage keeps one fixed picture. The token page gets a small service on Vercel that draws a new one when X or Slack asks for it. Everything else stays static.

Changing it again

I was happy with the tree, and I left it alone for a month.

Then I started building this course, and I really liked its style. So I wanted my site to look more like it. This time I used Emil’s prototype skill (Prototyping):

/emil-prototype ~/scratch/site-course-theme go from here. i want 3 versions of a redesign.

im thinking top header section with a sentence or two. "I build things i find interesting and write about it. I can't code and I invest in tools for builders."

have a file tree for my history - but in our d~/course-design/design.md style - - try one version within a prompt card.

come up with 3 new creative versions that keep the site compact but visually impressive using the components from course-design.

These weren’t the same page at three widths. I got four, each with its own way of showing my history and my portfolio:

localhost:4188/proto/redesign/
Version Prompt: the history as tree output in a prompt card, and the portfolio as a portfolio.toml file

I didn’t pick one. I took a bit from each:

ok this feedback is a right mashup...

i like the header of prompt. but the @bentossell should only be on hover.
i dont want to lose the mascot animation and interactivity on the live site right now. how can we weave that in? could we do it following a user through the page? and still let them control and interact with it.

then a prompt card (which is just bensbites.com with an external link icon instead of copy, clicking the card takes you to bensbites.com
then underneath have the vertical timeline interaction for the builds. move the name and tagline to be above the preview.
then the canvas portfolio from canvas. but take your co out of it. put your co in a prompt card as an extenal link to me.
then the file component from canvas. with my history ~/past just
"sequoia scout
a16z scout
makerpad founder, exited to Zapier"

Then a night of rounds on the mascot, and it went live the next morning. That’s the site at the top of this page. It’s so easy to have an idea for a new version of something and have it made.

What got dropped

Before any of this, in July, I tried making the site a tldraw canvas: my desk, with polaroids and sticky notes, and you’d zoom around it. I didn’t love it: “the direction is broadly correct but execution is poor, it looks very basic.” I never went back.

The July desk: ben tossell in the middle of a paper-coloured canvas, with polaroid placeholders, sticky notes, an index card for the fund, hand-written labels for scrapbook, the fund, writing and guestbook, and tldraw’s drawing tools at the bottom

Notes

  • I wanted something new, so I prototyped my site as an agent app, then asked Droid to 100x it.
  • I slept on it and hated the whole thing. Too complicated for a personal site.
  • So I drew what I wanted in tldraw. Three versions looked like dogshit, so one version from my v2 drawing.
  • Then all the content into one markdown file I can edit, and onto bentossell.com.
  • Then little things: the mascot, a 404 page, a share image that changes for realtime-tokens.
  • A month later I redesigned it again. Four versions, and I took a bit from each.