Von Bolt zu Strapi zu Custom Architecture: Die echte Product Journey
Niemand trifft es beim ersten Versuch aus dem Park. Vertrau mir, ich habe diese Geschichte viele Male erlebt. Ein Gründer fängt an, mit Bolt.new an einem entspannten Freitagabend herumzuspielen. Bis Montag haben sie etwas, das funktioniert. Dann kommt der Tanz: In den nächsten achtzehn Monaten tauschen sie systematisch jeden einzelnen Teil aus. Das ist kein Fehler. Meine Damen und Herren, das ist die echte Magie beim Aufbau von etwas Wertvollen.
Wir tauchen hier in diese Reise ein. Vergiss die perfekte Welt, in der alles bis ins kleinste Detail geplant ist. Hier wird es chaotisch -- du fängst mit einigen KI-generierten Häppchen an und landest vielleicht bei einem Headless CMS wie Strapi. Am Ende landest du bei diesem süßen benutzerdefinierten Setup, das sich maßgeschneidert anfühlt. Bei Social Animal haben wir viele Kunden durch dieses Chaos begleitet. Es entstehen Muster. Das ist normalerweise der Fall.

Phase 1: Die KI-Prototyp-Ära
So ist es mit Bolt.new. Es ist sowohl supercool als auch etwas gefährlich.
Neben Konkurrenten wie Lovable (ehemals GPT Engineer), v0 von Vercel und Cursor lässt dich Bolt eine Idee nehmen und eine funktionierende App in wenigen Stunden ausrollen. Nicht Tagen. Stunden. Ich habe Gründer dabei beobachtet, wie sie vollständige Next.js-Anwendungen mit Authentifizierung und sogar Payment-Hooks -- an einem einzigen Nachmittag -- hochfahren.
Hier eine Kostprobe dessen, was Bolt ausspuckt:
// Von Bolt generierte API-Route -- sieht sauber aus, richtig?
import { NextRequest, NextResponse } from 'next/server';
import { prisma } from '@/lib/prisma';
import { getServerSession } from 'next-auth';
export async function GET(req: NextRequest) {
const session = await getServerSession();
if (!session) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
}
const projects = await prisma.project.findMany({
where: { userId: session.user.id },
include: { tasks: true, members: true },
});
return NextResponse.json(projects);
}
Dieser Code? Er funktioniert und ist nicht schlecht, besonders für 2025. Aber lass dich von der eleganten Syntax nicht täuschen. Das Problem liegt nie wirklich in der Code-Qualität; es ist alles andere drumherum.
Was KI-Prototypen richtig machen
- Geschwindigkeit bis zur ersten Version. Nichts kann mithalten.
- UI-Gerüst. Tailwind-basierte Schnittstellen, die elegant aussehen? Das ist Bolts Spezialität.
- Grundlegende CRUD-Operationen. Du bist bei Apps abgedeckt, die hauptsächlich aus Formularen und Listen bestehen.
- Validierung von Ideen. Zeige deine App Benutzern in Tagen, nicht Ewigkeiten.
Was sie nicht so richtig machen
Der von KI produzierte Code? Er hat keine Ahnung von deinen einzigartigen Anforderungen. Keine Ahnung, dass deine „Projekt"-Entität ein komplexes Ding mit Phasen ist oder dass deine Hierarchie mehr als nur „Admin" und „Benutzer" ist.
Einmal schaute ich mir ein von Bolt generiertes Projektmanagementsystem für den Bauwesen an. Es war eine ordentliche CRUD-App, sicher. Aber keine Projektphasen, keine differenzierten Rollen und keine Pagination bei großen Datenabfragen. Eine schnelle Demo? Perfekt. Skalierung auf 500 Projekte und 2.000 Benutzer? Das Schiff würde sinken.
Phase 2: Warum Prototypen an eine Grenze stoßen
Die Grenze kommt auf dich wie ein Güterzug zu. Normalerweise um die zwei bis drei Monate Marke wird dich einer dieser Punkte stolpern lassen:
- Content-Anforderungen ändern sich täglich. Marketing möchte Landing Pages spontan anpassen.
- Komplexität des Datenmodells. Beziehungen, Workflows -- KI hat keinen Kristallkugel.
- Team-Mitglieder brauchen Zugriff. Plötzlich müssen Nicht-Techniker mit Content arbeiten.
- Performance-Kopfschmerzen. Echte Benutzer, echte Daten, auf echten Verbindungen? Das macht Abkürzungen sichtbar.
- Integrations-Anforderungen. Zahlungen, E-Mails, Analytik, CRMs -- der Stresstest passiert hier.
Hier ist, was oft übersehen wird: Der Prototyp ist keine Niederlage. Er ist wie die Generalprobe; unbezahlbar darin zu zeigen, was funktioniert, was angepasst werden muss.
Aber Mann, ich habe Teams gesehen, die ein halbes Jahr damit verschwendet haben, Features auf KI-Code zu kleben, einen Spaghetti-Monster-Schwall von Technical Debt zu schaffen, wenn ein verständiger Rebuild nur zwei Monate gedauert hätte.
Phase 3: Die Headless-CMS-Mittelstellung
Das ist deine Lückenfüller-Phase, wenn du mehr brauchst als den Prototyp, aber noch nicht bereit bist, alles von Grund auf zu bauen. Strapi tritt hier auf.
Warum speziell Strapi?
Ich habe mit einer Menge Headless-CMS-Optionen getanzt -- Strapi, Contentful, Sanity. So macht sich Strapi:
| Funktion | Strapi | Contentful | Sanity | Payload | Directus |
|---|---|---|---|---|---|
| Self-Hosting-Option | ✅ | ❌ | ❌ | ✅ | ✅ |
| Open Source | ✅ | ❌ | Teilweise | ✅ | ✅ |
| Benutzerdefinierte Felder/Plugins | Hervorragend | Gut | Hervorragend | Hervorragend | Gut |
| Lernkurve | Moderat | Niedrig | Moderat | Moderat | Niedrig |
| Preise (2025) | Kostenlos selbst gehostet, 29 €/Mo+ Cloud | 300 €/Mo+ | 99 €/Mo+ | Kostenlos selbst gehostet, 29 €/Mo+ Cloud | Kostenlos selbst gehostet |
| API-Flexibilität | REST + GraphQL | REST + GraphQL | GROQ + GraphQL | REST + GraphQL + Lokale API | REST + GraphQL |
| TypeScript-Unterstützung | Gut (v5+) | SDK nur | Hervorragend | Native | Gut |
Strapi ist super, weil es offen, selbst gehostet und anpassbar ist. Nicht-Entwickler können einsteigen, ohne jede fünf Minuten einen Entwickler anzurufen.
Bei Social Animal bauen wir viel an Headless-CMS-Projekten. Strapi ist normalerweise unsere erste Wahl, außer wenn Payload oder Sanity bessere spezifische Anforderungen erfüllen.
Wie die Strapi-Phase aussieht
Ein reales Szenario? Ein Kunde hat einen Freelance-Designer-Marktplatz mit Bolt erstellt. Das Ding war gehärtet und brauchte ein CMS für Blogs.
Wir haben es so umstrukturiert:
- Frontend: Next.js 15 mit dem App Router
- CMS: Strapi v5 für Content- und User-Verwaltung
- Datenbank: Von SQLite zu PostgreSQL gewechselt
- Auth: Strapi-Auth für Admin; NextAuth.js für die App
- Hosting: Frontend auf Vercel, Strapi plus Postgres auf Railway
// Abrufen von Strapi in einer Next.js Server-Komponente
async function getDesignerProfiles() {
const response = await fetch(
`${process.env.STRAPI_URL}/api/designers?populate[0]=portfolio&populate[1]=reviews&pagination[pageSize]=20&sort=rating:desc`,
{
headers: {
Authorization: `Bearer ${process.env.STRAPI_TOKEN}`,
},
next: { revalidate: 60 }, // ISR: alle 60 Sekunden neu validieren
}
);
if (!response.ok) throw new Error('Failed to fetch designers');
const data = await response.json();
return data.data;
}
Dieses Setup deckte sie für etwa acht Monate ab. Sie wuchsen von 50 auf 2.000 Benutzer und verwalteten Content nahtlos. Das Admin-Team hielt Schritt, ohne einen einzigen Entwickleranruf.
Kosten? Etwa 150 €/Monat plus das, was sie für die initiale Entwicklung ausgegeben haben.

