I’ve spent the better part of a decade inside TYPO3. I know the backend, the TypoScript, the quirks of FAL, and the particular joy of explaining to an editor why their paste-from-Word content broke the layout again. TYPO3 is my day job, my comfort zone, and — for the right project — genuinely excellent.
This site is not the right project.
The question nobody asks early enough#
Before you pick a framework, a CMS, or a static site generator, there’s one question that deserves more time than it usually gets: what does this site actually need to do?
Not what it could do. Not what it might do in eighteen months when you’ve added a shop, a member area, and a newsletter. What it needs to do today, and what it will realistically need to do for the next two years.
For this portfolio, the answer was short:
- Display a handful of static pages.
- Show a list of projects and blog posts.
- Let me write content in Markdown.
- Load fast. Very fast.
- Cost nothing to host.
If you can list your requirements on one hand, your CMS shouldn’t need a database.
Why TYPO3 was too much#
I want to be clear: this isn’t a criticism of TYPO3. I use it every day and I’d pick it again for a corporate multi-site with editorial workflows, role-based access, and a dozen content types. That’s what it’s built for.
But for a personal portfolio, TYPO3 brings overhead that earns nothing:
- A database. MariaDB or PostgreSQL, running 24/7, serving content that changes once a month. That’s a backup strategy, a migration path, and a monitoring setup — for a blog with eight posts.
- A PHP runtime. FPM, OPcache config, memory limits, a web server. All of it for pages that could be plain HTML files on a CDN.
- An editorial backend. I’m the only editor. I don’t need a login screen, a permission system, or a content tree. I need a text editor and
git push. - Extension management. Composer, TER, version constraints. Even a minimal TYPO3 install pulls in more moving parts than this entire site has pages.
- Hosting cost. A VPS that can run TYPO3 comfortably costs €5–15/month. This site deploys to Cloudflare Pages for free.
The mismatch isn’t TYPO3’s fault. It’s a scope problem. Using TYPO3 for a portfolio is like renting a warehouse to store a suitcase.
What Astro gets right for this use case#
Astro clicked for me the moment I understood its core premise: ship zero JavaScript by default, add it only where you need it.
Content Collections with Markdown#
Instead of a database, my content lives in .md files with typed frontmatter. The schema is validated at build time with Zod — if I forget a required field, the build fails. No migration scripts, no SQL dumps. Content is version-controlled, diffable, and portable.
src/content/blog/
├── why-astro-not-typo3.md # English
└── de/
└── why-astro-not-typo3.md # German
Adding a new post means creating a file, writing Markdown, and pushing to Git. The homepage picks up the latest entries automatically. No backend, no cache clearing, no “did the scheduler run?”
Static output#
The entire site compiles to plain HTML, CSS, and a small JS bundle for view transitions and the theme toggle. There’s no server, no runtime, no cold starts. Every page is a file on a CDN edge node.
Build time: about one second. Total output size: under 300 KB.
The island architecture#
The few interactive pieces — the theme toggle, the language switcher, the tag filter — run as small scripts that hydrate independently. The rest of the page is static HTML. No framework runtime, no virtual DOM, no hydration waterfall.
For a portfolio, this means a Lighthouse performance score that basically maxes out without trying.
Tailwind v4, not a theme system#
TYPO3 projects usually mean SCSS, a Fluid template structure, and a design system that needs to accommodate dozens of content element types. Here, Tailwind’s utility classes are enough. The design tokens live in a CSS file, not in a database or a TypoScript constant.
The decision framework I’d recommend#
After this experience, here’s how I think about CMS vs. static for new projects:
- Who edits the content? If it’s developers or technically literate people, Markdown + Git is faster than any CMS. If it’s a marketing team, they need a backend.
- How often does content change? Weekly editorial cycles justify a CMS. Monthly updates on a personal site don’t.
- How many content types? If you need structured content with relations, variants, and editorial workflows — that’s CMS territory. If you have “page” and “post” — that’s a folder of Markdown files.
- What’s the budget? A static site on Cloudflare Pages or Netlify costs nothing. A CMS needs hosting, maintenance, and security updates.
- What’s the blast radius? A static site can’t be hacked at runtime. There’s no admin panel to brute-force, no SQL injection to worry about, no PHP vulnerabilities to patch.
One thing I miss#
I’ll be honest: TYPO3’s image processing is better. The responsive image handling, the crop variants per breakpoint, the automatic WebP/AVIF conversion with fallbacks — that’s genuinely hard to replicate in a static setup. Astro’s <Image /> component does the basics well, but it’s not in the same league as FAL with a properly configured processing pipeline.
For a portfolio with a handful of images, it doesn’t matter. For a content-heavy site, it would.
Closing#
The boring answer is: pick the tool that matches the job. TYPO3 is excellent at being TYPO3 — a full-featured CMS for complex editorial requirements. Astro is excellent at being Astro — a static site builder for content that lives in files.
I chose Astro because this site is small, personal, and written by one person in a text editor. If that changes — if I suddenly need multi-user editing, structured workflows, or a hundred content types — I know where to find TYPO3. It’ll still be there, being boringly reliable, which is the highest compliment I can pay it.
— DB, written while his TYPO3 instances were quietly serving millions of pages without needing any of this.