Skip to main content
A sales demo is one of the highest-leverage things floo is good for. You ship a real, working app — not a static deck, not a video — and every prospect who signs in becomes a measurable intent signal.

What you get

  • A branded demo on your own domain (demo.yourcompany.com).
  • Managed sign-in — prospects authenticate with their work email. No shared passwords.
  • Per-user tracking — you see which companies have logged in, when, and how often they’ve come back.
  • Rapid iteration — push a change, the dev URL updates immediately, promote to production when it’s ready.

The flow

1. Build the demo

A small web app. Keep it focused on one or two workflows that showcase the value.

2. Configure managed auth

[app]
name = "acme-demo"
access_mode = "accounts"

[services.web]
type = "web"
port = 3000
ingress = "public"
That’s the entire auth config. floo’s gateway puts a hosted sign-in page in front of the demo, validates each prospect’s session, and tells your app who they are.

3. Decide who can sign in

For a sales demo, you typically want anyone with a work email — but not consumer Gmail. In the dashboard app settings, allowlist by disallowing common consumer email providers, or flip to manual approval if you want to gate access more tightly.

4. Add a custom domain

floo domains add demo.acme.com --app acme-demo
Follow the DNS instructions in the output. TLS is auto-provisioned.

5. Deploy and share

git push origin main
floo releases promote --app acme-demo
Give the link to prospects.

What your app code does

When a prospect signs in, floo’s gateway injects identity headers into every request that reaches your app. Pull email and split on @ to get the company domain:
from fastapi import Request

@app.middleware("http")
async def attach_prospect(request: Request, call_next):
    email = request.headers.get("x-floo-user-email")
    request.state.prospect = {
        "email":   email,
        "name":    request.headers.get("x-floo-user-name"),
        "company": email.split("@")[1] if email else None,
    }
    return await call_next(request)
Tag telemetry by company domain and you have a leaderboard of engaged prospects — who logged in, from which company, and how deep they went. No JWT verification, no token refresh, no auth library.

The usage signal

Sales teams using floo for demos typically do two things with the sign-in data:
  1. Pipeline visibility. The app’s Users tab shows every prospect who has signed in. Cross-reference that with your CRM and you know which open deals have real hands-on interest.
  2. Re-engagement. Someone from a target account comes back three weeks after the first demo? That is a signal — you see it in floo, not as a CRM task two weeks late.
None of this requires an analytics pipeline, a segmentation tool, or engineering time. It is a side effect of managed auth.

Keeping the demo fresh

The dev URL (<app>-dev.on.getfloo.com) stays live at all times. Use it to stage changes — update copy for a specific vertical, turn a feature on for a key account, demo a new integration — without touching the production URL your other prospects are already using. When the change is good, promote:
floo releases promote --app acme-demo --tag pitch-v2

Custom Domains

Put the demo on your own branded URL.

Managed auth reference

Identity headers, access policies, and access modes in detail.