- App typeclient portal
- Features3
- AuthYes
- Paymentsnone
- Integrationsstorage
Fixed-price client portals your customers actually use
Agencies and B2B vendors need a branded place where clients log in, upload files, see project status, and pay invoices—not a shared Google Drive folder and email thread. Lab Twelve scopes client portals as business apps: customer auth, role separation, uploads, notifications, and deploy. We dogfood the pattern on our own customer portal. Scope lock keeps 'just one more screen' from becoming an open retainer.
| Customer login + staff admin | Included |
|---|---|
| File uploads to object storage | Included |
| Status or milestone views | Included |
| Stripe-ready payment hooks | Included |
| Production deployment | Included |
Customer login + staff admin: Role matrix in quote
File uploads to object storage: Business App tier
Status or milestone views: Per scoped screens
Stripe-ready payment hooks: Billing add-on available
Production deployment: Included in all tiers
| White-label multi-tenant SaaS | Not in base scope |
|---|---|
| Legacy SSO unless scoped | Not in base scope |
| Unlimited custom branding rounds | Not in base scope |
White-label multi-tenant SaaS: Different architecture—say so upfront
Legacy SSO unless scoped: Enterprise IdP is an add-on
Unlimited custom branding rounds: Revision rounds per tier
A representative ScopeSpec ticket—your quote is built from your answers in the scope chat.
Day 0
Portal roles defined
Client vs staff capabilities.
Days 2–6
Auth + core flows
Login, home, document list.
Days 7–9
Uploads + status
Storage wiring, email triggers.
Day 10
Launch
Custom domain ready if in scope.
Questions for this build type
How is this different from a CRM?
Portals are narrow: your clients see only their project. CRMs are ops tools. We scope the minimum job-to-be-done.
Can clients pay through the portal?
Stripe Checkout or invoicing links can be scoped. Stripe wiring is often an add-on.
Do you build the portal Lab Twelve uses?
Same stack and patterns—we scope yours the same way we scope ours.
Ready for a fixed quote?
One conversation at /start turns your brief into a locked scope and published price.