Client Portal

Overview

When you call define_intake, BriefGate generates a unique branded portal URL (e.g. https://p.briefgate.dev/8f3k) and emails it to your client with a magic link. The client does not need to create an account. They click the link, land directly in their portal, and start submitting assets.

On paid plans, the portal shows your branding — not BriefGate's. From the client's perspective, this is a tool you built for them.

  1. Client receives an email with a one-time magic link containing a short-lived token
  2. Client clicks the link; the browser sends POST /portal/:slug/redeem to exchange the token for a session cookie
  3. The cookie grants access to that specific intake only (not other intakes), and is valid for 14 days
  4. If the client loses the email, trigger a re-send: POST /v1/intakes/:id/send (or use send_chase from MCP)

The magic link itself is single-use — it is invalidated after redeem. The session cookie that results is multi-use for 14 days.

What the client sees

On the Free plan, "Powered by BriefGate" is shown at the bottom of the portal. This is removed on Solo and Agency plans. Custom portal domain (e.g. intake.yourcompany.com) is available on Agency.

Item interactions

Each item type renders a specific UI:

All items autosave on every field change. If the client closes the browser mid-way through, their progress is saved and they can return via the same portal link without re-entering anything.

Mobile-first

The portal is designed for clients submitting from a phone. Key mobile behaviors:

In-portal validation

Clients see validation errors immediately — before they click Submit. For example:

This validation runs server-side and is returned to the portal in real time. Catching problems before the client hits Submit reduces the number of revision cycles.

Languages

The portal UI is available in:

Code Language
en English (default)
cs Czech
de German

Set at define_intake time via client.language. All labels, help text, buttons, and system messages are shown in the chosen language. The item label and help fields you define are shown as-is — translate them yourself when using a non-English language.

Additional languages are planned. Contact support to request a language.

Revision flow

When the agent calls request_revision(intake_id, item_key, note), the portal flags that item with a banner showing your note:

"This logo is too small. Please upload at least 512px wide. The SVG version would be ideal if you have it."

The item's status changes to revision_requested. The client receives an email notification, clicks back to the portal, and re-uploads or re-enters the item. When they submit, item.submitted fires again and the item status returns to submitted.

On Free plan, revision requests are not available (plan_required error). Available on Solo and Agency.

"Powered by BriefGate"

On the Free plan, a small "Powered by BriefGate" notice appears at the bottom of the portal. It links to https://briefgate.dev.

This notice is removed entirely on Solo and Agency plans. On Agency, you can also configure a custom portal domain so the URL itself shows your brand (e.g. intake.yourcompany.com instead of p.briefgate.dev/8f3k).