Daniel Wulf

I build Flutter apps on my own — from the first idea to the store listing, backend, release and privacy compliance included.

Nomad TravelGuide
Live on the App Store, Android in closed testing
Vumble
Version 1.0 in development
Available
15–25 hours per week, remote, Central European time
Daniel Wulf, head and shoulders in front of a blurred row of houses, wearing a striped shirt

01What I do

What you can hire me for

A Flutter app from scratch

Concept, architecture, implementation and submission — one codebase for iOS and Android. No second team for the second platform.

Firebase backend

Firestore data model, Cloud Functions for everything the client must not decide on its own, Authentication and push via Cloud Messaging. Rules enforced on the server, not just in the interface.

Store release and compliance

Submission, metadata, resolving rejections. I check the privacy policy against the actual code rather than against a template.

Taking over existing apps

Getting into someone else's code, fixing bugs, adding features — including projects whose original developers are no longer available.

15 to 25 hours per week, expandable. Remote from the Central European time zone, working over Git. As a sole proprietor I contract directly — the legal notice and privacy policy are linked at the bottom of this page.

02Projects

Two apps, two different problems

Both apps are entirely mine: the idea, the architecture, the code, the store presence, the legal texts. Technically they have almost nothing in common — which is exactly the point.

Nomad TravelGuide

Cloud, backend and user-generated content

Firestore data model, Cloud Functions, moderation, a server-side search index, push to thousands of devices, media uploads.

Vumble

Sensors, background processing and battery behaviour

Location and motion detection over hours, native code on iOS, all data kept on the device, the battery budget as a hard limit.

One problem is solved on the server, the other on the device. I solved both alone — from the first line of code to store approval.

Nomad TravelGuide app icon

Live on the App Store · Android in closed testing

Nomad TravelGuide

A travel app with an AI planner, a map, chat and community. iOS and Android from one Flutter codebase, backed by Firebase.

Step 2 of 5 in the trip planner: a “Search country” field above a tiled selection of countries including Albania, Argentina, Australia and Brazil.
Step 2 of 5: picking countries through a search field — the data covers more than 190 countries.
Trip plan screen showing day 2 of 4 with an accommodation slot and activity cards for the Eiffel Tower Summit View and Jardin du Luxembourg.
Day 2 of a four-day plan: accommodation first, then the activities in the order they are visited.
Social map of Europe with photo markers on cities and filters for spots and friends.
The social map: spots and friends, filtered separately.

Planning a trip usually means juggling a search engine, maps, booking sites and a notes document. Nomad puts the planning, the content and the people currently travelling the same route into one app — iOS and Android from a single Flutter codebase.

The planner walks you through five steps, from dates, countries and modes of transport to the finished itinerary. Suggestions come from the Gemini API, and the daily structure is built around real travel times between stops rather than a wish list.

The selection turns into a day-by-day itinerary with accommodation and activities. Every entry can be removed before the plan is finalised.

The social half is the harder one: spots with user-submitted photos and text, a map to go with them, one-to-one and group chat, quests, challenges and a friends book. The moment users can upload content, an app turns into an operation — with reports, moderation and liability.

  • Reporting and moderation workflow, enforced on the server rather than hidden in the client
  • One central media upload path with video compression
  • Offline persistence and image caching for poor connections while travelling
  • Aggregated usage statistics with no personal reference
  • GDPR implemented entirely by me and checked against my own code

One decision

Firestore has no full-text search. The usual shortcut is a prefix search built on range queries — it only matches from the beginning of a string and breaks on capitalisation, umlauts and words in the middle of a name.

Instead, a Cloud Function computes the search index at write time: the text is normalised, split up and stored as a field on the document. The client only ever queries that field.

The cost is extra writes. In return, results are correct regardless of spelling, without pulling in another service — one I would have to pay for, operate, and declare as a data recipient in the privacy policy.

Vumble app icon

Version 1.0 in development

