/leistungen
Leistungen
Ich arbeite an der Schnittstelle von Software, Hardware und Daten. Die folgenden Themen sind keine Schubladen — die meisten Projekte berühren mehrere davon gleichzeitig.
// service-map · wie die ebenen ineinandergreifen ╭──────────────────────────────────────────────────────────────╮ │ build · was gebaut wird │ │ ▸ [software] web-apps · dashboards · tools │ │ ▸ [ai] llms in bestandsprodukte │ │ ▸ [ai-engineering] agenten · rag · evals │ ╰───────────────────────────────┬──────────────────────────────╯ │ ▼ ╭──────────────────────────────────────────────────────────────╮ │ glue · was alles verbindet │ │ ▸ [integration] webhooks · apis · queues │ ╰───────────────────────────────┬──────────────────────────────╯ │ ▼ ╭──────────────────────────────────────────────────────────────╮ │ edge · physische welt │ │ ▸ [iot] mqtt · firmware · ota · flotten │ ╰───────────────────────────────┬──────────────────────────────╯ │ ▼ ╭──────────────────────────────────────────────────────────────╮ │ infrastructure │ │ ▸ [cloud] hetzner · coolify · postgres │ ╰──────────────────────────────────────────────────────────────╯ // querschnittsthema ▸ [consulting] reviews · stack-wahl · workshops
Individualsoftware
Web-Anwendungen, Dashboards, interne Tools
Stack
- TypeScript
- Angular
- Astro
- Next.js
- Supabase
- PostgreSQL
- Tailwind
Problem
Standard-Software bremst, statt zu helfen: Lizenzkosten ohne Mehrwert, Prozesse, die sich nicht abbilden lassen, oder zwei bis drei Tools, die nie sauber zusammenarbeiten. Individualsoftware setzt genau dort an, wo Standard-Lösungen aufhören.
Was Sie bekommen
- Klar bedienbares Frontend mit allen relevanten Workflows
- Stabiles Backend mit dokumentierter API (REST oder typsicher)
- Auth, Rollen, Logging, Backups — alles, was Produktion braucht
- Saubere Dokumentation und Code, den Ihr Team weiterführen kann
- Optional: Monatliche Wartung und Weiterentwicklung
Passt, wenn
Ihre Prozesse laufen mit Excel und drei verschiedenen Tools — Sie wollen das in einer Anwendung bündeln. Oder Sie haben eine Standard-Lösung am Limit und brauchen den Spezialfall, den die nie bauen wird.
export async function requireRole(
ctx: Context,
role: 'admin' | 'editor',
) {
const user = await getUser(ctx);
if (!user?.roles.includes(role)) {
throw new Forbidden(`role ${role} missing`);
}
return user;
} IoT & Embedded
Geräte, Pipelines, Flotten — vom Sensor bis ins Dashboard
Stack
- MQTT
- ESP32
- Node.js
- Supabase
- TimescaleDB
- pm2
- Docker
Problem
IoT-Projekte scheitern selten an der Hardware — sondern an dem, was dazwischen liegt: unklare Topics, fehlende Idempotenz, Geräte, die sich nicht remote updaten lassen, oder Backends, die bei 100 Geräten knirschen und bei 10.000 zusammenbrechen.
Was Sie bekommen
- MQTT-Topic-Architektur mit klaren Verträgen und Versionierung
- Backend-Anbindung mit Datenvalidierung, Idempotenz und Wiederholung
- Geräte-Management: Provisioning, Konfiguration, OTA-Updates
- Monitoring und Alerts für Flotten ab 100 Geräten
- Dashboard zur Live-Beobachtung und Analyse
Passt, wenn
Sie bauen ein Produkt mit Hardware-Anteil und brauchen jemanden, der die Cloud- und Daten-Seite versteht. Oder Ihre vorhandene IoT-Plattform skaliert nicht mehr und Sie brauchen einen Refactor mit klarer Architektur.
// Topic: devices/<id>/state/v1
export const onState = async (msg: StateMessage) => {
const parsed = StateSchema.safeParse(msg);
if (!parsed.success) return drop(msg, 'invalid');
await db.device_state.upsert({
device_id: parsed.data.id,
last_seen: new Date(),
payload: parsed.data,
});
}; AI-Integration
LLMs sinnvoll einbinden — mit klarem Nutzen
Stack
- Claude API
- OpenAI API
- TypeScript
- pgvector
- Edge Functions
Problem
AI-Hype ist groß, der Mehrwert oft nicht. Die meisten Use-Cases lassen sich auch mit klassischem Code lösen. Ich helfe, die Fälle zu finden, in denen LLMs wirklich Zeit oder Kosten sparen — und sie produktionsreif umzusetzen.
Was Sie bekommen
- Realistische Use-Case-Bewertung (mit klarem Nein, wenn es Unsinn ist)
- Integration in bestehende Tools — nicht ein weiteres Standalone-Tool
- Prompt-Engineering, Tool-Use, RAG, wo es passt
- Auswertung von Qualität, Kosten und Antwortzeiten unter realer Last
- Datenschutz-konforme Lösung (Anthropic EU-Region oder lokal)
Passt, wenn
Sie haben repetitive Aufgaben mit unstrukturiertem Text (Klassifikation, Zusammenfassung, Extraktion). Oder einen Support- oder Recherche-Prozess, der von einem internen Assistenten profitieren würde.
const tools = [{
name: 'set_category',
description: 'Tag the ticket with one category.',
input_schema: {
type: 'object',
properties: {
category: { enum: ['bug', 'question', 'request'] },
},
required: ['category'],
},
}];
const reply = await claude.messages.create({
model: 'claude-opus-4-7',
tools,
messages: [{ role: 'user', content: ticket.body }],
}); AI-Entwicklung
Agenten, RAG-Pipelines, AI-native Anwendungen
Stack
- Claude API
- Tool Use
- pgvector
- TypeScript
- Streaming
- OpenTelemetry
Problem
AI als Feature in einer bestehenden App ist ein Problem. AI als das Produkt selbst ist ein anderes. Tool-Use-Orchestrierung, Latenz-Budgets, Fallback-Logik, Halluzinationskontrolle, Kosten pro Anfrage — Themen, die in einem ChatGPT-Wrapper nicht existieren, aber jede ernsthafte AI-Produkt-Entwicklung definieren.
Was Sie bekommen
- Agent-Architektur mit Tool-Use, mehrstufiger Planung und sauberer Fehlerbehandlung
- Eigene RAG-Pipeline (Embedding-Generierung, Re-Ranking, Citation-Tracking)
- Evaluierung mit Regressions-Tests gegen ein Golden-Set — „hofft auf das Beste" ist keine Strategie
- Kosten- und Latenz-Profile pro Flow, mit Tracing in Production
- Frontend mit Streaming-Antworten, Tool-Visualisierung und Stop-Mechanik
Passt, wenn
Sie bauen ein Produkt, in dem AI das Herzstück ist — nicht ein Feature obendrauf. Oder Sie haben einen ChatGPT-PoC, der produktionsreif werden muss und plötzlich an realer Last und realer Datenqualität scheitert.
// Agent-Loop mit Tool-Use — bis das Modell "end_turn" signalisiert.
export async function runAgent(userMessage: string) {
const messages: Message[] = [{ role: 'user', content: userMessage }];
while (true) {
const reply = await claude.messages.create({
model: 'claude-opus-4-7',
tools,
messages,
});
if (reply.stop_reason === 'end_turn') return reply;
// Tools ausführen und Ergebnisse zurückspielen.
const toolUses = reply.content.filter((c) => c.type === 'tool_use');
const results = await Promise.all(toolUses.map(runTool));
messages.push(
{ role: 'assistant', content: reply.content },
{ role: 'user', content: results },
);
}
} Cloud & Infrastruktur
Pragmatische Setups auf Hetzner, Coolify, Supabase
Stack
- Hetzner
- Coolify
- Docker
- PostgreSQL
- Cloudflare
- Caddy
Problem
Cloud muss nicht teuer sein. Viele Mittelständler zahlen jeden Monat für AWS-Architekturen, die sie nicht brauchen. Mit Coolify, Hetzner und Supabase lässt sich das gleiche zu einem Bruchteil betreiben — bei voller DSGVO-Konformität.
Was Sie bekommen
- Provisionierter Hetzner-Server mit Coolify und PostgreSQL
- CI/CD via Git: jeder Push deployt automatisch
- Backups (PostgreSQL + Volumes) in Object Storage
- Monitoring (Uptime Kuma) und Logs (Loki / Grafana)
- TLS, HTTPS, automatische Zertifikate über Let’s Encrypt
Passt, wenn
Sie wollen aus dem AWS-Vendor-Lock raus, oder zum ersten Mal eigene Infrastruktur aufsetzen, ohne in DevOps-Vollzeit zu investieren. Coolify gibt Ihnen Heroku-Ergonomie auf eigener Hardware.
services:
app:
image: ghcr.io/staudt/app:latest
environment:
DATABASE_URL: "${DB_URL}"
labels:
coolify.managed: "true"
coolify.fqdn: app.example.com
db:
image: postgres:17
volumes:
- pg-data:/var/lib/postgresql/data System-Integration
ERPs, CRMs, Drittanbieter-APIs sauber verbinden
Stack
- Node.js
- REST
- GraphQL
- Webhooks
- BullMQ
- OpenAPI
Problem
Die meisten Integrationsprojekte scheitern nicht am Mapping, sondern an den Details: was passiert bei einem Timeout, wie wird ein doppelter Webhook behandelt, was, wenn die Quelldaten Schrott sind. Da fangen die Probleme erst an.
Was Sie bekommen
- Klar definierte Schnittstellen-Verträge zwischen den Systemen
- Idempotenz, Retry-Logik, Dead-Letter-Queues
- Mapping-Layer, der auch bei API-Änderungen weiter funktioniert
- Tests gegen Sandbox-APIs und reale Edge-Cases
- Monitoring der Sync-Qualität (wie viele Records fehlen, wie alt sind sie)
Passt, wenn
Zwei oder drei Ihrer Kern-Systeme reden nicht miteinander, oder eine bestehende Integration ist eine Black-Box-Bastellösung, die niemand mehr anfassen will. Auch klassisch: SAP/Dynamics ↔ moderne Cloud-Tools.
// Idempotent: same delivery_id => same result.
export async function syncOrder(raw: WebhookBody) {
const id = raw.headers['x-delivery-id'];
if (await seen(id)) return { ok: true, dedup: true };
const mapped = mapToErp(raw.order);
await erp.orders.upsert(mapped);
await mark(id);
} Technische Beratung
Architektur, Stack-Auswahl, zweite Meinung
Stack
- Architektur
- Code Review
- Stack-Bewertung
- Workshops
- Due Diligence
Problem
Sie stehen vor einer Stack-Entscheidung, einem Angebot von einer Agentur oder einem Architektur-Review — und es fehlt der ehrliche, neutrale Blick eines Praktikers, der nicht auf den Auftrag schielt.
Was Sie bekommen
- Schriftliche Einschätzung mit Empfehlungen und Risiken
- Architektur-Review eines bestehenden Systems oder geplanten Vorhabens
- Bewertung von Drittanbieter-Angeboten (Aufwand realistisch? Stack sinnvoll?)
- Workshops mit Ihrem Team — Wissen weitergeben, nicht aufbauen
- Klare Empfehlung: machen, anders machen, oder nicht machen
Passt, wenn
Vor einer großen Investition oder einer Vertragsunterzeichnung mit einem Software-Dienstleister. Oder wenn Sie intern unsicher sind, ob ein bestehendes System noch tragfähig ist.
## Befund — Auth-Layer
- [!] Session-Tokens werden im LocalStorage abgelegt
→ XSS-Exposure, sollte HttpOnly-Cookie sein
- [!] Kein Rate-Limit auf /login
→ Brute-Force in 24h möglich
- [?] Rollen werden per JWT-Claim geprüft, aber
nie serverseitig revalidiert
## Empfehlung
Refactor auf Cookie-Session + serverseitige
Rollenprüfung. Aufwand: ~5 Tage. Klingt vertraut?
Schreiben Sie mir kurz, worum es geht. Ich melde mich innerhalb von 24 Stunden mit einer ehrlichen Einschätzung — auch wenn ich nicht der richtige Partner bin.