not all visitors are the same
Someone who wants to learn from me, someone considering me for a job, someone looking for a mentor – they want different sides of me. So my site now notices how you’re reading, and I’m using it to learn whether that actually helps.
Well, different people come to my site. Someone who wants to learn from me, someone probably considering me for a job, a mentee looking for a mentor. They’re probably interested in different sides of things. So that’s why I wanted the site to cater to each of them differently, instead of giving everyone the same thing.
There’s a second reason, honestly. I like using my own site to try new tech and see how it actually works. That’s for my own learning. I treat myself as a product – my own jobs to be done, my day to day – and products like this site is where I try things first.
Here’s what it does now. The story on the home page is long, about 24 screens. If you flick through it fast, the site offers you the story in a minute – one line for each part, and you can jump straight to any of them. If you’re reading at your own pace, you’ll never see it.

On a post like this one, if you read to the end, it points you to another post. This is the newest one, so it’ll be the one before it. If you skip straight to the bottom, it shows you nothing. It doesn’t know who you are and it never reads what you type. It only looks at how you’re reading. And there will be many more.

I like a delight you don’t notice at first. Most people will never see any of this. The ones who need it get it..
Honestly, the part I really experimented with here isn’t Jev. It’s the decision engine underneath. It works on a state machine – a decision model. A visit is always in one state: just arrived, reading, skimming, finished. Only what you actually do moves it from one state to the next, and each state only allows a few things. So the site can’t offer you anything in the first eight seconds, or twice in one visit, because no state allows it.
I didn’t start there. I started with a long list of nice moments I could show people, and then I asked, okay, when would what happen? I used an LLM to guide me there. I came across a talk by David Khourshid on state machines and really liked that way of thinking, so I asked it to borrow the ideas from XState, his open-source library. That’s how the engine got its shape.

Jev sits inside that. The way I’d explain Jev to a friend: it’s someone you go to when you’re stuck on a decision. There’s a set of choices and they pick one. Here the state machine has already narrowed the choices down. Is this person reading or skimming? Would a pointer help right now? Jev answers in under a second, and my code decides what to do with that.
I wrote what each offer says, decided when it’s allowed to show up, built it, and set up how I’d measure it. That’s the part I enjoy, the whole thing end to end.
The first version did too much. It changed the page six times in forty seconds. So I made it wait. A fair first look before it does anything, one change at a time, and nothing at all if you’re doing fine on your own. I think a page that does less is better than one that keeps changing on you.
I don’t know yet if it helps. One in five visitors get the site without any of it, so I can compare. The counts are anonymous, just totals, nothing about you. I’ll share what I find.
This is the first of a few things I’m building for myself. An on-device personal assistant for myself, something that helps me spend effectively and invest properly, things like that. And a lot for health – tools that actually work to keep me healthy. I’ll write about each one as I build it…
