Lazy Dev

2026-06-16

Sgodno: Building a Neighbourhood Task Platform for a Bulgaria in Crisis

A Word I Couldn't Stop Thinking About

There is a Bulgarian word — сгодно, sgodno — that doesn't have a clean English translation. The dictionary will tell you "convenient" or "handy", but that misses the warmth of it. Sgodno is when something is the right size, the right distance, the right price, and the right moment all at once. It's the word my grandmother used when a neighbour fixed her fence and wouldn't take money, only a jar of pickled peppers in return. Convenient, yes — but also neighbourly.

I've been thinking about that word a lot this year.

The January That Changed the Maths

On the first of January 2026, Bulgaria adopted the euro. On paper it was a milestone two decades in the making. On the ground, for a lot of people I know, it landed as a shock to the household budget. Prices were supposed to be converted at the fixed rate and frozen. Plenty weren't. The lev-to-euro switch became cover for a quiet round of rounding-up, and the things that hold a month together — a haircut, a plumber's call-out, a kid's after-school tutor, a ride to the airport — all crept upward at once.

When money gets tight, two things happen in parallel. People stop paying for help they used to outsource, and people start looking for ways to earn on the side. Both are rational. Both are lonely. The retired electrician three doors down has time and a lifetime of skill and no easy way to offer it. The young couple upstairs have a leaking tap they can't afford a professional for and no idea it's a fifteen-minute fix. They live in the same building and never connect.

That gap is the whole story. Sgodno is my attempt to close it.

What Sgodno Actually Is

Strip away the slogans and it's two things bolted together:

  1. Do it yourself. A library of short, honest, locally-relevant guides — not generic YouTube content, but "here is how you bleed a Bulgarian panelka radiator before winter," written by people on your street, with the parts list and the actual hardware-store prices.
  2. Or hire a neighbour. A hyperlocal task board where you can post a small job — fix tap, walk dog, assemble wardrobe, drive me to Sofia airport Tuesday 6am — and someone within walking distance can claim it for a fair, transparent price.

The key word is hyperlocal. This is deliberately not another national gig platform skimming 25% and pitting strangers against each other across a whole country. The radius is the neighbourhood. The trust comes from proximity — you are more careful when the person you're helping might be standing behind you in the bakery queue tomorrow.

The economics are intentionally gentle:

  • No commission on small jobs. Below a threshold (say €20), the platform takes nothing. It exists to grease the wheels, not to tax the favour.
  • Reputation over rating-theatre. A simple "completed / no-show / dispute" history, not a five-star arms race that punishes one bad day.
  • Skills are assets. Every guide someone writes and every task they complete builds a public, portable record of what they can do — useful when they go looking for real work.

The goal isn't to build a unicorn. It's to make a neighbourhood a little more sgodno.

Why an Engineer Should Build This and Not Just Talk About It

I run a small Kubernetes cluster at home. Most of this blog is the story of things I've put on it — a monitoring mesh, a developer portal, a GitOps pipeline. The muscle memory is there. The marginal cost of standing up one more service is close to zero. And there is something fitting about a platform whose whole premise is self-reliance plus community being run on hardware that sits in my own flat rather than rented from a hyperscaler.

So I sketched the architecture the way I'd actually ship it.

The Shape of the Build

The same stack I reach for every time, because consistency is what lets a one-person project survive contact with real users:

LayerTechnologyWhy
FrontendVanilla JS + a thin component layerLoads on a cheap phone over a weak signal — the users who need this most don't have flagship hardware
BackendFastAPI (Python), async SQLAlchemyFast to build, async-native for the matching and notification work
DatabasePostgreSQL 16 + PostGISThe whole product is "who is near me" — geospatial queries are not optional
Search/matchPostgres geography columns, no separate engine to startResist the urge to add Elasticsearch on day one
IngressTraefik v3 + Cloudflare TunnelNo open inbound ports, TLS terminated at the edge — same pattern as the rest of the cluster
NotificationsA small worker + web push / Telegram botPeople won't refresh a tab; the job has to come to them

The data model is almost embarrassingly small to start:

users          (id, display_name, neighbourhood_id, reputation, created_at)
neighbourhoods (id, name, city, centroid GEOGRAPHY(Point))
tasks          (id, author_id, title, body, budget_cents, status,
                location GEOGRAPHY(Point), claimed_by, created_at)
guides         (id, author_id, title, body_md, neighbourhood_id, upvotes)

The single query that makes the product feel alive is "open tasks near me, newest first":

SELECT t.*, ST_Distance(t.location, :me) AS metres
FROM tasks t
WHERE t.status = 'open'
  AND ST_DWithin(t.location, :me, :radius_metres)
ORDER BY t.created_at DESC
LIMIT 50;

ST_DWithin uses the GiST index on location, so "everything open within 1.5km" stays fast even as the table grows. Everything else — claiming, completing, disputes — is boring CRUD with a state machine, and boring is exactly what you want for the part that touches people's money and time.

open ──claim──▶ claimed ──complete──▶ done
  │                │
  │                └──no_show──▶ disputed
  └──cancel──▶ cancelled

The Hard Parts Are Not Technical

I've built enough of these to know where the real work is, and it isn't the SQL.

Trust bootstrapping. An empty task board is worthless and a board full of strangers is scary. The way through is to seed it one building, one street at a time — start where I actually live, walk the guides door to door if I have to, and only widen the radius once a neighbourhood has critical mass. Hyperlocal is a feature and a go-to-market constraint.

Safety. The moment you let people into each other's homes for a fix-the-tap job, you've taken on a duty of care. Phone verification, no-payment-before-completion, a clear report button, and a hard rule that the platform never becomes a channel for anything that should involve a licensed professional or, frankly, the police.

Staying small on purpose. Every gig platform starts as "neighbours helping neighbours" and ends as an extraction machine the moment a growth team gets hold of it. The thing that keeps Sgodno sgodno is the discipline to leave money on the table — no commission on the small jobs, no dark patterns, no selling the location data. That's a values decision encoded in the schema and the pricing, and it's the part no framework will enforce for you.

Where This Goes Next

For now this is an idea with a data model and a name I love. The next concrete steps are small and unglamorous, which is how I like them:

  • Stand up the FastAPI service and Postgres/PostGIS on the cluster behind a Cloudflare Tunnel
  • Build the "tasks near me" view and the claim/complete state machine end to end
  • Write the first ten guides myself, for my own building, in plain Bulgarian
  • Put it in front of exactly one neighbourhood and watch what people actually post

If the euro switch taught Bulgaria anything this year, it's that resilience can't be imported and it can't be legislated from the top. It gets built at the smallest scale — the street, the stairwell, the group chat — by people deciding to do for each other what the market suddenly got too expensive to do for them.

That's the bet behind Sgodno. Not an app that replaces the economy, just a little software that makes the oldest economy — neighbours, skills, and a jar of pickled peppers — a bit more sgodno again.

If you'd want something like this on your street, or you've built a hyperlocal community product and have scars to share, I'd genuinely like to hear from you.

Previous

driftd: A Self-Hosted Terraform Drift Detection Daemon