"Desktop Companion" (working title)
"Desktop Companion" (Arbeitstitel)
A minimalist desktop companion for Windows that delivers customizable reminders. Users can edit the reminder texts, adjust the interval between reminders, and drag the companion to any position on the screen. Available in versions for Windows 10 and Windows 11. Built entirely in pure Python with Tkinter, without a game engine or visual scripting framework.
Ein minimalistischer Desktop-Begleiter für Windows mit individuell anpassbaren Erinnerungen. Erinnerungstexte und Intervalle lassen sich frei konfigurieren, und der Begleiter kann per Drag-and-drop an beliebiger Stelle auf dem Desktop platziert werden. Verfügbar in Versionen für Windows 10 und Windows 11. Vollständig in reinem Python mit Tkinter umgesetzt, ohne Engine oder visuelles Scripting.
github linkgithub link
Stockroom
Playable prototype on itch.io (still being balanced)
Spielbarer Prototyp auf itch.io (Balancing läuft noch)
An endlessly scaling idle game about running a fantasy guild's storeroom. Loot piles up on a counter and is dragged into genre crates or sold, crafted goods are made from stored ones, and a party leaves every 45 seconds needing specific items. Single-file HTML and vanilla JavaScript, no framework and no dependencies, with progress saved in the browser.
Ein endlos skalierendes Idle-Spiel über die Lagerverwaltung einer Fantasy-Gilde. Beute landet auf einem Tresen und wird in Genre-Kisten gezogen oder verkauft, Handwerkswaren werden aus gelagerten Gütern hergestellt, und alle 45 Sekunden bricht eine Gruppe auf, die bestimmte Gegenstände braucht. Eine einzelne HTML-Datei mit reinem JavaScript, ohne Framework und ohne Abhängigkeiten, der Fortschritt wird im Browser gespeichert.
- Game design: nine goods genres, crafting chains, expeditions whose needs scale with progress, 52 achievements that unlock upgrades step by step, and nine rare legendary items as the end goal.
- Automation with limits: hired helpers (familiars, apprentice, sales assistant, producers) each have a clear job, so none of them can use up another's resources.
- Balancing: prices, rates and chances tuned through iterative playtesting and feedback from a first outside player.
- Player experience: offline earnings, a prototype notice, dark and light theme, and a layout that works on desktop and phone.
- Testing and documentation: automated headless tests and screenshot checks before each release, plus a dev blog and a game design document detailed enough to rebuild the gameplay loop in another language.
- How it was built: it began as a casual vibe-coding session that I accidentally spiralled into, and I then used it to test my game design skills. I designed the game, set every rule and number, and playtested it. The code was written with AI assistance (Claude) from my specifications.
- Spieldesign: neun Warengenres, Herstellungsketten, Expeditionen, deren Anforderungen mit dem Fortschritt wachsen, 52 Erfolge, die Upgrades schrittweise freischalten, und neun seltene legendäre Gegenstände als Endziel.
- Automatisierung mit Grenzen: angeheuerte Helfer (Vertraute, Lehrling, Verkaufsassistent, Produzenten) haben jeweils eine klare Aufgabe, sodass sie sich gegenseitig keine Ressourcen wegnehmen.
- Balancing: Preise, Raten und Wahrscheinlichkeiten wurden durch iteratives Playtesting und das Feedback eines ersten externen Spielers abgestimmt.
- Spielerlebnis: Offline-Einnahmen, ein Prototyp-Hinweis, dunkles und helles Design und ein Layout, das am Desktop und am Smartphone funktioniert.
- Tests und Dokumentation: automatisierte Headless-Tests und Screenshot-Prüfungen vor jeder Veröffentlichung sowie ein Dev-Blog und ein Game-Design-Dokument, das so detailliert ist, dass sich die Spielschleife in einer anderen Sprache nachbauen lässt.
- Entstehung: Es begann als lockere Vibe-Coding-Session, in die ich versehentlich hineingerutscht bin, und wurde dann zu einem Test meiner Game-Design-Fähigkeiten. Ich habe das Spiel entworfen, alle Regeln und Zahlen festgelegt und es getestet. Der Code wurde nach meinen Vorgaben mit KI-Unterstützung (Claude) geschrieben.
play on itch.ioauf itch.io spielen
Unwavering Wraith
Released on itch.io
Veröffentlicht auf itch.io
Turn-based, Final Fantasy-inspired roguelite across 100 floors, built in RPG Maker MV (JS). The engine supplies the editor and battle framework; the systems below are my own work.
Rundenbasiertes, von Final Fantasy inspiriertes Roguelite über 100 Etagen, entwickelt in RPG Maker MV (JS). Die Engine liefert Editor und rundenbasierten Kampf; die folgenden Systeme stammen von mir.
- Procedural generation: RNG decides furniture placement, room type (fight, loot, event) and encounter rarity and difficulty, scaling with progress.
- Roguelite loop: a global reset routine clears all persistent items and switches and restores the character.
- Event-driven item and skill system: all effect logic is custom, using listener hooks that fire conditionally during combat or rooms, with manual state and variable management.
- Balancing: values tuned through iterative playtesting with friends instead of automated tools.
- Narrative and documentation: cutscenes, characters, hub, and an in-game dev room documenting design pillars, take-aways and compromises.
- Prozedurale Generierung: Zufallslogik bestimmt Möbelplatzierung, Raumtyp (Kampf, Beute, Ereignis) sowie Seltenheit und Schwierigkeit der Begegnung, skalierend mit dem Fortschritt.
- Roguelite-Schleife: Eine globale Reset-Routine löscht alle bisher generierten Gegenstände und Schalter und setzt den Charakter zurück.
- Ereignisgesteuertes Item- und Skill-System: Sämtliche Effektlogik ist selbst geschrieben, mit Listener-Hooks, die bedingt im Kampf oder in Räumen ausgelöst werden, inklusive manueller Zustands- und Variablenverwaltung.
- Balancing: Werte durch iteratives Playtesting mit Freunden statt mit automatischen Tools abgestimmt.
- Story und Dokumentation: Zwischensequenzen, Charaktere, Hub und ein Entwicklerraum im Spiel, der Design-Grundsätze, Erkenntnisse und Kompromisse dokumentiert.
Engine limitations and my workaroundsEngine-Grenzen und meine Lösungswege
- No loops or abstraction: repeated operations are hardcoded; loops were built with label and jump commands.
- Conditional branches cannot be collapsed, which made the encounter-generation events hard to navigate.
- Static database entries: enemy stats per difficulty were adjusted through status effects.
- No debugger: variables were displayed through a temporary NPC and a text box before each playtest.
- Keine Schleifen oder Abstraktion: Wiederholte Abläufe sind fest kodiert; Schleifen wurden mit Label- und Sprungbefehlen umgesetzt.
- Bedingte Verzweigungen lassen sich nicht einklappen, was die Events zur Begegnungsgenerierung schwer navigierbar machte.
- Statische Datenbankeinträge: Gegnerwerte je Schwierigkeit wurden über Statuseffekte angepasst.
- Kein Debugger: Variablen wurden vor jedem Playtest über einen temporären NPC und eine Textbox angezeigt.
Play on itch.ioAuf itch.io spielen