
Dogwalk: The Timezone Shift the Client Would Have Noticed First
Pinning sqlmodel, a single time helper, and the next-walk hero fix — the tz-aware release from 10/05.
22 posts

Pinning sqlmodel, a single time helper, and the next-walk hero fix — the tz-aware release from 10/05.

A pip install fixed it. Then a measured bisect showed the line between working and breaking sat in a dependency, not in my code. And along the way, twelve copies of a five-line function became a single helper.

Dogwalk's /explorar page gained coverage zones, and the first version carried the link between walker and region on a public page that needs no login. The fix wasn't hiding a field: it was deciding the zone only holds aggregates — and turning the test that required the data into one that requires its absence.

A single config line with a placeholder where the key should be killed production login and signup for almost nine hours — and the real key existed nowhere at all. The story of the best-intentioned lockout I ever shipped, and of the doctor that diagnoses a pair without ever seeing the secret.

A file called NUL, a router called aux.py and a symlink that only exists on Linux: three files that slipped into Dogwalk without resistance and broke git status on every NTFS clone. The root cause is almost always the same — .gitignore does not override a file that is already tracked.

A week after fixing the Dogwalk endpoints that refused to connect, I learned a repeated handshake is worse than none: the second accept() killed the connection right after it opened. And the first fix still let a dead socket into the room.

PataPass was a website wearing an app costume — and the browser made that obvious at the worst possible moment: inside an elevator with no signal. The story of Phase 4F: an install banner driven by beforeinstallprompt, an offline page served by the service worker, and the decision to never cache HTML.

The status button finally worked within the session — but an F5 wiped it all: a reload brought the walker back offline for the entire system. The direct sequel to the ghost button: real persistence of the online status, from the frontend down to the profile PATCH.

The walker toggle 'Go Online' rendered, animated, and even changed color. But the handler was an empty function: the state never left 'online'. The story of how a test loop caught a ghost button and gave back real online status.

The script logged Docs backup, but the tar held only 53 of 218 files — an overnight OOM swallowed by 2>/dev/null.

All Dogwalk WebSockets returned HTTP 500 on handshake. The app ran, the database responded, but real-time login, chat and walk tracking simply wouldn't connect. The cause: a receive_text() called without the accept() Starlette requires.

970 commits, 1456 tests, Stripe Connect, Open Design, and the saga of turning a pet marketplace into a platform that doesn't break on deploy.

How a public endpoint that returned 401, a bundle that crashed, and 42 console errors became a single commit

YAML indentation, missing dependencies, tests that need a running server — the classic pipeline debugging spiral.

Exploring the current state of Dogwalk — lessons learned, challenges and discoveries.

How end-to-end tests transformed quality and confidence in Dogwalk's development — the real story of a stack that learned to test itself.

After the idea came the hardest part: getting your hands dirty. How I chose React, Vite and FastAPI to build Dogwalk.

After weeks of coding, it was time to put Dogwalk online. The first deploy was a mix of euphoria and frustration — Vite + Cloudflare Pages.

Exploring the stack choice — lessons learned, challenges and discoveries.

It all started with a simple need: finding trusted dog walkers for my own dog. That's how the idea for Dogwalk was born, a pet marketplace that now serves hundreds of tutors.

JWT, Supabase, OAuth, refresh token, protected routes and conditional layout — the story of authentication in Dogwalk.

From zero tests to 853: how Playwright tests became the quality backbone of Dogwalk/PataPass, what we learned and what changed in the process.