Web & mobile software engineer

I take products from an empty repo to something people open every day.

Ten years of production React, TypeScript and Node. Flutter when the thing needs to live on a phone. One person for the whole job: the UI, the state, the data layer, and the edge cases nobody thought to scope.

Based
Remote · EU hours
Business
Registered in NL · KvK 42120935
Open to
Contract & freelance
Before you commit
Published prices · spec from €300
01What I do

Two lanes, both end to end.

Most teams don't need a specialist in exactly one framework. They need someone who can pick up whatever is already there and finish a whole feature.

01

Business

Web apps

Production React and TypeScript. Component architecture, state that doesn't rot as the app grows, and the boring parts done properly: auth, forms, data fetching, error and empty states.

ReactTypeScriptAstroViteThree.jsMUI
See the business work →
02

Mobile

Flutter apps

One codebase to Android, iOS, web and desktop. Offline-first data, custom rendering when the design needs it, and interactions that don't feel like a website in a wrapper.

FlutterDartRiverpodgo_routerDriftSQLite
See the mobile work →

How I work

  • You see it in slicesReviewable increments as we go. No black box that opens in week eight.
  • Existing codebases welcomeGreenfield is the easy case. Most real work is inheriting something and making it better without breaking it.
  • Tests where they earn itMoney, dates, tax rules, state machines. Not a coverage number for its own sake.
  • Proof before commitmentEvery project below is public and running. I'll build a demo of your idea before you sign anything.
02Solutions & prices

Every price is already on the page.

Fixed-scope packages with the hour estimate, the price and the delivery date published before you talk to me. No discovery call to find out whether you can afford it. Send an order and a written quotation comes back within two working days.

  1. €300Spec SprintA written fixed-scope plan with the hours in it, in 5 working days. Credited in full against a build.
  2. €600Prototype SprintYour riskiest screen, running on a link you can send to a partner or a bank.
  3. €400–€3,600BuildsWebshops, mobile apps, booking systems, internal tools. Seven packages, each with its exclusions written down.
  4. €95/moCare plansBecause software nobody maintains stops working — slowly, then all at once.

Nothing is charged on this site — you send an order, I reply within 2 working days with a written quotation. All prices ex. VAT. Dutch customers pay 21%; EU businesses with a valid VAT number are invoiced at 0% under the reverse-charge rule.

03Selected work

Shipped, not slideware.

These are my own projects, not client work behind an NDA. You can open the app and read the code before we ever speak.

01 / 02

Business

Tools people open to get work done. Local-first where it helps, tested where being wrong would cost money. This one runs my own company.

Sole Ledger screenshot
Mobile appMy own one-person company

Sole Ledger

The bookkeeping app that runs this business.

Bookkeeping for a Dutch sole trader living in Japan: log time, photograph receipts, pull unbilled hours into an invoice, and see what to set aside for tax. Two tax systems, two currencies, no server and no subscription. Now in its second year of doing the books it was built for.

  • Unbilled time pulls into tri-lingual (EN/NL/JA) PDF invoices with the right VAT wording per client. Refresh a draft and it picks up hours logged since.
  • Invoices stay editable after the fact: due dates, a two-party signature block, and a signature you draw once and reuse.
  • Photograph a receipt and on-device OCR fills in the amount, tax and date. Nothing is saved without a look first.
  • A fixed-asset register depreciates properly and feeds the year's slice into the tax reserve on the dashboard, so March isn't a surprise.
  • The whole ledger is one SQLite file, synced between laptop and phone with Syncthing.
FlutterDartRiverpodDrift (SQLite)pdf / printingML Kit OCRgen-l10n
02 / 02

Mobile

Flutter apps to Android, iOS, web and desktop from one codebase. Offline-first, with custom rendering where the design earns it. The first came out of a community I read every day; the rest came out of my own life around Japan — studying the language, and moving there.

textlog screenshot
Mobile appPeople who read textlog.cc on their phone

textlog

The community had a website. Now it has an app.

textlog is a 280-character, text-only community whose API was deliberately read-only. This is an unofficial client for it: native feeds, nested threads, search, notifications, and a live stream of new posts as they are written. Writing used to be handed back to the site, because the API had no way to write — and that was a decision, not an oversight. So I wrote the write API, guardrails included, and had it merged upstream.

  • Every list in the app is one FeedSource: one notifier and one widget serve @, my feed, hot, all, profiles, hashtags and threads.
  • Posts render as the site renders them — code, LaTeX, redactions, polls, quizzes, voice clips, #todo lists — because the tokenizer is a port of its own.
  • A live tab over the server's SSE firehose, which a website can't have, with a separate transport on web where the HTTP client buffers instead of streaming.
  • Feeds mark themselves read as posts scroll past, and drafts and bookmarks are the server's — so the website and the app share them.
  • Signing in, posting, editing and following run on endpoints I wrote for the server and merged upstream: rate limited, with signup kept in a browser.
