checklists / launch-ready

Launch Ready API security Checklist for client portal: Ready for support readiness in B2B service businesses?.

For a B2B client portal, 'ready' does not mean 'it loads on my laptop.' It means a client can sign in, access only their own data, complete support tasks,...

What "ready" means for a B2B client portal

For a B2B client portal, "ready" does not mean "it loads on my laptop." It means a client can sign in, access only their own data, complete support tasks, and trust the system without your team babysitting every request.

I would call it support ready when these are true:

  • No exposed secrets in code, logs, or deployment settings.
  • Authentication is enforced on every protected route and API.
  • Authorization blocks cross-account data access.
  • Email deliverability is working with SPF, DKIM, and DMARC passing.
  • DNS, SSL, redirects, and subdomains are correct before clients hit the portal.
  • Uptime monitoring and alerting are live before launch.
  • p95 API latency is under 500ms for normal portal actions.
  • There are no critical auth bypasses, no open admin endpoints, and no public debug routes.

If any of those fail, the business cost shows up fast: failed onboarding, support tickets from confused clients, broken login flows, lost trust, and wasted ad spend if you are driving traffic to a portal that cannot safely serve users.

This is exactly the kind of launch I handle in my Launch Ready sprint.

Quick Scorecard

| Check | Pass criteria | Why it matters | What breaks if it fails | |---|---|---|---| | Auth enforced | All protected routes return 401 or redirect when unauthenticated | Prevents public access to client data | Data leaks and support escalations | | Authorization enforced | Users only see their own tenant/account records | Stops cross-client exposure | Serious security incident | | Secrets removed | Zero secrets in repo, logs, or client bundle | Prevents credential theft | API compromise and downtime | | Email setup valid | SPF, DKIM, DMARC all pass | Ensures portal emails land in inboxes | Password resets fail or go to spam | | TLS active | SSL valid on all domains and subdomains | Protects logins and sessions | Browser warnings and dropped trust | | Cloudflare configured | DDoS protection and caching enabled where safe | Reduces attack surface and load spikes | Outages during traffic spikes | | Redirects correct | HTTP to HTTPS and www/non-www rules are consistent | Avoids duplicate content and session issues | Broken links and SEO confusion | | Monitoring live | Uptime alerts trigger within 5 minutes of failure | Lets you respond before clients complain | Slow outage detection | | API latency acceptable | p95 under 500ms for core actions | Keeps portal usable under load | Slow support workflows and churn | | Handover complete | Admin steps documented with owner access list | Prevents launch-day confusion | Support team cannot operate safely |

The Checks I Would Run First

1. Check authentication on every protected page and endpoint

Signal: I can open a client record or support screen without logging in. That is an immediate stop.

Tool or method: Browser test in incognito mode plus direct API calls with no token. I also check route guards in the frontend and middleware on the backend.

Fix path: Add server-side auth checks first. Do not rely on hidden UI buttons. If the route serves sensitive data without verifying identity on the server, I patch that before anything else.

2. Check authorization for tenant isolation

Signal: A logged-in user can change an ID in the URL or request body and see another client's data.

Tool or method: Manual ID swapping plus basic API testing with Postman or curl. I test list endpoints, detail endpoints, file downloads, exports, and admin screens.

Fix path: Enforce tenant filters at the query layer. Every query should scope by account_id or tenant_id from the session token. If this is missing in multiple places, I treat it as a structural issue rather than a one-off bug.

3. Check secrets handling end to end

Signal: Keys appear in Git history, environment files shipped to frontend code, logs, or build output.

Tool or method: Search repo for common secret patterns plus scan deployment variables. I also inspect browser bundles because frontend-exposed keys are often missed.

Fix path: Move secrets to server-only env vars immediately. Rotate anything exposed. If a third-party key was committed publicly even once, I assume it is compromised until replaced.

4. Check DNS, SSL, redirects, and subdomains

Signal: Mixed content warnings appear. Some users hit HTTP while others hit HTTPS. Login cookies break across subdomains.

Tool or method: DNS lookup tools plus browser inspection of certificate chain and redirect behavior. I test root domain, www version if used, app subdomain if used, and any mail-related records.

Fix path: Standardize one canonical domain path. Force HTTPS everywhere. Set clean redirects once so you do not create loops or duplicate entry points.

5. Check email deliverability

Signal: Password reset emails land in spam or never arrive.

Tool or method: Verify SPF/DKIM/DMARC records with an email testing tool or direct DNS inspection. Then send real test messages to Gmail and Outlook accounts.

Fix path: Align sender domain with your mail provider. Publish correct SPF/DKIM records. Start DMARC at monitoring mode if needed so you can observe failures before tightening policy.

