Building a chatbot from my phone

Claude Code Web gave everyone $1000 credit to experiment with. I decided to build a restaurant catalogue chatbot for Umeå with full menu data.

The stack is Cloudflare: D1 for the database, Vectorize for semantic search, R2 for storage. Gemini parses uploaded menus. Perplexity fills in restaurant information. Sounds complicated but it’s fairly straightforward.

The workflow is what makes this interesting. Claude Code Web connects to a GitHub repo. I ask for a feature. It reads the code, makes edits, creates a PR. Cloudflare automatically deploys a feature branch with its own URL.

I test it on that URL. Ask for fixes if needed. Approve. It merges to main. Production deploys.

All of this from my phone.

I’ve made around 90 PRs. Spent about $100. That’s roughly $1.11 per shipped feature.

The constraint is being clear upfront. If I’m vague, Claude goes in the wrong direction and I waste iterations. When I’m precise, it usually nails the implementation.

The only real limitation is D1 migrations. Can’t run those from mobile. Though I could probably solve that with a GitHub Action.

I also bought a domain for 9 kronor.

It’s been a fun weekend experiment.

The great war of tabs vs spaces

For the longest time there was a disagreement. It was about tabs vs spaces. Developers argued in threads and pull requests. No conclusion to what was better.

I jokingly always said ”one tab and one space” and very few laughed. That is how serious the ”war” was.

Then code completion, prettier and lint came along and the discussion ended.

I wonder what discussions we have today that will feel ancient in a couple of years time.

Micro-services? AI assisted coding? Type in JavaScript? The cloud?

Force of habit

Until it becomes a habit, breaking a routine requires force.

Impostor syndrome asymmetry

With impostor syndrome, I see the complete me. What I’m good at and what I’m not good at.

When other people look at people with impostor syndrome, they tend to see what those people are good at.

That’s the asymmetry.

I experience every moment of struggle, every gap in knowledge, every time I’m winging it.

Other people only see the output, the moments where I show up and deliver.

They don’t see the internal uncertainty or the things I avoid because I know I can’t do them well.

So they build an image of me from the highlights while I’m working with the full unedited footage.​​​​​​​​​​​​​​​​

They see the Instagram feed. I see all the photos that didn’t make the cut.

REF: The MVP of AI transformation

I’ve been thinking about transformation a lot recently because… well… AI and while I’ve used it plenty for myself I’ve been struggling with the transformation of a whole organisation.

And I think this was my main blocker, starting to big. With this in mind I started dabbling with alternatives and created this acronym REF.

Result. Eliminate. Focus.

Most AI transformation advice tells you to think big. Build a comprehensive strategy. Map every department. Create governance frameworks. Six month rollouts.

This is why nothing happens.

REF is the transformational version of MVP.

Start with one workflow where you can show a result this week. Not next quarter. This week. Someone writes an email in 30 seconds instead of 30 minutes. That’s the result that changes belief.

Then eliminate whatever makes it hard to do again. Is Claude blocked by IT? Fix that. Do people not know it exists? Tell them. Is the prompt buried in a shared doc? Make it a bookmark. Eliminate friction until using AI is easier than not using it.

And focus means picking one thing. Not “transform customer service and sales and operations and HR.” Pick customer service. Or pick one team in customer service. Or pick one type of email that one team sends.

The paradox is that narrow actually spreads faster than broad. When one team gets a 10x improvement on something specific, other teams notice. They ask how. They want in.

Trying to transform everything at once means no one experiences anything changing.

The better you get, the harder it is to explain

Expertise makes things intuitive. What took months to learn becomes automatic. You see solutions without thinking through all the steps.

This is why vetting senior developers is tricky. If you can’t explain your reasoning, you can’t convince the team your solution is good.

Code reviews. Architecture decisions. Technical discussions. Intuition only helps if you can translate it into words.

Sidewalks filled with robots

Will our near future sidewalks be filled by slow robots in a similar fashion like the VOI and Ryde scooters? and will we humans stumble and complain about them in a similar way?

The vicious cycle of over complication

Overcomplicated codebases teach us developers to overcomplicate.

We work daily with code that should have been replaced years ago. So we start building for all the maybes upfront.

This creates the exact kind of complicated code we hate working with. The cycle continues.

And it wasn’t that simple code failed us. It was that we were never allowed to throw the complicated code away and start over when we learned what we actually needed.​​​​​​​​​​​​​​​​

Internal soundtracks

Your thoughts are the internal soundtracks you listen to even more than your favorite song. - Jon Acuff - Soundtracks

F#@%ing free food

I was visiting New York and the offices of a company I was working with. It was one of those startups that poured down millions in making it comfortable to relocate by having a super nice office that you actually liked hanging in and a bunch of free stuff. Drinks, candy, breakfast, lunch. They even had cold brew on tap. I loved it, cold coffee.

One day during lunch a newly opened restaurant catered sandwiches. And I recall so vividly this guy complaining on the company email about his experience with the sandwich, how he bashed the restaurant and that there was too much mayonnaise and so on.

That’s when I started using the sentence “f*@$ing free food” to somehow visualize the absurdity in complaining about something free. “I know… f&%#ing free food… am I right?”

This is the same feeling that comes up when someone complains about social networks like LinkedIn. People say it has gone worse, that it no longer suits their needs. It’s all sales and cold outreach. Recruiters who don’t read your resume pitch you odd jobs. AI slop everywhere. Productivity bros and gals pumping out content.

We somehow feel entitled to a glorious experience just because we’ve invested a couple of hours on a weekly basis approving some contacts.

We could always leave. Build our own websites. Send actual emails to people we want to talk to. Go to real conferences and shake real hands. But we won’t, because for all the complaints LinkedIn still does the work of keeping us visible and connected without us having to do much of anything.

“I know… f%*&ing free social media… am I right?“​​​​​​​​​​​​​​​​