Straight answers to the five questions agencies ask before rolling out a client portal — security, onboarding, adoption, integrations, and cost.
Click any question to reveal the answer. The same five questions and answers are published below in structured FAQ schema, so search engines can pick them up as rich results.
Every client gets a unique credential with a bcrypt password hash. Active sessions live in the client_sessions table, and new portal access is granted via one-time invite tokens in client_invite_tokens that expire on use. The whole app runs over TLS on Render, and each client only ever sees their own project data — there is no shared public surface.
New clients run a four-step orientation tour the first time they sign in, so they arrive knowing where the milestones, comments, and reports live. On your side, the team uses the same routes/onboarding.js invite flow you already run today — there is no parallel training rollout, and additional stakeholders are added one invite at a time.
The portal replaces status emails rather than adding a new tool, so adoption is "log in instead of asking for an update." Skeptics get a low-friction way in through milestone comments, milestone reactions, and the star ratings on the dashboard. Clients who never log in still stay in the loop through the same comment and admin notifications going out by email.
Yes. Stripe billing flows through stripe-checkout-routes, AI features run through ai-proxy-routes, Meta Ads campaign management sits behind admin-ads-routes, and Gmail OAuth is wired up for email integration. Milestones, comments, and reports all live in the same Postgres instance as the rest of MachOneOS, so nothing is siloed.
The portal is bundled with the MachOneOS service — there is no separate per-seat portal license. You pay the existing Mach One Marketing engagement you already have, and the client portal is the included delivery surface for it.
Existing portal clients sign in; new clients start onboarding. Either way you're a couple of clicks from your project's latest state.