Der Prototyp läuft bereits und ist spielbar. Hier steht, was noch fehlt, wie viel Zeit das braucht und wo die eigentlichen Risiken liegen.
22.07.2026, nach Recherche zu Marktumfeld, verfügbaren Bausteinen und Werkzeugfrage
Ein spielbarer Prototyp mit der vollständigen Mühle: alle drei Phasen, Mühlenerkennung über alle sechzehn Reihen, die Schutzregel beim Schlagen, Springen ab drei Steinen und beide Verlustbedingungen. Dazu ein Computergegner mit drei Spielstärken, der mit Alpha-Beta-Suche rechnet.
Die Regeln habe ich nicht nur von Hand geprüft: ein Testlauf über 120 Partien Computer gegen Computer bestätigt, dass jeder erzeugte Zug regelkonform ist, die Steinzähler nie auseinanderlaufen und die Schutzregel greift. Alle Prüfungen sind bestanden.
Rechts neben dem Brett steht die eigentliche Idee als Vorschau: ein Gegenüber mit Namen, Ort, Themen und einem Gesprächsfaden. Der Chat ist dort noch simuliert.
Ein Befund aus dem Testlauf, der für später zählt. 33 von 120 Partien endeten nach 400 Zügen ohne Entscheidung. Zwei gleich starke Spieler können in der Zugphase endlos hin und her schieben. Ein echter Betrieb braucht deshalb eine Remis-Regel: Stellungswiederholung oder eine Zugobergrenze ohne Schlag. Das ist eine halbe Stunde Arbeit, aber ohne sie hängen online Partien fest.
Die Nische ist besetzt, aber unsauber. Das hilft mehr, als es schadet: die Nachfrage ist bewiesen, die Unzufriedenheit auch.
| App | Bewertung | Was auffällt |
|---|---|---|
| Mills (donkeycat) | 4.6 bei rund 91'000 | Der Platzhirsch. In den Rezensionen wiederkehrend: Werbung mitten im Spiel, Premium-Währung, Abo für 18 Dollar im Jahr, wörtlich „Cash Grab" |
| Nine Men's Morris Multiplayer (lochmann) | 2.9 bei rund 3'700 | Über 100'000 Installationen. Hat bereits Chat, Freundesliste und Herkunftsanzeige, wird aber schlecht bewertet |
| Nine men's Morris (LITE Games) | gemischt | Dreizehn Sprachen, Rangliste, breit aufgestellt und dadurch für niemanden speziell |
| Ultimate Mill (henschit) | 4.2 bei 94 | Rezension dort: „Best Mills app, no ads, just a simple board game." Winzige Spielerbasis, der Entwickler schreibt selbst, online sei es eher für Freunde gedacht |
Der Schluss daraus. Die werbefreie Variante wird nachweislich geschätzt, sie findet nur keine Spieler. Der Platzhirsch findet Spieler, wird aber für sein Geschäftsmodell abgestraft. Genau dazwischen liegt der Platz.
„Man kann miteinander reden" allein trägt nicht: die lochmann-App hat Chat, Freundesliste und Länderanzeige seit Jahren und steht bei 2.9 Sternen. Chat als Funktion ist kein Unterschied.
Was tatsächlich einen Unterschied macht, ist die Zusammensetzung der Leute und der Ton. Und da ist deine Beobachtung der eigentliche Hebel, nur anders gefasst: nicht wer draussen bleibt, sondern wer sich angesprochen fühlt. Deutschsprachig, ohne Werbung, ohne Abo, ruhiges Tempo, Vorname statt Nummer, Profil mit Region und Themen. Wer sich für die Rangliste interessiert und drei Sekunden pro Zug braucht, ist woanders besser aufgehoben.
Das ist auch die belastbarere Positionierung nach aussen. Eine Abgrenzung nach Herkunft wäre weder im Play Store haltbar noch rechtlich sauber, und sie beschreibt das Ziel schlecht. Ein Spiel für Leute, die beim Spielen auch reden wollen, beschreibt es genau.
Ich habe die verfügbaren Umsetzungen angeschaut. Kurz gesagt: für die Spiellogik lohnt sich das Übernehmen nicht, für alles rundherum schon.
| Baustein | Übernehmen? | Begründung |
|---|---|---|
| Spielregeln und Brett | selbst | Ist bereits gebaut und getestet. Das Regelwerk ist überschaubar, die Fehlerquellen liegen in der Schutzregel und den Speichenreihen, und die sind abgedeckt |
| Computergegner | selbst | Läuft. farindk/morris hat eine deutlich stärkere Suche, steht aber unter GPL und in C++. Beides passt nicht zu einer Web-App, die im Store landen soll |
| Verbindung zwischen zwei Spielern | fertige Dienste | Hier steckt der Aufwand. Ein eigener Server dafür wäre vermeidbare Arbeit |
| Konten und Anmeldung | fertige Dienste | Nichts daran ist spielspezifisch |
| Store-Verpackung | vorhanden | Steht bei dir schon, siehe unten |
Zur Einordnung: die beste offene Web-Umsetzung, die ich gefunden habe, ist eine Bachelorarbeit mit React, Django, PostgreSQL und Redis. Technisch sauber, aber als Grundlage schwerer als ein Neubau, und es fehlt genau das, was den Unterschied ausmachen soll.
Das ist nicht nur die schnellere Reihenfolge, es ist bei dir die eingespielte. Kantonsheld liegt als Trusted Web Activity im Play Store: die App enthält kein eigenes Spiel, sie zeigt die Website im Vollbild. Neue Spielstände gehen über einen Deploy der Website live, ohne neue App-Version.
Was daran für Mühle zählt:
bubblewrap update setzt die Ziel-SDK-Version zurück, und der Signaturschlüssel muss ins BackupFür iOS gilt das so nicht. Apple lässt reine Web-Verpackungen ungern durch. Falls iPhone dazukommen soll, ist das ein eigener Entscheid und ein eigener Aufwand, und ich würde ihn erst treffen, wenn Android zeigt, dass Leute das Spiel nutzen.
Empfehlung: Cloudflare Workers mit Durable Objects. Der Grund ist die Bauart einer Partie. Zwei Leute teilen sich einen Zustand, beide müssen jeden Zug sofort sehen, und der Zustand muss auch dann noch da sein, wenn einer kurz das Netz verliert. Genau dafür ist ein Durable Object gemacht: ein kleines Objekt pro Partie, das den Brettzustand hält und beide Verbindungen bedient.
| Aufgabe | Womit | Kosten pro Monat |
|---|---|---|
| Website und Spiel ausliefern | Cloudflare Pages | 0 |
| Partie, Zugübertragung, Chat | Workers mit Durable Objects | 5 Dollar |
| Profile, Freundesliste, Statistik | Cloudflare D1 | im Obigen enthalten |
| Anmeldung | Vorname und Gerätekennung, später E-Mail | 0 |
| Laufende Kosten im Testbetrieb | 5 Dollar |
Der Play-Console-Zugang kostet einmalig 25 Dollar und ist bei dir bereits bezahlt. Erst bei mehreren tausend gleichzeitigen Partien wird der Unterbau spürbar teurer, und dann ist die Frage ohnehin eine andere.
Ein Punkt, den ich bewusst hervorhebe: die Zugprüfung gehört auf den Server. Wenn nur der Browser prüft, ob ein Zug erlaubt ist, kann jeder mit offener Entwicklerkonsole schummeln. Die Regel-Engine läuft deshalb an beiden Enden, im Browser für die schnelle Rückmeldung und im Worker als Entscheidung. Weil beides dieselbe Sprache ist, ist es derselbe Code.
Ja, alles davon. Und es gibt dabei einen Gedankensprung, der die Sache erst klar macht: es gibt gar keinen Server im gewohnten Sinn. Keine Maschine, die läuft und auf die man sich einloggt. Stattdessen gibt es benannte Objekte, die Cloudflare startet, wenn jemand sie anspricht, und wieder schlafen legt, wenn niemand mehr da ist.
Der Ort, wo sich die Leute finden, ist ein einziges solches Objekt mit dem Namen lobby. Wer einen Gegner sucht, meldet sich dort an. Sobald zwei zusammenpassen, erzeugt die Lobby ein neues Objekt für die Partie und schickt beide dorthin. Danach hat sie mit dem Spiel nichts mehr zu tun.
| Baustein | Wofür | Wie viele |
|---|---|---|
| Pages | Spiel und Website ausliefern, also genau das, was du im Prototyp siehst | eine Seite |
| Worker | Der Eingang. Nimmt jede Anfrage an, prüft wer da klopft, und reicht sie weiter | einer |
Objekt lobby | Die Partnersuche. Wer wartet gerade, wer passt zu wem, wer hat wen blockiert | eines für alle |
| Objekt je Partie | Brettzustand, Zugprüfung, Chat dieser einen Partie. Verschwindet, wenn die Partie fertig ist | eines pro laufendem Spiel |
| D1 | Profile, Freundesliste, gespielte Partien, eingegangene Meldungen. Alles, was eine Partie überdauert | eine Datenbank |
Praktisch heisst das: eine Konfigurationsdatei, ein Befehl zum Veröffentlichen, ein Konto, eine Rechnung. Keine Maschine, die nachts durchläuft und aktualisiert werden will.
Zwei Dinge lassen sich nicht dort erledigen, und beide sind klein:
Beides fällt erst in Stufe zwei an. Für den Test mit Einladungslink braucht es weder das eine noch das andere.
Sobald Profile und Chatverläufe gespeichert werden, sind das personenbezogene Daten von Leuten in Deutschland, Österreich und der Schweiz. Cloudflare lässt sich anweisen, Objekte und Datenbank ausschliesslich in der EU laufen zu lassen. Bei den Partie- und Lobby-Objekten geht das jederzeit über eine Zeile im Code. Bei der Datenbank ist es nur beim Anlegen möglich und danach nicht mehr änderbar. Wer das vergisst, muss später die Datenbank neu aufbauen und die Daten umziehen. Das ist der eine Punkt, den ich vor dem ersten Befehl setzen würde, nicht danach.
Ich schlage vor, den Test wirklich als Test zu bauen. Stufe eins beantwortet die Frage „spielt das jemand und reden die Leute miteinander" mit einem Bruchteil des Aufwands. Erst wenn die Antwort ja ist, lohnt sich Stufe zwei.
| Baustein | Stufe 1 | Stufe 2 |
|---|---|---|
| Spiel fertig polieren, Remis-Regel, Bedienung am Handy | 8 | 4 |
| Server, Partiezustand, Zugprüfung, Wiederverbinden | 14 | 8 |
| Chat mit Verlauf und Meldefunktion | 8 | 6 |
| Profile, Vorname, Region, Themen | 6 | 10 |
| Partnersuche und Warteschlange | 0 | 14 |
| Konten und Gerätewechsel | 0 | 10 |
| Benachrichtigungen | 0 | 8 |
| Play-Store-Verpackung und Veröffentlichung | 0 | 8 |
| Datenschutz, Nutzungsbedingungen, Moderationsregeln | 4 | 6 |
| Testen auf echten Geräten und Abnahme | 6 | 10 |
| Summe mit Puffer | 40 | 80 |
Kurze Antwort: nichts. Beides läuft im enthaltenen Kontingent, du zahlst in beiden Fällen die 5 Dollar Grundgebühr und keinen Rappen mehr. Die längere Antwort ist trotzdem interessant, weil sie zeigt, wo die Grenze wirklich liegt.
Ein rundenbasiertes Brettspiel erzeugt fast keine Last. Zwischen zwei Zügen passiert minutenlang gar nichts, und ein Zug ist eine Nachricht von unter hundert Zeichen. Zum Vergleich: ein Actionspiel schickt dreissig Zustandsbilder pro Sekunde, Mühle vielleicht sechs Züge pro Minute.
Dazu kommt der Kniff, der das Ganze billig macht. Ein Durable Object, das über die Hibernation-Schnittstelle arbeitet, wird nach zehn Sekunden ohne Ereignis aus dem Speicher genommen, ohne dass die Verbindungen der Spieler abreissen. Solange es schläft, läuft keine Zeitabrechnung. Bei Mühle heisst das: während einer zehnminütigen Partie ist der Server insgesamt vielleicht drei Sekunden wach.
| Gleichzeitig | Partien | Anfragen im Monat | vom Freibetrag | Rechenzeit | Kosten im Monat |
|---|---|---|---|---|---|
| 10 Spieler | 5 | 50'400 | 5 % | 0.1 % | 5 Dollar |
| 100 Spieler | 50 | 504'000 | 50 % | 1 % | 5 Dollar |
| 500 Spieler | 250 | 2'520'000 | 252 % | 6 % | 5.23 Dollar |
| 1'000 Spieler | 500 | 5'040'000 | 504 % | 12 % | 5.61 Dollar |
| 5'000 Spieler | 2'500 | 25'200'000 | 2'520 % | 58 % | 8.63 Dollar |
Der Freibetrag reicht bis rund 200 durchgehend gleichzeitige Spieler. Darüber kostet jede weitere Million Anfragen 15 Cent. Selbst bei 5'000 Leuten, die acht Stunden am Tag gleichzeitig spielen, landest du bei knapp 9 Dollar im Monat. Die Rechenzeit wird nie zum Thema: davon wäre der Freibetrag erst bei rund 8'700 gleichzeitigen Spielern aufgebraucht.
| Grenze | Wert | Was Mühle braucht |
|---|---|---|
| Anfragen je einzelnem Objekt | 1'000 pro Sekunde | Eine Partie erzeugt etwa 0.2 pro Sekunde. Reserve um den Faktor 5'000 |
| Anzahl Objekte | unbegrenzt | Eines pro laufender Partie |
| Verbindungen je Objekt | tausende | Zwei |
| Speicher je Objekt | 10 Gigabyte | Ein Brettzustand sind ein paar hundert Byte |
Es gibt genau eine Stelle, an der man sich verrechnen kann: die Partnersuche. Wenn alle Wartenden in eine einzige Warteschlange laufen, ist das ein einzelnes Objekt, und für das gilt die Grenze von tausend Anfragen pro Sekunde. Bei hundert oder tausend Spielern ist das weit weg. Sollte es je eng werden, teilt man die Warteschlange nach Spielstärke oder Region auf, und die Grenze verschwindet. Das ist ein bekanntes Muster, kein Umbau.
Bei hundert gleichzeitigen Spielern würde auch ein kleiner Mietserver für ein paar Franken im Monat locker reichen. Die Empfehlung für Cloudflare kommt also nicht daher, dass es sonst nicht ginge. Sie kommt von drei anderen Punkten:
Der eigentliche Engpass bei hundert gleichzeitigen Spielern ist ohnehin ein anderer: hundert gleichzeitige Spieler zu haben. Das ist Marketing, nicht Technik.
Die Spiellogik ist der einfachste Teil, das sieht man am Prototyp. Anspruchsvoll sind drei andere Dinge, und keines davon ist ein Programmierproblem.
Ein Spiel gegeneinander ohne Gegner ist kein Spiel. Wer die App aufmacht und niemanden findet, kommt nicht wieder. Deshalb steht in Stufe eins der Einladungslink und nicht die Partnersuche: die ersten Partien laufen zwischen Leuten, die sich kennen. Dazu gehört, dass der Computergegner gut genug ist, damit sich die App auch allein lohnt, und dass eine Partie auch über Stunden laufen darf statt nur in Echtzeit.
Sobald Fremde miteinander schreiben können, trägst du Verantwortung dafür. Dafür gibt es einen Lösungsweg, der das Problem grösstenteils auflöst statt es zu verwalten. Er steht im nächsten Abschnitt und ist im Online-Prototyp bereits gebaut.
Der Platzhirsch verdient Geld und kann davon Entwicklung bezahlen. Ohne Werbung und ohne Käufe ist das hier ein Projekt, das aus eigener Tasche läuft. Bei 5 Dollar im Monat ist das lange kein Thema, aber der Zeitaufwand für Betrieb und Meldungen ist es. Das gehört in den Entscheid, nicht in die Fussnote.
Die Frage war: wie kommt der Spass rein, ohne dass Moderation und Jugendschutz zum Klotz werden? Meine Antwort dreht das übliche Vorgehen um. Statt einen offenen Chat zu bauen und dann zu überwachen, was darin passiert, gibt es zwischen Fremden gar kein offenes Feld. Dafür ist alles, was es gibt, gut gemacht.
Der Kern. Zwischen Leuten, die sich nicht kennen, kann nur gesendet werden, was in einer Liste im Code steht. Der Server nimmt eine Kennung entgegen und schickt den Text selbst. Damit ist über diesen Weg keine Beleidigung möglich, keine Telefonnummer, kein Link, keine Anmache. Nicht weil ein Filter sie abfängt, sondern weil es die Zeichen dafür schlicht nicht gibt.
| Stufe | Was geht | Wann |
|---|---|---|
| 1. Sätze und Fragekarten | Rund zwanzig vorgegebene Sätze plus zehn Fragekarten mit je vier bis fünf Antworten. Einer stellt eine Frage, der andere wählt eine Antwort | sofort, in jeder Partie |
| 2. Gegenseitig merken | Nach der Partie sagen beide getrennt, ob sie wieder mit dieser Person spielen wollen | am Partieende |
| 3. Freier Text | Das offene Feld, ohne Einschränkung | erst wenn beide auf Stufe 2 ja gesagt haben |
Der Trick liegt in Stufe 2. Wer sich danebenbenimmt, wird nicht zurückgewählt und kommt deshalb nie in die Stufe, in der er frei schreiben könnte. Die Moderation macht das System selbst, und zwar bevor etwas passiert statt danach.
Der übliche Einwand gegen vorgegebene Sätze lautet, es fühle sich nach Automat an. Das stimmt, wenn es fünf Sätze sind und alle „Gut gespielt" heissen. Es stimmt nicht mehr, wenn die Karten echte kleine Fragen stellen: woher spielst du gerade, wer hat dir Mühle beigebracht, Kaffee oder Tee, bist du Frühaufsteher. Nach drei Karten weiss man etwas über die andere Person, und genau das war ja das Ziel.
Zwei angenehme Nebeneffekte: die Antworten füllen das Profil ganz von selbst, ohne dass jemand ein Formular ausfüllen muss. Und Leute, die nicht gern tippen, sind trotzdem im Gespräch, was gerade bei älteren Spielern zählt.
Ich bin kein Jurist, und die Einstufung im Store sowie die Pflichten nach dem Digitale-Dienste-Gesetz gehören vor einer Veröffentlichung einmal fachlich angeschaut. Was hier steht, senkt den Aufwand deutlich, es ersetzt die Prüfung nicht.
Das ist nicht nur Konzept. Die drei Stufen laufen bereits im Online-Prototyp. Der Server nimmt ausschliesslich Kennungen aus der Satzliste entgegen, freier Text wird abgewiesen, solange sich nicht beide gemerkt haben. Beides ist mit automatischen Tests belegt: der Versuch, einen erfundenen Satz oder freien Text durchzuschleusen, wird abgelehnt.
Für dieses Projekt: kein Grund zu wechseln, und ein möglicher Grund, es ergänzend zu nutzen. Stand Juli 2026 sind die beiden Werkzeuge unterschiedlich stark, nicht gestaffelt.
| Für diese Arbeit | Besser aufgehoben bei |
|---|---|
| Spieloberfläche, Brett, Bedienung am Handy | Claude Code. Bei Frontend-Arbeit ist der Abstand am deutlichsten, und es ist der grösste Teil des Projekts |
| Spiellogik über mehrere Dateien hinweg | Claude Code. Auf dem härteren der beiden gängigen Prüfsätze liegt es rund zehn Punkte vorn |
| Server einrichten, Deploy-Abläufe, Kommandozeile | Codex. Auf Terminal-Aufgaben liegt es klar vorn, rund 83 gegen 78 Punkte |
| Durchsehen vor dem Veröffentlichen | Codex als zweite Meinung. Es fällt positiv auf beim Finden von Randfällen |
Praktisch heisst das: bauen wie bisher, und falls du ohnehin ein ChatGPT-Abo hast, Codex vor der Veröffentlichung einmal über den Code schauen lassen. Ein zweites Abo nur für dieses Projekt lohnt sich nicht.
Ein Vorbehalt zur Einordnung: die Zahlen stammen aus Vergleichen von Mai bis Juli 2026, und die Modelle wechseln alle paar Monate. Als Momentaufnahme brauchbar, als dauerhafte Regel nicht.
Der Prototyp ist nicht als Wegwerfstück gebaut. Die Regel-Engine ist von der Darstellung getrennt und läuft unverändert auch im Worker weiter.