The onboarding problem
When I joined, documents and conversations were full of abbreviations I did not know.
I heard the same from colleagues, and internal employee surveys also pointed to unfamiliar terminology as a particular pain point during onboarding.
The available references were scattered across PDFs, Word documents and intranet pages, so I started collecting the terms in one place. It remained a personal project, but eventually became useful enough to be linked from an internal onboarding guide.
Starting with a glossary
I began with a couple of small compilations that other people had put together, then kept adding terms as I encountered them. Those starting lists now make up a relatively small part of the catalogue, which later grew through manual additions and LLM-assisted research.
Gahmen loves acronyms, and they do not always follow the tidy pattern of taking the first letter of every word. GeBIZ compresses “Government Electronic Business”, while HRPS combines “HR” with “Payroll System”.
Then the collection moved beyond acronyms. Branded names such as ServiceSG, LifeSG and FormSG, along with workplace expressions such as “seek a steer”, “take offline” and “first cut”, were also part of what a new officer had to learn. So I widened the list and eventually renamed it Lingo, a glossary for the language of the Singapore Public Service.
Inside the glossary
Select to enlarge
Meilisearch does the heavy lifting now
Someone might remember only a few letters, part of a phrase or roughly how a name sounded, so I originally built my own search using Jaro-Winkler and Metaphone to handle partial and phonetic matches.
It did a decent job, but as the list grew I spent more and more time fiddling with ranking. Eventually I moved the main search to Meilisearch, which handles typos and ranking better than my home-grown version. The old Jaro-Winkler and Metaphone search still kicks in if Meilisearch is unavailable.
I also added popular searches to the home page, but only canonical exact-match searches submitted through the search form count. Raw phrases, IP addresses, user agents and session identifiers are not stored, and clicking a popular term does not reinforce its own ranking.

Turning the glossary into an onboarding guide
Search only helps after someone has already run into a term they do not know.
The pain point had always been onboarding, so I started arranging the terms around how new officers actually encounter the Public Service: starting work, attending meetings, writing papers, navigating the hierarchy, handling procurement and working across agencies.
The newbie guide now pulls together 222 terms across eight situations. It starts with ten terms, then opens into 51 essentials and the wider collection. Entries can include a plain-language explanation, examples, other ways the term is heard, context and a public source.
I also added Explore because the data could do more than sit behind a search box. It groups terms with several meanings, names built from within words, lookalikes and older terms alongside their replacements. The quiz came after that, with ten-question rounds and missed answers returning for review at the end.
I kept the quiz deliberately lightweight: no account, timer or leaderboard. Completed-round totals stay only in the browser.

Inside the newbie guide
Select to enlarge
More ways into the glossary
Select to enlarge
Quiz practice
Select to enlarge
Adding more without making a mess
As the glossary grew, I needed a way to accept help without letting anything go straight into search.
A glossary this broad will always have gaps, especially when workplace language varies across agencies. Anyone can now suggest a term, its meaning, where they heard it and a public source that can help verify it.
Suggestions enter a private review queue. I check the meaning and context before accepting anything into the curated glossary, and the form warns contributors to leave out classified, sensitive or personal information.
An accepted suggestion becomes a JSON draft I can copy into the glossary, together with an editorial record. I still have to add it by hand, so the review workspace cannot publish directly into live search results.
Filling in definitions, examples and sources by hand got slow, so I use LLMs to help research new terms and find missing context. I often ask one model to draft the entry and another to poke holes in it.
Everything still goes through review and a final scan from me. I track which entries have been checked against a public reference, and the embedded JSON files remain the source of truth. The LLMs never answer live searches or publish entries.
Built for when you need it
Most people will use Lingo only when a term gets in their way, and that is fine.
They look it up, find the explanation and get back to whatever they were doing. The newbie guide gives new officers somewhere to start before that happens, with situations they recognise and a way to practise the terms.
I started with a glossary because that was the simplest answer to the onboarding problem. Over time it has become much closer to the onboarding resource I wanted when I joined.
