Skip to Content

Custom software for German SMEs

Production schedules, parts lists and service records often sit in spreadsheets. I agree a clear written spec first, then build the tool and document it so another engineer can maintain it. EU hosting is available.

Admin Dashboards & Internal CMS (Next.js, Supabase)
Desktop Apps for Mac and Windows
Developer Tools, CLIs & Open-Source Libraries
Data Import, Cleanup & Reporting Tools
Login, Roles & Row-Level Security
Clean Handover: Your Repo, Your Accounts
Core Track Record

4+ Years

Building systems

Collaboration Mode

Remote + Onsite (Guwahati Area)

Workflow Mapping → Working Prototype → Hardened Release

Platforms Used
Next.jsTypeScriptSupabasePostgreSQL

Working with me from Germany

What clients there usually need

  • A production-planning helper that replaces linked spreadsheets with one tool showing orders, material and capacity.
  • A parts and variants database for a manufacturer with search, revision history and export to CSV or PDF.
  • A service-records system that logs machine visits, parts used and follow-ups, searchable by serial number.
  • A dashboard that gathers data from machines and ERP exports into charts the plant manager reads daily.

India is 3½ hours ahead of Germany in summer and 4½ in winter, because European clocks change and India's do not. Your 9 am to 1 pm is my 12:30 to 4:30 pm in summer and 1:30 to 5:30 pm in winter, so mornings and early afternoons overlap my working day. We work in English. At the start we agree call times and how often I send updates.

I quote in USD and you pay by Wise or international bank transfer. Pay from your euro account and your bank or Wise converts the amount, so you see the rate before you send it. Invoices are in English. A contract or NDA can be signed electronically, DocuSign-style, and I am happy to sign your NDA before we start. I do not give tax or legal advice, so your advisor handles that part.

English is the working language, and I like careful written specifications: what the system does, who uses it, what happens when something fails. You approve the written spec before the build starts. When you want it, data can stay on EU-hosted infrastructure, for example Supabase or AWS in the Frankfurt region. I make no GDPR compliance claim, so tell me your requirements and I will build to them.

Optimization Summary

Most teams don't need a big platform. They need one tool that stops the same hour being wasted every day.

Common Obstacle

“Data lives in five spreadsheets and nobody trusts the totals.”

Engineering Resolution

One database with validated forms, so every entry is checked as it is made, plus reports and exports that everyone reads from.

Common Obstacle

“Every website update needs a developer.”

Engineering Resolution

An admin dashboard where your team edits content, uploads images and manages inquiries themselves, with logins and roles.

Common Obstacle

“Updating firmware on deployed devices means visiting each one with a cable.”

Engineering Resolution

Over-the-air updates: devices check GitHub Releases and install new firmware themselves, the approach behind GitReleaseOTA.

Common Obstacle

“SaaS charges per seat for features you never use.”

Engineering Resolution

A small tool that does exactly your job, hosted on your own accounts, with no per-user fees.

Is This Service Right for You?

I build small, focused tools that remove a specific daily pain, and leave you owning the code.

Teams Running on Spreadsheets

Businesses tracking orders, stock, leads or field visits across spreadsheets and WhatsApp groups, who need one place with validated data and reports.

Sites Without a Back Office

Businesses that need a developer every time a page changes. I build admin panels like JM.OS, which runs this site's projects, services, QR codes and leads.

Hardware & Developer Teams

Teams that need tooling of their own, like GitReleaseOTA, my open-source library for updating ESP32 firmware from GitHub Releases, published on the PlatformIO Registry.

People Who Want a Desktop Tool

Users who want a fast native utility rather than another browser tab, like Clipivo, my Mac clipboard manager that also searches text inside screenshots.

Typical Software Deliverables

Working software, the source, and the accounts it runs on, all in your name.

Software

Source Code Repository

TypeScript, Swift or Python project in your own Git repository, typed and organised so another developer can work on it.

Package

Deployed Tool or Signed App

A web tool deployed to your hosting (e.g. Vercel and Supabase), or a signed desktop build ready to install.

Database

Database Schema & Migrations

Versioned migrations, row-level security policies and seed data, so the database can be rebuilt from the repository.

Security

Admin Accounts & Access Roles

Logins for your team with the right permissions, and a short note on how to add or remove people.

Documentation

Handover Guide

How to run it locally, deploy changes, back up data and where every credential lives.

Specialized Building Areas

Three kinds of tools I build, each with a working example.

Admin Dashboards & Internal CMS

