How We Built a SaaS Marketing Site on WordPress
The decisions behind the PostRoost marketing site: why it is separate from the app, how the theme stays fast, how search intent…
Read More: How We Built a SaaS Marketing Site on WordPressPostRoost is a social media scheduler for agencies and the brands they manage, and it is ours. MAK Digital designed and built the application, the WordPress marketing site that sells it, the billing that connects the two, and the search content that brings people in. This is how we put it together and what we would do the same way for a client.

PostRoost is MAK Digital's own product. We designed, built and run it, so this case study describes our own work on our own software.
Published .
The brief
Agencies that post for several clients juggle separate logins, separate calendars and approvals scattered across email threads. We wanted a scheduler built around the client instead of around the social account: each brand with its own connected accounts, calendar, brand voice, time zone and approval rule.
A SaaS product needs two very different things. The application has to be secure, reliable and quick to work in every day. The marketing site has to rank, explain six plans clearly and hand a new customer to checkout without friction. Most SaaS teams build both in the same JavaScript framework. We split them on purpose: the application in Next.js, and the public site on WordPress, so content can be written and published like any blog while the product moves at its own pace.
The rule for both: no page builder, no invented statistics, and every claim on the site checked against what the software actually does. That is the same standard we apply in our web development work for clients.
What we built
The work ran in this order, each step tested before the next one started.
Step 1 of 7
Every client gets its own calendar, posts, approvals, analytics and account settings. A post moves from draft to pending approval to scheduled to published, and the calendar shows each one with its time, image, networks and status.
PostRoost publishes to Facebook Pages, Instagram professional accounts, LinkedIn, X, TikTok, YouTube and Pinterest. Each network has its own adapter for sign-in, publishing, token refresh and metrics, so a change at one network stays contained in one file.
Step 2 of 7
The caption is written once and each network tab starts from it, with character counts and live previews. Media can be uploaded or linked, reordered and given alt text, and a first comment can go out right after the post on Instagram, Facebook and X.
The writing assistant drafts a caption from a brief and offers one-click fixes: hashtags, tone, grammar, shorter copy and a risk check. It runs on the Anthropic API and only ever suggests text inside the composer. Nothing is posted without a person pressing the button.
Step 3 of 7
Turn on approval for a client and every post waits for sign-off. The approver can approve, request changes with a note, or reject, and the approvals list was designed for the phone first, because that is where clients read it.
Agency owners see every client on one screen with connected accounts, posts waiting for approval and how much of their plan they are using.
Step 4 of 7
A scheduler is only as good as the post that goes out at 9:00. Due posts are claimed atomically, so two workers can never publish the same post twice, and failed attempts retry with backoff and show the reason. Access tokens for every network are encrypted at rest with AES-256-GCM.
Bulk upload takes a CSV or Excel file and checks every row before it creates anything. Analytics pulls followers, impressions, reactions and comments, and keeps refreshing each post's numbers for 90 days after it goes out, with CSV export for client reports.
Step 5 of 7
postroost.io runs on WordPress with a custom classic theme: 22 page templates for the home page, pricing, plans, features, integrations, solutions, comparisons, guides, free tools and the blog. Pages are normal WordPress pages with structured fields, so the team edits copy in the editor and the layout stays intact.
The whole site loads one stylesheet of about 13.5 KB compressed and about 2 KB of JavaScript. Text uses system fonts, headings use one small preloaded font file, and screenshots are served as AVIF with WebP fallbacks at four widths. This is the approach behind our WordPress development and speed optimization services.
Step 6 of 7
Every page was planned against one search intent before it was written, and the page map records its title, description, H1, canonical and internal links. Each published page carries ten page-specific FAQs, and the theme prints the matching FAQPage, breadcrumb and SoftwareApplication structured data from the same fields, so the markup always matches what a visitor sees.
The blog launched with an editorial queue that publishes on a fixed weekday schedule. At the time of writing the sitemaps list 55 pages, 72 articles and 7 categories. Our WordPress SEO and content marketing teams run the same process for clients.
Step 7 of 7
Customers choose a plan and pay on postroost.io through Stripe. A custom billing plugin owns checkout, billing accounts and Stripe webhooks, and sends each change to the application through a signed outbox, so a network hiccup never loses a subscription.
The application keeps its own verified copy of what each agency is entitled to, which protects existing customers during a downgrade: a plan with fewer client slots cannot silently remove a client. Payment pages are excluded from the cache and the sitemap, and no Stripe script loads on the marketing pages. Integrations like this are part of our custom development work.
Technology
Two systems with one contract between them, documented in both repositories.
Where it stands
PostRoost is public at postroost.io with all six plans, seven networks and a blog that publishes on schedule. It is a new product, so this page reports what we can measure today rather than growth figures. We will update it as real usage data comes in.
| Page | Performance | Largest Contentful Paint | Layout shift (CLS) | Total Blocking Time |
|---|---|---|---|---|
| Home | 99 | 1.65 s | 0 | 100 ms |
| Pricing | 100 | 1.21 s | 0 | 0 ms |
| Feature page (approval workflows) | 100 | 1.37 s | 0 | 74 ms |
| Blog index | 100 | 1.21 s | 0 | 0 ms |
Lab measurement with Lighthouse 12.8, default mobile profile (simulated slow 4G and a 4x slower CPU), run against the live site. Real-user Core Web Vitals will follow once Search Console has enough traffic data.
What it shows
Building our own product meant living with every decision. These are the ones we would repeat.
The product can ship daily without risking the pages that rank, and marketers publish without a developer. WordPress is still the fastest way to give a team that freedom.
A page map written before any copy stops two pages from competing for the same search and shows where internal links belong. See WordPress SEO.
Limits on CSS, JavaScript and page weight, checked by tests, keep a site fast after launch, not only on launch day.
Every feature line and FAQ was checked against the code. Accurate pages convert better and age better than inflated ones.
What we built, why we built it this way, and what it means if you are planning a SaaS product or its website.
No. PostRoost is our own product. MAK Digital designed and built the application, the marketing site, the billing integration and the content, and we run it. We publish it as a case study because it shows the same work we do for clients.
It plans, approves, schedules and reports on social media posts for several clients from one place. Each client has its own calendar, accounts, brand voice, time zone and approval rule, and it publishes to Facebook Pages, Instagram, LinkedIn, X, TikTok, YouTube and Pinterest.
The two jobs are different. The app needs a fast, secure interactive framework. The marketing site needs easy publishing, structured SEO and a content team that does not wait for deployments. Splitting them lets each move at its own speed, with a documented contract for billing and accounts between them.
We measure it with mobile Lighthouse on the live site; the results table on this page lists the pages, scores and timings. The site loads one small stylesheet and about 2 KB of JavaScript, with no page builder.
Yes. We build web applications, custom WordPress sites, and the integrations between them, including subscription billing. See web development services and WordPress development, or request a quote.
Yes. We plan pages by search intent, build structured data into the templates, write and schedule content, and set performance budgets. See SEO services and WordPress SEO.
Tell us what you are building and who it is for. We will tell you how we would split the work, what it would cost to run, and where search traffic could come from.
From the eCommerce Experts
The decisions behind the PostRoost marketing site: why it is separate from the app, how the theme stays fast, how search intent…
Read More: How We Built a SaaS Marketing Site on WordPressThe first checkpoint is whether the blog can support a full buying-guide hub, not just a dated stream of announcements. A merchant…
Read More: BigCommerce Blog SEO: Working Around the Native Blog’s Limitations (WordPress Hybrid Setup)A WooCommerce to BigCommerce migration is not only a catalog, theme, and checkout project; it is an SEO-risk event. Search engines have…
Read More: WooCommerce to BigCommerce Migration: SEO Steps for a Clean CutoverTwice a month: what changed in Google and AI search, what it means for your store, and exactly what to do about it. Written by the people who build and rank stores for a living.
First issue lands within two weeks. Check your inbox for a hello from us in the meantime.