All screenshots are mock UIs drawn from fake data. Work projects are described without client or employer names.
<- all case studies
work · a service company · 2026-08-03
Bilingual site and CMS as one Go binary
An English/Latvian site plus an admin CMS that non-technical staff edit: one Go process, one SQLite file, one dependency. Written in one session on 2026-08-03.
Problem
The client's content changes without a developer involved, and hosting has to stay on one small VPS.
Constraints
Non-technical editors. Every page, service, skill and specialist card is a database row.
One small VPS: no Docker, no Node, no database server.
Every field is bilingual, and an empty Latvian field falls back to English.
One dependency (pure-Go SQLite, no cgo).
What I built
+---------------------- one Go binary -----------------------+
| templates + static (go:embed) |
| |
| public EN / LV pages <--- SQLite append-only migrations |
| PRAGMA user_version |
| search <--- FTS5 index , rebuilt on every admin write |
| diacritic-stripping tokeniser, prefix |
| wildcard, substring fallback |
| /admin CRUD PBKDF2-SHA256 600k, hashed session tokens, |
| CSRF on every POST, 5 logins / IP / 15 min |
| uploads JPEG/PNG only, 8 MB, decode + re-encode |
| (EXIF/GPS never reaches disk) |
+--------------------------------------------------------------+
nightly VACUUM INTO backups, 14-day retention · systemd + Caddy units
fig 1. Everything a small client needs in one process.
Designed the content model and the safe markup dialect (escape first, emit only structural tags).
Built auth, uploads and search to a production security bar in one binary.
Wrote the deploy units and the backup routine.
Outcome
date result
2026-08-03 The whole tree (module, seed, search, markup, admin CRUD, deploy units, README) written between 01:36 and 02:15
2026-08-03 Seeded with 9 categories, ~28 services, ~67 skills and 12 specialist cards, all editable rows
- Whether it is deployed is not recorded
1 runtime dependency · 600k PBKDF2 iterations · 5 login attempts per IP per 15 min · 14-day backup retention
Stack
Go 1.25 SQLite FTS5 HTML/CSS/JS systemd Caddy
Redacted screenshot
[Company] · · /lv/pakalpojumi | /admin/services/12
Public · LV
[Company] pakalpojumi
Drošības audits 3 speciālisti
Tehniskā apkope 5 speciālisti
Konsultācijas 2 speciālisti
search: drosiba
-> Drošības audits · drošība darbā · 2 hits
/admin · edit service #12
field EN LV
title Security audit Drošības audits
summary On-site review of… (empty: falls back to EN)
image photo.jpg, re-encoded, EXIF stripped
csrf ok · editor · [Save]
fig 2. Mock site and editor. The company name is a placeholder, and the domain and editor identity are redacted.