Skip to content

Savana Studios, Stockholm

Software that trusts you
to find your own way.

Savana Studios is one person in Stockholm. Riverge and Meritan are web apps for people who write code. Stray, CapTap and Forsaken have nothing to do with those, or with each other. This page is all five.

Riverge Meritan Stray CapTap Forsaken
Scroll

The studio

Everything here was built by the same person.

Savana Studios is Lucas Lundmark, working out of Stockholm. The company behind it is SnowTrac AB. The first release was CapTap in 2020, which was mostly an excuse to find out how the App Store worked.

Riverge and Meritan run from one codebase in one Node process. The hostname decides which of the two you get, so the editing engine only had to be written once, and the accounts sit in separate tables. State is SQLite on a mounted volume. There's no database server and nothing queues.

That setup is old-fashioned, and it would need real work if a few thousand people turned up at once. It also costs close to nothing to run, which is the only reason there's a free tier.

Projects
Five
Shipping since
2020
People
One
Platforms
Web, iOS, Android, PC
Your code runs on
Your machine
Databases
One SQLite file

01 / Web app

Riverge

A collaborative code editor that runs in the browser.

Several people type in the same file at the same time. It's built on Yjs, which is a CRDT, so nothing locks and there's nothing to pull. Each keystroke is a small binary update that merges itself. Cursors and selections get passed around too, but they never touch the disk.

JavaScript and TypeScript execute in a Web Worker. Python runs on Pyodide, which is real CPython compiled to WebAssembly and kept warm in the tab. The code never reaches the server. That began as a hosting-cost decision and only later turned out to be the better privacy answer too. If a room needs to watch something that can't run in a browser, the host shares their screen over LiveKit.

Yjs CRDTCodeMirror 6PyodideLiveKitGitHub import
riverge.net
room / merge.ts

02 / Web app

Meritan

Coding interviews that record themselves, for hiring teams.

The candidate joins from one link and agrees to the recording before anything starts. Paste attempts get blocked and written to a timeline. So does losing window focus, and so does plugging in a second display. Afterwards you can scrub the session next to the scorecard.

Whether any of that is appropriate depends on the role, and plenty of teams will decide it isn't. The argument for it is that forty minutes on a call is a thin basis for hiring someone, and whoever wasn't in the room should be able to go back and check. Nothing is scored automatically. The flags sit on the timeline and you decide what they meant.

Integrity signalsSession replayScorecardsOne-link joinSSO
meritan.team
replay / session-4471
editor
paste
focus
displays
audio

› waiting for candidate…

03 / iOS & Android

Stray

A compass app for iPhone and Android.

You drop a pin. Stray shows an arrow pointing at it and how far away it is. It won't give you a route. The screen stays on while you walk and the compass buzzes a little as you turn.

The idea is a city you don't know, where taking the wrong street costs you nothing. Everywhere you've walked to gets kept in a list on the phone. That's the whole app, and it's been the whole app through every version, which has made the feature requests awkward to answer.

iOSAndroidOffline compassHapticsNo routing

04 / iOS game

CapTap

A reaction game for iPhone.

Circles turn up on the screen and start running out of time. You tap them. That is the rule. CapTap came out in 2020 and was the first thing Savana Studios put in front of strangers.

There are three modes. Endless gives you three lives and posts your score to a Game Center board. Campaign is fifty levels which speed up as they go. Duel splits the screen down the middle so two people can play on one phone. Coins earned in any of them buy skins for the circles.

Nothing in it is technically interesting. It opens straight away and never asks for a connection. Ads appear roughly one loss in five, there's a rewarded one you can watch to carry on a run, and a purchase that switches them off for good.

iOS50 levelsLocal two-playerGame CenterSkins and coinsOffline

05 / PC game

A survival game for PC, made in Unity and Blender.

Low-poly, cold, Nordic. You chop wood, get a roof up, hunt, and try to last the winter. Written in C# in Unity. The character, the houses, the weapons and most of the rocks were modelled in Blender.

The animals are the part worth explaining. Each one has health, stamina and hunger, and acts on all three. A hungry animal searches a wider area. A tired one slows down, which goes badly for it when something is chasing. A predator hurt badly enough gives up and runs. They wander but keep a home range, and get twitchier the further out they get. All of them can be ridden.

UnityC#BlenderAnimal AICrafting and smeltingCharacter creator

Notes on the stack

01

Run it on the client

Browsers can compile and execute code now, so Riverge does it there. Running it on a server that Savana Studios pays for means charging someone for it later.

02

One process, one port

Static files, the API and the websocket all come out of the same service. None of this has a scale problem yet. When something does, that's when it gets split up.

03

Prices on the page

Every price and limit is written down before you sign up for anything, and the demos on this page only do things the products really do. That is partly principle and partly not wanting to answer emails about it.

04

Ship the small version

Stray does one thing and has turned down the obvious additions. A few of those were good ideas, and turning them down was probably still right.

Send an
email.

Contract work, collaborations, or a question about one of the five. It goes to Lucas. Replies are usually within the week, sometimes slower than that.

hello@savanastudios.com