Welcome back
Sign in to access your intelligence dashboard.
⌘K
Good morning,
Here's what's happening across your operation.
Total Responses
Loading…
Active Forms
Published & collecting
Avg Readiness Score
Across all assessments
Organisations
Active clients
Insight Map
At a Glance
Focus Session
2h 10m left
Forms
System
All systems normal
Focus Mode
Deep Work
Active
2:10
Recent Activity
Top Forms
Data Snapshot
Total Forms
Responses
Avg Score
Quick Actions
Form Builder
Create and manage your intelligence forms.
Form Responses
All collected responses across your forms.
AI Analysis
Intelligent analysis powered by your choice of AI provider.
AI Provider Configuration
Batch Analysis
Analysis Output

Configure your API key and run an analysis.

AI Assistant — Conversational Analysis
Context: all data
Try: "Summarise all responses" · "Which form has the lowest scores?" · "List respondents with score below 50" · "What trends do you see?"
Client Organisations
Manage all your client accounts.
Live Metrics
Real-time operational intelligence.
Response Volume (30 days)
Score Distribution
Top Forms by Response
Organisations
Summary
Settings
Configure your LumenOS instance.
Supabase Connection
Account
Signed in as
Notification Scope
Choose a specific form to only receive alerts for that form, or leave as "All forms".
Email notifications
Get an email every time a response is submitted
Emails are sent via your Supabase Edge Function. Deploy the function once and notifications fire automatically on every submission.
→ Supabase Edge Functions docs
Slack notifications
Post a message to a Slack channel on every response
Create an Incoming Webhook in your Slack workspace:
1. Go to api.slack.com/apps → Create New App
2. Enable "Incoming Webhooks" → Add New Webhook to Workspace
3. Pick a channel and paste the URL above.
Notification Log
No notifications sent yet.
Edge Function Setup (one-time)
Deploy this Supabase Edge Function to enable email sending. Slack webhooks fire directly from the browser.
supabase/functions/lumenos-notify/index.ts
import { serve } from "https://deno.land/std@0.168.0/http/server.ts"

serve(async (req) => {
  const { to, subject, html } = await req.json()
  const res = await fetch("https://api.resend.com/emails", {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${Deno.env.get("RESEND_API_KEY")}`,
      "Content-Type": "application/json"
    },
    body: JSON.stringify({
      from: "LumenOS <notifications@yourdomain.com>",
      to, subject, html
    })
  })
  const data = await res.json()
  return new Response(JSON.stringify(data), {
    headers: { "Content-Type": "application/json" }
  })
})
// Deploy: supabase functions deploy lumenos-notify
// Set secret: supabase secrets set RESEND_API_KEY=re_xxx
Database Integration Notes
DB Functions this app calls
-- Dashboard KPIs
select * from il_dashboard_kpis;
-- Response volume timeseries
select * from il_response_volume(30);
-- Score distribution
select * from il_score_distribution();
-- Per-org form stats
select * from get_org_response_counts(:org_id);
-- Full-text search
select * from il_search(:query);
-- Recalculate scores after field type change
select recalculate_form_scores(:form_id);

-- Notification log table (optional)
create table if not exists il_notification_log (
  id uuid primary key default gen_random_uuid(),
  channel text not null,
  form_id uuid references il_forms(id),
  respondent text,
  status text default 'ok',
  message text,
  created_at timestamptz default now()
);