← Back to blog

I'm Tracking My Dog's Walk to Mordor — On the Blockchain

~7 min read

My dog Finn wears a GPS tracker on every walk. One day, while looking at his cumulative distance, I thought — how far has he actually walked in total? And then the more interesting question: what if I mapped that distance onto something?

Turns out the Fellowship of the Ring walked roughly 1,800 km from the Shire to Mordor. Finn does about 5–8 km a day. That’s a journey that could take a few years of real walks, tracked in real kilometers, visualized on a real map of Middle-earth.

So I built it. A website that tracks Finn’s progress along the Fellowship’s route. Every walk counts. Every kilometer is real.

And then I made a decision that changed the whole project: I put it on the blockchain.

Why would you put a dog tracker on the blockchain?

I know how it sounds. But hear me out.

This isn’t a project that needs to scale. It doesn’t need a database, a backend, or server-side logic. It’s a small, static, personal site that updates whenever I process a new batch of GPS data. The perfect scope for what the “permaweb” is actually good at.

The traditional approach would be: rent a domain from some registrar, pay monthly for a VPS or a hosting plan, hope nothing breaks, remember to renew everything, and accept that if I stop paying one day — it all disappears.

But this is a journal of my dog’s life. I don’t want it to disappear.

The stack

The frontend is Vue 3 with Vite and Tailwind CSS v4, running on Bun. Dark theme with gold accents, edge-detected photos of Finn, minimalist data visualization. Nothing fancy — it’s a personal site, not a SaaS dashboard.

The interesting part is the data pipeline. Finn wears a Tractive GPS collar. I export his walks as GPX files, then run them through a Bun CLI tool I wrote that converts the raw GPS data into anonymized walk records — just distances, no actual coordinates. Nobody needs to know which park we go to.

Those JSON files get bundled into the static build. bun run build, done.

Deployment: pay once, live forever

Here’s where it gets different from any project I’ve ever shipped.

The built files go to Arweave — a blockchain designed specifically for permanent data storage. You pay once, in crypto, and your files are stored across hundreds of nodes with economic incentives to keep them available. Not for a year. Not for ten years. Permanently.

The cost? Cents. Literally cents for a small static site.

The domain is fellowfinn.eth — an ENS (Ethereum Name Service) name. It’s not rented from a registrar. It’s an NFT sitting in my wallet. I set the content hash to point to the Arweave manifest, and the site is live at fellowfinn.eth.limo.

The full deployment is three steps:

bun run build
turbo upload-folder    # uploads dist/ to Arweave
# update ENS content hash via app.ens.domains

Build, upload, point. No CI/CD pipeline, no server to SSH into, no Docker containers. It’s the simplest deployment I’ve ever had.

What “ownership” means here

When you register a .com domain, you don’t own it. You’re renting it. There’s a chain of authority above you — ICANN controls the root DNS, delegates .com to Verisign, who authorizes registrars to sell you a lease. Stop paying, it’s gone. Get flagged by some policy, it’s gone. The registrar decides they don’t like your content — gone. You’re a tenant, not an owner.

fellowfinn.eth works differently. When I registered it, the ENS smart contract minted a token and assigned it to my wallet address. That token gives me the right to set records on that name — where it points, what content it serves. The only person who can change those records is whoever holds the private key to my wallet.

This isn’t ownership as a legal concept, enforced by contracts and courts. It’s ownership as a mathematical concept. I own fellowfinn.eth because I hold a private key that can produce a valid cryptographic signature. No court, no company, no government can produce that signature without my key. It’s not that they’re not allowed to take it — they literally cannot.

It’s the same kind of ownership you have over a physical object. If you hold a rock in your hand, you have it. Nobody needs to agree that it’s yours. The possession is the ownership.

Three layers, each decentralized

The whole project sits on three layers, and none of them have a single point of failure:

Ethereum holds the identity — the ENS name, the pointer to the content. Secured by thousands of validators worldwide.

Arweave holds the data — the actual website files. Stored permanently across hundreds of nodes, paid once.

My wallet ties it together — one private key controls everything. The domain, the content hash, the payment history. It’s a digital identity in the most literal sense.

Every version of the site is permanently preserved on Arweave. Each deployment is a snapshot in time, and none are ever lost. In 10 years, every walk Finn ever took will still be there. Every kilometer, every leg of the journey toward Mordor, frozen in time on a network that doesn’t need me to keep it alive.

The tradeoffs are real

I’m not going to pretend this is all upside. ENS names expire — I registered for a few years, and if I forget to renew, someone else can take it. There’s no customer support. If I lose my private key, nobody can help me recover fellowfinn.eth. The same property that makes it uncensorable makes it unrecoverable.

And let’s be honest — accessibility is still rough. Most people can’t just type .eth into their browser. The .eth.limo gateway bridges that gap, but it’s an extra layer of indirection that regular hosting doesn’t need.

For a commercial product, I wouldn’t choose this stack. But for a personal archive — a journal of my dog’s life that I want to exist beyond any single service, any single company, any single payment cycle — it’s exactly right.

This is what Web3 was supposed to be about

Not speculation. Not monkey JPEGs. Not another token promising to revolutionize something that doesn’t need revolutionizing.

Just actual ownership of your digital presence.

A small, personal project about a dog walking to Mordor, built on infrastructure that makes it genuinely, mathematically, permanently mine. No landlords. No terms of service. No monthly invoices. Just a wallet, a key, and a dog who has no idea he’s on an epic quest.

Finn is currently somewhere in the Shire, by the way. He’s got a long road ahead of him. But the road is permanent now, and every step counts.

Build Your Own Permanent Website

Want to try this yourself? I put together a ready-to-go prompt you can paste into Claude Code or Cursor. It scaffolds a complete Vue 3 + Vite + Tailwind project with Arweave deployment and ENS domain setup — everything you need to ship a permanent, decentralized website in an afternoon.

No crypto experience required. The README walks you through everything from installing Bun to connecting your ENS domain.

What you’ll need:

  • Bun installed
  • An Ethereum wallet (Rabby or MetaMask) with a small amount of ETH (~$1 worth is plenty)
  • (Optional) An ENS domain from app.ens.domains

What you’ll get:

  • A clean, minimal static site ready to customize
  • One-command deployment to Arweave (permanent storage, pay once)
  • ENS integration so your site lives at yourname.eth.limo
  • Full ownership — no hosting providers, no subscriptions, no landlords

👉 Download the prompt — paste it into Claude Code, replace the config values with your own, and you’ll have a live site on the blockchain in under an hour.

The total cost? A few cents for Arweave storage, and whatever your ENS name costs to register. That’s it. Forever.


You can follow Finn’s journey at fellowfinn.eth.limo. If you want to hear about more projects like this — and about building SaaS, Laravel, and developer life — subscribe to my newsletter.