life, Sport

Year in Review: Books and Rides of 2025

For the past few years (2024, 2022, 2019201820172016201520142013), I’ve wrapped up the year by summarizing books and sports events—running, biking, gravel fun/suffering, and other questionable life choices.

2025 is no different.
Except it kind of is, because this was the year AI stopped being “the future” and the world become more (and more) crazy by the minute.

Let’s start with the books.


Books That Made Me Think

Clean Code – Robert C. Martin
Yes, I re-read it. Again. Apparently I still need to be reminded on many good aspects of ‘clean’ code.
Uncle Bob remains annoyingly correct.

Murakami – What I Talk About When I Talk About Running
I wrote about this one earlier this year. It’s not really about running. It’s about showing up, embracing boredom, and quietly grinding forward.
Which is also the most accurate description of debugging production on a Friday afternoon.

The Psychology of Human Misjudgment – Charlie Munger
I summarized Munger’s lessons this year. The man spent nearly a century documenting all the creative ways humans confidently shoot themselves in the foot.
Smart people don’t avoid mistakes—we just build better stories around them.

Range: Why Generalists Triumph in a Specialized World – David Epstein
Turns out being “kind of good at many things” isn’t a flaw—it’s a survival strategy. Epstein makes a compelling case that breadth wins in messy, unpredictable systems.
Which explains both modern tech careers and the contents of my garage.

Project Hail Mary – Andy Weir
A man, a spaceship, impossible physics problems, duct tape, and an alien who communicates via jazz hands and math.
Pure joy.
If The Martian made you happy, this one will make you irresponsible with sleep.


The Year on Two Wheels (And Two Feet)

2025 was the year I finally admitted that gravel racing is just mountain biking for people who think they’re still road cyclists. 2025 was not about dabbling.
It was about distance, stubbornness, and rides long enough to require negotiations with your own legs. According to Strava, my idea of “a good day on the bike” is apparently anything north of 120 miles.

Here are some numbers

And next are the top 5 rides of the year, ranked by pure, unapologetic mileage:

1. California Death Ride (a.k.a. “Let’s See What Breaks”)

166.8 miles · 8h05m · 4,350 m climbing
This was the big one.
Alpine County served up altitude, endless climbing, and the kind of fatigue that makes basic arithmetic difficult. Long, brutal, beautiful—and exactly as advertised.
Legs emptied.
Brain quiet. Highly recommended if you enjoy earning your recovery week.

2. Marin County Mega Ride

161.5 miles · 5h32m · ~2,000 m climbing
Fast, flowy, and just enough climbing to keep things honest. One of those rides where everything clicks, the weather cooperates, and you start making wildly optimistic plans for the rest of the season. Dangerous mindset. Great day.

3. Three Lakes to Morgan Hill (Because One Lake Is Never Enough)

134.7 miles · 5h05m · ~1,500 m climbing
Long, steady, and sneaky-hard. The kind of ride that doesn’t feel epic until mile 110, when your legs quietly file a complaint. Classic endurance builder.
Zero regrets. Some soreness.

4. Old La Honda to Half Moon Bay and Back

126.2 miles · 4h48m · ~1,850 m climbing
A greatest-hits tour of local suffering.
OLH never disappoints, Half Moon Bay always lies about the wind, and the ride home is where humility is restored.
Did this voluntarily just for a good espresso.
Would do it again.

5. Windy Hill + Butano (Name Checks Out)

121.2 miles · 5h19m · ~2,300 m climbing
Rolling climbs, long stretches of solitude, and enough elevation to remind you that “endurance ride” is just code for “extended negotiation with gravity.”


The Pattern (In Case It Wasn’t Obvious)

  • Lots of long days
  • Serious climbing
  • A recurring belief that anything under 120 miles is “kind of short”

Strava confirms what I already suspected: 2025 was about volume, consistency, and seeing how far you can go before snacks become critical infrastructure.

The pain faded but the data remained.

I also finally nailed my race week taper strategy.
The secret is doing less while eating more.
Years of preparation paid off.


Other Moments

Built SeasonApp

It started as “I’m tired of losing recipes in browser tabs” and escalated into a full-stack AI-powered cooking platform. React, Prisma, Node.js, OpenAI—and long philosophical debates with Cursor about database schemas at 1 a.m.

