SEOMaster
An SEO SaaS that audits a site, scores it, and teaches non-technical owners exactly what to fix — with a provider-agnostic, fully optional AI fix assistant.
The problem
Beginner site owners have zero-visitor sites and no idea how to rank on Google. SEOMaster audits a site and then explains, in plain language, what is wrong and exactly how to fix it — turning raw SEO data into do-this-next guidance instead of dashboards non-technical users cannot interpret.
Challenges
AI that is provider-agnostic and fully optional
AI is bring-your-own-key and can never become a hard dependency — the entire product has to remain fully usable with no AI configured at all. A single abstraction picks whichever provider (OpenAI, Anthropic, Gemini, or a local model) is set purely from environment, every AI-powered feature is gated behind a "is AI configured?" check, and the local-model path is treated as keyless so users can run it for free.
Keeping AI output structured and reliable
Generated fixes and content drafts have to render as real UI, not a wall of chat text. Each AI request is given a strict schema the model must fill, so responses come back as validated, typed data rather than prose, and the prompts explicitly forbid jargon and inventing facts about the user's business — because the audience is beginners who can't tell a hallucination from a real recommendation.
Background crawling without a separate infra tier
Site crawls, daily rank checks, and weekly reports are long-running and scheduled — the kind of work that usually needs a dedicated job server. Here the job workers run inside the same process as the web app, so a single small VPS handles both, guarded against accidentally starting twice during development and degrading gracefully to in-process crawling when no queue backend is available.
Teaching beginners, decoupled from AI
Every issue the audit can find ships with hand-written, plain-language guidance — what it is, why it matters, how to fix it, how hard it is, and how much impact it has. This teaching content always works, with or without AI. When AI is configured it layers a tailored, copy-paste-ready fix on top; when it isn't, the manual steps stand on their own.
Implementation
Pluggable AI layer with structured output
A small factory returns the configured provider's client, and the draft- and fix-generation features both request a schema-constrained response, so what comes back is already parsed and validated against the shape the UI expects — no fragile text-parsing of model output.
Scheduled background job pipeline
Three job types — crawls, rank refreshes, and report generation — run on a shared queue backed by an in-memory store. Recurring work is registered once at startup on cron schedules (a daily rank sweep, a weekly report) in a way that's safe to run repeatedly without piling up duplicates.
Crawl → audit → score pipeline
A run marks itself in-progress, fetches pages with a well-behaved crawler (respecting robots rules, discovering the sitemap, and detecting answer-engine signals like AI-crawler policies), applies a battery of rule-based checks, best-effort layers in Core Web Vitals field data, computes a 0–100 health score, and stores the pages and issues it found.
Type-safe server API
The server API is built from feature-co-located endpoints validated at the boundary, rather than scattered controllers. Every query is scoped to the caller's organization and every mutation checks write permission first, so multi-tenant isolation is enforced consistently by construction.
A schema modeling the whole SEO domain
The database schema captures the full domain: the multi-tenant core, the site → crawl → page/issue hierarchy, keywords with historical rank snapshots for trend charts, competitors, content briefs, cached analysis, and Google account tokens stored encrypted at rest — with database-level constraints enforcing per-organization uniqueness.
Why this stack
- SvelteKit + Svelte 5
- A single full-stack app with a type-safe server API, so there's no separate backend service to build and deploy.
- Drizzle + PostgreSQL
- A type-safe schema whose types flow straight into validation, and a relational model that fits the site/crawl/keyword hierarchy naturally.
- TanStack AI
- A provider-agnostic AI layer, which is what lets AI stay bring-your-own-key, optional, and swappable between vendors with schema-validated output.
- BullMQ + Redis
- Durable background crawls, rank refreshes, and schedulers — run in-process for single-VPS simplicity, but able to be split out to scale later.
- Zod
- One validator guards every external input — API requests and AI responses alike — so bad data is rejected at the edge.
- Tailwind CSS 4
- A token-driven design system for a consistent flat UI, with rich typography for the rendered content previews.
What it does
- Automated site audit: crawl, rule-based findings, and a 0–100 health score with Core Web Vitals
- One-click AI fix assistant with a copy-paste fix per issue and an always-available manual fallback
- Keyword tracking with rank snapshots and trends from Search Console, plus daily rank sweeps
- Content briefs and AI draft scaffolds (title, meta, outline) targeting search intent
- Competitor gap analysis and internal-link analysis (orphan pages, link opportunities)
- Answer-engine readiness (llms.txt, AI-crawler blocking) and encrypted Google integration with weekly emails