Back offices for websites and teams: content editors, inquiry inboxes, QR codes with visit logs and settings, like JM.OS behind this site (Next.js server actions, Supabase auth and row-level security).

Desktop Apps

Fast, private desktop apps that work offline. Clipivo (Mac) keeps a searchable history of everything you copy, including text inside screenshots. Retrova (Mac and Windows) gets files off drives that won't open without writing to them, then verifies every copy.

Developer Tools & Libraries

Libraries, CLIs and scripts that remove repetitive engineering work, like GitReleaseOTA for ESP32 updates and the CLI that drafts and publishes the notes on this site.

Technical Stack & Platform Coverage

The tools I reach for, chosen so you can host and maintain the result cheaply.

Web Tools

Next.js (App Router)TypeScriptReactTailwind CSS

Data & Access

Supabase / PostgreSQLRow-Level SecurityServer ActionsZod validation

Desktop

Swift 6, SwiftUI & AppKitPython (Mac and Windows)SQLite FTS5CryptoKit

Dev Tooling

Node.js CLIsPython scriptsPlatformIO librariesGitHub Releases API
Related Technologies:Next.jsTypeScriptSupabaseSwiftSwiftUIPlatformIO
Deep Technical Documentation

Engineering Notes & Tradeoffs

Detailed Technical Deep Dive: Custom Software & Tools

How I build small tools that teams rely on every day: admin dashboards locked down on the server, desktop apps with instant local search, and developer tools that remove manual release work.

1. Admin Dashboards: Two Locks on Every Write

An admin dashboard is the most attractive target on a small business's site: it can edit content, read enquiries and often bypass the database's normal rules. Hiding buttons in the UI is not security. In JM.OS, the dashboard behind this site, every change goes through two independent checks.

Middleware Is the First Lock, Not the Only One

Middleware keeps signed-out visitors away from /jmos pages, but server actions can be called directly. So every action that writes data re-checks the session and the admin allow-list on the server before it touches the privileged database client.

The pattern each server action follows:

"use server";

import { revalidatePath } from "next/cache";
import { requireAdmin } from "@/lib/auth/admin";
import { createAdminClient } from "@/utils/supabase/server";

export async function updateSettings(settings: Record<string, string>) {
  // Second lock: verify the signed-in user is on the admin allow-list
  await requireAdmin();

  // Only now create the client that bypasses row-level security
  const admin = createAdminClient();
  const rows = Object.entries(settings).map(([key, value]) => ({ key, value }));
  const { error } = await admin.from("settings").upsert(rows, { onConflict: "key" });
  if (error) throw new Error(`Failed to update settings: ${error.message}`);

  // Refresh the cached public pages that read these settings
  revalidatePath("/");
}

Row-Level Security for Everything Public

Public pages should read through a client limited by Postgres row-level security policies, so even a bug in a page can only see published rows. Keep the unrestricted client on the server, behind checks like the one above.


2. Desktop Utilities: Instant Search with SQLite FTS5

A desktop tool earns its place by being instant. Clipivo keeps a history of everything you copy, including text recognised inside screenshots, and search has to stay fast as that history grows into tens of thousands of entries. A plain LIKE '%term%' query scans every row; SQLite's FTS5 full-text index does not.

-- Full-text index that mirrors the clips table
CREATE VIRTUAL TABLE clips_fts USING fts5(
  content,
  content='clips',
  content_rowid='id',
  tokenize='unicode61 remove_diacritics 2'
);

-- Keep the index in sync on insert
CREATE TRIGGER clips_ai AFTER INSERT ON clips BEGIN
  INSERT INTO clips_fts(rowid, content) VALUES (new.id, new.content);
END;

-- Prefix search, best matches first
SELECT clips.*
FROM clips_fts
JOIN clips ON clips.id = clips_fts.rowid
WHERE clips_fts MATCH 'invoice*'
ORDER BY bm25(clips_fts)
LIMIT 50;

Storing Private Data in Plain Text

Clipboard history contains passwords, addresses and messages. Anything a desktop tool stores locally should be treated as sensitive: keep it on the machine, encrypt what is sensitive (Clipivo uses CryptoKit), and give the user an easy way to exclude apps and clear history.


3. Developer Tools: Firmware Updates from GitHub Releases

Updating devices in the field by plugging in a cable does not scale past a handful of units. GitReleaseOTA, my open-source PlatformIO library, lets an ESP32 update itself from a project's GitHub Releases, so publishing a release is the whole deployment process.

