I build the unglamorous infrastructure other people's uptime sits on.
Infrastructure engineer in Pitești, România.
I run Kicked SRL — hosting, platform engineering and network operations — and I operate AS210622, our own multi-homed autonomous system. I also keep letcon.ro alive, which sells dev boards and sensors to Romanian makers, because someone has to.
Almost everything I publish falls out of running that network. If I have to build a thing twice, it ends up here.
origin: AS210622 · Kicked-SRL · RO · RIPE
inetnum: 81.181.164.0/24
inet6num: 2a14:7580:ffeb::/48, 2a14:7583:e200::/40
upstreams: AS8708 (DIGI) · AS6718 (NAV) · AS52025 (Paradox)
ix: BGP.Exchange AMS · BGP.Exchange BCN
rpki: valid — every originated prefix signed
as-set: AS210622:AS-KICKED
policy: open — no contract, no ratio, v6 required
Registered February 2026. Three independent carriers, three PoPs, ~12 Gbps of transit, dual-stack and RPKI-signed end to end. Peering is open and I answer my mail.
birdy Go |
Opinionated single-router BIRD 2.x BGP manager. One static binary, embedded web UI, SQLite model, full bird.conf renderer. RFC 8212 default-deny, RPKI validation and leak prevention are not options you enable — they're what it emits. |
nftably Go |
A web UI for nftables that runs on the router. Detects the backend, shows the live IPv4+IPv6 ruleset, imports your old iptables. Single binary + SQLite. |
domain-ip-scan Python |
Finds the real origin behind a reverse proxy by sweeping ranges. Written for my own recon, published once it kept being useful. |
strapi-upload-minio JavaScript |
2022's accident. Still the most-used thing I've ever written. |
I didn't set out to maintain anything.
- 2018 —
docker-hugo, a patch toredux-wait-for-action. Config files and drive-by fixes. This is how everyone starts, and it's fine. - 2022 —
strapi-upload-minio. I needed Strapi to talk to MinIO, the official plugin wouldn't, so I wrote one and pushed it. Ten stars and seven forks is not a movement — it's also the first time strangers ran my code in production. That reframed the whole thing. - 2023 —
inverter-app: reading a Voltronic solar inverter over serial, because I owned one and the vendor's software was Windows-only. - 2025 —
domain-ip-scan, straight out of security work. - 2026 —
birdy,nftably,platbor. A different category entirely. These exist because I now operate a network, and the tools I wanted either bill per router or assume you're running a fleet.
The thread through all of it: every repo here started as a problem I actually had, then got cleaned up enough to hand to someone else. I don't ship libraries hoping for stars. I ship the thing after the second time I need it.
Licensing is deliberately permissive — birdy is 0BSD. Take it, fork it, don't credit me. Attribution was never the point.
I build with AI assistants, heavily, and I'd rather say so on the front page than have you infer it from a commit diff.
The reasoning is unglamorous. One person cannot operate an autonomous system, run a company and ship three Go projects on the old ratio. What changed isn't that I stopped writing code — it's which code gets my hours. Less of the fifth CRUD handler, the table-driven tests, the cross-compile matrix for six targets. More of the part that needs an opinion: what the tool should refuse to do, what the default policy is, which BIRD knob deliberately does not get exposed.
The rules I actually hold to:
- I own every line.
birdywritesbird.confto production routers. If it drops your session at 03:00, "the model wrote it" is not an answer I get to give. - Generated code is a draft. Review is the job now, and it's harder than typing ever was.
- Blast radius sets the bar. A settings page and a route-policy renderer do not get the same scrutiny.
- Taste doesn't come out of a model. Default-deny, validate RPKI, refuse to leak — those are decisions, and they're mine.
The tooling changed. The accountability didn't. If that's a dealbreaker, the source is right there — read it.
Peering requests, infrastructure work, or an argument about default-deny → kicked.ro · florea.xyz



