I build AI infrastructure, web applications and Discord bots.

Independent developer in Germany, working directly with the people who will use what I build. I run my own language model API and an AI workspace on top of it, both open right now, alongside the client work, automation and document jobs that pay for building them.

Remote, based in Germany Replies within a day

Selected work

Four projects, and the decisions behind them.

Two of these are running right now and you can open both in a new tab. What follows is what each project had to solve, and the call I would defend in a review.

The MepX API reference, listing the chat completions, models and usage endpoints alongside the admin key and pool routes.

api.mepxdev.com

MepX API, a production language model API serving OpenAI-compatible chat completions, streaming and non-streaming.

FastAPI OpenAI-compatible SSE streaming PostgreSQL

Compatibility was the design constraint. The service speaks OpenAI's request format, response shape and error envelope, so the official SDK works unmodified. Model listing, completions, server-sent event streaming and SDK-level exception handling all behave the way a developer already expects, and there is no custom client library to learn.

Consumers authenticate with issued keys, stored only as SHA-256 hashes alongside an indexed prefix, so verifying one is a single indexed query and a constant-time comparison rather than a table scan. Plaintext is returned once at creation and is unrecoverable afterwards. Upstream provider credentials exist in exactly one module and are identified everywhere else, including logs and the admin interface, by their last four characters.

Upstream keys are selected by lowest in-flight request count rather than round-robin, which distributes concurrent load more evenly, and failures are classified and handled by cause with exponential backoff and a bounded retry budget.

Per-key rate limits and daily token budgets are enforced before any upstream call, so a throttled caller costs nothing. A database outage degrades the service to a clear status response instead of a crash loop, and recovers on its own without a restart. Every request emits one structured JSON log line, passed through a redaction filter as a final guard against credential leakage.

Decision
Chose
Resolving key selection and response headers before the first byte reaches the client
Over
Retrying transparently when an upstream stream fails
Because
Once a response body has begun, retry is impossible. An interrupted stream terminates with a structured error frame instead of a silent truncation.
MEPX Cloud on a new chat, with the conversation sidebar, four starter prompts and the model picker set to MEPX Pro.

cloud.mepxdev.com

MEPX Cloud, an AI chat workspace with four models, streaming replies, and conversation history that never leaves the browser.

Streaming APIs OAuth Local-first storage Markdown

Four models sit behind one picker: Air for speed, Pro for everyday work, Max for hard problems, and an uncensored option. The picker shows which ones a plan includes. Replies stream as they are written, with stop, regenerate and edit-and-resend, rendered as Markdown with syntax-highlighted code.

Chatting needs no account at all. Signing in with Google or GitHub exists only for subscriptions, and a second provider joins the existing account when the verified email matches. Attachments are shrunk in the browser before they are sent, capped at two images a message, and the app switches to Pro automatically because that is the model that reads them. Eight releases so far, each written up on a public changelog.

Decision
Chose
Conversations stored in the visitor's own browser
Over
Chat history held on the server
Because
A conversation the server never holds cannot leak and cannot be handed over, and deleting one is immediate because it does not involve me at all. The cost is real: history does not follow you to another device.
Grammar Fixer settings on the Output style tab, listing the eight rewriting styles from Grammar only through to Custom.

Grammar Fixer

A Windows tray app that fixes your writing without interrupting it.

Python Windows tray Global hotkey LLM APIs

Press Insert and type as you normally would. Press Insert again and your text is replaced where it sits, with grammar, spelling and punctuation corrected, in roughly two seconds. It works in any application that accepts normal typing: email, documents, browsers, chat, code editors.

That is the whole point of it. Copying a paragraph into DeepL or another tab, waiting, then pasting the result back is four steps and a lost clipboard, every single time. This is one key, pressed twice, and your clipboard is put back the way you left it.

Eight output styles decide how far it goes. Grammar only fixes mistakes and changes nothing else. Professional, Formal, Casual, Concise and Academic rewrite to match a tone. Expert writing polishes the whole thing. Or you write your own instruction and it follows that instead. Five MEPX Cloud engines run behind it, from Pro for the best quality to Flash for speed.

Decision
Chose
Replacing the text in place, on a second press of the same key
Over
A separate window to paste into and copy back out of
Because
The round trip through another tab costs four steps and your clipboard on every correction
The Bundeswehr Secret Service bot shown online in Discord, carrying the Bots and server roles.

Discord bots

Bots for Roblox roleplay communities. The one running now handles support tickets, staff announcements and an AI assistant for Bundeswehr Secret Service.

discord.js Slash commands SQLite LLM APIs

Bundeswehr Secret Service is a Roblox roleplay group. Like most of them it needs support that does not depend on one particular person being awake, and a server that looks organised to someone deciding whether to join.

A member clicks the ticket button in the support channel and the bot opens a numbered private channel, ticket-0001, visible only to that member, the staff roles and the bot, then pings staff inside it. One open ticket per member at a time. Closing takes a confirmation, after which the channel is renamed to closed-ticket-0001 and kept as a staff-only record.

Staff post through the bot as well: plain messages with normal Discord formatting, multi-line embeds written in a modal, and file drops of up to five attachments. Anyone can ask the assistant with /question, and the answer clears itself out of the channel after sixty seconds, so a support server does not slowly turn into an AI transcript. The reply says plainly that it can be wrong.

Decision
Chose
Renaming and archiving a ticket channel when it closes
Over
Deleting the channel once the issue is resolved
Because
The full conversation stays readable to staff afterwards, which is the only reason to log support in the first place.
Services

