FRE-623: Build KPI dashboard with Mixpanel, GA4, Stripe panels and unified report

- Created KPIDashboard component with tab navigation (product/acquisition/revenue/report)
- Created MixpanelPanel for product KPIs linking to Mixpanel
- Created GA4Panel for acquisition KPIs linking to GA4
- Created StripePanel for revenue KPIs linking to Stripe dashboard
- Created UnifiedReport with KPI thresholds table and reporting schedule
- Added KPI dashboard route (/app/kpi) and sidebar navigation link
- Added KPI dashboard CSS styles (metric cards, tabs, table, info cards)
- Fixed pre-existing parse errors in Faq.tsx (unescaped apostrophes)
- Fixed pre-existing CSS import paths in routes.tsx

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
2026-04-26 07:56:17 -04:00
parent c9052a1fb0
commit 11a188c68e
9 changed files with 558 additions and 10 deletions

View File

@@ -11,14 +11,15 @@ import { Pricing } from './routes/pricing/Pricing';
import { About } from './routes/about/About';
import { Faq } from './routes/faq/Faq';
import { NotFound } from './routes/NotFound';
import '../styles/landing.css';
import '../styles/blog.css';
import '../styles/features.css';
import '../styles/pricing.css';
import '../styles/about-faq.css';
import './styles/landing.css';
import './styles/blog.css';
import './styles/features.css';
import './styles/pricing.css';
import './styles/about-faq.css';
const AppLayout = lazy(() => import('./components/layout/AppLayout'));
const Dashboard = lazy(() => import('./components/dashboard/Dashboard'));
const KPIDashboard = lazy(() => import('./components/dashboard/KPIDashboard'));
const ProjectList = lazy(() => import('./components/projects/ProjectList'));
const ProjectDetail = lazy(() => import('./components/projects/ProjectDetail'));
const ProjectForm = lazy(() => import('./components/projects/ProjectForm'));
@@ -43,6 +44,9 @@ export const routes = [
<Route path="dashboard" component={ProtectedRoute}>
<Route path="" component={Dashboard} />
</Route>,
<Route path="kpi" component={ProtectedRoute}>
<Route path="" component={KPIDashboard} />
</Route>,
<Route path="projects" component={ProtectedRoute}>
<Route path="" component={ProjectList} />
<Route path="new" component={ProjectForm} />