Programmierung
Websites, Onlineshops und Webanwendungen auf eigenem Code statt auf Baukästen mit vorgegebenen Grenzen. Das Ergebnis lässt sich erweitern, statt irgendwann ausgetauscht werden zu müssen.
- Sprachen
- PHP · MySQL · Twig · JS
- Einstieg
- ab 300 € Festpreis
- Bestand
- 55 € / Stunde
- Dauer
- 3–5 Wochen
- Größte Referenz
- elektrikprofi.de · ~35.000 Zeilen →
Sprachen, die ich täglich schreibe.
Echte Beispiele, wie sie in meinen Projekten vorkommen – vom Katalog-Import bis zur nächtlichen Sicherung.
<?php// BMEcat-Import: auch 500-MB-Kataloge speichersparend einlesen$reader = new XMLReader();$reader->open($datei);while ($reader->read()) { if ($reader->nodeType === XMLReader::ELEMENT && $reader->name === 'PRODUCT') { $p = simplexml_load_string($reader->readOuterXml()); $artikel->upsert([ 'ean' => (string) $p->PRODUCT_DETAILS->INTERNATIONAL_PID, 'artikelnr' => (string) $p->SUPPLIER_PID, 'gueltig_ab' => $import->gueltigAb, ]); }}$reader->close();Das Rückgrat: Logik, Controller, Importe, Cronjobs.
- Shop-Logik, Controller und Routing
- Importe von BMEcat, CSV und Preislisten
- Cronjobs, E-Mail-Versand, PDF-Rechnungen
- Schnittstellen zu Diensten wie erated
Im Einsatz bei elektrikprofi.de
-- Heute gültiger Katalog: der mit dem spätesten "gültig ab"SELECT a.artikelnr, k.name AS katalog, k.gueltig_abFROM artikel aJOIN katalog_import k ON k.hersteller_id = a.hersteller_idWHERE k.gueltig_ab <= CURDATE() AND (k.gueltig_bis IS NULL OR k.gueltig_bis >= CURDATE()) AND k.gueltig_ab = ( SELECT MAX(gueltig_ab) FROM katalog_import WHERE hersteller_id = a.hersteller_id AND gueltig_ab <= CURDATE() )ORDER BY a.artikelnrLIMIT 50;Daten, die stimmen – und schnelle Abfragen.
- Datenmodelle für Artikel, Kunden, Bestellungen
- Joins, Unterabfragen und Indizes
- Änderungen als versionierte SQL-Updates
- Wiederherstellung beschädigter Datenbanken
Im Einsatz bei elektrikprofi.de
{# Produktkarte mit UVP-Vergleich und Top-Merkmalen #}<article class="produkt"> <h3>{{ artikel.name }}</h3> <p class="preis">{{ artikel.preis|number_format(2, ',', '.') }} €</p> {% if artikel.uvp > artikel.preis %} {% set rabatt = (1 - artikel.preis / artikel.uvp) * 100 %} <s>UVP {{ artikel.uvp|number_format(2, ',', '.') }} €</s> <span class="rabatt">−{{ rabatt|round }} %</span> {% endif %} <ul> {% for merkmal in artikel.merkmale|slice(0, 3) %} <li>{{ merkmal.label }}: {{ merkmal.wert }}</li> {% endfor %} </ul></article>Templates, die Logik und Gestaltung trennen.
- Wiederverwendbare Bausteine und Layouts
- Automatisches Escaping gegen XSS
- Filter für Preise, Daten und Einheiten
- Module für Startseite und Kategorien
Im Einsatz bei elektrikprofi.de
<!-- Semantisch und SEO-freundlich: strukturierte Produktdaten --><article itemscope itemtype="https://schema.org/Product"> <h1 itemprop="name">Wippschalter-Einsatz</h1> <img src="schalter.webp" alt="Wippschalter-Einsatz, Aus-/Wechselschaltung" width="600" height="600" loading="lazy"> <div itemprop="offers" itemscope itemtype="https://schema.org/Offer"> <meta itemprop="priceCurrency" content="EUR"> <span itemprop="price" content="9.49">9,49 €</span> <link itemprop="availability" href="https://schema.org/InStock"> </div> <button type="button" aria-label="In den Warenkorb">In den Warenkorb</button></article>Semantisch, barrierearm, für Google lesbar.
- Saubere Struktur mit echten Überschriften
- Strukturierte Daten nach schema.org
- Barrierearme Formulare und Buttons
- Bilder mit festen Maßen und Lazy Loading
/* Responsives Produktraster – ganz ohne Media-Queries */.produkte { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: clamp(12px, 2vw, 24px);}.karte { border-radius: 16px; transition: transform .2s ease, box-shadow .2s ease;}.karte:hover { transform: translateY(-4px); box-shadow: 0 12px 32px rgba(11, 17, 32, .12);}@media (prefers-reduced-motion: reduce) { .karte { transition: none; }}Layouts, die auf jedem Bildschirm funktionieren.
- Grid und Flexbox statt Framework-Ballast
- Fließende Größen mit clamp()
- Animationen mit Rücksicht auf reduzierte Bewegung
- Eigene Gestaltungssysteme mit Variablen
Im Einsatz bei elektrikprofi.de
// Live-Suche mit Umkreis – wartet kurz, um den Server zu schonenconst suche = document.querySelector('#suche');const umkreis = document.querySelector('#umkreis');let timer;suche.addEventListener('input', () => { clearTimeout(timer); timer = setTimeout(async () => { const url = `/api/suche?q=${encodeURIComponent(suche.value)}` + `&km=${umkreis.value}`; const res = await fetch(url); const treffer = await res.json(); zeigeErgebnisse(treffer); }, 250);});Interaktion genau dort, wo sie hilft.
- Live-Suche, Filter und Warenkorb
- Formulare mit Prüfung und Versand per fetch
- Katalog-Viewer und Editoren
- Widgets zum Einbinden auf fremden Seiten
Im Einsatz bei elektrikprofi.de
#!/bin/bash# Nächtliche Sicherung: Datenbank + Uploads, 14 Tage aufbewahrenDATUM=$(date +%F)ZIEL="/backup"mysqldump --single-transaction shop | gzip > "$ZIEL/db-$DATUM.sql.gz"tar -czf "$ZIEL/uploads-$DATUM.tar.gz" /var/www/shop/uploads# Alte Sicherungen aufräumenfind "$ZIEL" -name "*.gz" -mtime +14 -deleteecho "✓ Sicherung $DATUM fertig"Server, die sich selbst pflegen.
- Automatische Sicherungen
- Deployments und Updates
- Cronjobs und Aufräum-Routinen
- Linux-Server einrichten und überwachen
Was dazugehört.
Konzeption & Struktur
Seitenstruktur, Datenmodell und Nutzerführung werden vor der ersten Code-Zeile festgelegt, nicht nachträglich angepasst.
Frontend
Responsives, barrierearmes Interface, das auf allen gängigen Geräten und Browsern zuverlässig funktioniert.
Backend & Datenbank
Saubere Datenmodelle und Schnittstellen, die auch nach Hunderten Änderungen nachvollziehbar bleiben.
Hosting & Betrieb
Hosting, SSL, Sicherungen und Überwachung – auf bestehender oder neu eingerichteter Infrastruktur.
Übergabe & Dokumentation
Technische Dokumentation und Einweisung, damit das Projekt auch ohne mich nachvollziehbar bleibt.
Firmenwebsites zum Festpreis.
Komplett mit Domain, Hosting und einem Jahr Pflege – ohne versteckte Kosten für die technische Grundausstattung.
| Pos. | Paket | Preis |
|---|---|---|
| 01 | Onepager Für Selbstständige, kleine Betriebe, Vereine | ab 300 € |
| 02 | Mehrseitige Website Leistungen, Über uns, Referenzen, Kontakt | ab 700 € |
| 03 | Mit Zusatzfunktionen Terminbuchung, mehrsprachig, Mitgliederbereich | bis 1.300 € |
| 04 | Bestehende Website Erneuerung, Fehlerbehebung, SQL-Wiederherstellung | 55 € / h |
Der genaue Preis richtet sich nach Seitenanzahl und Funktionsumfang und wird vor Projektstart als Festpreis vereinbart.
Häufige Fragen.
Wie lange dauert die Entwicklung einer Website?
Eine klassische Unternehmenswebsite mit fünf bis acht Seiten ist in der Regel nach drei bis fünf Wochen einsatzbereit. Shops oder Anwendungen brauchen je nach Funktionsumfang länger.
Wer betreut die Website nach dem Launch?
Ich übernehme auf Wunsch Wartung, Updates und kleinere Weiterentwicklungen im Rahmen eines Betreuungspakets.
Was kostet eine Firmenwebsite?
Komplette Firmenwebsites inklusive Domain, Hosting und einem Jahr Pflege gibt es ab 300 €, je nach Umfang bis etwa 1.300 €. Der Preis wird vor Projektstart als Festpreis vereinbart.
Was kostet die Erneuerung einer bestehenden Website oder eine SQL-Wiederherstellung?
Arbeiten an bestehenden Websites – etwa Aktualisierungen oder die Wiederherstellung nach einem verlorenen PHP-Script oder einer beschädigten Datenbank – rechne ich nach Aufwand mit 55 € pro Stunde ab.
Projekt konkret besprechen?
Erstgespräch: 30 Minuten, kostenlos.