What I take on.

Nine things, in the order I would rather be hired for them. Code work leads; the document and design work is real and offered, it is just not the headline.

Website development

Sites and applications built from scratch: accounts, sessions, an admin side, and data that is still correct next month. Mobile-first, never a template.

Node.jsExpressPostgreSQLResponsive

Discord bots

Tickets, moderation, roles and slash commands. State goes in a database rather than a JSON file, and it runs where the gateway connection survives a restart.

discord.jsNode.jsPythonSQLite

AI bots and integrations

Chatbots and model-backed features wired into apps that already work, and the API layer underneath them: key handling, rate limits, streaming, and the failure cases that only show up in production.

LLM APIsMepX APIPrompt design

Automation and productivity

The repetitive job that eats an afternoon every week: file processing, scheduled tasks, batch work, data moved between two systems that were never meant to talk.

PythonScriptingBatchcron

Technical assistance

Deployment that will not deploy, a bot that dies overnight, a database that grew past what it was designed for. Send a repo and I will tell you what is actually wrong.

DebuggingSetupSupport

Spreadsheet work

Excel and Google Sheets: formulas, dashboards, data cleanup, and the automation that stops the same cleanup happening again next month.

ExcelSheetsFormulasDashboards

Document creation

Word documents, reports, letters, CVs and templates you can reuse without them falling apart the second someone edits a heading.

WordTemplatesTypography

Content formatting

Consistent formatting across documents, PDFs and web content, so a set of files reads as one thing rather than five.

PDFDocsWeb

Graphic and digital design

Logos, banners, social graphics and brand assets that match the product they sit on.

BrandingLogosSocial
Stack

What I reach for.

Grouped by what it is for. Things I have shipped with, not things I have read about.

Core

JavaScriptPythonSQLLuaHTML5CSS3

Hand-written. Everything further down this list sits on top of these.

Frontend

Responsive designAccessibilityUI/UXSemantic markup

Layouts that hold up from a 320px phone to a wide desktop, and work with a keyboard.

Backend and bots

Node.jsExpressFastAPISocket.IOdiscord.jsdiscord.pyOAuth

Long-running processes that have to come back up on their own after a restart.

Data and documents

PostgreSQLSQLiteSchema designExcelGoogle SheetsWord

Schemas that survive a change of mind, plus dashboards and templates that stay maintainable.

Bots and AI

OpenAI-compatible APIsSSE streamingKey poolingRate limitingPrompt-injection handling

Bots that run around the clock, models wired into products where a wrong answer costs something, and the API layer underneath both.

Automation

ScriptingWorkflowsBatch processingScheduled jobs

Small tools that remove hours of repetitive manual work and then stay out of the way.

Tooling and hosting

GitLinux VMsDeploymentEnvironment config

Version control, deploys and the environment work that decides whether it is still running next week.

Design

LogosBrand assetsSocial graphics

Consistent visuals that match the product they sit on.

How it works

What working with me looks like.

Four steps, in order. No surprises in the middle and nothing locked to me at the end.

Scope

You send what you need. I come back with what I think it actually takes, what I would leave out of a first version, and a price, before anything starts.

Build

You get a link to a working version early and updates as it moves, rather than silence and a reveal at the end. Changes are cheapest here, so this is where I want your opinion.

Handover

You get the source, the deployment steps and whatever it needs to run: accounts, environment variables, the lot. Nothing stays on my machine only.

After

If something breaks in the first weeks because of how I built it, I fix it. Beyond that, small changes are quick and quoted before I start them.

About

Who you would be working with.

Portrait of MepxDev
Name
MepxDev
Based
Germany
Work
Freelance
Status
Available
Focus
Web apps, bots, AI
Speaks
German, English

I work on my own, which means you talk to the person writing the code. Most of what I build is small systems that have to keep running without supervision: bots, internal tools, and sites with a database behind them.

It started with websites and design, then widened: documents, spreadsheets and automation for people who needed one specific job taken off their hands, and more recently Discord bots and AI features, because that is what people started asking for.

Right now I am mostly building AI infrastructure: the API, the workspace sitting on top of it, and the tools that use both. Alongside that I am learning the parts underneath, language models and the mathematics they run on, and getting better at Python as I go.

The work I want sent to me is the kind with a failure mode attached: an API that has to stay up under real traffic, a bot that keeps falling over at 3am, a model feature that has to behave when the answer comes back wrong.

2021

First projects

Started building and designing. Small projects, mostly to find out how the pieces fit together.

2022

Web and interface work

Went deeper on web development and on designing interfaces people could actually use.

2023

One offering

Pulled the web, design and document work together into a single thing I could be hired for.

2024

Client work

Started freelancing across websites, documents and design.

2025

Automation and spreadsheets

Added automation, spreadsheet work and hands-on technical help to what I take on.

2026

AI infrastructure

Shipped MepX API and MEPX Cloud, and moved most of my own tooling onto them.

Contact

Tell me what needs building.

What it has to do, and when you need it. That is enough to start. I will come back with scope and a price.

Chat with me

My own chat app at chat.mepxdev.com. Pick a nickname and a password. No email, no form. The header tells you whether I am at my desk, and the thread is still there when you come back.

Open the chat

Discord

For bot work, usually the easiest place to talk.

MepxDev

Location

Working remotely, German and English.

Germany
Start a project

Or send a repo link and I will look at it.