FlutterDartRiverpodgo_routerServer-sent eventsF-Droid
LinguaPop screenshot
Mobile appLearners past the beginner stage

LinguaPop

A Japanese newspaper and bookshelf you can actually read.

Import an EPUB, or pick which Japanese papers you carry, and read either with per-word JLPT colour coding, tap-to-look-up and select-to-translate. The news arrives set as a Japanese daily rather than a feed — kanji masthead, columns, a dateline, foldable days — and the library is a shelf of leaning covers. On F-Droid, GPL-3, and entirely offline.

  • The news is a newspaper, not a feed: a masthead in heavy kanji, a two-column masonry front page, a Japanese dateline and days you can fold shut. Swipe to change paper.
  • Per-token JLPT colour coding, plus a difficulty estimate worked out once at import — so you can size up a story before committing to it.
  • Tap any word for an offline JMdict entry, or select a passage to translate. Words you keep export to AnkiDroid.
  • Reading mode, on by default, strips the app back to the three things it does: shelves, the front page, the reader.
  • On F-Droid with reproducible builds, byte-compared against their own buildserver's output before release.
FlutterDartRiverpodgo_routerHiveMeCab (FFI)TTS
Kurashi 暮らし screenshot
Mobile appFirst-time movers to Japan

Kurashi 暮らし

Your first year in Japan, in the right order.

Moving to Japan front-loads everything: a dozen offices in three weeks, each wanting the document the last one produced, and rubbish rules that change between neighbouring wards. Kurashi turns that into a dated plan, and teaches you the Japanese words you'll hear at the counter while you work through it.

  • One onboarding pass covering your dates, city, housing and plans generates the whole personalised checklist and rubbish schedule.
  • Deadlines are real calendar dates from your own arrival date, with the legally binding ones flagged.
  • Prerequisites are enforced: the bank account stays blocked until your address is registered, because that's how it works.
  • Every task carries the phrase to say in Japanese, kana and romaji. Tap it to enlarge and hold it up at the counter.
FlutterDartRiverpodgo_routerLocal notificationsshared_preferences
Chronomap screenshot
Mobile appPeople who like history and hate timelines

Chronomap

A history map you scrub through time.

Drag the epoch slider between 2000 BCE and today: borders morph, events fade in around their date, and the whole colour mood shifts from parchment-warm in the deep past to crisp and modern now.

  • Six modes: military history, literature, philosophy, medicine, natural disasters, plus live geography.
  • Event data pulled from Wikidata, merged with a bundled seed set and ranked by real prominence.
  • Hand-rolled zoom clustering and border morphing, built to outlive a fast-moving mapping library.
  • Fourteen architectural archetypes rendered procedurally in 2.5D, building and collapsing as you scrub.
FlutterDartRiverpodflutter_mapWikidata SPARQLOpenStreetMap
Off the clock

I also build games, for the love of it.

Not a service I sell. It's where the harder rendering, physics and audio tricks get their first outing, and a few of them ended up in the paid work later.

SpinTop ArenaA beyblade-style physics battler, drawn entirely in code.Play ↗
Kotodama 言霊剣A typing samurai game where your keyboard is the sword.
GrimoireAn arena brawler where every spell casts differently.
04About

One person, whole product.

I'm Serge Kamel. Frontendienst is my registered Dutch business, which is how I take on contract and freelance work after ten years of building production frontends.

Every project on this page I designed, built and shipped on my own, front to back. That's how I work with clients too: one person who owns the whole problem instead of a hand-off between three specialists.

The Japanese running through half of it isn't a theme I picked. I study the language every day and I'm moving there. Three of these apps exist because I needed them myself: the bookkeeping one runs this business, and the newest one is getting me through the paperwork of the move. I do better work on things I use myself.

Games are the other half. Not something I sell, but it's where the rendering, physics and audio work comes from, and that ends up paying off in the client work.

  • 10 yrsProduction React, TypeScript and Node, including API design and management
  • 7Shipped side projects, every one of them public and running
  • 0Hand-offs. The person who designs it is the person who ships it
05Get in touch

Tell me what you're building.

The project, the stack, roughly when you need it. I'll reply with whether it's a fit and a ballpark quote. If you'd rather see something than read about it, I can build a working demo of your idea first.

serge@frontendienst.nl
Registered as
Frontendienst · KvK 42120935
Address
Geurdeland 17 g, 6673 DR Andelst, Netherlands