# polarticles > news about polarcade (Stränge, WhereSpoken, WhichCSS) and other polarnight projects Public Ghost content for AI and LLM tooling. This file includes a bounded export of public pages first, then recent public posts. Append `.md` to any post or page URL to get the content in Markdown (for example, `/example-post.md`). ## Pages _No public content available._ ## Posts ### A fresh coat for polarcade URL: https://polarticles.eu/a-fresh-coat-for-polarcade/ Last updated: 2026-09-30T20:36:53.000Z polarcade.eu has a new look, and so do the four games' icons. There's also a new view for Pass holders, and a streak bug is fixed. ## A portal built around the games The old home page could have been a landing page for anything: a gradient headline, glowing glass cards, four identical boxes. The new one is about the games themselves. Each game now has its own colour and a small drawing of what it plays like. Each card shows today's puzzle number, and a countdown tells you when the next one arrives. The newest game always gets the wide slot at the top. There's also a light theme now, which follows your system setting. Stränge opens in your interface language, and its other editions are linked as "also in". Below the games you'll find a proper thank-you section for everyone who supports polarcade, and a list of the latest posts from this blog. ## Your day at a glance (Pass holders) If you're signed in with the Polarcade Pass, the home page now shows your own day: how many of the four games you've finished, today's result and current streak for each one, and a warning when today's puzzle is the one that would break a streak. Continue, Play and Results buttons take you straight where you left off. If you play Stränge in more than one language, each edition gets its own row. Finishing any one edition counts the game as done for the day, and the others are a bonus. And if you signed in with Google, your profile picture now shows up in the header. ## New icons Every game has a new icon: a flat tile in the game's colour with a simple dark drawing. That's letter circles joined by a word for Stränge, a waveform for WhereSpoken, a styled element and a slider for WhichCSS, and a pin over a street map for Blueprint. Each game's name is now set in the same colour as its icon, so they read as one mark. Stränge, Strängar and Hebras show a small language tag right after the name. ## Fixes - **Streaks and midnight.** Puzzles switch over at midnight Berlin time, but the stats pages counted days in UTC. For an hour or two after midnight, a game could show a different streak than the portal. Both now use the Berlin puzzle day. - **"Streak" in German.** The German interface used both "Serie" and "Streak". It's "Streak" everywhere now. - **Stränge updates.** The "new version available" prompt sometimes never appeared. It now shows up reliably once the update has downloaded. These changes ship as Stränge 3.12.2, WhereSpoken 2.9.1, WhichCSS 1.7.1 and Blueprint 1.3.1\. See you at tomorrow's puzzles! Check out the new design [Visit polarcade.eu ](https://polarcade.eu/?ref=polarticles.eu) ### Introducing Blueprint: Guess the City on the Map URL: https://polarticles.eu/introducing-blueprint-guess-the-city-on-the-map/ Last updated: 2026-08-30T19:42:01.000Z Today marks the launch of **Blueprint**, the newest addition to the Polarcade family of daily puzzle games, joining Stränge, WhereSpoken, and WhichCSS. ## The concept Each day, Blueprint hides a real city behind a outline of its map. Your job is to guess which city it is. Guess wrong, and the map doesn't just sit there — it grows. Streets, parks, and railways are revealed layer by layer with every incorrect attempt, and each wrong guess also comes with a hint. You get six guesses before the puzzle closes out for the day. The less of the map you need to see, the better your score — so the real skill is recognizing a city from the barest sliver of its street grid. ## Try it today Blueprint is live now — head to the Polarcade portal or go straight to the game and see how many layers of the map you actually need before you can name the city. As this is the first release of that game, it would be helpful to get some feedback to further iterate on it and make it even better. Guess the city of the day now [Launch Blueprint ](https://blueprint.polarcade.eu/?ref=polarticles.eu) ### How I Generate Word-Connection Puzzles in Milliseconds URL: https://polarticles.eu/how-i-generate-word-connection-puzzles-in-milliseconds/ Last updated: 2026-08-30T18:07:40.000Z *A technical report: From sluggish Go services and solver dead ends to a hand-written generator* For my browser game *Stränge* (along with its Swedish edition *Strängar* and Spanish version *Hebras*), I need new word-connection puzzles every single day. The core concept is simple: a grid full of letters, a theme, and players connect adjacent cells to uncover all the hidden words. While it looks like a casual pastime on the surface, under the hood it turns out to be a surprisingly tough combinatorial problem. Without an entire editorial team to lean on, crafting these puzzles completely by hand takes far too much effort. That’s why I relied on a generator right from the start to automate at least part of the heavy lifting. This allowed me to focus on content curation while the algorithm figured out a valid placement for the words on the board. In my paper *[“Generating Word-Connection Puzzles: An Experience Report”](https://doi.org/10.5281/zenodo.22179294?ref=polarticles.eu)*, I documented the underlying math and empirical benchmarks. Here, I want to share the journey, the dead ends, and the core concept in plain English—without getting lost in heavy formulas and pseudocode. ## The Game Rules: What the Generator Actually Needs to Solve The board consists of an 8×6 grid. Movement is allowed horizontally, vertically, or diagonally (known in graph theory as a *King’s Graph*). A valid puzzle must satisfy five constraints: 1. **Complete Coverage (C1):** All 48 cells must be covered by paths—no cell can be left empty, and none can be visited more than once. 2. **Word Pool & Uniqueness (C2):** Each path must spell out a distinct word from the predefined thematic pool. 3. **Clean Visuals (C3):** Crossing diagonals within any 2×2 block are forbidden because they look like rendering bugs or visual glitches. 4. **Local Uniqueness (C4):** By far the nastiest constraint! No placed word may be traceable anywhere else on the board. If a word can be traced twice, the puzzle breaks. As a player, you definitely don't want to find a bonus word for hints that also happens to be a hidden solution elsewhere—or worse, trace a word using a slightly different path that gets rejected simply because you ended on the wrong "E". This uniqueness check is the primary bottleneck of the generator, as it evaluates the entire geometry and word assignment simultaneously. 5. **The Spanning Word (C5):** A central theme word must span from one edge of the board completely to the opposite edge. ![](https://polarticles.eu/content/images/2026/08/image-6.png) A generated board ## Where I Started: A Sluggish Go Service and a Sneaky Bug My first working generator ran as a Go microservice consuming puzzle generation jobs from a Redis queue. The approach was pragmatic, but naive: it attempted to construct the geometry and assign the words at the same time within a single recursive search. The catch: the uniqueness check (C4) was only executed at the very end on the fully populated board. If the board turned out to be ambiguous, the entire attempt was discarded, and the search started over from scratch. Because almost every random letter assignment introduces ambiguities, the service frequently got trapped in endless restart loops. Still, this approach managed to generate the vast majority of puzzles to date—albeit at the cost of substantial CPU time. A TypeScript port was even deployed to the browser so players could create their own custom puzzles, but the performance was dismal. > **The Hidden Bug in the Go Validator:** While auditing the legacy logic, I discovered a bug that made the old validation far too strict, rejecting 12 out of 25 perfectly valid puzzles. ## The Dead End: Constraint Programming with CP-SAT My initial idea for the rewrite: let an industrial-grade solver handle it! I built a monolithic constraint model using Google's CP-SAT. Spoiler: it didn't work at all. C4 simply didn't map cleanly into the model: every failed state was a tiny "near miss" (e.g., an adjacent cell that happened to share a letter, enabling a shortcut). Incrementally blocking these alternative paths using lazy constraints failed to converge—after 6 iterations and 60 seconds of compute time, the board was still littered with ambiguities. ## The Breakthrough: Two-Stage Decomposition The breakthrough came when I took a closer look at the actual nature of constraint C4: > C4 depends almost entirely on the word assignment—not on the underlying geometry. If you swap the words on an existing path layout, every letter changes, reshaping the entire landscape of potential ambiguities. Conversely, tweaking the geometry while keeping the same words rarely helps. This realization led to a clean, two-stage pipeline: - **Stage 1 (Geometry):** Partition the 48-cell grid into paths of the required lengths. Which words end up on those paths doesn't matter yet—this stage is purely about lengths and satisfying C1, C3, and C5. - **Stage 2 (Word Assignment):** Given a valid geometry, use backtracking to assign matching words, verifying C4 *incrementally*. The speedup in Stage 2 is enormous: evaluating an assignment takes mere microseconds. Once a letter is set, it stays fixed. If the checker spots a conflict on a partially filled board, the algorithm prunes the entire subtree immediately. ## Pushing Further: Ditching the Solver for a Hand-Rolled Generator With Stage 1 freed from handling words, the geometry problem became far smaller than anticipated. Instead of pulling in the heavyweight CP-SAT solver, I wrote a dedicated, randomized depth-first search: - Place the spanning word first, since it has to cross the entire board. - Start each subsequent path at the cell with the *fewest free neighbors* (the one most vulnerable to getting isolated). - After each placement, run a lightweight dynamic pre-filter (*subset-sum*) to verify whether the remaining connected components can still be partitioned into the available word lengths. Dead ends are detected instantly. Benchmark results (Apple M4 Pro): | Implementation | Success Rate | Median | | -------------------------------- | ------------ | ---------- | | **New approach (Managed C#)** | **100 %** | **0.8 ms** | | **CP-SAT (Stage 1 via solver)** | 100 % | 467 ms | | **Legacy Go service (Original)** | 3 % | 12,150 ms | The hand-rolled algorithm outperforms the solver approach by a factor of **569×** at the median—primarily because the model initialization and presolve overhead in a general-purpose solver is sheer overkill for a problem of this scale. ## Browser support via WebAssembly A welcome side effect of dropping OR-Tools: shedding over 50 MB of native C++ dependencies. The new codebase is pure managed C# (.NET) and compiles directly to WebAssembly. This brings fast puzzle generation straight into the browser. Supporters of the game can now build their own puzzles in an instant, without their devices heating up or spinning up fans. An update featuring the new generator is rolling out shortly. ## Takeaways Sometimes the best optimization isn't reaching for a faster solver, but taking a step back: by analyzing the structure of the problem and decoupling geometry from content, a brutal combinatorial grind turns into a task solved in fractions of a millisecond. If you're interested in the formal definitions and pseudocode, all the details are available [in the full paper](https://doi.org/10.5281/zenodo.22179294?ref=polarticles.eu). ### Badges, Detailed Stats, and Community Averages Are Here! URL: https://polarticles.eu/badges-and-stats/ Last updated: 2026-08-02T14:45:52.000Z I’ve recently rolled out a major update, adding three fresh features across the board designed to help you track your progress, celebrate your streaks, and see how your daily puzzle skills stack up against other players. ## What’s New at a Glance - **Collect Badges & Earn Rewards** Unlock collectible sticker badges for reaching milestone streaks, pulling off perfect weeks, and setting new personal records. - **Expanded Personal Statistics** Keep full visibility over your performance. Easily track your current play streak, total solved puzzles, and overall achievements for every individual game. - **Community Comparison** Ever wonder how fast you solved today's puzzle compared to everyone else? You can now measure your results directly against the player base to see where you stand. ## Ready to test your skills? Head over to [**polarcade.eu**](https://polarcade.eu/?ref=polarticles.eu), jump into today's puzzles, start collecting your badges, and see where you rank on the community charts! ### WhereSpoken 2.5: a clearer family tree – and a full one to explore URL: https://polarticles.eu/wherespoken-2-5-a-clearer-family-tree-and-a-full-one-to-explore/ Last updated: 2026-08-02T14:34:15.000Z Every wrong guess in WhereSpoken already told you something: how closely the language you picked is related to the one you were listening to. Version 2.5 makes that answer easier to read, and for subscribers it opens up the entire tree behind it. ## The ancestry tree finally looks like a tree The panel you get after a wrong guess used to string family names together with arrows, and separate your guess from the solution with a dotted line. It was accurate, but it read like a list. Now it's drawn with connecting lines, and at the exact point where your guess and the solution part ways, the tree forks off to the right. Instead of reading two columns and working out where they stopped matching, you see it. The labels for your guess and the solution sit at the bottom of their branches, where the two paths have actually ended up. ![](https://polarticles.eu/content/images/2026/08/image-4.png) This one's for everyone — no account needed. ## The language tree (subscribers) ![](https://polarticles.eu/content/images/2026/08/image.png) The game only ever shows you the sliver of the family tree that connects your guess to the solution. There's a lot more of it. The new 🌳 in the header opens all of it. ![](https://polarticles.eu/content/images/2026/08/image-1.png) It starts at the top-level families and works like drilling into folders: tap a family, it opens into its subgroups, and a breadcrumb trail keeps track of where you are. Each family gets its own colour, so you keep a sense of which corner of the world you're wandering through. By default the tree is filtered to the languages that can actually turn up in a puzzle, which keeps things navigable. Switch the filter off and you get the full Glottolog dataset — over 11,000 families, subgroups and languages, down to branches with a single language left in them. ![](https://polarticles.eu/content/images/2026/08/image-2.png) You can also pick two or three languages anywhere in the tree and get a merged tree showing exactly where they diverge, along with the similarity score, the same number the game itself uses to rate your guesses. Interested in trying out supporter features? [Learn more ](https://polarcade.eu/support?ref=polarticles.eu) ### Support options just got simplified URL: https://polarticles.eu/support-options-just-got-simplified/ Last updated: 2026-04-12T10:31:07.000Z Previously, if you wanted to support the polarcade project and access additional features, there were six options available: three subscription tiers, with the choice of monthly or yearly payments. However, I have now reduced this complexity so that you no longer need to think about which tier you need: every supporter gets all the features without limitations. I also understand that some of you dislike the idea of another auto-renewing subscription. That's why you can now choose between a monthly subscription and one-off purchases for yearly or lifetime access passes. In addition to these changes, I have reduced prices to make the supporter features more affordable. The monthly subscription, which now includes all features equivalent to the previous Genius subscription (available for €6.99), is now available for just €1.99 per month. You decide how much the yearly and lifetime passes are worth to you now. The yearly pass, which is equivalent to the previous yearly Genius subscription (€59.88), is now available from €14.99, with the option to set a flexible price that you feel is fair and you can afford. It is now also possible to give passes to friends. A gift code will be generated and sent to you by email, which you can then pass on. [![](https://polarticles.eu/content/images/2026/04/image.png)](https://polarcade.eu/pricing?ref=polarticles.eu) Thanks to everyone who already supported the project previously, you got auto-upgraded to a 1 year pass regardless of your previous subscription type. Check out the new Polarcade Pass [Learn more ](https://polarcade.eu/pricing?ref=polarticles.eu) ### An update about unused hints in WhereSpoken URL: https://polarticles.eu/an-update-about-unused-hints-in-wherespoken/ Last updated: 2026-03-31T18:17:13.000Z WhereSpoken got a little update again 😃 Up until now, once you solved the puzzle correctly you might have wondered what other hints you could have received. Earlier versions provided a list of all available hints after a win but this was removed with an update introducing a list of incorrect guesses. The latest update offers the best of both worlds: unused bonus hints are displayed first followed by your used hints and wrong guesses. ![](https://polarticles.eu/content/images/2026/03/image-4.png) Check out the new update. You will also see unused hints of previous games with an active supporter subscription. [Play todays riddle ](https://wherespoken.polarcade.eu/?ref=polarticles.eu) ### WhereSpoken now features language maps! URL: https://polarticles.eu/wherespoken-now-features-language-maps/ Last updated: 2026-03-21T17:24:33.000Z WhereSpoken 2.1 just released and offers some new language mapping features! Up until now, hints included the transcript, translations, some additional country information as well as information about the languages heritage. Now, a new kind of hint is available after the third wrong guess: A brand new map that visualises which countries of the world have related languages. This should further help you finding the country 😊 ![](https://polarticles.eu/content/images/2026/03/image.png) But don't worry, if you think that this will make it too easy for you, feel free to switch to a different difficulty mode 😄 Play the daily game to try the new map hints now. [Launch Game ](https://wherespoken.polarcade.eu/?ref=polarticles.eu) And for those of you who support the project with an [Analyst or Genius subscription](https://polarcade.eu/pricing?ref=polarticles.eu), there even is a new interactive map to learn more about all the languages and countries that are supported by the game: ![](https://polarticles.eu/content/images/2026/03/image-1.png) You can check out other countries with related languages, look at the script and listen to a short example to learn new things and improve your language skills 🥳 Check out extra features that come with supporting the project 😊 [Learn more ](https://polarcade.eu/pricing?ref=polarticles.eu)