A complete career-tech SaaS platform — AI writing assistance, subscription billing, PDF generation, 10+ templates and a full admin panel. Built from scratch. Launched in 30 working days.
The client came to us with a clear problem: the job market is brutal, and most CVs never reach a human recruiter — they are filtered out by ATS software before anyone reads them. The opportunity was to build an affordable, guided CV platform that produces ATS-compliant documents and puts AI writing assistance within reach of everyday job seekers.
The brief called for a full SaaS product — not a simple page builder. User accounts, subscription management, payment processing, AI text generation, PDF export, cover letter generation and a complete admin panel. All from scratch, scalable from day one, on a tight budget.
Professional CV writing services cost hundreds — sometimes thousands. The platform had to undercut this dramatically while delivering high-quality, professional output every time.
Templates had to pass automated screening filters used by major employers, recruitment agencies and job platforms. Most free tools fail this test silently.
AI had to improve what users write — not invent experience or qualifications they don't have. A hard product constraint defined before a single line of code was written.
The wishlist was extensive. Part of our job was defining a tight MVP+ scope and protecting it from creep throughout — turning down requests that would have blown the timeline.
We evaluated the requirements before committing to a stack. The goal: a system a small team could ship fast, maintain easily, and scale when the product grew — without overengineering for day one.
We chose Laravel Blade + Alpine.js over a full React SPA. For a content-heavy SaaS with SEO landing pages, server-rendered HTML is faster to build, easier to maintain, and better for search. Vue components were added only where the CV builder's live preview genuinely needed it.
Rather than loosely connected pages, the platform was architected as a unified system where every module feeds into the others.
Integrating OpenAI into a CV platform carries a real product risk: if AI can generate content freely, users end up with CVs that misrepresent their actual experience. We designed the AI layer around a single principle — improve what the user writes, never write for them.
Four constraints, applied to every prompt, every time
The Improve button is disabled until the field has content. Empty fields return a validation error — no API call is made.
System prompts instruct the model to improve grammar and tone only — explicitly forbidding the addition of any unmentioned qualifications or experience.
All requests are dispatched as background jobs via Laravel Queues to prevent timeouts. Every call is logged against the user for cost tracking.
Free users see the button but clicking it shows an upgrade prompt — driving conversion without hiding the feature from users who haven't paid yet.
We bring the same scope discipline and engineering judgment to every build — from constrained AI prompts to full admin tooling.
Seven phases, each with a defined output. Tight scope control kept development on track from day one.
Laravel 12, database schema, auth, FilamentPHP admin scaffold, Git, DigitalOcean VPS configuration and environment setup.
Full step-based builder, JSON data structure, dynamic section handling, save/update flow, live preview with debounce rendering.
10 CV templates integrated, Browsershot + Puppeteer PDF engine deployed on Node.js, multi-page handling, watermark logic, clickable links in output.
OpenAI integration with constrained prompts, Improve buttons across all relevant sections, Cover Letter Generator, AI logging and usage tracking.
PayFast integration, webhook handling, plan activation, feature gating across all tiers, Google OAuth, subscription expiry logic.
Admin panel completion, QA across all features, mobile responsiveness, PDF testing, SSL, production deployment and backup configuration.
The modern HTML/CSS templates could not be rendered accurately by PHP-native libraries — layouts broke. We chose Spatie Browsershot with Puppeteer running on Node.js. Output is pixel-perfect because it uses the same rendering engine as Google Chrome.
Every CV's content is stored as a structured JSON object. Templates read from this at render time — meaning new templates can be added through the admin panel without touching code. A significant long-term time saver for the client.
Stripe is the obvious SaaS default but creates friction for many users outside North America and Europe. PayFast supports local payment methods — EFT, Capitec Pay, Ozow, local cards — all in local currency with no conversion. The right tool for the right market.
A custom admin panel for user management, template CRUD, payment logs and AI monitoring would have taken 8–10 days to build from scratch. FilamentPHP delivered it in under 2 — freeing time for features that actually differentiate the product.
We turned down multiple requests during development — ATS scoring, LinkedIn import, drag-and-drop editor. Each refusal protected the timeline and the budget. A focused product that ships beats a bloated one that doesn't.
Browsershot requires Node.js and root server access. We initially deployed to shared hosting, which blocked this entirely. Earlier infrastructure decisions would have saved time — confirmed VPS access before choosing the PDF approach.
Preventing AI from generating blank-field content was a product integrity call. But it also made better UX — users who write their own content and see it improved feel more ownership over the output than users who let AI write it for them.
Several requests during development fell outside the original brief. Tracking these in real time meant we could have an honest, evidence-based conversation about scope at project end — rather than a disputed one.
From AI writing features to subscription billing and admin tooling — we scope it tightly, build it right, and ship it on time.
We build SaaS platforms, AI-integrated web apps and scalable backends for founders who want a technical partner — not just a vendor.
Start a project with us →