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"

[auth]
redirect_uris = [
  "https://acme-demo.on.getfloo.com/callback",
  "https://demo.acme.com/callback"
]

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, your app gets a JWT with email, name, and sub (a stable user ID). Use the email domain to identify the company:
from jose import jwt, jwk
from urllib.request import urlopen
import json, os

JWKS = json.loads(urlopen(
  f"https://api.getfloo.com/v1/auth/apps/{os.environ['FLOO_APP_ID']}/.well-known/jwks.json"
).read())

def whoami(token):
    payload = jwt.decode(token, JWKS, audience=os.environ["FLOO_APP_ID"])
    email = payload["email"]
    company_domain = email.split("@")[1]
    return {"email": email, "company": company_domain, "name": payload["name"]}
Tag telemetry by company domain and you have a leaderboard of engaged prospects — who logged in, from which company, and how deep they went.

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

Full OAuth flow, JWT handling, and refresh tokens.