Building Aviwebsquad: a Laravel + Inertia CMS I actually use
Building Aviwebsquad: a Laravel + Inertia CMS I actually use
Most admin tutorials stop at CRUD demos. Aviwebsquad is the opposite: a production blog and CMS I run on a real domain, monetize carefully, and extend in public. This article documents the architecture choices—not as a sales page, but as a build log another Laravel developer can critique.
What shipped first
The MVP needed:
- Markdown blog posts with categories, tags, and SEO fields
- Static pages (about, policies)
- Filament admin for solo editing
- Public site fast enough for mobile readers in India
- Search and sitemap without a separate search SaaS
I chose Laravel 13 + Filament 5 + Inertia 3 + Svelte 5. PHP handles auth, policies, caching, and content storage; Svelte handles reading experience and interactions (likes, comments, newsletter).
Admin vs public split
Filament owns /admin: posts, pages, banners, menus, media library, contact submissions, newsletter lists. Inertia owns everything readers see.
That split saved weeks. Filament gives me tables, filters, relation managers, and Spatie Media Library integration. Rebuilding that in Svelte would have delayed publishing—bad for a blog whose value is publishing.
Content model decisions
Markdown in, HTML out
Posts store body_markdown and render HTML server-side. I regenerate HTML on save so public responses do not parse markdown per request.
SEO as first-class fields
Each post and page carries meta title/description, canonical URL, robots, Open Graph, and Twitter fields. Defaults come from Spatie settings; per-post overrides win.
Crawlable HTML for SPAs
Inertia pages inject a static HTML fallback in Blade (inertia-static-fallback) so crawlers and answer engines see article text without executing JavaScript. This mattered for Google AdSense review and for AI search snippets.
Features I added after launch
| Feature | Why |
|---|---|
| Full-text search | Readers expect findability beyond tags |
| Post likes (anonymous + auth) | Lightweight engagement signal |
| Moderated comments | Community without spam floods |
| Newsletter capture | Own the audience channel |
| MCP content API | Agent-assisted publishing with audit logs |
| Graphify knowledge graph | Safer refactors when the codebase grows |
MCP publishing (why not only Filament?)
I added a Sanctum-protected MCP API so agents can content_upsert drafts, upload media, and run read-only SQL. Every call requires X-Mcp-Tool for auditing.
Human review still happens in Filament before anything sensitive ships. MCP is acceleration, not autopilot.
Performance habits
- Cache homepage banners and category counts
- Eager-load media and tags on listings
- Paginate blog index; avoid N+1 in Filament tables
- Horizon for async mail and notifications
Mistakes I would fix earlier
- Duplicate category slugs (
cyber-securityvscybersecurity)—hurts SEO and looks sloppy to reviewers - Too many similar "What is X?" posts in one week—reads like SEO filler even when long
- Thin contact page—trust reviewers want substance around forms
What is next
- Richer author pages and structured data for answer engines
- More build logs and fewer definitional articles
- Tighter editorial calendar (quality > batch publishing)
If you are building a similar solo CMS, steal the split: Filament for ops, Inertia for readers, markdown for longevity, MCP for automation—but keep editorial judgment human.