checklists / launch-ready

Launch Ready cyber security Checklist for client portal: Ready for handover to a small team in internal operations tools?.

'Ready' for a client portal is not 'the app loads on my laptop'. It means a small internal ops team can take over without me worrying about exposed data,...

Launch Ready cyber security Checklist for client portal: Ready for handover to a small team in internal operations tools?

"Ready" for a client portal is not "the app loads on my laptop". It means a small internal ops team can take over without me worrying about exposed data, broken logins, email failures, or a deploy that takes the portal offline.

For this product type, I would call it handover-ready only if these are true:

  • No exposed secrets in the repo, CI logs, or browser bundle.
  • Authentication and authorization are tested against real role changes.
  • Email deliverability is verified with SPF, DKIM, and DMARC passing.
  • Production deploys are repeatable, documented, and reversible.
  • Uptime monitoring and alerting are live before the handover.
  • DNS, SSL, redirects, and subdomains are correct across all environments.
  • The team has a checklist they can follow without asking the builder what to do next.

If any of those fail, the risk is not theoretical. It becomes support load, downtime, account takeover risk, failed onboarding, and lost trust from the internal users who depend on the portal every day.

Quick Scorecard

| Check | Pass criteria | Why it matters | What breaks if it fails | |---|---|---|---| | Auth login flow | Users can sign in/out with no bypasses | Prevents unauthorized access | Data exposure and account takeover | | Role-based access control | Each role only sees allowed records/actions | Internal tools often leak too much by default | Staff see data they should not access | | Secrets handling | Zero secrets in code, logs, or client-side bundles | Stops credential theft | API abuse and production compromise | | HTTPS + SSL | All traffic forced to HTTPS with valid certs | Protects sessions and credentials | Browser warnings and session interception | | DNS + redirects | Domain resolves correctly and canonical URLs are consistent | Avoids duplicate sites and broken links | SEO issues, login confusion, phishing risk | | Email auth | SPF/DKIM/DMARC all pass | Improves deliverability for portal emails | Password resets and alerts land in spam | | Monitoring | Uptime checks and alerts are active | Detects outages before users do | Silent downtime and missed incidents | | Deploy process | One documented production deploy path | Reduces human error during release | Broken releases and rollback delays | | Logging hygiene | No PII or tokens in logs | Limits blast radius after incidents | Data leakage through observability tools | | Backup/restore awareness | Restore path is documented and tested once | Recovery matters more than backup claims | Long outages after deletion or corruption |

A good threshold here is simple: zero exposed secrets, no critical auth bypasses, SPF/DKIM/DMARC passing, and p95 API latency under 500ms for normal portal actions. If you cannot prove those four things, I would not hand the system to an internal team yet.

The Checks I Would Run First

1. DNS and domain ownership

  • Signal: The root domain and subdomains resolve to the correct environment with no stale records.
  • Tool or method: Cloudflare dashboard review plus `dig`, `nslookup`, or a quick browser check across prod URLs.
  • Fix path: Remove old A/CNAME records, set canonical redirects, confirm www to non-www behavior, and lock down who can edit DNS.

2. SSL and forced HTTPS

  • Signal: Every public URL returns a valid certificate with no mixed content or redirect loops.
  • Tool or method: Browser dev tools, SSL Labs test, direct curl checks against key routes.
  • Fix path: Enable full HTTPS enforcement in Cloudflare or hosting platform, fix hardcoded http links, renew certificates if needed.

3. Secrets exposure

  • Signal: No API keys, private tokens, service credentials, or webhook secrets appear in repo history or frontend code.
  • Tool or method: Secret scanning in GitHub/GitLab plus grep across env files and CI logs.
  • Fix path: Rotate anything exposed immediately. Move runtime-only values into environment variables on the server side only.

4. Authz boundary testing

  • Signal: A low-privilege user cannot read or modify another user's records by changing IDs or routes.
  • Tool or method: Manual role testing with two accounts plus simple parameter tampering in browser dev tools.
  • Fix path: Enforce authorization on the server for every object lookup. Do not trust UI hiding as security.