It now helps people manage recipes, generate new ones, and stop Googling “easy chicken recipe” for the 47th time.
My family uses it – so that’s already a win.

A Lot… About AI Coding Tools

The pattern is clear: AI is incredibly useful—as long as you treat it like a very confident intern who occasionally hallucinates entire APIs.

Security Became Personal

I got strangely passionate about password security and MFA/passkeys this year. Mainly, after seeing some friends being hacked by some (really) bad actors. It’s far from being fun and with a few simple steps you can remove ~90% of the attackers.
The TL;DR:
* Turn on MFA.
* Use a password manager.
* Stop trusting your memory from 2014. Seeing “password123” still alive in 2025 does emotional damage.

The Pull-Up Counter That Actually Worked

My son asked, “Can we build something that counts our pull-ups?”

So we did. A real-time pull-up tracker using TensorFlow.js and a webcam.
Teaching a machine to recognize human suffering was harder than expected—but now we have data-driven trash talk.

Because if it’s not measured, did it even hurt?

Things I Learned (The Hard Way)

  1. Focus beats options. You can’t cross a canyon in two jumps. This applies to startups, training plans, and side projects that “just need one more feature.”
  2. Charlie Munger was right. Especially about how intelligence doesn’t protect you from bad decisions—it just helps you justify them.
  3. Great teams scale via systems, not heroics. Google, Facebook, Netflix all figured this out.
    Burnout is not a strategy.
  4. Tapering is a skill. Your brain will beg for “just one more hard session.” It is lying.
  5. AI coding tools are magic—until they aren’t. Then you lose 30 minutes debugging code that confidently imports a library from an alternate universe.

Looking Ahead

2026 will probably look similar.
More books.
More miles.
More yelling at AI.
Definitely more coffee—especially since I wrote a guide on dialing in espresso.

If you made it this far, thanks for reading.
Here’s to another year of breaking things, building things, and occasionally fixing the things we broke.

Happy New Year 🥂 Be strong!

Standard
Business, life

Master Big Goals by Narrowing Your Focus

Big goals have a strange side effect: they make capable people behave like they’ve had too much coffee and not enough sleep.

You look at the size of the mountain, and suddenly you’re:

  • Planning twelve steps ahead
  • Worrying about failure
  • Comparing yourself to people already at the summit
  • Reorganizing tools instead of using them

It feels productive. It’s not.

As the saying goes:

“You can’t cross a canyon in two jumps.”

Big goals don’t fail because they’re too big.
They fail because focus gets diluted.

Continue reading
Standard
Business, life

Charlie Munger’s Lessons on Human Judgment

Charlie Munger spent nearly a century studying how humans outsmart… themselves. The man treated bad decisions the way a forensic detective treats fingerprints. And the funny part? Most of the traps he identified hit smart people harder than everyone else. Intelligence doesn’t protect you—it just lets you come up with more elegant ways to be wrong.

Here’s the Munger playbook, rewritten in plain English and spiced with some real-world bruises. Ahh… it’s also much shorter then the original work. However, you do with to read the original as he is much better writer.

Let’s start with the elephant Munger kept in the room: brains aren’t the bottleneck—judgment is. You can have a rocket scientist mind and still steer straight into a mountain if you use it wrong.

1. Using One Mental Model Is Like Using One Dumbbell

When someone only uses the tools from their field, they distort reality to fit their toolbox.

Continue reading
Standard
Business

Protect Your Digital Life: 3 Key Security Habits

We imagine hackers as trench-coat wizards hammering keyboards while green code rains down the screen.
Reality is less Matrix and more lazy cat burglar.

They don’t “hack in.”

They log in, using the same password you used for LinkedIn in 2014 and also for your Gmail, bank, gym, YMCA portal, and that meditation app you opened (only) once.

Let’s fix that.
It’s not hard but it’s important.

Continue reading
Standard
AI

Gemini 3: Your New AI Coding Assistant

Every developer has that moment where they stare at the screen and wish for a magic wand.
Something that can unscramble a legacy codebase, sketch a UI without endless Figma tabs, or summarize a 300-page API doc that reads like… and create some good tests out of nothing.

Google just dropped something dangerously close.

Gemini 3 isn’t another “slightly better benchmark” release. It’s a real step forward—especially for people who build things for a living.