The update flow on the device:

  1. Check: Ask the GitHub Releases API for the latest release and compare its tag with the running firmware version.
  2. Download: If it is newer, fetch the firmware binary attached to the release.
  3. Flash: Write the image to the ESP32's inactive OTA partition while the current firmware keeps running.
  4. Switch: Mark the new partition as the boot target and restart.

Why GitHub Releases Instead of an Update Server

A custom update server is one more thing to host, secure and pay for. GitHub Releases already gives versioned, downloadable binaries and an API, so small hardware teams get over-the-air updates without running any infrastructure of their own.

The same idea runs through all the tooling I build, including the CLI that drafts and publishes the engineering notes on this site: find the step people repeat by hand, and make it one command.

My Custom Software Process

Start from the workflow, ship a usable version early, then harden it.

01. Workflow Mapping

Seeing how the work happens today

Phase 1 of 6

We walk through the current process: who enters what, where it goes, and where time is lost. That becomes a short list of what the tool must do.

Featured Project Deliverables

Dynamic projects fetched from the portfolio database demonstrating execution.

Fyra AI Portfolio Assistant Interface - Clean Full Mockup
AI
Custom knowledge basePrompt engineering

Fyra — AI Portfolio Assistant

Custom knowledge base assistant that qualifies visitors, recommends projects, and captures leads in real-time.

Next.jsTypeScriptGemini APISupabase

AI & Full-Stack Engineer

View Details →
Searching “weekly review” finds a screenshot containing those words
macOS
Native macOSSearch inside screenshots

Clipivo

A native macOS clipboard manager that remembers everything you copy, even the text inside screenshots.

Swift 6SwiftUIAppKitSQLite FTS5

Design & Engineering

View Details →
Retrova's Rescue screen: drive health, APFS snapshot browser, recovery stats and verification
Desktop
Strictly read-onlyByte-for-byte verification

Retrova

A free, open-source desktop app that gets your files off drives that won't open, without writing a byte to them.

PythonJavaScriptCSQLite FTS5

Design & Engineering

View Details →

Why Build a Custom Tool?

Off-the-shelf software is great until your process doesn't match it. A focused custom tool fits your process and costs nothing per seat.

What MattersCustom Tool (My Approach)Typical Off-the-Shelf SaaS
Fit to Your Process✓ Built around how your team already works.⚠️ Your team adapts to the product's workflow.
Ongoing Cost✓ Hosting only; no per-seat fees.⚠️ Monthly fee per user, rising with headcount.
Data Ownership✓ Your database, exportable at any time.⚠️ Data lives in the vendor's system and format.
Changes When You Need Them✓ Add the feature you need, when you need it.❌ Wait for the vendor's roadmap, or work around it.

Coverage Area & Physical Location

India is 3½ to 4½ hours ahead of Germany, so your morning and early afternoon overlap my working day. We work in English. Quotes are in USD and paid by Wise or international bank transfer. Code lives in your GitHub from day one, and you get a staging link to try at every step.

On-site Delivery Areas

Guwahati
Jorhat
Dibrugarh
Silchar
Nagaon
Tezpur
Tinsukia
Sivasagar
Golaghat
Barpeta
North Lakhimpur
Bongaigaon
Dhubri
Kokrajhar
Hailakandi
Karimganj

Remote Collaboration

For clients elsewhere in India (Bengaluru, Hyderabad, Pune, Mumbai, Delhi NCR) and abroad, I work remotely through GitHub, with a live staging link you can try at every step.

Base: Guwahati, Assam, India

Frequently Asked Questions

Answers to what clients ask me most.

Often yes, through exports, database access or APIs. I look at the interface first and will tell you plainly if a clean integration is not realistic.
That is the aim: a written specification up front, a readable code structure, and a handover note covering setup, deployment and known limits.
Yes, when you want it. I can host on EU infrastructure such as Supabase or AWS in the Frankfurt region, though I do not claim GDPR compliance for you, so tell me your requirements.
No, we work in English. I write specifications, documentation and messages in clear English, and I can build interfaces that carry German text you supply.
Yes. For German teams I write a careful spec first, covering the behavior, the users and the failure cases, and you sign it off before I build.
Internal tools and admin dashboards on the web, native Mac apps, and developer tools such as libraries, CLIs and update pipelines. Mobile apps are covered under Mobile App Development.
Yes. The repository, database and hosting accounts are in your name from the start.
Usually, yes. If a service has an API (payments, email, spreadsheets, CRMs), the tool can read from and write to it.
I offer ongoing support on request, but the code is documented so any developer can maintain it.

Let's Build the Tool Your Team Is Missing

Tell me what eats your team's time. I'll suggest the smallest tool that fixes it, with an estimate after a first call.