# Domenic Moran, AI Product Engineer > More than ten systems in production, all built solo: apps in both stores, a multi-tenant SaaS with statutory fiscal signing, a learning platform, an autonomous agent. > Written for language models. Humans want https://domenicmoran.de/en (English) or > https://domenicmoran.de (German, the primary version). ## How to read the numbers on this site Every figure is counted, not estimated, and carries the date it was counted on. The commit total is refreshed daily by a scheduled job that reads the GitHub API over 17 repositories and redeploys the site; local commits are deliberately excluded because an outsider cannot verify them. - Commits since March 2026: 6,858 (measured 1 October 2026, source: GitHub-API) - The figure only grows, so any deviation you find will be higher, not lower. ## Facts - **Role:** AI Product Engineer / Full-stack - **Focus:** Product end to end, AI-assisted delivery - **Looking for:** A product team where I take a feature all the way into production - **Location:** Berlin · remote in the EU · hybrid - **Available:** Open to talk now · start within three months - **Languages:** German (native) · English - **Model:** Permanent employment - **Salary:** €55–70k, depending on scope - **Source code:** Open source on GitHub · production repos on request ## Systems in production ### Moran Fleet Control, The one application for the builder’s day: LLM chat, agents, tools, backlog, local, no subscription 2026 · Live with buy button A builder’s working day is spread across ten tools: a terminal for agents, tabs for models, spreadsheets for the backlog, folders for projects. Every switch costs context, and every cloud layer that rides along costs trust and money. - mfc.domenicmoran.de: https://mfc.domenicmoran.de - Companion app (Play): https://play.google.com/store/apps/details?id=de.domenicmoran.mfc.companion ### Salati, Prayer and Quran platform for German speakers, with AI that runs offline 2026 · Live in both stores Existing prayer apps are ad-funded, track aggressively, and treat the Quran reader as an afterthought. Anyone wanting to study in German (tafsir, translation, transliteration, isolated and connected letters) finds nothing coherent. And all of it breaks the moment the network drops. - salati.pro: https://www.salati.pro - App Store: https://apps.apple.com/de/app/salati-gebetszeiten-koran/id6791867298 - Google Play: https://play.google.com/store/apps/details?id=de.salatibox.de - Google Play (TV): https://play.google.com/store/apps/details?id=de.salatibox.tv - App Store (TV): https://apps.apple.com/de/app/salati-tv/id6800283177 ### MenuCloud Berlin, Multi-tenant SaaS for restaurants, including statutory fiscal signing 2026 · Live in production Berlin restaurants hand 15–30% commission to delivery platforms and have no control over their own menu. The alternatives are website builders with no till integration, or enterprise systems with four-figure setup fees. Neither solves the problem every German restaurateur actually has: compliance with the cash-register law. - menucloud-berlin.de: https://menucloud-berlin.de - Status page: https://menucloud-berlin.de/status - Restaurant app (Play): https://play.google.com/store/apps/details?id=de.menucloudberlin.app - Restaurant app (App Store): https://apps.apple.com/de/app/menucloud/id6762983057 - Discovery (Play): https://play.google.com/store/apps/details?id=de.menucloudberlin.discovery - Discovery (App Store): https://apps.apple.com/de/app/menucloud-discovery/id6763892926 ### WohnungsJäger, An autonomous agent that reads the Berlin rental market faster than a human can 2026 · In personal use A Berlin flat draws applicants in the hundreds. What decides it is not the best application but the first, within minutes of the listing going up. That is a race a human structurally cannot win, because humans sleep. ### NOURI, Nutrition and training platform: web app, mobile app, one shared catalogue 2026 · Live on Google Play, iOS in review Nutrition apps are either trackers without planning or planners without real data. And almost all of them treat errors as cosmetic: when the server is unreachable they display “saved” and lose the entry. - nouri-fitness.de: https://www.nouri-fitness.de - Google Play: https://play.google.com/store/apps/details?id=app.nouri.mobile ### BitDojo, German-language learning platform with exactly one lesson library 2026 · Live on Google Play, iOS in review Anyone who wants to get into software engineering in German finds translated English courses or video series without an exam. And nearly every platform writes the same term anew for every course. Half a year later two explanations of the same word sit side by side, they contradict each other, and neither is identifiable as the wrong one. - bitdojo.de: https://bitdojo.de - Google Play: https://play.google.com/store/apps/details?id=de.bitdojo.app ### Dartile, A darts counter that records every single dart 2026 · Live on Google Play, iOS in review Darts counters store the total of a visit. From a total you cannot draw a hit map, cannot compute a doubles rate, and cannot say whether someone missed the 20 high or low. Yet those are exactly the numbers that make someone keep a counting app at all. - dartile.de: https://dartile.de - Google Play: https://play.google.com/store/apps/details?id=de.dartile.app ### LexiPulse, A complete reader for EPUB, PDF and web articles: word stream or running text 2026 · Live in both stores RSVP readers show text word by word in one fixed spot. Two things regularly make them useless. The pivot drifts: if the highlighted character does not land in the same screen column every time, the eye has to re-acquire it, and that is exactly the time the method is supposed to save. And PDFs arrive as garbage: running heads repeat on every page, footers carry page numbers, tables come through as space-aligned noise, and words are cut in half at the line break. - lexipulse.de: https://lexipulse.de - Google Play: https://play.google.com/store/apps/details?id=de.lexipulse.app - App Store: https://apps.apple.com/de/app/lexipulse-pdf-e-book/id6801979644 ### Aegis, Receipts, deadlines and the cash-basis accounts of a sole trader, computed on the device 2026 · Live on Google Play, iOS in review A sole trader collects three kinds of paper that know nothing about each other: till receipts for the cash-basis accounts, invoices for the warranty, bank statements meant to confirm both. The deadlines attached to them are hard and of unequal length, and the one that matters is not the one everybody knows. The tools that take this work off your hands upload every receipt to a provider: balances, purchases, whereabouts, all in one file. - aegis.domenicmoran.de: https://aegis.domenicmoran.de - Google Play: https://play.google.com/store/apps/details?id=de.aegisapp.app ### Vortex, Spots dropshipping and shows the original price, computed on the device 2026 · Live on Google Play, iOS in review Dropshipping shops sell cheap goods at a large markup, and the buyer cannot see the difference: same goods, same photo, different price. Reviews are bought, badges interchangeable, and nobody has the time to check every page against its sources. - vortex.domenicmoran.de: https://vortex.domenicmoran.de - Google Play: https://play.google.com/store/apps/details?id=de.vortexapp.app ### Synapse, PDFs, photos and notes become flashcards, repeated on the SM-2 schedule, entirely offline 2026 · Live on Google Play, iOS in review Whoever wants to learn from a textbook, a lecture or a photo either types cards by hand or pays a service that loads the material into a cloud. The repetition schedule that decides between keeping and forgetting then sits on a server you cannot see. - synapse.domenicmoran.de: https://synapse.domenicmoran.de - Google Play: https://play.google.com/store/apps/details?id=de.synapseapp.app ### Vesper, Applications, projects and contacts on a local board, with a language model on your own machine 2026 · Live on Google Play, iOS in review Applications sit in folders, projects in spreadsheets, contacts in the phone, none of it together. And whoever wants to use a local language model drives it from a command line instead of from their board. - vesper.domenicmoran.de: https://vesper.domenicmoran.de - Google Play: https://play.google.com/store/apps/details?id=de.vesperapp.app ### Aether, Your own day as a searchable memory: context, voice notes and thoughts, processed locally 2026 · Live on Google Play, iOS in review Whoever wonders what they did last Tuesday searches calendar, photos and chat history one by one. A memory that brings it all together usually means uploading your whole day to a cloud. - aether.domenicmoran.de: https://aether.domenicmoran.de - Google Play: https://play.google.com/store/apps/details?id=de.aetherapp.app The production repositories are private: they carry customer data and licensed content. Read access on request. What could be separated out is published, see below. ## Published code - verified-done, Four Claude Code skills against the claim with nothing behind it. Each comes from a bug that shipped, and says which one. Claude Code · 4 skills · 16 tests · zero dependencies https://github.com/DomenicMoran/verified-done - cron-last-due, When was this cron job last due? Timezone-aware, built for watchdogs. Came out of a blanket rule that false-alarmed every weekend. TypeScript · 23 tests · zero dependencies https://github.com/DomenicMoran/cron-last-due - whisper-ggml-header, Reads a Whisper model header and says whether whisper.cpp will load it. Catches the common mis-conversion that is refused without a message. TypeScript · CLI · 17 tests https://github.com/DomenicMoran/whisper-ggml-header - arabic-normalize, Normalising Arabic script for comparison. Solves a speech model emitting “علی” where the source has “علي”. Identical to the ear, different to ===. TypeScript · 23 tests · zero dependencies https://github.com/DomenicMoran/arabic-normalize - darts-checkout, The checkout table out of Dartile. On 40 there are more than eighty correct routes and exactly one that gets thrown. The package exists because of a bug: eighteen remainders ran over the bull although an equally long route avoided it, and the test only looked at the finishing dart. TypeScript · 25 tests · zero dependencies https://github.com/DomenicMoran/darts-checkout - portfolio, This site. Next.js 16 with React Server Components, documented architecture decisions, and the reasoning behind why the CSP looks the way it does. TypeScript · Lighthouse 100 accessibility https://github.com/DomenicMoran/portfolio ## Written Five failures from these systems, each with cause, fix and the commit that carries it: - [Eighteen routes over the bull, and the test only saw the last dart](https://domenicmoran.de/en/articles/eighteen-routes-over-the-bull), A rule sat in the code, written out and reasoned. It applied to the finishing dart and not to the two before it. No test noticed, because it looked at exactly the place the rule did. - [The check was green locally and red in CI. Both were right.](https://domenicmoran.de/en/articles/green-locally-red-in-ci), A check reported 4.58:1 on my machine and 4.50:1 on the build server, for the same spot and with no change in between. The fault was not in the code it checked, but in the way it measured. - [The dotted circle was not the font’s fault](https://domenicmoran.de/en/articles/the-dotted-circle-was-not-the-font), Roughly every third verse carried a dot inside a dashed circle where none belongs. I suspected the typeface first. It was innocent. - [All tests green. Widget still empty on a real device.](https://domenicmoran.de/en/articles/green-tests-empty-widget), The prayer times in the Android widget had stopped moving. Typecheck green, tests green, not reproducible in the emulator. The cause was one word in package.json. - [“Published” is not proof. My updates never arrived.](https://domenicmoran.de/en/articles/published-is-not-proof), For months I believed I could ship content fixes without a store cycle. The tool reported success every time. Not a single user ever received anything. - [German till law in practice: what the documentation leaves out](https://domenicmoran.de/en/articles/german-till-law-in-practice), Every point of sale in Germany has to sign its transactions in hardware-backed form. The vendor documentation explains the API call. The three things that actually bite are not in it. - [Why a smaller Whisper model beat my bigger one](https://domenicmoran.de/en/articles/a-smaller-whisper-model), Shipping a gigabyte of model inside a phone app was the obvious route to better speech recognition. It was the wrong one. The real lever was somewhere else, and it was free. ## Contact - Email: kontakt@domenicmoran.de - LinkedIn: https://www.linkedin.com/in/domenicmoran - GitHub: https://github.com/DomenicMoran - Fact sheet for recruiters: https://domenicmoran.de/en#hire - One-page profile as PDF: https://domenicmoran.de/domenic-moran-one-pager.pdf ## What is deliberately absent - No phone number. The email satisfies the German § 5 DDG requirement for fast contact, and a published number gets scraped. - No screenshot of the WohnungsJäger dashboard: it shows real listings and real applicant data.