Here’s where it gets interesting:

Continue reading
Standard
AI, webdev

8 Top Tips to Actually Use Cursor (Without Setting Your Wallet on Fire)

TL;DR

Open a new agent/chat for each new request or task, instead of continuing everything in one long conversation.

Keeping unrelated work in a single long chat makes the agent less efficient, increases context noise, and also becomes more expensive because the full conversation history keeps getting processed.

Best practice:

  • One request / task = one new agent
  • Keep chats focused on a single issue or feature
  • Start a fresh chat when switching topics
  • If you can –> Combine Cursor with Ollama + local models

If you’ve been coding anytime in the past year, you’ve probably heard the buzz about Cursor — the AI-powered IDE that promises to write your code, clean your code, and maybe even refactor your soul.

It’s built on top of VS Code, so it feels instantly familiar.
But the moment you hit that shiny AI shortcut, you realize: this thing is smarter than your codebase and hungrier than your wallet.

After a few months of using Cursor — and after accidentally vaporizing a scandalous number of API tokens — I’ve learned how to stay productive and solvent.


And yes, the TL;DR is that you can still combine Cursor with Ollama + local models to get many of these benefits for free.
Here are my 8 hard-earned tips to make Cursor your loyal sidekick within the limits of your budget.

The #1 tip: Control context scope aggressively – This is the biggest win

Cursor auto-includes files, diffs, and history—this explodes token usage.

Do this:

  • Manually select only the exact files/functions needed
  • Avoid “entire repo” context unless absolutely required
  • Use @file and @selection instead of implicit context
  • Clear chat or start a new thread when switching tasks

Why it matters:
Token cost scales with every line in context, not just your prompt.

Below are a bit more tips:

Continue reading
Standard
AI

Transform Your Coding with Gemini CLI: A Local AI Assistant

Every developer has a moment mid-flow when they break concentration to look up a flag, debug an error, or Google that one awk trick they always forget. It’s death by context switching — and the browser is the grim reaper.

That’s where Gemini CLI comes in.

It’s not just another AI chatbot ported into a terminal.
It’s an embedded, context-aware development assistant that lives alongside your code, speaks your language, and remembers what you’ve worked on — locally.
No browser tabs, no copy-paste gymnastics, no handing your project to the cloud gods.

When choosing an AI coding assistant, developers have several strong options to consider.
Claude Code offers sophisticated reasoning and natural language understanding, excelling at complex problem-solving and architectural decisions through its command-line interface.
OpenAI Codex, which powers GitHub Copilot, integrates seamlessly into popular IDEs and has been widely adopted for its reliable code completion and suggestion capabilities.

Google’s Gemini stands out with its multimodal capabilities and strong performance across various coding tasks, while offering a particularly appealing advantage for developers just getting started: it’s available for free.

This makes Gemini an excellent entry point for newcomers who want to explore AI-assisted development without any initial investment, allowing them to experiment and learn before committing to paid tools as their needs grow.

Let’s unpack how Gemini CLI changes the game for developers, how to use it effectively, and where it still falls short.

Continue reading
Standard
Chrome, JavaScript, webdev

Building a Real-Time Pull-Up Tracker: How I Taught The Browser to Count Our Pain

It started as a simple idea my son brought up: Can we make a web app that counts our pull-ups during our pull-up games?

Turns out, teaching a machine to recognize human suffering is both hilarious and complicated.
What began as a “let’s make a quick pull-ups app” spiraled into an intense journey through computer vision, browser quirks, and a few accidental infinite loops that made our laptop sound like a jet engine.

The “Simple” Goal

I wanted to automatically count pull-ups using a web camera.

Easy, right?

Just detect a human, see when they go up and down, and count.

Continue reading
Standard
Business, life

Nine Mental Models to Stop You from Making Dumb Decisions

We all think we’re rational.

We’re not.

Most of the time, most of the people are just apes with phones making pattern-matching errors at scale. If you aren’t sure, just look around.

Shane Parrish’s The Great Mental Models, is a antidote — a toolkit for thinking clearly and making fewer stupid decisions. Hopefully.

Btw, I wrote about it in the past as I ‘took’ ideas from the great Charlie Munger:

Below are nine models I keep coming back to, rephrased for the real world (and with fewer academic eyebrows raised).

Continue reading
Standard