A house with eight worlds — the new design becomes the only surface (and the old build is torn down completely)

A house with eight worlds — the new design becomes the only surface (and the old build is torn down completely)

designredesignuidesign systemweltenthemestypografiemauiwartungzuverlässigkeitalpha
Fiction

There are two ways to rebuild a surface. The loud one: switch everything over at once, replace the old overnight, and then spend three weeks fixing every other click. And the quiet one: raise the new alongside the old, week by week, behind a switch nobody but us can see at first — and only flip it once every single page truly holds.

OutaStory chose the quiet variant. Over many weeks a completely new surface grew up in parallel to the existing platform — page by page, from the home page through the reading mode down to the last administrative corners. The whole time it ran dimmed in the background, visible only via a preview address. This week the switch fell. The new design is from now on the only surface — on the web and, with the next app release, in the apps too.

And the genuinely remarkable part is not that the new is here. It is that the old is gone. Completely. Not disabled, not commented out, not “still lying around for emergencies” — but removed, down to the last line and the last switch that could tell old from new apart. Why that was the harder and more important half of the work is the story of this week.

What changes for you

The visible things first. The new OutaStory is calmer, clearer and markedly more characterful all at once — a contradiction only at first glance.

One shared design language. Before, every page had grown on its own; now they all share the same grammar of spacing, corners, shadows and focus rings. Lists — in the profile, administration, moderation — sit on one continuous, framed surface rather than as loose little cards with gaps. Forms breathe evenly. None of it is spectacular; it is the kind of order you don't notice, because nothing is in the way any more.

Two self-hosted typefaces. A characterful editorial serif for headings, a clear, calm sans for body text. Both live on our own server — no detour through external font services, no waiting second before text appears.

Calm density where the work happens. Writing, publishing and administration surfaces are deliberately sober: no glass, no big stage, tighter lines, hairline dividers. An author stuck in the third chapter needs no decoration, but space and quiet. The stage stays reserved for the places where a story is allowed to shine.

Eight worlds

But the real heart of the new design is none of that — it is the theme choice. OutaStory is a platform for stories, and stories have moods. So the surface itself gets moods: eight curated “worlds”, each with its own palette, its own light, its own character — from a deep, starlit night-blue through a warm parchment tone to a soft, muted red. You choose a world in your profile, and the whole platform puts it on, light and dark alike.

What is interesting about this step is what came before it. In development we had experimented with far more themes — over two dozen. That is the advantage of a switch with no one behind it but us: you may experiment generously. For the graduation we deliberately cut from over twenty down to eight — not because the others were bad, but because eight clear, well-tended worlds are worth more than twenty of which half are only “also there”. And because every additional world has to be maintained, tested and thought through forever after.

So that no one who had chosen one of the retired worlds suddenly faces a broken surface, a one-off, gently-guided migration translates each old choice to the nearest of the eight survivors — silently, on first load. Anyone who had chosen a still-existing world keeps it unchanged.

Why tearing down is the harder half

Now to the quiet part, the one I am honestly proudest of.

For months the platform carried two surfaces at once — the old and the new, separated by a switch. Almost every page existed in two versions, branched at exactly that point: “if new, show this; otherwise show that.” That is exactly right during the build phase — it is the safety net that lets you show the new without touching the old. But it is ballast you must not keep. Two parallel surfaces mean two places for every bug, two versions of every decision, and a creeping drift that gets more expensive every week.

So the graduation was not one step but two. First the new was made the default — the switch now always pointed forward. And then, the real cleanup, the branch was removed everywhere: cutting the old version out of eighty-seven surfaces, making the new markup the only one left, and finally deleting the switch mechanism itself — the whole machinery that could ever tell old from new apart is gone. What remains is a platform with one surface, one source of truth, with no dead parallel universe in the basement.

This kind of work has no shiny screenshot. It is invisible — precisely when it succeeds: if nothing tips over in the new after removing the old, you did it right. Tens of thousands of automated tests confirmed after every round that this was exactly the case.

Under the hood: measured maintenance

Between the design rounds ran the least spectacular yet still important upkeep: bringing the toolbox up to date. About a dozen libraries OutaStory stands on were updated — and a few deliberately not.

The “deliberately not” is the more interesting part. A newer update is not per se a better update. Five building blocks we intentionally left where they were, each for a concrete, documented reason — among them one we know from experience once triggered an outage when jumped too eagerly, and two deliberately pinned to a specific, vetted version for security reasons. “Always everything on the latest version” sounds like diligence, but is often the opposite: diligence means deciding for each building block individually — and justifying the decision.

Two bigger jumps we did make — the image tools and the MP3 decoder each skipped a major version. Such jumps almost always bring a small break with them (the image library had deprecated a function for rounded corners), and that is exactly what the test net is for: it showed the break immediately, the switch-over was a handful of lines, and the proof that audio durations were still correct afterwards came from a test that runs a real MP3 file through.

A bug that broke in exactly the right way

And then there was one more thing that broke — in the best conceivable way.

The background services that generate audio, covers and descriptions refused to start. The reason: a central building block had at some point grown a new dependency, and in exactly these four services the one counterpart that provides that dependency was missing. Present everywhere else — not here.

The beautiful thing about it: these services check their own wiring at startup and refuse to serve if something is missing — loudly, immediately, before a single real task runs through. It is the exact opposite of the silent bugs we have written about here twice already — the search that found nothing for everyone, and the audio durations that quadrupled. A service that honestly aborts at startup is not an annoyance; it is a gift. It fails where only development sees it, rather than later where it hits real people. The fix was a single line — the missing wiring put in the right place, so the services supply themselves no matter what context they run in.

The apps follow

The new design is not only a web thing. Because the apps share the same core with the web, they carry the new design too — it arrives on iOS and Android with the next store release. The code for it is finished and reviewed; what still remains is the pass on real devices, before the new build goes to the stores. Because an app does not render in the same browser as the desktop machine, and the last few per cent of polish on a surface are always decided only on the device in your hand.

By the numbers

  • Design graduation: the new declared the default, the branch removed from eighty-seven surfaces, the entire toggle mechanism deleted, the themes consolidated from over twenty down to eight tended worlds — with a gentle migration for every retired choice.
  • Maintenance: about a dozen libraries updated, five deliberately held with a reason, two major-version jumps cleanly absorbed.
  • One startup bug in the background services — caught at startup, fixed with one line, before it reached anyone.
  • Tests: still green in the high tens of thousands; every cleanup round backed by the full suite.

What's next

  • The new design onto the device — the device pass for the apps on iOS and Android, before the new build goes to the stores.
  • Keep sanding edges — now that there is only one surface, every polish lands immediately in exactly one place.
  • Privacy approvals before the public start — the documented checkpoints for the assistant and youth protection remain the condition before switches are flipped in public.

A few months ago OutaStory was a platform you read. Then one that reads aloud. Then one that listens. This week it gained no new ability — it learned what it looks like when it is fully itself: one surface, one design language, eight worlds to choose from, and no old scaffolding left for the future to snag on. If something about the new look catches your eye — a world that feels wrong in a corner, a page that steps out of line — that is the most valuable feedback right now. Freshly painted walls show every scratch soonest.


Comments (0)

No comments yet.

Comments are closed for this post.

Something went wrong

An unhandled error has occurred.

Reload the page to pick up where you left off.

Reload

Connection lost

Reconnecting to the server…

Reconnect failed. Trying again in seconds.

We couldn't reconnect to the server. Retry, or reload the page.

The session was paused by the server.

The session couldn't be resumed. Please reload the page.