Vumble

An app for active mobility: it detects your journeys automatically and converts them into CO₂ saved — entirely offline, on the device.

Daily view showing 1.3 kg of CO₂ compared with driving, 193 active calories and 7.7 active kilometres, followed by a breakdown into walking, cycling and vehicle.
Daily figures and the automatically detected split by mode of travel.
Mascot screen showing the state “Full of momentum”, level 4 of 5, with a list of all levels below.
Five mascot states; the level follows from how much you moved that day.
Profile screen with a German/English language toggle and a list of granted permissions for activity recognition and location.
Granted permissions in the profile — activity recognition and location, and nothing else.

Leaving the car at home is invisible. Vumble records the distances you cover, detects how you moved automatically, and converts them into two numbers: the CO₂ saved compared with driving the same route, and the calories burned. The CO₂ factors are the official figures published by the German Environment Agency.

To make those numbers land, the app translates them into comparisons — as much CO₂ as a given number of trees bind in a day — and wraps them into share graphics for social media. A mascot with five states, a daily streak and daily and weekly reports keep it going.

One decision

On iOS, an off-the-shelf Flutter package for location was the obvious choice. But it cannot switch accuracy without stopping tracking first — and that is precisely what an app running all day needs: coarse while nothing happens, precise the moment someone sets off.

So I wired up CLLocationManager natively myself and combined it with significant location change. In field testing, battery use stays below one per cent across 48 minutes of tracking.

The cost is platform-specific code that has to be maintained. Without it the app would either be inaccurate or, after half a day, the top entry in the battery menu — and uninstalled.

The app runs entirely offline and holds no internet permission. All data stays on the device; there is no account and no server. That is not a setting you can flip, it is the architecture — and it keeps the privacy policy short. The app has been bilingual from day one.

03Skills

What I work with

No percentage bars. Instead, where I have actually used it.

Mobile
Flutter · Dart · iOS and Android · App Store Connect · Google Play Console
Two apps, each from a single codebase serving both platforms. I took Nomad through App Store submission to approval myself.
Backend and cloud
Firebase: Firestore, Cloud Functions, Authentication, Storage, Cloud Messaging · Google Cloud Platform
The entire Nomad backend: data model, server-side rules, moderation workflow, search index, push and media uploads.
Languages
Dart · C · C# · C++ · Python
Dart in both apps, C in the firmware of the LED matrix board, C# in its desktop control interface.
Tools
Git and GitHub · VS Code · Xcode · Android Studio
Daily working environment; release builds for both stores go through Xcode and Android Studio.
Electrical engineering
STM32 microcontrollers · SPI · circuit assembly · PLC programming with Siemens TIA Portal
An STM32F439 driven over SPI in my final technician project; PLCs and circuits for four years on a live production floor.
Also
GDPR implementation in products · technical documentation · working with AI tools
I wrote the Nomad privacy policy myself and checked it point by point against my own code.

04Background

From electronics to software

An apprenticeship and then four years as an Industrial Electronics Technician at Rieber: clearing faults on electrical equipment while production kept running, PLC automation, and building electronic assemblies.

From September 2024 to July 2026, a State-certified Engineering Technician qualification in electrical engineering with a focus on data technology, at the Ferdinand von Steinbeis School in Reutlingen. My final project was an LED matrix board built around an STM32F439 and a TLC6C5748 LED driver, connected over USB-C, driven over SPI, with firmware in C and a control interface in C#, in cooperation with Institut Dr. Foerster. The two apps were built alongside it.

One habit carries over from the shop floor: a fault is fixed when the machine runs again — not when the cause has been found.

Based in
Eningen unter Achalm, Baden-Württemberg, Germany
Languages
German (native), English (fluent)
Legal form
Sole proprietorship

05Contact

Contact

A short description of what you need is enough — a project, overflow work, or a question about working together.

daniel_wulf@outlook.de

No form, no newsletter. An email will do.