5. Email deliverability

  • Signal: SPF passes, DKIM signs outbound mail, DMARC policy is set correctly for your domain.
  • Tool or method: Mail-tester style checks plus DNS record inspection in Cloudflare.
  • Fix path: Publish proper TXT records for SPF/DKIM/DMARC. Verify password reset emails reach inboxes from Gmail and Outlook.

6. Monitoring and incident visibility

  • Signal: You get an alert when uptime drops or error rates spike.
  • Tool or method: Uptime monitor plus synthetic checks on login and core workflow pages.
  • Fix path: Add health endpoints if missing. Alert to Slack/email with clear owner names and response expectations.

A small config example helps here because email failures are common on handoff day:

v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@yourdomain.com; adkim=s; aspf=s

That record alone does not solve deliverability. It does tell mailbox providers that your domain has an actual policy instead of looking like an abandoned system that could be spoofed.

Red Flags That Need a Senior Engineer

1. You found secrets in Git history

  • This is not a cleanup task anymore. If keys were committed publicly or shared through CI logs, I would rotate them first and audit where they were used.

2. The portal uses client-side auth decisions

  • If access control depends on hiding buttons in React instead of checking permissions on the server, that is a real security bug. A user can still call the endpoint directly.

3. There is no clear production rollback

  • If deployment means "hope this build works," you do not have a launch process. You have a support ticket generator.

4. Email sends from multiple domains without alignment

  • Mixed sender domains often break SPF/DKIM alignment and push portal notifications into spam. That hurts password resets first because those emails are time-sensitive.

5. The app already handles sensitive operational data

  • Once a client portal includes invoices, documents, staff notes, customer records, or internal workflows, mistakes become business incidents rather than UI bugs.

DIY Fixes You Can Do Today

1. Inventory every domain you own

  • List root domain, www versioning rules,, subdomains,, staging URLs,, email sender domains,, and webhook endpoints.
  • Remove anything unused so attackers have fewer targets.

2. Rotate obvious secrets now

  • Change any key that was pasted into chat,, Slack,, Notion,, screenshots,, or local `.env` files shared around the team.
  • If you are unsure whether it leaked,, assume it did.

3. Turn on Cloudflare protection where possible

  • Enable proxying for public web traffic,, basic WAF rules,, rate limiting if available,, bot protection,, and HTTPS enforcement.
  • This reduces noisy attacks before they hit your origin server.

4. Test role boundaries manually

  • Create one admin account and one restricted account.
  • Try viewing another user's record by editing IDs in the URL or request payload.

5. Send one real test email per provider

  • Test Gmail,, Outlook,, Apple Mail if relevant.
  • Confirm inbox placement for login links,, password resets,, invite emails,, and notifications.

These fixes do not make the product handover-ready by themselves. They just reduce avoidable damage before someone senior audits the real risks.

Where Cyprian Takes Over

| Failure found during checklist | What I do in Launch Ready | Timeline | |---|---|---| | DNS misconfigured | Clean up records,, point domain correctly,, set redirects || Day 1 | | SSL problems || Force HTTPS,, validate cert chain,, remove mixed content || Day 1 | | Email not delivering || Configure SPF/DKIM/DMARC,, test inbox placement || Day 1 | | Secrets exposed || Move secrets out of client code,, rotate risky values || Day 1-2 | | No monitoring || Add uptime checks,,, alert routing,,, basic health probes || Day 2 | | Weak deployment process || Set production deploy flow,,, document rollback steps || Day 2 | | Handover gaps || Deliver checklist,,, ownership notes,,, next-step risks || End of sprint |

My preference is to fix launch blockers first rather than polish everything equally. For internal operations tools,,,, security gaps plus bad email plus unclear deploys create more business pain than minor UI issues ever will.

The handover package should leave a small team able to answer three questions without me:

  • What breaks if we deploy?
  • Who gets alerted if it breaks?
  • How do we recover fast?

If those answers are unclear,,,, you are not ready for handover 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://cloudflare.com/learning/dns/what-is-dns/

---

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.