Phase 4: Wenn Strapi nicht mehr ausreicht
Strapi glänzt, bis deine Logik einfaches Content-CRUD übersteigt. Wenn die Geschäftslogik deiner App verworrener ist als deine Kopfhörer am Boden deiner Tasche, ist es Zeit, größer zu denken.
Benutzerdefinierte Geschäftslogik wird unbeholfen
Mit Strapi werden benutzerdefinierte Regeln in Lifecycle-Hooks gequetscht:
// Das ist ein echter Strapi-Lifecycle-Hook, der außer Kontrolle geraten ist
// Mach das nicht.
module.exports = {
async afterCreate(event) {
const { result } = event;
// Designer-Bewertung berechnen
const reviews = await strapi.entityService.findMany('api::review.review', {
filters: { designer: result.designer.id },
});
const avgRating = reviews.reduce((sum, r) => sum + r.rating, 0) / reviews.length;
// Designer-Profil aktualisieren
await strapi.entityService.update('api::designer.designer', result.designer.id, {
data: { rating: avgRating, reviewCount: reviews.length },
});
// Benachrichtigungs-E-Mail senden
await strapi.plugins['email'].services.email.send({
to: result.designer.email,
subject: 'Neue Bewertung',
text: `Du hast eine ${result.rating}-Sterne-Bewertung erhalten!`,
});
// Suchindex aktualisieren
await updateAlgoliaIndex('designers', result.designer.id, { rating: avgRating });
// Prüfe, ob Designer Anspruch auf Featured-Status hat
if (avgRating >= 4.8 && reviews.length >= 10) {
await strapi.entityService.update('api::designer.designer', result.designer.id, {
data: { featured: true },
});
// Benachrichtige das Marketing-Team
await notifySlackChannel('marketing', `${result.designer.name} ist jetzt Featured!`);
}
},
};
Siehst du das? Ein einfacher After-Create-Hook ist gerade zu einem Monster explodiert -- Bewertungen, E-Mails, Such-Updates, Team-Benachrichtigungen. Keine Freude, das zu pflegen.
Performance-Grenzen
Strapi ist für Content designed, nicht für schwere Datenverarbeitung oder komplexe Abfragen. Sobald es skaliert, schreibst du rohes SQL, um ihre Grenzen zu umgehen. Und ehrlich gesagt? Wenn es bis zu diesem Punkt kommt, fragst du dich, warum du sie überhaupt noch verwendest.
Die API-Oberfläche wächst über Content hinaus
Brauchst du WebSockets, Background Jobs oder automatisierte Webhooks? Es ist, als würde man versuchen, einen eckigen Dübel in ein rundes Loch zu stecken.
Phase 5: Custom Architecture richtig gemacht
Hier ziehen wir die großen Geschütze raus. Du kennst deine Domain jetzt; du hast gesehen, was Benutzer lieben. Es ist Zeit für dieses benutzerdefinierte Setup.
Aber nicht von Grund auf.
So haben wir dieselbe Marktplatz turbogechladdert:
┌─────────────────────────────────────────────────────┐
│ Frontend-Ebene │
│ Next.js 15 (App Router) + React Server Components │
│ Bereitgestellt auf Vercel (Edge + Serverless) │
├─────────────────────────────────────────────────────┤
│ API-Ebene │
│ tRPC für typsichere interne APIs │
│ REST Webhooks für Drittanbieter-Integrationen │
│ WebSocket-Server (Hono auf Fly.io) für Echtzeit │
├─────────────────────────────────────────────────────┤
│ Service-Ebene │
│ Auth: Clerk (von DIY migriert -- jede Pekunia wert) │
│ Zahlungen: Stripe Connect (Marktplatz-Zahlungen) │
│ Suche: Typesense (ersetzte Algolia -- 90% billiger) │
│ E-Mail: Resend + React Email │
│ Jobs: Trigger.dev (Background-Verarbeitung) │
│ CMS: Sanity (nur Editorial-Content) │
├─────────────────────────────────────────────────────┤
│ Daten-Ebene │
│ PostgreSQL auf Neon (serverless, Branching) │
│ Drizzle ORM (typsicher, leistungsgerecht) │
│ Redis auf Upstash (Caching, Rate-Limiting) │
└─────────────────────────────────────────────────────┘
Beachte, dass Sanity herumhängt. Es ist perfekt für die redaktionellen Bits. Unterdessen findet sich all die hart arbeitende Produktdaten in gutem altem PostgreSQL wieder.
Die Erkenntnis? Benutzerdefinierte Anwendungen wo nötig und ein CMS wo es Sinn macht. Sie sind unterschiedlich; behandle sie so. Wir koppeln diese Architektur oft mit Next.js-Projekten und Astro für Content-schwere Seiten.
Die Kostenrealität in jeder Phase
Geld spricht, also lass es uns einfach auslegen:
| Phase | Zeitraum | Entwicklungskosten | Monatliche Infrastruktur | Monatliche SaaS |
|---|---|---|---|---|
| Bolt Prototyp | 1-2 Wochen | 0-500 € (deine Zeit) | 0-20 € (Vercel kostenlos) | 20 € (Bolt Pro) |
| Strapi + Next.js | 4-8 Wochen | 15.000-40.000 € | 50-200 € | 0-100 € |
| Custom Architecture | 8-16 Wochen | 40.000-120.000 € | 200-800 € | 200-600 € |
| Scale Custom | Laufend | 5.000-20.000 €/Mo (Team) | 500-5.000 € | 500-2.000 € |
Echte Zahlen, ohne Schnickschnack. Die Regel? Jede Phase sollte sich durch Einnahmen oder Erkenntnisse aus der letzten bezahlt machen. Blase nie deine Ersparnisse auf das Dream-Setup auf, bis du bereit bist.
Lass uns quatschen, wenn du Hilfe brauchst, deine aktuelle Phase zu entziffern -- schau dir unsere Preisübersicht an.
Wie man weiß, wann man weitermacht
Das ist knifflig, aber hier sind die roten Flaggen:
Vom Prototyp zum Headless CMS
- Du bearbeitest immer noch rohes JSON oder HTML für Content-Tweaks.
- Nicht-technische Team-Mitglieder stecken fest, warten auf die Dev-Pipeline.
- Deine App sieht aus wie eine riesige Copy-Paste-Fabrik.
- Du schaukelst immer noch SQLite oder, Himmel bewahre, JSON-Dateien.
- Du hast deine Idee mit echten Benutzern validiert.
Vom Headless CMS zur Custom Architecture
- Dein Strapi-Setup quillt über vor benutzerdefinierten Code.
- Du stichst direkt in die Datenbank außerhalb des CMS.
- Performance bricht unter auch nur mildem Traffic zusammen.
- Komplexe Anforderungen verwandeln das CMS in ein verworrenes Durcheinander.
- Gute Einnahmen spiegeln die Notwendigkeit für bessere Skalierbarkeit wider.
Tech-Stack-Entscheidungen, die wirklich wichtig sind
Nach all dem Durchackern sind einige Entscheidungen wichtiger, als du denkst.
Entscheidungen, die wichtig sind
Datenbankauswahl. PostgreSQL gewinnt neun von zehn Mal, es sei denn, du hast einen verdammt guten Grund, woanders hingehen.
Authentifizierung. Rollen niemals deine eigene. Ob Clerk, Auth.js oder Supabase, der Preis ist trivial im Vergleich zu potenziellen Fallstricken.
Hosting-Modell. Serverless rockt für allgemeine Nutzung, es sei denn, Echtzeit-Apps verlangen etwas Stärkeres.
Entscheidungen, die noch nicht wichtig sind
CSS-Framework. Wähle eines aus und mach weiter. Tailwind, CSS Modules, egal -- du kannst es später immer noch austauschen.
State Management. React Server Components lindern die Debatte. Zieh nicht extra-Suites rein, bis es absolut notwendig ist.
Monorepo-Tooling. Sobald du es brauchst, okay, aber vergrab dich nicht am ersten Tag darin.
Die goldene Regel ist einfach: „Baue heute für Geschwindigkeit, halte morgen Optionen offen." Es gibt kein Patentrezept, nur sinnvolles Entscheidungstreffen. Wenn du in diesen Gewässern navigierst und einen alten Hasen an deiner Seite haben möchtest, nimm Kontakt auf. Wir haben diesen Block oft gemacht und könnten dich vor einigen Fallstricken bewahren.
FAQ
Sollte ich mit Bolt.new starten oder von Anfang an richtig bauen?
Starten Sie mit Bolt oder ähnlich, wenn Sie noch Wasser testen. Es ist der schnellste Weg, Ihre Ideen zu validieren und entscheidende Pivots ohne Geldverbrennung zu machen.
Ist Strapi 2025 noch zu empfehlen, wenn Payload CMS so viel Aufmerksamkeit bekommt?
Sicher, beide haben ihre Stärken. Stravis v5-Verbesserungen machen es zu einem soliden Anwärter. Für ein Next.js-First-Produkt könnte Payload einen Vorsprung haben.
Wie viel kostet es, von Strapi zu Custom Architecture zu migrieren?
Schätze 40.000-120.000 € für typische SaaS-Setups. Komplexität und Daten-Migrationsbedarf werden Zeit und Kosten verzerren.
Kann Bolt.new produktionsreife Code generieren?
Es ist ein Anfangspunkt, nicht das Ziel. Nutze Bolt für Prototypen und plane, Code später zu stärken und zu verfeinern.
Was ist der größte Fehler von Teams während dieser Progression?
In einer Phase zu lange steckenbleiben. Du siehst die Probleme, wenn sie entstehen -- ignoriere sie nicht.
Sollte ich ein Headless CMS verwenden oder ein benutzerdefiniertes Admin-Panel bauen?
Starten Sie mit einem CMS, es sei denn, deine Admin-Systeme sind das Kernprodukt. Ein poliertes Verwaltungs-Backend zu bauen ist zeitaufwändig und teuer.
Wie überzeuge ich meinen technischen Co-Gründer, den Prototyp nicht weiter zu bauen?
Quantifiziere es. Tabelliere verpasste Fristen, Ineffizienzen und wie sich neue Features in Pflicht-Spaghetti verwandeln. Mach den Fall für Schnelligkeit über Hochmut.
Ist es möglich, die Headless-CMS-Phase ganz zu überspringen?
Ja, aber es ist selten. Du brauchst solide technische Führung und ein unbeugsames Verständnis deiner Anforderungen, um direkt zu Custom zu springen -- normalerweise nur für Nische-Entwickler-Tools oder interaktive Apps.