Takes about 5 minutes. Do this once — then your platform is live forever.
Step 1 — Create your free Supabase database
Supabase is your real database — it stores all your customers, logins, tickets, and subscriptions. It's completely free to start.
1️⃣ Go to supabase.com → Create account → New Project
2️⃣ Pick any name (e.g. "floi-ai") and a strong password → Create
3️⃣ Wait ~2 minutes for setup to finish
4️⃣ Go to Project Settings → API
5️⃣ Copy your Project URL and anon public key
Supabase Project URL
Supabase Anon Key (public)
Your Owner Email (gets Platform Admin access)
Stripe Publishable Key (optional — add later)
Step 2 — Create your tables
Copy this SQL and run it in your Supabase dashboard: SQL Editor → New Query → Paste → Run
-- ═══════════════════════════════════════════════
-- FLOI AI — SUPABASE DATABASE SCHEMA
-- Paste this in: Supabase Dashboard → SQL Editor → Run
-- ═══════════════════════════════════════════════
-- Enable UUID extension
create extension if not exists "uuid-ossp";
-- ── USER PROFILES ──
create table if not exists profiles (
id uuid references auth.users(id) on delete cascade primary key,
email text not null,
full_name text,
plan text not null default 'Starter',
workspace_id uuid not null default gen_random_uuid(),
stripe_customer_id text,
brand_name text,
industry text default 'saas',
created_at timestamptz not null default now(),
updated_at timestamptz not null default now()
);
alter table profiles enable row level security;
create policy "Users can view own profile" on profiles for select using (auth.uid() = id);
create policy "Users can update own profile" on profiles for update using (auth.uid() = id);
create policy "Users can insert own profile" on profiles for insert with check (auth.uid() = id);
-- ── LOGIN EVENTS ──
create table if not exists login_events (
id uuid default gen_random_uuid() primary key,
user_id uuid references auth.users(id) on delete cascade,
email text,
user_agent text,
ip text,
workspace_id uuid,
created_at timestamptz not null default now()
);
alter table login_events enable row level security;
create policy "Users can insert own login" on login_events for insert with check (auth.uid() = user_id);
create policy "Users can view own logins" on login_events for select using (auth.uid() = user_id);
-- ── SUPPORT TICKETS ──
create table if not exists tickets (
id uuid default gen_random_uuid() primary key,
workspace_id uuid not null,
user_id uuid references auth.users(id) on delete cascade,
user_name text,
user_email text,
subject text not null,
message text,
status text not null default 'open',
priority text default 'medium',
ai_reply text,
created_at timestamptz not null default now(),
updated_at timestamptz not null default now()
);
alter table tickets enable row level security;
create policy "Workspace members can view tickets" on tickets for select using (workspace_id = (select workspace_id from profiles where id = auth.uid()));
create policy "Workspace members can insert tickets" on tickets for insert with check (workspace_id = (select workspace_id from profiles where id = auth.uid()));
create policy "Workspace members can update tickets" on tickets for update using (workspace_id = (select workspace_id from profiles where id = auth.uid()));
-- ── DATA SUBSCRIPTIONS ──
create table if not exists data_subscriptions (
id uuid default gen_random_uuid() primary key,
workspace_id uuid not null,
user_id uuid references auth.users(id) on delete cascade,
dataset_id text not null,
stripe_subscription_id text,
status text default 'active',
created_at timestamptz not null default now(),
unique(workspace_id, dataset_id)
);
alter table data_subscriptions enable row level security;
create policy "Users can view own subscriptions" on data_subscriptions for select using (workspace_id = (select workspace_id from profiles where id = auth.uid()));
create policy "Users can insert own subscriptions" on data_subscriptions for insert with check (user_id = auth.uid());
-- ── WORKSPACE MEMBERS ──
create table if not exists workspace_members (
id uuid default gen_random_uuid() primary key,
workspace_id uuid not null,
invited_by uuid references auth.users(id),
name text not null,
email text not null,
role text not null default 'Viewer',
status text default 'active',
created_at timestamptz not null default now(),
unique(workspace_id, email)
);
alter table workspace_members enable row level security;
create policy "Workspace members can view members" on workspace_members for select using (workspace_id = (select workspace_id from profiles where id = auth.uid()));
create policy "Workspace admins can insert members" on workspace_members for insert with check (workspace_id = (select workspace_id from profiles where id = auth.uid()));
-- ── PLATFORM ADMIN VIEW (owner sees all — bypasses RLS via service role) ──
-- When you query with the SERVICE ROLE key, RLS is bypassed and you see all rows.
-- NEVER expose your service role key in the frontend.
-- For the Platform Admin panel, all queries use the anon key + owner check via email.
-- The app grants "owner" status if the logged-in email matches the owner email you set in Setup.
-- ── AUTO-UPDATE updated_at ──
create or replace function update_updated_at()
returns trigger as $$
begin new.updated_at = now(); return new; end;
$$ language plpgsql;
create trigger trg_profiles_updated before update on profiles for each row execute function update_updated_at();
create trigger trg_tickets_updated before update on tickets for each row execute function update_updated_at();
Create a Payment Link in your Stripe dashboard for each plan. Paste the links in Settings → Stripe Setup. When customers click Subscribe, they go to your real Stripe checkout.
🚀 AI-powered business platform
The AI Operating System for Every Business
Automate support, generate reports, draft content, and integrate your entire stack — one platform, any industry.
10k+
Businesses
98%
Accuracy rate
5×
Faster operations
5
Industries
Features
Everything your business needs
One platform for all AI-powered operations — no separate tools needed.
🎨
Custom Branding
White-label the entire platform with your company name, colors, and logo. Every client sees your brand, not ours.
🤖
AI Business Assistant
Chat with a business-grade AI tuned to your industry — SaaS, E-Commerce, Healthcare, Finance, or Agency.
🎫
Customer Support
Triage, route, and auto-reply to tickets. AI drafts replies in your brand voice — approve and send in one click.
📊
Report Builder
Turn raw questions into polished reports — sales, financial, marketing, operations. Generated in seconds.
✍️
Content Studio
Draft emails, proposals, and social posts instantly. Adapts to your industry and brand voice automatically.
💾
Persistent Database
All your data — tickets, reports, settings — saved locally and exportable. Your data, your control.
How it works
Up and running in 3 minutes
No engineers. No setup fees. No long contracts.
1
Brand it
Set your company name, color, and logo in Settings. The entire platform reflects your brand instantly.
2
Pick your industry
Select SaaS, E-Commerce, Healthcare, Finance, or Agency. Dashboard, tickets, and AI prompts all adapt.
3
Add AI & deploy
Paste your OpenAI key to enable AI. Deploy to Netlify in 60 seconds and share your custom domain URL.
Pricing
Simple, transparent pricing
Start free, scale as you grow.
Starter
$0
forever free
5,000 AI messages/month
1 workspace
Custom branding
All 5 industry presets
Data export
Most Popular
Business
$49
per month
Unlimited AI messages
5 workspaces
White-label fully
Custom domain support
Priority support
API access
Enterprise
Custom
contact us
Everything in Business
Unlimited workspaces
Dedicated AI model
SSO & SCIM
SLA guarantee
Custom integrations
Ready to transform your business?
Join thousands of businesses already running on Floi AI.
🤖
Floi AI
Dashboard
Your workspace at a glance
MRR
$42,800
↑ +8% MoM
Active Users
3,241
↑ +14%
Churn Rate
2.1%
↓ -0.3%
NPS Score
68
↑ +5pts
Recent Activity
AI reply sent — TK-001 Sarah Mitchell
2 minutes ago
Report generated — Q2 Sales Summary
18 minutes ago
New urgent ticket — API rate limit issue
1 hour ago
Email drafted — Partnership proposal
2 hours ago
Branding updated — New logo applied
Yesterday
AI Usage This Week
Support Replies2,140
Reports47
Content Drafts312
Chat Queries8,992
Quick Actions
📈
AI Strategist
Get business advice
🎫
Open Tickets
5 need attention
📊
Generate Report
Sales, ops, finance
🎨
Set Your Brand
Name, color, logo
Add your OpenAI key in Settings to enable AI responses
ID
Subject
Customer
Status
Time
Actions
Configure Report
📄
No report yet
Configure and click Generate
Connected Apps
💬
Slack
Post AI summaries and alerts to your Slack channels.
Connected
📮
Gmail
Sync inbox, draft AI replies to incoming messages.
Connected
📊
HubSpot
Sync CRM data for AI-powered sales analysis.
Not connected
🗂️
Notion
Export reports and summaries to Notion.
Not connected
💳
Stripe
Pull billing data for automated financial reports.
Not connected
📁
Google Drive
Read docs and export generated content to Drive.
Connected
REST API
Your API Key
API Reference
POST/v1/chat— Send a message to the AI
curl -X POST https://api.floiai.ai/v1/chat \ -H "Authorization: Bearer YOUR_KEY" \ -d '{"message": "Summarize sales this week"}'
6 datasets · Real-time behavioral data · Updated every 24–72h
Data as a Service
Stop guessing. Buy intent data that converts.
Access the same 60B+ weekly behavioral signals used by 1,000+ agencies to win $2,500–$10K/mo clients. Every dataset is refreshed in real-time and matched to live profiles you can deploy on any ad platform today.
60B+
signals/week
48h
avg refresh rate
1,000+
agencies using this
$2.5K+
avg client value
Monthly Revenue
$0
↑ recurring
Active Subscribers
0
↑ growing
Your Datasets
3
↑ listed
Avg Price
$132
/mo per dataset
Your Data Products
Dataset Name
Category
Records
Price
Subs
Revenue
Status
List a New Dataset
Your Workspace
My Team Admin
Manage your team, track logins, and see your data subscriptions. Only you and your team members are visible here.
Workspace Admin
Team Members
—
in your workspace
Active Now
—
online today
Data Subscriptions
—
active datasets
Monthly Data Spend
—
recurring
Team Members
Member
Role
Last Login
Sessions
Status
Actions
All logins by your team members. Only your workspace — no other companies' data is visible here.
Member
Role
Location
Device
IP
Time
Status
Datasets your workspace is currently subscribed to.
${DAAS_CATALOG ? '' : ''}
Invite a Team Member
They'll get access to your workspace only. You control their role and permissions.
🔒
Platform Owner Console
This console shows all customers, all revenue, and all system data across your entire platform. Access is locked to the platform owner only.
First time? Enter any PIN to set it — you'll use it every time you log in.
Platform Owner Only
Platform Admin Console
Owner
Total Users
—
+0 today
Active Users
—
-0 this week
Live Right Now
—
active sessions
MRR
—
— ARR
Revenue by Plan
Live Activity Feed
Live Sessions
— users online right now
User
Plan
Location
Device
Current Action
Session Time
IP
Auto-refreshes every 8 seconds · Simulated for demo — connect real backend for live data
Login Audit Log
User
Plan
Location
Device
IP Address
Time
Status
User
Plan
Location
Joined
Last Active
Revenue
Sessions
Status
Actions
All Systems
● All Operational
Last checked: just now
90-Day Uptime History
Each bar = 1 day · Green = operational · Red = incident
90 days agoToday
Honest CEO Briefing
What you need to handle millions of users for decades
The app you have today is a fully-featured prototype. It runs in the browser with no server. To sell to enterprise clients and handle millions of users 24/7 for decades without downtime, you need the stack below. None of it is complicated — and much of it is free to start.
Replace localStorage with Supabase (Postgres). Stores all users, logins, tickets, data purchases. Scales to billions of rows. Built-in real-time subscriptions so the admin panel shows live data. Takes 1 afternoon to set up. supabase.com →
🔐 2. Real Auth — Clerk or Supabase Auth (free → $25/mo)
Every login is tracked with IP, device, timestamp, and geographic data — exactly what the admin panel shows. Social login (Google, GitHub), MFA, and SOC 2-compliant audit logs. clerk.com →
💳 3. Billing — Stripe (0% → 0.5% at scale)
Recurring subscriptions, usage billing, invoices, dunning management. When a client pays $2,500/mo or $10K/mo, Stripe handles it automatically. One webhook connects it to Supabase so MRR updates in real-time. stripe.com →
Deploy the frontend to Vercel (global CDN, 99.99% uptime SLA). Route through Cloudflare for DDoS protection, caching, and performance. Tens of millions of requests for essentially $0 until you're scaling hard. vercel.com →
📈 5. Analytics — PostHog (free for 1M events/mo)
Track every click, page view, feature use, and conversion. This is what powers the real version of the admin overview — funnel analysis, retention cohorts, feature flags. posthog.com →
✅ Total monthly cost to start
$0–$50/month to run everything until you hit thousands of paying users. The prototype you have right now is worth demoing to enterprise clients today. When they say yes, build the backend. That's the right order.
When you're ready to build the real backend, say:
"Build me the Supabase + Clerk + Stripe backend for Floi AI" — I'll generate the full codebase.
🎨 Custom Branding
🏭 Industry Workflow
Select your industry. The dashboard metrics, AI prompts, and sample tickets all adapt instantly.