Släng.ee · 2026

Släng.ee

Estonian slang dictionary: words you won't find anywhere else.

Goal

The Estonian slang dictionary had to move from an old, scattered setup to a fast site where words are easy to find and anyone can add new ones, without losing the words and history collected over the years.

Results in numbers

What changed

5,919

words added by users

15

years of user content (since 2011)

679,377

names on the blocklist, checked without loading the whole list into memory

0

IP addresses stored

The situation

Släng.ee needed a new WordPress theme. At the same time, three very different sources had to be merged into one dictionary: EKI’s old web archive, a 2025 University of Tartu slang spreadsheet, and hand-made word lists. Old dates, votes and view counts had to be kept. On top of that, the site had to stay safe, because words added by users can be about real people.

Constraints

  • Three very differently shaped sources (an old web page with an old text encoding, a spreadsheet and hand-made lists) had to be brought together without losing any history.
  • Words added by users must never name real people or schools, not even hidden inside a word.
  • Voting and view counting had to work without storing a single IP address.
  • The Estonian letters Õ, Ä, Ö, Ü, Š and Ž couldn't be allowed to turn into plain O, A, U, S and Z in web addresses.

Solution

How I solved it

Migration

Three different sources had to become one dictionary, with nothing lost and nothing duplicated.

The data was moved in small batches of 250 rows, and after each batch the content was checked to be the same as before. The same word from several sources was merged into one, even if it was spelled slightly differently. Every migration tool first had to be run in a test mode that changes nothing. Old dates, votes and view counts all survived the move.

Privacy

Words added by users must never name a real person or school.

The blocklist has 679,377 names. They are stored as SHA-256 hashes, not readable text, and the list is searched without ever loading the whole 21.7 MB file into memory. On top of that there’s an old 3,589-entry blacklist, a list of schools, manual blocks and 157 allowed exceptions. The check also sees through the usual tricks, like numbers instead of letters, repeated letters or compound words.

Community

Voting and view counts couldn't be allowed to track users or collect their IP addresses.

A vote is remembered as a signed (HMAC) cookie in the user’s own browser. No IP address is ever saved on the server. Changing a vote is one database step, so two clicks at the same time can’t mess up the count, and requests have to come from the site itself. Views are counted with a cookie that stops the same person being counted twice within 24 hours, and views for up to 50 words are sent in one request so the server isn’t overloaded.

Security

An open form for adding words attracts spam and bots.

The form has an invisible trap field (a honeypot) that only bots fill in. It has to be open for at least 2 seconds and at most 2 hours. One sender can add up to 3 words per 10 minutes. There are also length limits and a lock that stops the same word being added twice at almost the same moment.

Estonian language

WordPress turns the Estonian letters Õ, Ä, Ö, Ü, Š and Ž into plain letters. For example, the pages for words starting with Õ and O would have got mixed up.

The browse-by-letter pages use their own logic that keeps the Estonian letters. “Random word” picks from a ready-made list that is refreshed every 12 hours, because picking a random row from a big table every time would be slow.

Result

Släng.ee now holds 5,919 words added by users in one safe, fast WordPress theme, the oldest from 2011. User privacy is protected without storing a single IP address. Every word carries markup that tells search engines it’s a dictionary entry, and author pages with little content are kept out of search results.

What's next

Next, I’m improving search and ways to discover new words, and making sure the small side shop never slows down the dictionary.

Next step

Your project could be next