A bilingual directory where publication state is visible, not assumed
An English and Thai directory with location, listing, detail and operator surfaces, built so that publication state — source, consent, moderation, translation and removal — is something the operator can see.
A bilingual directory is two products wearing one coat. English and Thai do not share a word for a district, a service or an opening time, and a listing that is correct in one language is often only approximately correct in the other. I treat translation, consent and moderation as state the operator can see, rather than as steps somebody remembers.
What I built
- Public surfaces for location, listing and detail in both languages, plus the operator side that manages them.
- A Go API and worker tier with Astro rendering, PostgreSQL for storage, PostGIS for the geographical model and pgvector for similarity between listings.
- Publication state on every record: where it came from, what consent covers it, whether it has been moderated, which translation is current, and whether it has been asked to come down.
- A split between private originals and public derivatives, so the public site only ever serves the version that was checked.
The repository carries 29 migrations and 254 Go test functions. Those measure how much behaviour is pinned by tests; they are not production outcomes.
Where it stands
There is no recorded live release. The work still open at the time was the publication policy, deduplication, the remaining imports, operator dashboards, billing, and a legal and privacy review of what a directory may hold about a person. This page describes a working system with an unfinished publication policy, which is a different thing from a launched directory.
Any imagery used to illustrate this work is neutral or synthetic, with its own caption. Original media stays private.
Have a system like this?
Describe the workflow, the data or the system you need built. Scope and any quote are handled privately after the enquiry.
Published