BorrowHood: Every Garage Becomes a Rental Shop

Published: (March 1, 2026 at 04:37 PM EST)
6 min read
Source: Dev.to

Source: Dev.to

The Community

My father Albert was a hand‑shovel landscaper in Switzerland from 1960 – 2020.
His garage held 500 tools. When he passed, they sat there collecting dust.
His neighbours still needed shovels, rakes, and chainsaws – they just didn’t know where to look.

  • Craigslist is a wasteland.
  • Facebook Marketplace is a data farm.

Neither cares about your neighbourhood.

BorrowHood is for real neighbourhoods – the people on your street who own a drill you need once, a stand‑mixer sitting idle, a welder gathering dust.

  • Every user is a workshop.
  • Every garage becomes a rental shop.
  • Every kitchen becomes a bakery.

The community I built for: neighbours who share things instead of buying things they’ll use once.

A full‑stack community rental and sharing platform where people list their under‑used tools, kitchen gear, equipment, and skills – and neighbours borrow, rent, or trade. No middle‑men. No fees. No algorithm deciding who sees what.

Live demo:
angel / helix_pass (or sign‑in with GitHub)

Note: Your browser will show a certificate warning on first visit – the server uses a self‑signed TLS certificate (no domain, just an IP). Click Advanced > Proceed to site. It only happens once.


Eight ways to share

ModeDescription
RentBorrow a drill for the weekend
SellOff‑load gear you don’t need
Give AwayFree items, simplified claim flow, earns Generous Neighbor badge
AuctionCompetitive bidding with reserve prices and anti‑snipe protection
CommissionCustom made‑to‑order items
ServicePlumbing, tutoring, bike repair
TrainingTeach a neighbour your skill
OfferName your price / make an offer

Full rental lifecycle

  • Reputation that means something
  • Bilingual from day one

Feature matrix

FeatureWhat it does
Workshop profilesEvery user is a shop with skills, CEFR language levels, social links
Auction systemTimed bidding, auto‑outbid notifications, reserve prices, bid increments
Giveaway flowFree items, simplified claim, no return dates, Generous Neighbor badge
Lockbox codesOne‑time 8‑character codes for contactless pickup and return
Dispute resolution3‑step flow: file → respond → resolve (8 reasons, 7 resolution types)
Security depositsHold at pickup, release on return, forfeit on damage
Community helpboardPost requests (“Need a ladder this Saturday”), get replies, track status
AI‑assisted listingsGenerate descriptions and images via Pollinations API
Notification bell15 event types with optional Telegram bot forwarding
GitHub OAuthSign in with GitHub via Keycloak identity provider
Onboarding wizard3‑step profile setup for new users

Video series (5 parts) – every feature live on a production server

EpisodeFocus
EP1Giveaway Flow – free items, simplified claim
EP2Rental Flow – full lifecycle from request to review
EP3Auction System – competitive bidding with anti‑snipe
EP4Badge System – 15 badges, 5 reputation tiers
EP5Multilingual Live Switch – one click, every label, instant

Live demo: (same credentials as above)

GitHub:


Metrics

MetricCount
Python source lines10,625
HTML template lines6,244
Test lines2,220
SQLAlchemy models32
Typed enums37
REST API endpoints109
Automated tests250 (201 without DB)
Puppeteer screen tests52 edge‑case checks
i18n strings476 (EN + IT)
Seed data items119 across 21 categories

250 automated tests across 23 test files (201 pass without any database). Rental state‑machine alone has 26 tests covering every valid and invalid transition. Plus 52 Puppeteer edge‑case screen tests covering XSS probes, pagination boundaries, mobile viewport, gallery behaviour, and API boundary conditions. The i18n completeness test ensures every English key has an Italian translation – add a key to en.json without adding it to it.json and the test suite fails.


Technology stack

LayerTechnology
BackendFastAPI + SQLAlchemy 2.0 async + asyncpg
AuthKeycloak OIDC (RS256 JWT, 6 roles, GitHub IDP)
DatabasePostgreSQL 17
CacheRedis 7
QueueRabbitMQ 3.13
FrontendJinja2 SSR + Tailwind CSS (CDN) + Alpine.js (CDN)
PaymentsPayPal REST API v2
AIPollinations API (image + text generation)
BotTelegram Bot API
Testspytest + pytest‑asyncio
HostingHetzner CX32 – 4 vCPU, 8 GB RAM, €7.59 / month
Browser --> Caddy (TLS) --> FastAPI (uvicorn)
                              |
                              +-- 18 Jinja2 templates (i18n: EN/IT)
                              +-- 104 API endpoints (JSON)
                              +-- Keycloak OIDC (6 roles, GitHub OAuth)
                              +-- PostgreSQL (31 models, UUID PKs)
                              +-- Redis + RabbitMQ + MinIO

Development story

Claude Code (Opus 4.6) was my co‑pilot throughout. Not a code generator I copied from – a pair programmer I worked with.

What worked well

AreaHighlights
Scaffolding models & routersDescribing a feature like “auction system with reserve prices and anti‑snipe” produced a working first draft with the right SQLAlchemy relationships
Test generation250 pytest tests + 52 Puppeteer edge‑case screen tests, most written by describing the behavior I wanted tested
Edge‑case testingPuppeteer tests that probe XSS, pagination boundaries, invalid enums, mobile viewport, broken images – found a real 500 error on invalid listing‑type filter
i18n coverageTranslating 476 strings to Italian with context‑appropriate translations (not Google‑Translate quality)
Debugging production issuesTraced an OAuth redirect loop to a missing port number in an env var, across 4 different config files

What I still did myself

  • Architecture decisions (Keycloak over simple JWT, server‑rendered over SPA)
  • UI/UX design (every page layout, colour choices, the “workshop‑as‑identity” concept)
  • Production deployment & ops (Docker Compose, Caddy config, Hetzner setup)
  • Manual testing on a real server with real users

The commit history tells the story. Every feature was built iteratively, with feedback from neighbours who actually needed a drill, a ladder, or a lesson in Italian.

vely — scaffold, test, deploy, fix, repeat.

Built from a camper van in Trapani, Sicily. The idea came from my father’s garage — 500 tools, no neighbors who knew they existed. BorrowHood is the platform I wish he’d had.

Open source. No platform fees. Forever.

“Every neighborhood has a garage like his.”

0 views
Back to Blog

Related posts

Read more »