Find the hidden drag slowing your team down.
FrictionMap turns everyday workflow slowdowns into cost estimates, insights, and a prioritized fix roadmap.
Teams lose time to small operational bottlenecks that rarely become formal projects: access delays, approval bottlenecks, manual data entry, duplicate work, unclear ownership, and missing documentation. Those issues are painful, but usually invisible in dashboards.
Operational drag compounds quietly:
- Employees feel delays day to day, but leadership sees only output lag.
- Costs are distributed across teams, so bottlenecks look “small” in isolation.
- Priority decisions default to intuition instead of impact.
FrictionMap gives teams a lightweight way to report friction and automatically translates those reports into:
- monthly hours lost,
- monthly and annualized cost leakage,
- pattern-based insights,
- and a ranked action roadmap with suggested fixes.
- Fast Report Friction form with live impact preview
- Dynamic Overview executive summary
- Filterable Insights dashboard with chart + table breakdowns
- Ranked Fix Roadmap grouped by category/process with status updates
- Exportable Business Impact Report (copy + markdown download)
- Settings — company name, currency (CAD / USD / EUR / GBP), default team, custom teams, demo scenario, data-mode hint, reset demo / clear local data, category reference copy, role simulation (Employee / Manager / Operations Leader / Judge Demo), and lightweight rollout tips
- Integrations screen with hackathon-safe mocks: Slack summary, Jira/Linear ticket markdown, CSV import/export (no API keys)
- Demo scenario switcher (also in Settings; quick controls remain on Overview):
- Default Operations Team
- Engineering Handoff Chaos
- Finance Manual Workload
- Local persistence with schema migration and corruption-safe fallback
- Configurable blended hourly rate (default 50/hr in USD display until you pick another currency in Settings)
FrictionMap quantifies hidden workflow drag in dollars and hours so teams can:
- identify the highest-cost friction first,
- align owners on concrete fixes,
- and demonstrate measurable savings over time.
- Frontend: React 18 + TypeScript
- Build tool: Vite 5
- State: Zustand + persist middleware (localStorage)
- Backend (progressive): Supabase (optional; app falls back safely when not configured)
- Charts: Recharts
- Animation: Framer Motion
- Styling: Global CSS design system (
src/styles/global.css)
FrictionMap runs in Local demo mode by default. Supabase is optional progressive enhancement.
- Create a Supabase project.
- Apply schema from:
docs/supabase-schema.sql
- Add env vars in
.env.local:
VITE_SUPABASE_URL=your_supabase_project_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_keyAlternative variable names also supported:
NEXT_PUBLIC_SUPABASE_URL=...
NEXT_PUBLIC_SUPABASE_ANON_KEY=...If vars are missing or Supabase is unavailable, the app stays usable with local/demo persistence and shows a subtle mode indicator.
npm install
npm run devOpen the Vite URL shown in terminal (usually http://localhost:5173).
npm run build
npm run preview- Load a demo scenario from Overview → Demo & settings.
- Submit a new friction report in Report Friction.
- Return to Overview and confirm metrics update.
- Open Insights to show team/category/process breakdowns.
- Open Fix Roadmap to show top ranked bottlenecks and status actions.
- Generate and export Business Impact Report.
- Open Integrations — copy Slack/Jira/Linear drafts, import/export CSV, or (optional) deploy Edge Functions for live Slack/Jira/Linear.
The Integrations tab always supports copy/paste and CSV in the browser (no backend required).
Optional live mode: deploy Supabase Edge Functions in supabase/functions/ and add vendor credentials as Function secrets (not VITE_* variables). The SPA calls supabase.functions.invoke with the anon key; tokens never ship to end users.
| Capability | Copy/mock | Live (Edge Functions) |
|---|---|---|
| Slack summary | Yes | post-slack-webhook + SLACK_INCOMING_WEBHOOK_URL |
| Jira issue | Markdown copy | create-jira-issue + JIRA_DOMAIN, JIRA_EMAIL, JIRA_API_TOKEN |
| Linear issue | Markdown copy | create-linear-issue + LINEAR_API_KEY |
| CSV import/export | Yes | N/A |
Step-by-step: docs/integrations-edge-functions.md.
Integration settings (Slack cost line, related reports in tickets, default priority, Jira project key / issue type, Linear team ID) persist in the same browser storage as the rest of the app. Jira/Linear secrets are only on Supabase.
- Enable JWT verification on Edge Functions and/or add a shared secret header once you have auth.
- Prefer OAuth for multi-tenant SaaS; this repo uses API tokens / webhooks for a single internal deployment.
- Authentication + role-based access
- Backend/database persistence
- Multi-tenant OAuth for Slack / Jira / Linear (beyond single-workspace Edge Function secrets)
- Organization-level trend benchmarking
- Automated before/after impact tracking
- AI-assisted fix recommendations with confidence scoring
Hackathon team roles (placeholder):
- Product / UX: TBD
- Frontend engineering: TBD
- Data / analysis: TBD
- Demo / storytelling: TBD
Key directories:
src/pages— Overview, Report Friction, Insights, Fix Roadmapsrc/store/frictionStore.ts— app state, persistence, scenarios, selectorssrc/lib— calculations, roadmap generation, report generation, Supabase/repository adapterssrc/data— scenario datasets and defaultssrc/components— shared UI, layout, charts, modals, demo controlssupabase/functions— optional Edge Functions for live Slack / Jira / Lineardocs/integrations-edge-functions.md— deploy secrets and CLI commandsdocs/supabase-schema.sql— SQL schema + index + RLS notes
See AGENTS.md for product principles and implementation guardrails.