6. Check monitoring before launch

Signal: You only find outages because a client emails support.

Tool or method: Set uptime checks against login page health plus one authenticated API endpoint if possible. Confirm alerts reach email or Slack within minutes.

Fix path: Add external monitoring for uptime plus error tracking for app exceptions. I want at least one alert path that does not depend on the production app being healthy.

Red Flags That Need a Senior Engineer

1. You have more than one place deciding who can see what

If frontend code checks permissions but backend code does not repeat them cleanly, that is a bad sign. Client portals need server-side enforcement because UI checks can be bypassed in minutes.

2. Secrets were ever placed in a public repo

If an API key was committed once, assume someone copied it already. Rotating it is not optional; delaying rotation is how small mistakes become account breaches.

3. The portal uses custom auth logic with no audit trail

Homegrown login flows often miss rate limits, lockouts, session expiry rules, password reset safety, and logging around suspicious activity. That creates support load later because you cannot explain what happened after an incident.

4. You are shipping behind a deadline with no monitoring

If there is no uptime alerting or error tracking at go-live time after time pressure increases risk sharply. The first outage will cost more than the sprint that would have prevented it.

5. Your email domain setup is unclear

If nobody knows where SPF/DKIM/DMARC live or who owns DNS access then password resets and notifications will fail unpredictably. That turns into angry clients asking why they cannot log in to work they already paid for.

DIY Fixes You Can Do Today

1. List every domain you use

Make a simple inventory of root domain, www version if any exists like app.domain.com,, mail sender domain,, staging domains,, and vendor-owned links., You need this before you touch redirects,, SSL,, or email records.,

2., Rotate any secret you can already see

If an env file,, config export,, or frontend bundle contains keys,, rotate them now., Do not wait until after launch., The cost of rotation today is lower than cleaning up leaked credentials later.,

3., Turn on HTTPS only

Force all traffic to HTTPS at your edge layer., If you have mixed content warnings,, fix them before launch., A secure login page that still loads insecure assets trains clients not to trust the product.,

4., Test login from incognito

Open a private browser window,, log out,, then try every supported login flow again., Test password reset too., This catches broken cookies,, stale sessions,, redirect loops,, and bad callback URLs fast.,

5., Send real email tests

Use Gmail and Outlook accounts to test password reset,, invite,, notification,, and receipt emails., If messages do not arrive within 2 minutes,. fix DNS records before blaming providers,. SPF/DKIM/DMARC passing should be non-negotiable,.

Where Cyprian Takes Over

When these checks fail,, my Launch Ready sprint maps directly to the gaps instead of wasting time on guesswork.:

  • DNS cleanup -> domain setup,, subdomain routing,, canonical redirects.
  • SSL issues -> certificate install,, HTTPS enforcement,. mixed content cleanup.
  • Email failures -> SPF/DKIM/DMARC configuration,. sender alignment,. inbox testing.
  • Secrets exposure -> env var cleanup,. secret relocation,. rotation guidance.
  • Weak deployment hygiene -> production deployment review,. environment separation,. rollback sanity check.
  • No monitoring -> uptime monitoring,. alert routing,. basic incident visibility.
  • Edge security gaps -> Cloudflare setup,. DDoS protection,. caching rules where safe.
  • Handover chaos -> owner checklist,. access map,. launch notes,.

Delivery window is 48 hours because this work should be treated like an operational sprint,.

My rule is simple:, if a founder cannot answer "who owns DNS?", "where do secrets live?", "what happens when login fails?",and "how do we know if production is down?" then the portal is not ready yet,.

References

  • https://roadmap.sh/api-security-best-practices
  • https://roadmap.sh/cyber-security
  • https://roadmap.sh/code-review-best-practices
  • https://roadmap.sh/backend-performance-best-practices
  • https://developer.mozilla.org/en-US/docs/Web/Security/Transport_Layer_Security

---

Take the next step

If this is a problem in your product right now, here is what to do next:

  • [Use the free Cyprian tools](/tools) - estimate cost, score app risk, check launch readiness, or pick the right service sprint.
  • [Book a discovery call](/contact) - I will tell you honestly whether you need a sprint or if you can DIY the next step.

*Written by Cyprian Tinashe Aarons - senior full-stack and AI engineer helping founders rescue, launch, automate, and scale AI-built products.*

Next steps
About the author

Cyprian Tinashe AaronsSenior Full Stack & AI Engineer

Cyprian helps founders rescue, secure, deploy, and automate AI-built apps with production-grade engineering, launch systems, and AI integration.