From 3e2d5b562dba1bb7f6827c7897f375aaa11b3d7b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 3 Oct 2025 13:29:57 +0000 Subject: [PATCH 1/6] Initial plan From 6709a58702e22c12597f7fa8d2e03867636e6d7f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 3 Oct 2025 13:36:57 +0000 Subject: [PATCH 2/6] Fix critical pricing and feature inaccuracies in provider data Co-authored-by: laander <222419+laander@users.noreply.github.com> --- src/data/analytics-comparison.tsx | 16 +++++++++++----- src/data/auth-comparison.tsx | 2 +- src/routeTree.gen.ts | 7 ++++--- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/src/data/analytics-comparison.tsx b/src/data/analytics-comparison.tsx index 8b75e08..a9d7e27 100644 --- a/src/data/analytics-comparison.tsx +++ b/src/data/analytics-comparison.tsx @@ -404,7 +404,10 @@ const providers: Provider[] = [ customReports: { status: "strong", details: "Custom reports" }, dataExploration: { status: "strong", details: "Visual exploration" }, alerts: { status: "strong", details: "Custom alerts" }, - sessionReplay: { status: "none", details: "Not available" }, + sessionReplay: { + status: "strong", + details: "Session Replay (Growth plan, 20K free replays/mo)", + }, heatmaps: { status: "none", details: "Not available" }, userProfiles: { status: "strong", details: "User profiles" }, userJourneys: { status: "strong", details: "User flows" }, @@ -432,10 +435,13 @@ const providers: Provider[] = [ dataResidency: { status: "strong", details: "US & EU data centers" }, anonymization: { status: "strong", details: "Data deletion tools" }, compliance: { status: "strong", details: "SOC 2, GDPR, CCPA" }, - freeTier: { status: "strong", details: "Free up to 20M events/month" }, + freeTier: { + status: "strong", + details: "Free up to 1M events/month, 20K session replays", + }, pricingModel: { status: "strong", - details: "$20/mo+ based on MTU (monthly tracked users)", + details: "Growth: $0.28 per 1K events after 1M free", }, openSource: { status: "none", details: "Proprietary" }, selfHosted: { status: "none", details: "Cloud-only" }, @@ -509,11 +515,11 @@ const providers: Provider[] = [ compliance: { status: "strong", details: "SOC 2, GDPR, HIPAA" }, freeTier: { status: "strong", - details: "Free Starter plan (10M events/mo)", + details: "Starter: 50K MTUs, up to 10M events/mo", }, pricingModel: { status: "strong", - details: "Based on MTU, custom pricing", + details: "Plus: $49/mo for 300K MTUs at $0.049/MTU", }, openSource: { status: "none", details: "Proprietary" }, selfHosted: { status: "none", details: "Cloud-only" }, diff --git a/src/data/auth-comparison.tsx b/src/data/auth-comparison.tsx index a6d29bf..df9a967 100644 --- a/src/data/auth-comparison.tsx +++ b/src/data/auth-comparison.tsx @@ -284,7 +284,7 @@ const providers: Provider[] = [ }, passkeys: { status: "strong", - details: "WebAuthn/FIDO2 (paid plans only)", + details: "WebAuthn/FIDO2 (Enhanced Auth $100/mo addon)", }, mfa: { status: "strong", diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts index 071e3ce..c634b67 100644 --- a/src/routeTree.gen.ts +++ b/src/routeTree.gen.ts @@ -9,9 +9,9 @@ // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. import { Route as rootRouteImport } from './routes/__root' -import { Route as IndexRouteImport } from './routes/index' -import { Route as DemoTanstackQueryRouteImport } from './routes/demo.tanstack-query' import { Route as DemoTableRouteImport } from './routes/demo.table' +import { Route as DemoTanstackQueryRouteImport } from './routes/demo.tanstack-query' +import { Route as IndexRouteImport } from './routes/index' const IndexRoute = IndexRouteImport.update({ id: '/', @@ -94,8 +94,9 @@ export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) ._addFileTypes() -import type { getRouter } from './router.tsx' import type { createStart } from '@tanstack/react-start' +import type { getRouter } from './router.tsx' + declare module '@tanstack/react-start' { interface Register { ssr: true From 92b896eb44c7c5e524e593d5d3ee628a9c6b9be7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 3 Oct 2025 13:42:22 +0000 Subject: [PATCH 3/6] Verified all provider information accuracy fixes are working correctly Co-authored-by: laander <222419+laander@users.noreply.github.com> --- src/routeTree.gen.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/routeTree.gen.ts b/src/routeTree.gen.ts index c634b67..071e3ce 100644 --- a/src/routeTree.gen.ts +++ b/src/routeTree.gen.ts @@ -9,9 +9,9 @@ // Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified. import { Route as rootRouteImport } from './routes/__root' -import { Route as DemoTableRouteImport } from './routes/demo.table' -import { Route as DemoTanstackQueryRouteImport } from './routes/demo.tanstack-query' import { Route as IndexRouteImport } from './routes/index' +import { Route as DemoTanstackQueryRouteImport } from './routes/demo.tanstack-query' +import { Route as DemoTableRouteImport } from './routes/demo.table' const IndexRoute = IndexRouteImport.update({ id: '/', @@ -94,9 +94,8 @@ export const routeTree = rootRouteImport ._addFileChildren(rootRouteChildren) ._addFileTypes() -import type { createStart } from '@tanstack/react-start' import type { getRouter } from './router.tsx' - +import type { createStart } from '@tanstack/react-start' declare module '@tanstack/react-start' { interface Register { ssr: true From a5bf4c99ecede0869b8828c5135331288ca0b7ce Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 3 Oct 2025 13:57:43 +0000 Subject: [PATCH 4/6] Add verification URLs for all providers across all comparison sites Co-authored-by: laander <222419+laander@users.noreply.github.com> --- src/components/ComparisonTable.tsx | 25 +++++++++++++++++++++++++ src/data/analytics-comparison.tsx | 8 ++++++++ src/data/auth-comparison.tsx | 8 ++++++++ src/data/featureflags-comparison.tsx | 9 +++++++++ src/types/comparison.ts | 1 + 5 files changed, 51 insertions(+) diff --git a/src/components/ComparisonTable.tsx b/src/components/ComparisonTable.tsx index 6742060..dcc37ab 100644 --- a/src/components/ComparisonTable.tsx +++ b/src/components/ComparisonTable.tsx @@ -207,6 +207,31 @@ function ComparisonTable({ config }: ComparisonTableProps) { > {providerName} + {providersByName[providerName].verificationUrl && ( + + + Verification link + + + Verify info + + )} ), cell: ({ getValue, row }) => { diff --git a/src/data/analytics-comparison.tsx b/src/data/analytics-comparison.tsx index a9d7e27..756a562 100644 --- a/src/data/analytics-comparison.tsx +++ b/src/data/analytics-comparison.tsx @@ -279,6 +279,7 @@ const providers: Provider[] = [ name: "PostHog", logo: , website: "https://posthog.com", + verificationUrl: "https://posthog.com/pricing", tagline: { status: "strong", details: "All-in-one product OS with analytics, session replay, and more", @@ -378,6 +379,7 @@ const providers: Provider[] = [ name: "Mixpanel", logo: , website: "https://mixpanel.com", + verificationUrl: "https://mixpanel.com/pricing", tagline: { status: "strong", details: "Product analytics for mobile and web applications", @@ -459,6 +461,7 @@ const providers: Provider[] = [ name: "Amplitude", logo: , website: "https://amplitude.com", + verificationUrl: "https://amplitude.com/pricing", tagline: { status: "strong", details: "Digital analytics platform for product teams", @@ -537,6 +540,7 @@ const providers: Provider[] = [ name: "Heap", logo: , website: "https://heap.io", + verificationUrl: "https://heap.io/pricing", tagline: { status: "strong", details: "Digital insights platform with auto-capture", @@ -609,6 +613,7 @@ const providers: Provider[] = [ name: "Google Analytics 4", logo: , website: "https://analytics.google.com", + verificationUrl: "https://support.google.com/analytics/answer/9306384", tagline: { status: "strong", details: "Free web analytics from Google with ML insights", @@ -702,6 +707,7 @@ const providers: Provider[] = [ name: "Pendo", logo: , website: "https://pendo.io", + verificationUrl: "https://www.pendo.io/pricing", tagline: { status: "strong", details: "Product experience platform with analytics and guidance", @@ -768,6 +774,7 @@ const providers: Provider[] = [ name: "Segment", logo: , website: "https://segment.com", + verificationUrl: "https://segment.com/pricing", tagline: { status: "strong", details: "Customer data platform with analytics capabilities", @@ -852,6 +859,7 @@ const providers: Provider[] = [ name: "Plausible", logo: , website: "https://plausible.io", + verificationUrl: "https://plausible.io/pricing", tagline: { status: "strong", details: "Privacy-first, lightweight, open source web analytics", diff --git a/src/data/auth-comparison.tsx b/src/data/auth-comparison.tsx index df9a967..0d72dca 100644 --- a/src/data/auth-comparison.tsx +++ b/src/data/auth-comparison.tsx @@ -260,6 +260,7 @@ const providers: Provider[] = [ name: "Clerk", logo: , website: "https://clerk.com", + verificationUrl: "https://clerk.com/pricing", tagline: { status: "strong", details: @@ -353,6 +354,7 @@ const providers: Provider[] = [ name: "Auth0", logo: , website: "https://auth0.com", + verificationUrl: "https://auth0.com/pricing", tagline: { status: "strong", details: @@ -443,6 +445,7 @@ const providers: Provider[] = [ name: "Supabase Auth", logo: , website: "https://supabase.com/auth", + verificationUrl: "https://supabase.com/pricing", tagline: { status: "strong", details: "Open source auth with PostgreSQL Row Level Security", @@ -535,6 +538,7 @@ const providers: Provider[] = [ name: "Auth.js (NextAuth)", logo: , website: "https://authjs.dev", + verificationUrl: "https://authjs.dev/getting-started/introduction", tagline: { status: "strong", details: "Free and open source authentication for the web", @@ -633,6 +637,7 @@ const providers: Provider[] = [ name: "Firebase Auth", logo: , website: "https://firebase.google.com/products/auth", + verificationUrl: "https://firebase.google.com/pricing", tagline: { status: "strong", details: @@ -729,6 +734,7 @@ const providers: Provider[] = [ name: "Lucia", logo: , website: "https://lucia-auth.com", + verificationUrl: "https://lucia-auth.com", tagline: { status: "strong", details: @@ -807,6 +813,7 @@ const providers: Provider[] = [ name: "WorkOS", logo: , website: "https://workos.com", + verificationUrl: "https://workos.com/pricing", tagline: { status: "strong", details: @@ -882,6 +889,7 @@ const providers: Provider[] = [ name: "Keycloak", logo: , website: "https://www.keycloak.org", + verificationUrl: "https://www.keycloak.org/documentation", tagline: { status: "strong", details: diff --git a/src/data/featureflags-comparison.tsx b/src/data/featureflags-comparison.tsx index cd2d540..0ee7e4d 100644 --- a/src/data/featureflags-comparison.tsx +++ b/src/data/featureflags-comparison.tsx @@ -282,6 +282,7 @@ const providers: Provider[] = [ name: "Reflag", logo: , website: "https://reflag.com", + verificationUrl: "https://reflag.com/pricing", tagline: { status: "strong", details: "Modern feature flag platform built for developer experience", @@ -427,6 +428,7 @@ const providers: Provider[] = [ name: "LaunchDarkly", logo: , website: "https://launchdarkly.com", + verificationUrl: "https://launchdarkly.com/pricing", tagline: { status: "strong", details: @@ -554,6 +556,7 @@ const providers: Provider[] = [ name: "Flagsmith", logo: , website: "https://flagsmith.com", + verificationUrl: "https://flagsmith.com/pricing", tagline: { status: "strong", details: "Open source feature flag and remote config service", @@ -695,6 +698,7 @@ const providers: Provider[] = [ name: "Unleash", logo: , website: "https://www.getunleash.io", + verificationUrl: "https://www.getunleash.io/pricing", tagline: { status: "strong", details: "Privacy-first open source feature toggle system", @@ -839,6 +843,7 @@ const providers: Provider[] = [ name: "PostHog", logo: , website: "https://posthog.com", + verificationUrl: "https://posthog.com/pricing", tagline: { status: "strong", details: "All-in-one product OS with feature flags built-in", @@ -983,6 +988,7 @@ const providers: Provider[] = [ name: "Split", logo: , website: "https://www.split.io", + verificationUrl: "https://www.split.io/pricing", tagline: { status: "strong", details: "Feature delivery platform with built-in impact monitoring", @@ -1127,6 +1133,7 @@ const providers: Provider[] = [ name: "GrowthBook", logo: , website: "https://www.growthbook.io", + verificationUrl: "https://www.growthbook.io/pricing", tagline: { status: "strong", details: "Open source feature flagging & A/B testing platform", @@ -1271,6 +1278,7 @@ const providers: Provider[] = [ name: "DevCycle", logo: , website: "https://devcycle.com", + verificationUrl: "https://devcycle.com/pricing", tagline: { status: "strong", details: "Developer-first feature flag management platform", @@ -1415,6 +1423,7 @@ const providers: Provider[] = [ name: "ConfigCat", logo: , website: "https://configcat.com", + verificationUrl: "https://configcat.com/pricing", tagline: { status: "strong", details: "Feature flag service with 10-minute setup", diff --git a/src/types/comparison.ts b/src/types/comparison.ts index 0659601..6b1515f 100644 --- a/src/types/comparison.ts +++ b/src/types/comparison.ts @@ -13,6 +13,7 @@ export type Provider = { name: string; logo: React.ReactNode; website: string; + verificationUrl?: string; // URL where pricing/feature information was verified tagline: FeatureValue; features: Record; }; From da203784d72a55c87567974ccec8d83a45f0edc7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 3 Oct 2025 14:47:14 +0000 Subject: [PATCH 5/6] Merge main branch changes: add unknown status and reference field per feature Co-authored-by: laander <222419+laander@users.noreply.github.com> --- src/components/ComparisonTable.tsx | 25 - src/data/analytics-comparison.tsx | 949 -------------- src/data/analytics/amplitude.tsx | 95 ++ src/data/analytics/ga4.tsx | 93 ++ src/data/analytics/heap.tsx | 99 ++ src/data/analytics/index.tsx | 157 +++ src/data/analytics/mixpanel.tsx | 245 ++++ src/data/analytics/pendo.tsx | 97 ++ src/data/analytics/plausible.tsx | 92 ++ src/data/analytics/posthog.tsx | 123 ++ src/data/analytics/segment.tsx | 102 ++ src/data/auth-comparison.tsx | 991 --------------- src/data/auth/auth0.tsx | 106 ++ src/data/auth/authjs.tsx | 114 ++ src/data/auth/clerk.tsx | 117 ++ src/data/auth/firebase.tsx | 112 ++ src/data/auth/index.tsx | 116 ++ src/data/auth/keycloak.tsx | 110 ++ src/data/auth/lucia.tsx | 104 ++ src/data/auth/supabase.tsx | 148 +++ src/data/auth/workos.tsx | 102 ++ src/data/featureflags-comparison.tsx | 1576 ------------------------ src/data/featureflags/configcat.tsx | 167 +++ src/data/featureflags/devcycle.tsx | 167 +++ src/data/featureflags/flagsmith.tsx | 159 +++ src/data/featureflags/growthbook.tsx | 165 +++ src/data/featureflags/index.tsx | 136 ++ src/data/featureflags/launchdarkly.tsx | 152 +++ src/data/featureflags/posthog.tsx | 168 +++ src/data/featureflags/reflag.tsx | 173 +++ src/data/featureflags/split.tsx | 161 +++ src/data/featureflags/unleash.tsx | 167 +++ src/types/comparison.ts | 4 +- 33 files changed, 3749 insertions(+), 3543 deletions(-) delete mode 100644 src/data/analytics-comparison.tsx create mode 100644 src/data/analytics/amplitude.tsx create mode 100644 src/data/analytics/ga4.tsx create mode 100644 src/data/analytics/heap.tsx create mode 100644 src/data/analytics/index.tsx create mode 100644 src/data/analytics/mixpanel.tsx create mode 100644 src/data/analytics/pendo.tsx create mode 100644 src/data/analytics/plausible.tsx create mode 100644 src/data/analytics/posthog.tsx create mode 100644 src/data/analytics/segment.tsx delete mode 100644 src/data/auth-comparison.tsx create mode 100644 src/data/auth/auth0.tsx create mode 100644 src/data/auth/authjs.tsx create mode 100644 src/data/auth/clerk.tsx create mode 100644 src/data/auth/firebase.tsx create mode 100644 src/data/auth/index.tsx create mode 100644 src/data/auth/keycloak.tsx create mode 100644 src/data/auth/lucia.tsx create mode 100644 src/data/auth/supabase.tsx create mode 100644 src/data/auth/workos.tsx delete mode 100644 src/data/featureflags-comparison.tsx create mode 100644 src/data/featureflags/configcat.tsx create mode 100644 src/data/featureflags/devcycle.tsx create mode 100644 src/data/featureflags/flagsmith.tsx create mode 100644 src/data/featureflags/growthbook.tsx create mode 100644 src/data/featureflags/index.tsx create mode 100644 src/data/featureflags/launchdarkly.tsx create mode 100644 src/data/featureflags/posthog.tsx create mode 100644 src/data/featureflags/reflag.tsx create mode 100644 src/data/featureflags/split.tsx create mode 100644 src/data/featureflags/unleash.tsx diff --git a/src/components/ComparisonTable.tsx b/src/components/ComparisonTable.tsx index dcc37ab..6742060 100644 --- a/src/components/ComparisonTable.tsx +++ b/src/components/ComparisonTable.tsx @@ -207,31 +207,6 @@ function ComparisonTable({ config }: ComparisonTableProps) { > {providerName} - {providersByName[providerName].verificationUrl && ( - - - Verification link - - - Verify info - - )} ), cell: ({ getValue, row }) => { diff --git a/src/data/analytics-comparison.tsx b/src/data/analytics-comparison.tsx deleted file mode 100644 index 756a562..0000000 --- a/src/data/analytics-comparison.tsx +++ /dev/null @@ -1,949 +0,0 @@ -import RiBarChartLine from "remixicon-react/BarChartLineIcon"; -import RiCodeLine from "remixicon-react/CodeLineIcon"; -import RiDatabaseLine from "remixicon-react/DatabaseLineIcon"; -import RiLineChartLine from "remixicon-react/LineChartLineIcon"; -import RiMoneyDollarCircleLine from "remixicon-react/MoneyDollarCircleLineIcon"; -import RiPlugLine from "remixicon-react/PlugLineIcon"; -import RiServerLine from "remixicon-react/ServerLineIcon"; -import RiShieldCheckLine from "remixicon-react/ShieldCheckLineIcon"; -import RiUserLine from "remixicon-react/UserLineIcon"; -import type { Category, ComparisonConfig, Provider } from "../types/comparison"; - -// Provider Logo Components -function PostHogLogo() { - return ( - - PostHog - - - - ); -} - -function MixpanelLogo() { - return ( - - Mixpanel - - - - - - ); -} - -function AmplitudeLogo() { - return ( - - Amplitude - - - - ); -} - -function HeapLogo() { - return ( - - Heap - - - - - - ); -} - -function GoogleAnalyticsLogo() { - return ( - - Google Analytics - - - - - - ); -} - -function PendoLogo() { - return ( - - Pendo - - - - - ); -} - -function SegmentLogo() { - return ( - - Segment - - - - - - ); -} - -function PlausibleLogo() { - return ( - - Plausible - - - - ); -} - -// Feature Categories -const categories: Category[] = [ - { - id: "tracking", - label: "Event Tracking & Data Collection", - icon: , - features: { - autoCapture: "Auto-capture Events", - customEvents: "Custom Event Tracking", - userProperties: "User Properties", - groupAnalytics: "Group/Account Analytics", - retroactiveAnalysis: "Retroactive Event Analysis", - }, - }, - { - id: "analysis", - label: "Analysis & Insights", - icon: , - features: { - funnels: "Funnels", - retention: "Retention Analysis", - cohorts: "Cohort Analysis", - pathAnalysis: "Path/Flow Analysis", - trends: "Trend Analysis", - }, - }, - { - id: "visualization", - label: "Visualization & Reporting", - icon: , - features: { - dashboards: "Custom Dashboards", - realtime: "Real-time Analytics", - customReports: "Custom Reports", - dataExploration: "Data Exploration Tools", - alerts: "Alerts & Notifications", - }, - }, - { - id: "users", - label: "User Analytics", - icon: , - features: { - sessionReplay: "Session Replay", - heatmaps: "Heatmaps", - userProfiles: "User Profiles", - userJourneys: "User Journey Mapping", - attribution: "Attribution Modeling", - }, - }, - { - id: "experimentation", - label: "Experimentation", - icon: , - features: { - abTesting: "A/B Testing", - featureFlags: "Feature Flags", - experiments: "Experimentation Platform", - statisticalAnalysis: "Statistical Significance", - }, - }, - { - id: "developerExperience", - label: "Developer Experience", - icon: , - features: { - sdkLanguages: "SDK Languages", - apiAccess: "API Access", - dataWarehouse: "Data Warehouse Export", - sqlAccess: "SQL Query Interface", - documentation: "Documentation Quality", - }, - }, - { - id: "privacy", - label: "Privacy & Compliance", - icon: , - features: { - gdprCompliant: "GDPR Compliant", - cookieless: "Cookieless Tracking", - dataResidency: "Data Residency Options", - anonymization: "Data Anonymization", - compliance: "Compliance Certifications", - }, - }, - { - id: "pricing", - label: "Pricing", - icon: , - features: { - freeTier: "Free Tier", - pricingModel: "Pricing Model", - }, - }, - { - id: "deployment", - label: "Deployment", - icon: , - features: { - openSource: "Open Source", - selfHosted: "Self-Hosted Option", - cloudHosted: "Cloud Hosted", - }, - }, - { - id: "integrations", - label: "Integrations", - icon: , - features: { - cdp: "CDP Integrations", - marketing: "Marketing Tools", - datatools: "Data Tools (Warehouses, BI)", - webhooks: "Webhooks & APIs", - }, - }, -]; - -// Provider Data -const providers: Provider[] = [ - { - name: "PostHog", - logo: , - website: "https://posthog.com", - verificationUrl: "https://posthog.com/pricing", - tagline: { - status: "strong", - details: "All-in-one product OS with analytics, session replay, and more", - }, - features: { - autoCapture: { - status: "strong", - details: "Automatic event capture without code", - }, - customEvents: { status: "strong", details: "Custom event tracking" }, - userProperties: { status: "strong", details: "User properties & traits" }, - groupAnalytics: { - status: "strong", - details: "Group analytics for B2B", - }, - retroactiveAnalysis: { - status: "strong", - details: "Query historical data retroactively", - }, - funnels: { status: "strong", details: "Conversion funnels" }, - retention: { status: "strong", details: "Retention analysis" }, - cohorts: { status: "strong", details: "User cohorts" }, - pathAnalysis: { status: "strong", details: "User path analysis" }, - trends: { status: "strong", details: "Trend analysis" }, - dashboards: { status: "strong", details: "Custom dashboards" }, - realtime: { status: "strong", details: "Real-time analytics" }, - customReports: { status: "strong", details: "Custom insights" }, - dataExploration: { - status: "strong", - details: "SQL and visual exploration", - }, - alerts: { status: "partial", details: "Basic alerts" }, - sessionReplay: { - status: "strong", - details: "Full session replay with console logs", - }, - heatmaps: { status: "strong", details: "Heatmaps & clickmaps" }, - userProfiles: { status: "strong", details: "Individual user profiles" }, - userJourneys: { status: "strong", details: "User journey tracking" }, - attribution: { status: "partial", details: "Basic attribution" }, - abTesting: { status: "strong", details: "A/B testing built-in" }, - featureFlags: { status: "strong", details: "Feature flags included" }, - experiments: { - status: "strong", - details: "Full experimentation platform", - }, - statisticalAnalysis: { - status: "strong", - details: "Bayesian & frequentist stats", - }, - sdkLanguages: { - status: "strong", - details: "15+ languages (JS, Python, Go, PHP, etc.)", - }, - apiAccess: { status: "strong", details: "Full REST API" }, - dataWarehouse: { - status: "strong", - details: "Export to Snowflake, BigQuery", - }, - sqlAccess: { status: "strong", details: "SQL query interface" }, - documentation: { status: "strong", details: "Excellent documentation" }, - gdprCompliant: { status: "strong", details: "GDPR compliant" }, - cookieless: { - status: "partial", - details: "Cookie-based by default, can configure", - }, - dataResidency: { status: "strong", details: "US & EU regions" }, - anonymization: { status: "strong", details: "Data anonymization" }, - compliance: { status: "strong", details: "SOC 2, GDPR" }, - freeTier: { status: "strong", details: "1M events/month free" }, - pricingModel: { - status: "strong", - details: "Pay-as-you-go per event ($0.00005/event)", - }, - openSource: { status: "strong", details: "MIT license" }, - selfHosted: { - status: "strong", - details: "Docker/Kubernetes self-host", - }, - cloudHosted: { status: "strong", details: "PostHog Cloud (US & EU)" }, - cdp: { - status: "strong", - details: "Segment, RudderStack integration", - }, - marketing: { - status: "strong", - details: "Hubspot, Salesforce, Intercom", - }, - datatools: { - status: "strong", - details: "Snowflake, BigQuery, S3", - }, - webhooks: { status: "strong", details: "Webhooks & actions" }, - }, - }, - { - name: "Mixpanel", - logo: , - website: "https://mixpanel.com", - verificationUrl: "https://mixpanel.com/pricing", - tagline: { - status: "strong", - details: "Product analytics for mobile and web applications", - }, - features: { - autoCapture: { status: "partial", details: "Limited auto-capture" }, - customEvents: { - status: "strong", - details: "Comprehensive event tracking", - }, - userProperties: { status: "strong", details: "User profiles & traits" }, - groupAnalytics: { status: "strong", details: "Group analytics" }, - retroactiveAnalysis: { - status: "strong", - details: "Retroactive event definitions", - }, - funnels: { status: "strong", details: "Advanced funnel analysis" }, - retention: { status: "strong", details: "Retention reports" }, - cohorts: { status: "strong", details: "Behavioral cohorts" }, - pathAnalysis: { status: "strong", details: "Flow analysis" }, - trends: { status: "strong", details: "Trend analysis" }, - dashboards: { status: "strong", details: "Custom dashboards" }, - realtime: { status: "strong", details: "Live view" }, - customReports: { status: "strong", details: "Custom reports" }, - dataExploration: { status: "strong", details: "Visual exploration" }, - alerts: { status: "strong", details: "Custom alerts" }, - sessionReplay: { - status: "strong", - details: "Session Replay (Growth plan, 20K free replays/mo)", - }, - heatmaps: { status: "none", details: "Not available" }, - userProfiles: { status: "strong", details: "User profiles" }, - userJourneys: { status: "strong", details: "User flows" }, - attribution: { status: "strong", details: "Impact analysis" }, - abTesting: { status: "none", details: "Not built-in" }, - featureFlags: { status: "none", details: "Not built-in" }, - experiments: { status: "none", details: "Via third-party" }, - statisticalAnalysis: { - status: "partial", - details: "Basic significance testing", - }, - sdkLanguages: { - status: "strong", - details: "20+ languages (JS, Python, Swift, etc.)", - }, - apiAccess: { status: "strong", details: "Data & query API" }, - dataWarehouse: { - status: "strong", - details: "Data pipelines & exports", - }, - sqlAccess: { status: "strong", details: "JQL (Mixpanel Query Language)" }, - documentation: { status: "strong", details: "Comprehensive docs" }, - gdprCompliant: { status: "strong", details: "GDPR compliant" }, - cookieless: { status: "partial", details: "Cookie-based default" }, - dataResidency: { status: "strong", details: "US & EU data centers" }, - anonymization: { status: "strong", details: "Data deletion tools" }, - compliance: { status: "strong", details: "SOC 2, GDPR, CCPA" }, - freeTier: { - status: "strong", - details: "Free up to 1M events/month, 20K session replays", - }, - pricingModel: { - status: "strong", - details: "Growth: $0.28 per 1K events after 1M free", - }, - openSource: { status: "none", details: "Proprietary" }, - selfHosted: { status: "none", details: "Cloud-only" }, - cloudHosted: { status: "strong", details: "Fully managed SaaS" }, - cdp: { status: "strong", details: "Segment, mParticle" }, - marketing: { status: "strong", details: "Salesforce, Marketo, Braze" }, - datatools: { - status: "strong", - details: "Snowflake, BigQuery, Redshift", - }, - webhooks: { status: "strong", details: "Webhooks available" }, - }, - }, - { - name: "Amplitude", - logo: , - website: "https://amplitude.com", - verificationUrl: "https://amplitude.com/pricing", - tagline: { - status: "strong", - details: "Digital analytics platform for product teams", - }, - features: { - autoCapture: { status: "partial", details: "Limited auto-tracking" }, - customEvents: { status: "strong", details: "Custom event tracking" }, - userProperties: { status: "strong", details: "User properties" }, - groupAnalytics: { status: "strong", details: "Account-level analytics" }, - retroactiveAnalysis: { - status: "strong", - details: "Govern events retroactively", - }, - funnels: { status: "strong", details: "Conversion funnels" }, - retention: { status: "strong", details: "Retention analysis" }, - cohorts: { status: "strong", details: "Behavioral cohorts" }, - pathAnalysis: { status: "strong", details: "Pathfinder analysis" }, - trends: { status: "strong", details: "Event segmentation" }, - dashboards: { status: "strong", details: "Custom dashboards" }, - realtime: { status: "partial", details: "Near real-time" }, - customReports: { status: "strong", details: "Saved reports" }, - dataExploration: { - status: "strong", - details: "Amplitude Analytics UI", - }, - alerts: { status: "strong", details: "Anomaly detection" }, - sessionReplay: { - status: "strong", - details: "Session Replay (via acquisition)", - }, - heatmaps: { status: "none", details: "Not available" }, - userProfiles: { status: "strong", details: "User lookup" }, - userJourneys: { status: "strong", details: "User journey maps" }, - attribution: { status: "strong", details: "Impact analysis" }, - abTesting: { status: "strong", details: "Amplitude Experiment" }, - featureFlags: { status: "strong", details: "Feature flags included" }, - experiments: { status: "strong", details: "Full experimentation" }, - statisticalAnalysis: { - status: "strong", - details: "Sequential testing", - }, - sdkLanguages: { - status: "strong", - details: "15+ languages (JS, iOS, Android, etc.)", - }, - apiAccess: { status: "strong", details: "REST & GraphQL APIs" }, - dataWarehouse: { status: "strong", details: "Data streaming" }, - sqlAccess: { status: "partial", details: "Limited SQL access" }, - documentation: { status: "strong", details: "Detailed documentation" }, - gdprCompliant: { status: "strong", details: "GDPR compliant" }, - cookieless: { status: "partial", details: "Cookie-based" }, - dataResidency: { status: "strong", details: "Multi-region support" }, - anonymization: { status: "strong", details: "User deletion" }, - compliance: { status: "strong", details: "SOC 2, GDPR, HIPAA" }, - freeTier: { - status: "strong", - details: "Starter: 50K MTUs, up to 10M events/mo", - }, - pricingModel: { - status: "strong", - details: "Plus: $49/mo for 300K MTUs at $0.049/MTU", - }, - openSource: { status: "none", details: "Proprietary" }, - selfHosted: { status: "none", details: "Cloud-only" }, - cloudHosted: { status: "strong", details: "Fully managed" }, - cdp: { status: "strong", details: "Segment, mParticle, Tealium" }, - marketing: { status: "strong", details: "Salesforce, Braze, Iterable" }, - datatools: { - status: "strong", - details: "Snowflake, BigQuery, S3", - }, - webhooks: { status: "strong", details: "Cohort syncing" }, - }, - }, - { - name: "Heap", - logo: , - website: "https://heap.io", - verificationUrl: "https://heap.io/pricing", - tagline: { - status: "strong", - details: "Digital insights platform with auto-capture", - }, - features: { - autoCapture: { - status: "strong", - details: "Full auto-capture, no code needed", - }, - customEvents: { status: "strong", details: "Custom events" }, - userProperties: { status: "strong", details: "User properties" }, - groupAnalytics: { status: "strong", details: "Account analytics" }, - retroactiveAnalysis: { - status: "strong", - details: "Define events retroactively", - }, - funnels: { status: "strong", details: "Conversion funnels" }, - retention: { status: "strong", details: "Retention analysis" }, - cohorts: { status: "strong", details: "User segments" }, - pathAnalysis: { status: "strong", details: "Journey analysis" }, - trends: { status: "strong", details: "Event trends" }, - dashboards: { status: "strong", details: "Custom dashboards" }, - realtime: { status: "partial", details: "Near real-time" }, - customReports: { status: "strong", details: "Custom reports" }, - dataExploration: { status: "strong", details: "Visual builder" }, - alerts: { status: "partial", details: "Basic alerts" }, - sessionReplay: { - status: "strong", - details: "Session replay included", - }, - heatmaps: { status: "strong", details: "Heatmaps & clickmaps" }, - userProfiles: { status: "strong", details: "Individual profiles" }, - userJourneys: { status: "strong", details: "User journeys" }, - attribution: { status: "partial", details: "Basic attribution" }, - abTesting: { status: "none", details: "Via integrations" }, - featureFlags: { status: "none", details: "Not built-in" }, - experiments: { status: "none", details: "Third-party required" }, - statisticalAnalysis: { - status: "partial", - details: "Basic significance", - }, - sdkLanguages: { - status: "strong", - details: "Web, iOS, Android SDKs", - }, - apiAccess: { status: "strong", details: "REST API" }, - dataWarehouse: { status: "strong", details: "Data pipeline" }, - sqlAccess: { status: "strong", details: "Heap SQL" }, - documentation: { status: "strong", details: "Good documentation" }, - gdprCompliant: { status: "strong", details: "GDPR compliant" }, - cookieless: { status: "partial", details: "Cookie-based" }, - dataResidency: { status: "partial", details: "US-based" }, - anonymization: { status: "strong", details: "User deletion" }, - compliance: { status: "strong", details: "SOC 2, GDPR" }, - freeTier: { status: "strong", details: "Free plan up to 10k sessions" }, - pricingModel: { - status: "strong", - details: "Session-based pricing, custom quotes", - }, - openSource: { status: "none", details: "Proprietary" }, - selfHosted: { status: "none", details: "Cloud-only" }, - cloudHosted: { status: "strong", details: "Fully managed" }, - cdp: { status: "strong", details: "Segment integration" }, - marketing: { status: "strong", details: "Salesforce, Marketo" }, - datatools: { status: "strong", details: "Snowflake, Redshift" }, - webhooks: { status: "partial", details: "Limited webhooks" }, - }, - }, - { - name: "Google Analytics 4", - logo: , - website: "https://analytics.google.com", - verificationUrl: "https://support.google.com/analytics/answer/9306384", - tagline: { - status: "strong", - details: "Free web analytics from Google with ML insights", - }, - features: { - autoCapture: { - status: "strong", - details: "Enhanced measurement auto-tracking", - }, - customEvents: { status: "strong", details: "Custom events" }, - userProperties: { status: "strong", details: "User properties" }, - groupAnalytics: { status: "partial", details: "Limited groups" }, - retroactiveAnalysis: { - status: "partial", - details: "Limited retroactive changes", - }, - funnels: { status: "strong", details: "Funnel exploration" }, - retention: { status: "strong", details: "User retention" }, - cohorts: { status: "strong", details: "Audiences/cohorts" }, - pathAnalysis: { status: "strong", details: "Path exploration" }, - trends: { status: "strong", details: "Event trends" }, - dashboards: { status: "strong", details: "Custom reports & dashboards" }, - realtime: { status: "strong", details: "Real-time reporting" }, - customReports: { status: "strong", details: "Explorations" }, - dataExploration: { status: "strong", details: "Analysis Hub" }, - alerts: { status: "strong", details: "Custom alerts" }, - sessionReplay: { status: "none", details: "Not available" }, - heatmaps: { status: "none", details: "Not built-in" }, - userProfiles: { status: "partial", details: "User explorer" }, - userJourneys: { status: "strong", details: "User journey" }, - attribution: { - status: "strong", - details: "Data-driven attribution", - }, - abTesting: { status: "none", details: "Use Google Optimize" }, - featureFlags: { status: "none", details: "Not available" }, - experiments: { status: "partial", details: "Via Google Optimize" }, - statisticalAnalysis: { - status: "partial", - details: "Basic statistics", - }, - sdkLanguages: { - status: "strong", - details: "Web, iOS, Android SDKs", - }, - apiAccess: { status: "strong", details: "Data API & Admin API" }, - dataWarehouse: { - status: "strong", - details: "BigQuery export (paid)", - }, - sqlAccess: { - status: "strong", - details: "SQL via BigQuery export", - }, - documentation: { status: "strong", details: "Extensive docs" }, - gdprCompliant: { status: "strong", details: "GDPR features" }, - cookieless: { - status: "partial", - details: "Cookie-based, can disable", - }, - dataResidency: { - status: "partial", - details: "Limited region control", - }, - anonymization: { status: "strong", details: "IP anonymization" }, - compliance: { - status: "strong", - details: "ISO 27001, SOC 2/3", - }, - freeTier: { - status: "strong", - details: "Completely free (10M events/month)", - }, - pricingModel: { - status: "strong", - details: "Free, GA 360 for enterprise", - }, - openSource: { status: "none", details: "Proprietary" }, - selfHosted: { status: "none", details: "Cloud-only" }, - cloudHosted: { status: "strong", details: "Google Cloud" }, - cdp: { status: "partial", details: "Limited CDP features" }, - marketing: { - status: "strong", - details: "Google Ads, Search Console", - }, - datatools: { status: "strong", details: "BigQuery, Looker Studio" }, - webhooks: { status: "partial", details: "Limited webhooks" }, - }, - }, - { - name: "Pendo", - logo: , - website: "https://pendo.io", - verificationUrl: "https://www.pendo.io/pricing", - tagline: { - status: "strong", - details: "Product experience platform with analytics and guidance", - }, - features: { - autoCapture: { - status: "strong", - details: "Auto-capture page views & clicks", - }, - customEvents: { status: "strong", details: "Track events & features" }, - userProperties: { status: "strong", details: "Visitor metadata" }, - groupAnalytics: { status: "strong", details: "Account-level analytics" }, - retroactiveAnalysis: { - status: "strong", - details: "Retroactive event tagging", - }, - funnels: { status: "strong", details: "Funnel reports" }, - retention: { status: "strong", details: "Retention analysis" }, - cohorts: { status: "strong", details: "Segments" }, - pathAnalysis: { status: "strong", details: "Path analysis" }, - trends: { status: "strong", details: "Usage trends" }, - dashboards: { status: "strong", details: "Custom dashboards" }, - realtime: { status: "partial", details: "Near real-time" }, - customReports: { status: "strong", details: "Custom reports" }, - dataExploration: { status: "strong", details: "Report builder" }, - alerts: { status: "partial", details: "Basic alerts" }, - sessionReplay: { status: "none", details: "Not available" }, - heatmaps: { status: "none", details: "Not built-in" }, - userProfiles: { status: "strong", details: "Visitor profiles" }, - userJourneys: { status: "strong", details: "User paths" }, - attribution: { status: "partial", details: "Feature adoption" }, - abTesting: { status: "none", details: "Not built-in" }, - featureFlags: { status: "none", details: "Not built-in" }, - experiments: { status: "none", details: "Via third-party" }, - statisticalAnalysis: { status: "none", details: "Basic metrics only" }, - sdkLanguages: { - status: "strong", - details: "Web, iOS, Android SDKs", - }, - apiAccess: { status: "strong", details: "REST API" }, - dataWarehouse: { status: "strong", details: "Data sync" }, - sqlAccess: { status: "none", details: "Not available" }, - documentation: { status: "strong", details: "Good documentation" }, - gdprCompliant: { status: "strong", details: "GDPR compliant" }, - cookieless: { status: "partial", details: "Cookie-based" }, - dataResidency: { status: "partial", details: "US & EU" }, - anonymization: { status: "strong", details: "Data anonymization" }, - compliance: { status: "strong", details: "SOC 2, GDPR" }, - freeTier: { status: "strong", details: "Free Starter plan" }, - pricingModel: { - status: "partial", - details: "Custom pricing, no public tiers", - }, - openSource: { status: "none", details: "Proprietary" }, - selfHosted: { status: "none", details: "Cloud-only" }, - cloudHosted: { status: "strong", details: "Fully managed" }, - cdp: { status: "strong", details: "Segment integration" }, - marketing: { status: "strong", details: "Salesforce, Gainsight" }, - datatools: { status: "strong", details: "Data warehouse sync" }, - webhooks: { status: "strong", details: "Webhooks available" }, - }, - }, - { - name: "Segment", - logo: , - website: "https://segment.com", - verificationUrl: "https://segment.com/pricing", - tagline: { - status: "strong", - details: "Customer data platform with analytics capabilities", - }, - features: { - autoCapture: { status: "none", details: "Manual instrumentation" }, - customEvents: { - status: "strong", - details: "Track any custom event", - }, - userProperties: { status: "strong", details: "User traits" }, - groupAnalytics: { status: "strong", details: "Group calls" }, - retroactiveAnalysis: { status: "none", details: "Not available" }, - funnels: { status: "partial", details: "Via Personas" }, - retention: { status: "partial", details: "Via Personas" }, - cohorts: { status: "strong", details: "Audiences (Personas)" }, - pathAnalysis: { status: "none", details: "Via downstream tools" }, - trends: { status: "partial", details: "Basic event explorer" }, - dashboards: { status: "partial", details: "Limited dashboards" }, - realtime: { status: "strong", details: "Real-time data flow" }, - customReports: { status: "partial", details: "Via Personas" }, - dataExploration: { - status: "partial", - details: "Event explorer", - }, - alerts: { status: "partial", details: "Data quality alerts" }, - sessionReplay: { status: "none", details: "Not built-in" }, - heatmaps: { status: "none", details: "Not available" }, - userProfiles: { - status: "strong", - details: "Unified profiles (Personas)", - }, - userJourneys: { status: "partial", details: "Via integrations" }, - attribution: { status: "none", details: "Via downstream tools" }, - abTesting: { status: "none", details: "Via integrations" }, - featureFlags: { status: "none", details: "Via integrations" }, - experiments: { status: "none", details: "Via integrations" }, - statisticalAnalysis: { status: "none", details: "Not built-in" }, - sdkLanguages: { - status: "strong", - details: "25+ languages & platforms", - }, - apiAccess: { status: "strong", details: "HTTP API & GraphQL" }, - dataWarehouse: { - status: "strong", - details: "Warehouse sync & reverse ETL", - }, - sqlAccess: { status: "none", details: "Not available" }, - documentation: { status: "strong", details: "Excellent documentation" }, - gdprCompliant: { status: "strong", details: "GDPR compliant" }, - cookieless: { status: "partial", details: "Depends on implementation" }, - dataResidency: { status: "strong", details: "Regional workspaces" }, - anonymization: { status: "strong", details: "User deletion" }, - compliance: { status: "strong", details: "SOC 2, GDPR, HIPAA" }, - freeTier: { - status: "strong", - details: "Free up to 1k MTU (visitors)", - }, - pricingModel: { - status: "strong", - details: "$120/mo Team, custom Business", - }, - openSource: { status: "partial", details: "Some open source libraries" }, - selfHosted: { status: "none", details: "Cloud-only" }, - cloudHosted: { status: "strong", details: "Fully managed" }, - cdp: { - status: "strong", - details: "IS a CDP - 450+ integrations", - }, - marketing: { - status: "strong", - details: "All major marketing tools", - }, - datatools: { - status: "strong", - details: "Snowflake, BigQuery, Redshift", - }, - webhooks: { status: "strong", details: "Destinations & webhooks" }, - }, - }, - { - name: "Plausible", - logo: , - website: "https://plausible.io", - verificationUrl: "https://plausible.io/pricing", - tagline: { - status: "strong", - details: "Privacy-first, lightweight, open source web analytics", - }, - features: { - autoCapture: { - status: "strong", - details: "Auto-track pageviews", - }, - customEvents: { status: "strong", details: "Custom events & goals" }, - userProperties: { status: "none", details: "No user tracking" }, - groupAnalytics: { status: "none", details: "Not available" }, - retroactiveAnalysis: { status: "none", details: "Not available" }, - funnels: { status: "strong", details: "Funnel analysis" }, - retention: { status: "none", details: "Not available" }, - cohorts: { status: "none", details: "Not available" }, - pathAnalysis: { status: "none", details: "Not available" }, - trends: { status: "strong", details: "Traffic trends" }, - dashboards: { status: "strong", details: "Simple dashboard" }, - realtime: { status: "strong", details: "Real-time visitors" }, - customReports: { status: "partial", details: "Filtered views" }, - dataExploration: { - status: "partial", - details: "Basic filtering", - }, - alerts: { status: "strong", details: "Traffic spike alerts" }, - sessionReplay: { status: "none", details: "Not available" }, - heatmaps: { status: "none", details: "Not available" }, - userProfiles: { status: "none", details: "Privacy-focused, no profiles" }, - userJourneys: { status: "none", details: "Not tracked" }, - attribution: { status: "strong", details: "UTM tracking" }, - abTesting: { status: "none", details: "Not built-in" }, - featureFlags: { status: "none", details: "Not available" }, - experiments: { status: "none", details: "Not available" }, - statisticalAnalysis: { status: "none", details: "Basic stats only" }, - sdkLanguages: { - status: "partial", - details: "JavaScript snippet, limited SDKs", - }, - apiAccess: { status: "strong", details: "Stats API & Events API" }, - dataWarehouse: { status: "partial", details: "CSV export" }, - sqlAccess: { status: "none", details: "Not available" }, - documentation: { status: "strong", details: "Clear documentation" }, - gdprCompliant: { - status: "strong", - details: "GDPR compliant, no cookies", - }, - cookieless: { - status: "strong", - details: "Completely cookieless", - }, - dataResidency: { status: "strong", details: "EU or US hosting" }, - anonymization: { - status: "strong", - details: "Anonymous by design", - }, - compliance: { status: "strong", details: "GDPR, PECR compliant" }, - freeTier: { status: "none", details: "30-day trial only" }, - pricingModel: { - status: "strong", - details: "$9/mo for 10k pageviews, scales up", - }, - openSource: { - status: "strong", - details: "AGPL license", - }, - selfHosted: { - status: "strong", - details: "Docker self-hosting", - }, - cloudHosted: { status: "strong", details: "Plausible Cloud" }, - cdp: { status: "none", details: "Not applicable" }, - marketing: { status: "partial", details: "Limited integrations" }, - datatools: { status: "partial", details: "CSV export only" }, - webhooks: { status: "partial", details: "Limited webhooks" }, - }, - }, -]; - -export const analyticsComparisonConfig: ComparisonConfig = { - title: "analytics.compare", - subtitle: "⋅ Easily compare different product analytics providers", - icon: , - providers, - categories, - lastUpdated: "2025-10-03", -}; diff --git a/src/data/analytics/amplitude.tsx b/src/data/analytics/amplitude.tsx new file mode 100644 index 0000000..e5aa62d --- /dev/null +++ b/src/data/analytics/amplitude.tsx @@ -0,0 +1,95 @@ +import type { Provider } from "../../types/comparison"; + +function AmplitudeLogo() { + return ( + + Amplitude + + + + ); +} + +export const amplitude: Provider = { + name: "Amplitude", + logo: , + website: "https://amplitude.com", + tagline: { + status: "strong", + details: "Digital analytics platform for product teams", + }, + features: { + autoCapture: { status: "partial", details: "Limited auto-tracking" }, + customEvents: { status: "strong", details: "Custom event tracking" }, + userProperties: { status: "strong", details: "User properties" }, + groupAnalytics: { status: "strong", details: "Account-level analytics" }, + retroactiveAnalysis: { + status: "strong", + details: "Govern events retroactively", + }, + funnels: { status: "strong", details: "Conversion funnels" }, + retention: { status: "strong", details: "Retention analysis" }, + cohorts: { status: "strong", details: "Behavioral cohorts" }, + pathAnalysis: { status: "strong", details: "Pathfinder analysis" }, + trends: { status: "strong", details: "Event segmentation" }, + dashboards: { status: "strong", details: "Custom dashboards" }, + realtime: { status: "partial", details: "Near real-time" }, + customReports: { status: "strong", details: "Saved reports" }, + dataExploration: { + status: "strong", + details: "Amplitude Analytics UI", + }, + alerts: { status: "strong", details: "Anomaly detection" }, + sessionReplay: { + status: "strong", + details: "Session Replay (via acquisition)", + }, + heatmaps: { status: "none", details: "Not available" }, + userProfiles: { status: "strong", details: "User lookup" }, + userJourneys: { status: "strong", details: "User journey maps" }, + attribution: { status: "strong", details: "Impact analysis" }, + abTesting: { status: "strong", details: "Amplitude Experiment" }, + featureFlags: { status: "strong", details: "Feature flags included" }, + experiments: { status: "strong", details: "Full experimentation" }, + statisticalAnalysis: { + status: "strong", + details: "Sequential testing", + }, + sdkLanguages: { + status: "strong", + details: "15+ languages (JS, iOS, Android, etc.)", + }, + apiAccess: { status: "strong", details: "REST & GraphQL APIs" }, + dataWarehouse: { status: "strong", details: "Data streaming" }, + sqlAccess: { status: "partial", details: "Limited SQL access" }, + documentation: { status: "strong", details: "Detailed documentation" }, + gdprCompliant: { status: "strong", details: "GDPR compliant" }, + cookieless: { status: "partial", details: "Cookie-based" }, + dataResidency: { status: "strong", details: "Multi-region support" }, + anonymization: { status: "strong", details: "User deletion" }, + compliance: { status: "strong", details: "SOC 2, GDPR, HIPAA" }, + freeTier: { + status: "strong", + details: "Starter: 50K MTUs (Monthly Tracked Users), up to 10M events", + }, + pricingModel: { + status: "strong", + details: "Plus: $49/mo for 300K MTUs at $0.049/MTU", + }, + openSource: { status: "none", details: "Proprietary" }, + selfHosted: { status: "none", details: "Cloud-only" }, + cloudHosted: { status: "strong", details: "Fully managed" }, + cdp: { status: "strong", details: "Segment, mParticle, Tealium" }, + marketing: { status: "strong", details: "Salesforce, Braze, Iterable" }, + datatools: { + status: "strong", + details: "Snowflake, BigQuery, S3", + }, + webhooks: { status: "strong", details: "Cohort syncing" }, + }, +}; diff --git a/src/data/analytics/ga4.tsx b/src/data/analytics/ga4.tsx new file mode 100644 index 0000000..058e11c --- /dev/null +++ b/src/data/analytics/ga4.tsx @@ -0,0 +1,93 @@ +import type { Provider } from "../../types/comparison"; + +function GoogleAnalyticsLogo() { + return ( + + Google Analytics 4 + + + + + + ); +} + +export const ga4: Provider = { + name: "Google Analytics 4", + logo: , + website: "https://analytics.google.com", + tagline: { + status: "strong", + details: "Industry-standard web analytics", + }, + features: { + autoCapture: { status: "partial", details: "Enhanced measurement" }, + customEvents: { status: "strong", details: "Custom event tracking" }, + userProperties: { status: "strong", details: "User properties" }, + groupAnalytics: { status: "none", details: "Not available" }, + retroactiveAnalysis: { + status: "none", + details: "Not available", + }, + funnels: { status: "strong", details: "Funnel exploration" }, + retention: { status: "partial", details: "Basic retention" }, + cohorts: { status: "strong", details: "Audiences" }, + pathAnalysis: { status: "strong", details: "Path exploration" }, + trends: { status: "strong", details: "Event trends" }, + dashboards: { status: "strong", details: "Custom dashboards" }, + realtime: { status: "strong", details: "Real-time reports" }, + customReports: { status: "strong", details: "Custom reports" }, + dataExploration: { status: "strong", details: "Explore UI" }, + alerts: { status: "strong", details: "Custom alerts" }, + sessionReplay: { status: "none", details: "Not available" }, + heatmaps: { status: "none", details: "Not available" }, + userProfiles: { status: "none", details: "Not available" }, + userJourneys: { status: "strong", details: "User paths" }, + attribution: { status: "strong", details: "Attribution modeling" }, + abTesting: { status: "partial", details: "Via Google Optimize" }, + featureFlags: { status: "none", details: "Not available" }, + experiments: { status: "partial", details: "Via Google Optimize" }, + statisticalAnalysis: { + status: "partial", + details: "Basic stats", + }, + sdkLanguages: { + status: "strong", + details: "gtag.js, Firebase SDKs", + }, + apiAccess: { status: "strong", details: "Data API" }, + dataWarehouse: { status: "strong", details: "BigQuery export" }, + sqlAccess: { status: "strong", details: "BigQuery SQL" }, + documentation: { status: "strong", details: "Extensive docs" }, + gdprCompliant: { status: "strong", details: "GDPR features" }, + cookieless: { status: "partial", details: "Cookie-based" }, + dataResidency: { status: "partial", details: "Google-controlled" }, + anonymization: { status: "strong", details: "IP anonymization" }, + compliance: { status: "strong", details: "Google compliance" }, + freeTier: { status: "strong", details: "Free: 10M events/month" }, + pricingModel: { + status: "strong", + details: "GA4 360: Custom pricing", + }, + openSource: { status: "none", details: "Proprietary" }, + selfHosted: { status: "none", details: "Cloud-only" }, + cloudHosted: { status: "strong", details: "Google Cloud" }, + cdp: { status: "partial", details: "Limited integrations" }, + marketing: { status: "strong", details: "Google Ads, Search Console" }, + datatools: { status: "strong", details: "BigQuery, Data Studio" }, + webhooks: { status: "none", details: "Not available" }, + }, +}; diff --git a/src/data/analytics/heap.tsx b/src/data/analytics/heap.tsx new file mode 100644 index 0000000..4c3b365 --- /dev/null +++ b/src/data/analytics/heap.tsx @@ -0,0 +1,99 @@ +import type { Provider } from "../../types/comparison"; + +function HeapLogo() { + return ( + + Heap + + + + ); +} + +export const heap: Provider = { + name: "Heap", + logo: , + website: "https://heap.io", + tagline: { + status: "strong", + details: "Automatic event tracking for product analytics", + }, + features: { + autoCapture: { + status: "strong", + details: "Complete auto-capture of all events", + }, + customEvents: { status: "strong", details: "Custom event tracking" }, + userProperties: { status: "strong", details: "User properties" }, + groupAnalytics: { + status: "strong", + details: "Account-level analytics", + }, + retroactiveAnalysis: { + status: "strong", + details: "Define events retroactively", + }, + funnels: { status: "strong", details: "Conversion funnels" }, + retention: { status: "strong", details: "Retention analysis" }, + cohorts: { status: "strong", details: "User segments" }, + pathAnalysis: { status: "strong", details: "User journeys" }, + trends: { status: "strong", details: "Event trends" }, + dashboards: { status: "strong", details: "Custom dashboards" }, + realtime: { status: "partial", details: "Near real-time" }, + customReports: { status: "strong", details: "Saved reports" }, + dataExploration: { status: "strong", details: "Heap Explore UI" }, + alerts: { status: "strong", details: "Anomaly detection" }, + sessionReplay: { status: "strong", details: "Session replay" }, + heatmaps: { status: "strong", details: "Click heatmaps" }, + userProfiles: { status: "strong", details: "User profiles" }, + userJourneys: { status: "strong", details: "User paths" }, + attribution: { status: "strong", details: "Impact analysis" }, + abTesting: { status: "partial", details: "Basic testing" }, + featureFlags: { status: "none", details: "Not available" }, + experiments: { status: "partial", details: "Limited experiments" }, + statisticalAnalysis: { + status: "partial", + details: "Basic stats", + }, + sdkLanguages: { + status: "strong", + details: "10+ languages (JS, iOS, Android, etc.)", + }, + apiAccess: { status: "strong", details: "REST API" }, + dataWarehouse: { status: "strong", details: "Data warehouse sync" }, + sqlAccess: { status: "strong", details: "SQL access" }, + documentation: { status: "strong", details: "Comprehensive docs" }, + gdprCompliant: { status: "strong", details: "GDPR compliant" }, + cookieless: { status: "partial", details: "Cookie-based" }, + dataResidency: { status: "partial", details: "US, EU" }, + anonymization: { status: "strong", details: "Data deletion" }, + compliance: { status: "strong", details: "SOC 2, GDPR" }, + freeTier: { + status: "strong", + details: "Free: 10K sessions/month", + }, + pricingModel: { + status: "strong", + details: "Growth: Starting at $3,600/year", + }, + openSource: { status: "none", details: "Proprietary" }, + selfHosted: { status: "none", details: "Cloud-only" }, + cloudHosted: { status: "strong", details: "Fully managed" }, + cdp: { status: "strong", details: "Segment, mParticle" }, + marketing: { status: "strong", details: "Salesforce, Marketo" }, + datatools: { + status: "strong", + details: "Snowflake, BigQuery, Redshift", + }, + webhooks: { status: "strong", details: "Webhooks" }, + }, +}; diff --git a/src/data/analytics/index.tsx b/src/data/analytics/index.tsx new file mode 100644 index 0000000..1ba1017 --- /dev/null +++ b/src/data/analytics/index.tsx @@ -0,0 +1,157 @@ +import RiBarChartLine from "remixicon-react/BarChartLineIcon"; +import RiCodeLine from "remixicon-react/CodeLineIcon"; +import RiDatabaseLine from "remixicon-react/DatabaseLineIcon"; +import RiLineChartLine from "remixicon-react/LineChartLineIcon"; +import RiMoneyDollarCircleLine from "remixicon-react/MoneyDollarCircleLineIcon"; +import RiPlugLine from "remixicon-react/PlugLineIcon"; +import RiServerLine from "remixicon-react/ServerLineIcon"; +import RiShieldCheckLine from "remixicon-react/ShieldCheckLineIcon"; +import RiUserLine from "remixicon-react/UserLineIcon"; +import type { Category, ComparisonConfig } from "../../types/comparison"; +import { amplitude } from "./amplitude"; +import { ga4 } from "./ga4"; +import { heap } from "./heap"; +import { mixpanel } from "./mixpanel"; +import { pendo } from "./pendo"; +import { plausible } from "./plausible"; +// Import all analytics providers +import { posthog } from "./posthog"; +import { segment } from "./segment"; + +// Feature Categories +export const categories: Category[] = [ + { + id: "tracking", + label: "Event Tracking & Data Collection", + icon: , + features: { + autoCapture: "Auto-capture Events", + customEvents: "Custom Event Tracking", + userProperties: "User Properties", + groupAnalytics: "Group/Account Analytics", + retroactiveAnalysis: "Retroactive Event Analysis", + }, + }, + { + id: "analysis", + label: "Analysis & Insights", + icon: , + features: { + funnels: "Funnels", + retention: "Retention Analysis", + cohorts: "Cohort Analysis", + pathAnalysis: "Path/Flow Analysis", + trends: "Trend Analysis", + }, + }, + { + id: "visualization", + label: "Visualization & Reporting", + icon: , + features: { + dashboards: "Custom Dashboards", + realtime: "Real-time Analytics", + customReports: "Custom Reports", + dataExploration: "Data Exploration Tools", + alerts: "Alerts & Notifications", + }, + }, + { + id: "users", + label: "User Analytics", + icon: , + features: { + sessionReplay: "Session Replay", + heatmaps: "Heatmaps", + userProfiles: "User Profiles", + userJourneys: "User Journey Mapping", + attribution: "Attribution Modeling", + }, + }, + { + id: "experimentation", + label: "Experimentation", + icon: , + features: { + abTesting: "A/B Testing", + featureFlags: "Feature Flags", + experiments: "Experimentation Platform", + statisticalAnalysis: "Statistical Significance", + }, + }, + { + id: "developerExperience", + label: "Developer Experience", + icon: , + features: { + sdkLanguages: "SDK Languages", + apiAccess: "API Access", + dataWarehouse: "Data Warehouse Export", + sqlAccess: "SQL Query Interface", + documentation: "Documentation Quality", + }, + }, + { + id: "privacy", + label: "Privacy & Compliance", + icon: , + features: { + gdprCompliant: "GDPR Compliant", + cookieless: "Cookieless Tracking", + dataResidency: "Data Residency Options", + anonymization: "Data Anonymization", + compliance: "Compliance Certifications", + }, + }, + { + id: "pricing", + label: "Pricing", + icon: , + features: { + freeTier: "Free Tier", + pricingModel: "Pricing Model", + }, + }, + { + id: "deployment", + label: "Deployment", + icon: , + features: { + openSource: "Open Source", + selfHosted: "Self-Hosted Option", + cloudHosted: "Cloud Hosted", + }, + }, + { + id: "integrations", + label: "Integrations", + icon: , + features: { + cdp: "CDP Integrations", + marketing: "Marketing Tools", + datatools: "Data Tools (Warehouses, BI)", + webhooks: "Webhooks & APIs", + }, + }, +]; + +// Providers array +export const providers = [ + posthog, + mixpanel, + amplitude, + heap, + ga4, + pendo, + segment, + plausible, +]; + +export const analyticsComparisonConfig: ComparisonConfig = { + title: "analytics.compare", + subtitle: "⋅ Compare analytics platforms for product and digital analytics", + icon: , + providers, + categories, + lastUpdated: "2025-10-03", +}; diff --git a/src/data/analytics/mixpanel.tsx b/src/data/analytics/mixpanel.tsx new file mode 100644 index 0000000..8168465 --- /dev/null +++ b/src/data/analytics/mixpanel.tsx @@ -0,0 +1,245 @@ +import type { Provider } from "../../types/comparison"; + +function MixpanelLogo() { + return ( + + Mixpanel + + + + + + ); +} + +export const mixpanel: Provider = { + name: "Mixpanel", + logo: , + website: "https://mixpanel.com", + tagline: { + status: "strong", + details: "Product analytics for mobile and web applications", + }, + features: { + autoCapture: { + status: "partial", + details: "Limited auto-capture", + reference: "https://mixpanel.com/pricing" + }, + customEvents: { + status: "strong", + details: "Comprehensive event tracking", + reference: "https://mixpanel.com/pricing" + }, + userProperties: { + status: "strong", + details: "User profiles & traits", + reference: "https://mixpanel.com/pricing" + }, + groupAnalytics: { + status: "strong", + details: "Group analytics", + reference: "https://mixpanel.com/pricing" + }, + retroactiveAnalysis: { + status: "strong", + details: "Retroactive event definitions", + reference: "https://mixpanel.com/pricing" + }, + funnels: { + status: "strong", + details: "Advanced funnel analysis", + reference: "https://mixpanel.com/pricing" + }, + retention: { + status: "strong", + details: "Retention reports", + reference: "https://mixpanel.com/pricing" + }, + cohorts: { + status: "strong", + details: "Behavioral cohorts", + reference: "https://mixpanel.com/pricing" + }, + pathAnalysis: { + status: "strong", + details: "Flow analysis", + reference: "https://mixpanel.com/pricing" + }, + trends: { + status: "strong", + details: "Trend analysis", + reference: "https://mixpanel.com/pricing" + }, + dashboards: { + status: "strong", + details: "Custom dashboards", + reference: "https://mixpanel.com/pricing" + }, + realtime: { + status: "strong", + details: "Live view", + reference: "https://mixpanel.com/pricing" + }, + customReports: { + status: "strong", + details: "Custom reports", + reference: "https://mixpanel.com/pricing" + }, + dataExploration: { + status: "strong", + details: "Visual exploration", + reference: "https://mixpanel.com/pricing" + }, + alerts: { + status: "strong", + details: "Custom alerts", + reference: "https://mixpanel.com/pricing" + }, + sessionReplay: { + status: "strong", + details: "10K replays/mo free, 20K on Growth plan", + reference: "https://mixpanel.com/pricing" + }, + heatmaps: { + status: "none", + details: "Not available", + reference: "https://mixpanel.com/pricing" + }, + userProfiles: { + status: "strong", + details: "User profiles", + reference: "https://mixpanel.com/pricing" + }, + userJourneys: { + status: "strong", + details: "User flows", + reference: "https://mixpanel.com/pricing" + }, + attribution: { + status: "strong", + details: "Impact analysis", + reference: "https://mixpanel.com/pricing" + }, + abTesting: { + status: "none", + details: "Not built-in", + reference: "https://mixpanel.com/pricing" + }, + featureFlags: { + status: "none", + details: "Not built-in", + reference: "https://mixpanel.com/pricing" + }, + experiments: { + status: "none", + details: "Via third-party", + reference: "https://mixpanel.com/pricing" + }, + statisticalAnalysis: { + status: "partial", + details: "Basic significance testing", + reference: "https://mixpanel.com/pricing" + }, + sdkLanguages: { + status: "strong", + details: "20+ languages (JS, Python, Swift, etc.)", + reference: "https://docs.mixpanel.com/docs/sdks" + }, + apiAccess: { + status: "strong", + details: "Data & query API", + reference: "https://developer.mixpanel.com/reference/overview" + }, + dataWarehouse: { + status: "strong", + details: "Data pipelines & exports", + reference: "https://docs.mixpanel.com/docs/data-pipelines/integrations" + }, + sqlAccess: { + status: "strong", + details: "JQL (Mixpanel Query Language)", + reference: "https://docs.mixpanel.com/docs/data-pipelines/jql" + }, + documentation: { + status: "strong", + details: "Comprehensive docs", + reference: "https://docs.mixpanel.com" + }, + gdprCompliant: { + status: "strong", + details: "GDPR compliant", + reference: "https://mixpanel.com/legal/privacy-policy" + }, + cookieless: { + status: "partial", + details: "Cookie-based default", + reference: "https://docs.mixpanel.com/docs/privacy/cookies" + }, + dataResidency: { + status: "strong", + details: "US & EU data centers", + reference: "https://mixpanel.com/legal/privacy-policy" + }, + anonymization: { + status: "strong", + details: "Data deletion tools", + reference: "https://docs.mixpanel.com/docs/privacy/user-privacy" + }, + compliance: { + status: "strong", + details: "SOC 2, GDPR, CCPA", + reference: "https://mixpanel.com/legal/privacy-policy" + }, + freeTier: { + status: "strong", + details: "Free up to 1M events/month", + reference: "https://mixpanel.com/pricing" + }, + pricingModel: { + status: "strong", + details: "Growth: $0.28 per 1K events after 1M free", + reference: "https://mixpanel.com/pricing" + }, + openSource: { + status: "none", + details: "Proprietary", + reference: "https://mixpanel.com" + }, + selfHosted: { + status: "none", + details: "Cloud-only", + reference: "https://mixpanel.com/pricing" + }, + cloudHosted: { + status: "strong", + details: "Fully managed SaaS", + reference: "https://mixpanel.com/pricing" + }, + cdp: { + status: "strong", + details: "Segment, mParticle", + reference: "https://docs.mixpanel.com/docs/data-pipelines/integrations" + }, + marketing: { + status: "strong", + details: "Salesforce, Marketo, Braze", + reference: "https://docs.mixpanel.com/docs/data-pipelines/integrations" + }, + datatools: { + status: "strong", + details: "Snowflake, BigQuery, Redshift", + reference: "https://docs.mixpanel.com/docs/data-pipelines/integrations" + }, + webhooks: { + status: "strong", + details: "Webhooks available", + reference: "https://developer.mixpanel.com/reference/raw-data-export-api" + }, + }, +}; diff --git a/src/data/analytics/pendo.tsx b/src/data/analytics/pendo.tsx new file mode 100644 index 0000000..062a4c2 --- /dev/null +++ b/src/data/analytics/pendo.tsx @@ -0,0 +1,97 @@ +import type { Provider } from "../../types/comparison"; + +function PendoLogo() { + return ( + + Pendo + + + + + ); +} + +export const pendo: Provider = { + name: "Pendo", + logo: , + website: "https://pendo.io", + tagline: { + status: "strong", + details: "Product experience platform with analytics", + }, + features: { + autoCapture: { + status: "strong", + details: "Auto-capture all clicks", + }, + customEvents: { status: "strong", details: "Track events & metadata" }, + userProperties: { status: "strong", details: "User metadata" }, + groupAnalytics: { status: "strong", details: "Account-level data" }, + retroactiveAnalysis: { + status: "strong", + details: "Define events retroactively", + }, + funnels: { status: "strong", details: "Funnel analysis" }, + retention: { status: "strong", details: "Retention reports" }, + cohorts: { status: "strong", details: "Segments" }, + pathAnalysis: { status: "strong", details: "Path analysis" }, + trends: { status: "strong", details: "Usage trends" }, + dashboards: { status: "strong", details: "Custom dashboards" }, + realtime: { status: "partial", details: "Near real-time" }, + customReports: { status: "strong", details: "Report builder" }, + dataExploration: { status: "strong", details: "Pendo Analyze" }, + alerts: { status: "partial", details: "Basic alerts" }, + sessionReplay: { status: "strong", details: "Session replay" }, + heatmaps: { status: "strong", details: "Page heatmaps" }, + userProfiles: { status: "strong", details: "Visitor profiles" }, + userJourneys: { status: "strong", details: "User paths" }, + attribution: { status: "partial", details: "Feature adoption" }, + abTesting: { status: "partial", details: "Guide experiments" }, + featureFlags: { status: "none", details: "Not available" }, + experiments: { status: "partial", details: "Limited testing" }, + statisticalAnalysis: { + status: "partial", + details: "Basic stats", + }, + sdkLanguages: { + status: "strong", + details: "JS, iOS, Android, React Native", + }, + apiAccess: { status: "strong", details: "REST API" }, + dataWarehouse: { + status: "strong", + details: "Data Sync to warehouse", + }, + sqlAccess: { status: "none", details: "Not available" }, + documentation: { status: "strong", details: "Detailed docs" }, + gdprCompliant: { status: "strong", details: "GDPR compliant" }, + cookieless: { status: "partial", details: "Cookie-based" }, + dataResidency: { status: "partial", details: "US, EU" }, + anonymization: { status: "strong", details: "Data deletion" }, + compliance: { status: "strong", details: "SOC 2, GDPR" }, + freeTier: { status: "strong", details: "Starter: Free up to 500 MAUs" }, + pricingModel: { + status: "strong", + details: "Growth: Starting at $7,000/year", + }, + openSource: { status: "none", details: "Proprietary" }, + selfHosted: { status: "none", details: "Cloud-only" }, + cloudHosted: { status: "strong", details: "Fully managed" }, + cdp: { status: "partial", details: "Limited integrations" }, + marketing: { status: "partial", details: "Salesforce, HubSpot" }, + datatools: { + status: "strong", + details: "Snowflake, BigQuery, Redshift", + }, + webhooks: { status: "strong", details: "Webhooks" }, + }, +}; diff --git a/src/data/analytics/plausible.tsx b/src/data/analytics/plausible.tsx new file mode 100644 index 0000000..bd9df1f --- /dev/null +++ b/src/data/analytics/plausible.tsx @@ -0,0 +1,92 @@ +import type { Provider } from "../../types/comparison"; + +function PlausibleLogo() { + return ( + + Plausible + + + + ); +} + +export const plausible: Provider = { + name: "Plausible", + logo: , + website: "https://plausible.io", + tagline: { + status: "strong", + details: "Privacy-first, lightweight analytics", + }, + features: { + autoCapture: { status: "strong", details: "Auto-capture pageviews" }, + customEvents: { status: "strong", details: "Custom events" }, + userProperties: { status: "none", details: "Not available" }, + groupAnalytics: { status: "none", details: "Not available" }, + retroactiveAnalysis: { + status: "none", + details: "Not available", + }, + funnels: { status: "strong", details: "Funnel analysis" }, + retention: { status: "none", details: "Not available" }, + cohorts: { status: "none", details: "Not available" }, + pathAnalysis: { status: "none", details: "Not available" }, + trends: { status: "strong", details: "Traffic trends" }, + dashboards: { status: "strong", details: "Single dashboard" }, + realtime: { status: "strong", details: "Real-time visitors" }, + customReports: { status: "partial", details: "Saved filters" }, + dataExploration: { + status: "partial", + details: "Simple filtering", + }, + alerts: { status: "strong", details: "Traffic spike alerts" }, + sessionReplay: { status: "none", details: "Not available" }, + heatmaps: { status: "none", details: "Not available" }, + userProfiles: { status: "none", details: "Not available" }, + userJourneys: { status: "none", details: "Not available" }, + attribution: { status: "strong", details: "UTM tracking" }, + abTesting: { status: "none", details: "Not available" }, + featureFlags: { status: "none", details: "Not available" }, + experiments: { status: "none", details: "Not available" }, + statisticalAnalysis: { + status: "none", + details: "Not available", + }, + sdkLanguages: { + status: "partial", + details: "JS script + community SDKs", + }, + apiAccess: { status: "strong", details: "Stats & Events API" }, + dataWarehouse: { status: "none", details: "Not available" }, + sqlAccess: { status: "none", details: "Not available" }, + documentation: { status: "strong", details: "Clear docs" }, + gdprCompliant: { status: "strong", details: "GDPR by default" }, + cookieless: { status: "strong", details: "Cookieless tracking" }, + dataResidency: { status: "strong", details: "EU, US options" }, + anonymization: { status: "strong", details: "No PII collected" }, + compliance: { status: "strong", details: "GDPR, CCPA, PECR" }, + freeTier: { status: "none", details: "No free tier" }, + pricingModel: { + status: "strong", + details: "$9/mo for 10K pageviews", + }, + openSource: { status: "strong", details: "AGPLv3 license" }, + selfHosted: { status: "strong", details: "Self-hosted option" }, + cloudHosted: { status: "strong", details: "Managed cloud" }, + cdp: { status: "none", details: "Not available" }, + marketing: { status: "partial", details: "Limited integrations" }, + datatools: { status: "none", details: "Not available" }, + webhooks: { status: "none", details: "Not available" }, + }, +}; diff --git a/src/data/analytics/posthog.tsx b/src/data/analytics/posthog.tsx new file mode 100644 index 0000000..846dbd1 --- /dev/null +++ b/src/data/analytics/posthog.tsx @@ -0,0 +1,123 @@ +import type { Provider } from "../../types/comparison"; + +function PostHogLogo() { + return ( + + PostHog + + + + ); +} + +export const posthog: Provider = { + name: "PostHog", + logo: , + website: "https://posthog.com", + tagline: { + status: "strong", + details: "All-in-one product OS with analytics, session replay, and more", + }, + features: { + autoCapture: { + status: "strong", + details: "Automatic event capture without code", + }, + customEvents: { status: "strong", details: "Custom event tracking" }, + userProperties: { status: "strong", details: "User properties & traits" }, + groupAnalytics: { + status: "strong", + details: "Group analytics for B2B", + }, + retroactiveAnalysis: { + status: "strong", + details: "Query historical data retroactively", + }, + funnels: { status: "strong", details: "Conversion funnels" }, + retention: { status: "strong", details: "Retention analysis" }, + cohorts: { status: "strong", details: "User cohorts" }, + pathAnalysis: { status: "strong", details: "User path analysis" }, + trends: { status: "strong", details: "Trend analysis" }, + dashboards: { status: "strong", details: "Custom dashboards" }, + realtime: { status: "strong", details: "Real-time analytics" }, + customReports: { status: "strong", details: "Custom insights" }, + dataExploration: { + status: "strong", + details: "SQL and visual exploration", + }, + alerts: { status: "partial", details: "Basic alerts" }, + sessionReplay: { + status: "strong", + details: "Full session replay with console logs", + }, + heatmaps: { status: "strong", details: "Heatmaps & clickmaps" }, + userProfiles: { status: "strong", details: "Individual user profiles" }, + userJourneys: { status: "strong", details: "User journey tracking" }, + attribution: { status: "partial", details: "Basic attribution" }, + abTesting: { status: "strong", details: "A/B testing built-in" }, + featureFlags: { status: "strong", details: "Feature flags included" }, + experiments: { + status: "strong", + details: "Full experimentation platform", + }, + statisticalAnalysis: { + status: "strong", + details: "Bayesian & frequentist stats", + }, + sdkLanguages: { + status: "strong", + details: "15+ languages (JS, Python, Go, PHP, etc.)", + }, + apiAccess: { status: "strong", details: "Full REST API" }, + dataWarehouse: { + status: "strong", + details: "Export to Snowflake, BigQuery", + }, + sqlAccess: { status: "strong", details: "SQL query interface" }, + documentation: { status: "strong", details: "Excellent documentation" }, + gdprCompliant: { status: "strong", details: "GDPR compliant" }, + cookieless: { + status: "partial", + details: "Cookie-based by default, can configure", + }, + dataResidency: { status: "strong", details: "US & EU regions" }, + anonymization: { status: "strong", details: "Data anonymization" }, + compliance: { status: "strong", details: "SOC 2, GDPR" }, + freeTier: { status: "strong", details: "1M events/month free" }, + pricingModel: { + status: "strong", + details: "Pay-as-you-go per event ($0.00005/event)", + }, + openSource: { status: "strong", details: "MIT license" }, + selfHosted: { + status: "strong", + details: "Docker/Kubernetes self-host", + }, + cloudHosted: { status: "strong", details: "PostHog Cloud (US & EU)" }, + cdp: { + status: "strong", + details: "Segment, RudderStack integration", + }, + marketing: { + status: "strong", + details: "Hubspot, Salesforce, Intercom", + }, + datatools: { + status: "strong", + details: "Snowflake, BigQuery, S3", + }, + webhooks: { status: "strong", details: "Webhooks & actions" }, + }, +}; diff --git a/src/data/analytics/segment.tsx b/src/data/analytics/segment.tsx new file mode 100644 index 0000000..cb678b6 --- /dev/null +++ b/src/data/analytics/segment.tsx @@ -0,0 +1,102 @@ +import type { Provider } from "../../types/comparison"; + +function SegmentLogo() { + return ( + + Segment + + + + + + + + ); +} + +export const segment: Provider = { + name: "Segment", + logo: , + website: "https://segment.com", + tagline: { + status: "strong", + details: "Customer data platform with analytics", + }, + features: { + autoCapture: { status: "none", details: "Manual tracking" }, + customEvents: { status: "strong", details: "Track, identify, page" }, + userProperties: { status: "strong", details: "User traits" }, + groupAnalytics: { status: "strong", details: "Group calls" }, + retroactiveAnalysis: { + status: "none", + details: "Not available", + }, + funnels: { status: "partial", details: "Via destinations" }, + retention: { status: "partial", details: "Via destinations" }, + cohorts: { status: "partial", details: "Via destinations" }, + pathAnalysis: { status: "none", details: "Not available" }, + trends: { status: "partial", details: "Via destinations" }, + dashboards: { status: "partial", details: "Limited built-in" }, + realtime: { status: "strong", details: "Real-time streaming" }, + customReports: { status: "partial", details: "Via destinations" }, + dataExploration: { + status: "partial", + details: "Limited (focus on CDP)", + }, + alerts: { status: "partial", details: "Data quality alerts" }, + sessionReplay: { status: "none", details: "Not available" }, + heatmaps: { status: "none", details: "Not available" }, + userProfiles: { status: "strong", details: "Unified profiles" }, + userJourneys: { status: "partial", details: "Via destinations" }, + attribution: { status: "partial", details: "Via destinations" }, + abTesting: { status: "none", details: "Not available" }, + featureFlags: { status: "none", details: "Not available" }, + experiments: { status: "none", details: "Not available" }, + statisticalAnalysis: { + status: "none", + details: "Not available", + }, + sdkLanguages: { + status: "strong", + details: "20+ languages (JS, iOS, Android, etc.)", + }, + apiAccess: { status: "strong", details: "HTTP Tracking API" }, + dataWarehouse: { + status: "strong", + details: "Warehouses as destinations", + }, + sqlAccess: { status: "none", details: "Not available" }, + documentation: { status: "strong", details: "Extensive docs" }, + gdprCompliant: { status: "strong", details: "GDPR tools" }, + cookieless: { status: "partial", details: "Cookie-based" }, + dataResidency: { status: "strong", details: "Multi-region" }, + anonymization: { status: "strong", details: "User deletion API" }, + compliance: { status: "strong", details: "SOC 2, GDPR, HIPAA" }, + freeTier: { + status: "strong", + details: "Free: 1K MTUs, 2 sources", + }, + pricingModel: { + status: "strong", + details: "Team: $120/mo for 10K MTUs", + }, + openSource: { status: "partial", details: "Open-source libraries" }, + selfHosted: { status: "none", details: "Cloud-only" }, + cloudHosted: { status: "strong", details: "Fully managed" }, + cdp: { status: "strong", details: "Core CDP platform" }, + marketing: { + status: "strong", + details: "450+ destinations", + }, + datatools: { + status: "strong", + details: "All major warehouses", + }, + webhooks: { status: "strong", details: "Webhooks destination" }, + }, +}; diff --git a/src/data/auth-comparison.tsx b/src/data/auth-comparison.tsx deleted file mode 100644 index 0d72dca..0000000 --- a/src/data/auth-comparison.tsx +++ /dev/null @@ -1,991 +0,0 @@ -import { useId } from "react"; -import RiKey2Line from "remixicon-react/Key2LineIcon"; -import RiMoneyDollarCircleLine from "remixicon-react/MoneyDollarCircleLineIcon"; -import RiPlugLine from "remixicon-react/PlugLineIcon"; -import RiServerLine from "remixicon-react/ServerLineIcon"; -import RiShieldCheckLine from "remixicon-react/ShieldCheckLineIcon"; -import RiShieldKeyholeLine from "remixicon-react/ShieldKeyholeLineIcon"; -import RiTerminalBoxLine from "remixicon-react/TerminalBoxLineIcon"; -import RiUserLine from "remixicon-react/UserLineIcon"; -import type { Category, ComparisonConfig, Provider } from "../types/comparison"; - -// Provider Logos -const ClerkLogo = () => ( - - Clerk - - - - -); - -const Auth0Logo = () => ( - - Auth0 - - -); -const SupabaseLogo = () => { - const gradientId0 = useId(); - const gradientId1 = useId(); - - return ( - - Supabase - - - - - - - - - - - - - - - ); -}; - -const AuthJsLogo = () => ( - - Auth.js - - -); - -const FirebaseLogo = () => ( - - Firebase - - -); - -const LuciaLogo = () => ( - - Lucia - - - L - - -); - -const WorkOSLogo = () => ( - - WorkOS - - - W - - -); - -const KeycloakLogo = () => ( - - Keycloak - - - -); - -// Feature Categories -const categories: Category[] = [ - { - id: "authentication", - label: "Core Authentication", - icon: , - features: { - emailPassword: "Email/Password", - passwordless: "Passwordless (Magic Links)", - socialLogins: "Social Logins", - enterpriseSSO: "Enterprise SSO (SAML/OIDC)", - passkeys: "Passkeys/WebAuthn", - }, - }, - { - id: "userManagement", - label: "User Management", - icon: , - features: { - mfa: "Multi-Factor Auth", - rbac: "RBAC/Permissions", - userProfiles: "User Profiles", - organizations: "Organizations/Teams", - }, - }, - { - id: "developerExperience", - label: "Developer Experience", - icon: , - features: { - frontendSDKs: "Frontend SDKs", - prebuiltUI: "Pre-built UI Components", - documentation: "Documentation Quality", - apiApproach: "API Approach", - }, - }, - { - id: "security", - label: "Security & Compliance", - icon: , - features: { - sessionManagement: "Session Management", - jwtSupport: "JWT Support", - compliance: "SOC 2 / GDPR Compliance", - rateLimiting: "Rate Limiting / DDoS Protection", - }, - }, - { - id: "pricing", - label: "Pricing", - icon: , - features: { - freeTier: "Free Tier", - paidPricing: "Paid Pricing", - }, - }, - { - id: "deployment", - label: "Deployment", - icon: , - features: { - openSource: "Open Source", - selfHosted: "Self-Hosted Option", - }, - }, - { - id: "integrations", - label: "Integrations", - icon: , - features: { - oauthProviders: "OAuth Providers", - webhooks: "Webhooks", - thirdPartyIntegrations: "Third-Party Integrations", - }, - }, -]; - -// Provider Data -const providers: Provider[] = [ - { - name: "Clerk", - logo: , - website: "https://clerk.com", - verificationUrl: "https://clerk.com/pricing", - tagline: { - status: "strong", - details: - "Complete user management - authentication, profiles, and organizations", - }, - features: { - emailPassword: { - status: "strong", - details: "Email + password with verification", - }, - passwordless: { - status: "strong", - details: "Email magic links & verification codes", - }, - socialLogins: { - status: "strong", - details: "Google, GitHub, Microsoft, Apple, 20+ providers", - }, - enterpriseSSO: { - status: "strong", - details: "SAML & OIDC (Enhanced Auth $100/mo addon)", - }, - passkeys: { - status: "strong", - details: "WebAuthn/FIDO2 (Enhanced Auth $100/mo addon)", - }, - mfa: { - status: "strong", - details: "SMS, TOTP, Backup codes (Enhanced Auth $100/mo addon)", - }, - rbac: { - status: "strong", - details: "Custom roles & permissions (Enhanced Auth $100/mo addon)", - }, - userProfiles: { - status: "strong", - details: "Customizable with metadata fields", - }, - organizations: { - status: "strong", - details: "Built-in teams with invitations", - }, - frontendSDKs: { - status: "strong", - details: "React, Next.js, Remix, Gatsby, Vue, Svelte", - }, - prebuiltUI: { - status: "strong", - details: "Fully customizable components & themes", - }, - documentation: { - status: "strong", - details: "Excellent docs with tutorials & examples", - }, - apiApproach: { - status: "strong", - details: "REST API + SDKs with TypeScript support", - }, - sessionManagement: { - status: "strong", - details: "Customizable duration & refresh tokens", - }, - jwtSupport: { status: "strong", details: "JWTs with custom claims" }, - compliance: { - status: "strong", - details: "SOC 2 Type II, GDPR, HIPAA (Enterprise)", - }, - rateLimiting: { - status: "strong", - details: "Built-in DDoS & bot protection", - }, - freeTier: { status: "strong", details: "10,000 MAU" }, - paidPricing: { status: "strong", details: "$25/mo + $0.02/MAU" }, - openSource: { status: "none", details: "Proprietary" }, - selfHosted: { status: "none", details: "Cloud-only SaaS" }, - oauthProviders: { - status: "strong", - details: "20+ social, enterprise, Web3 providers", - }, - webhooks: { - status: "strong", - details: "Real-time event webhooks (Svix)", - }, - thirdPartyIntegrations: { - status: "strong", - details: "Segment, Vercel, Netlify, analytics tools", - }, - }, - }, - { - name: "Auth0", - logo: , - website: "https://auth0.com", - verificationUrl: "https://auth0.com/pricing", - tagline: { - status: "strong", - details: - "Easy to implement, adaptable authentication and authorization platform", - }, - features: { - emailPassword: { - status: "strong", - details: "Email + password with verification", - }, - passwordless: { status: "strong", details: "Email, SMS magic links" }, - socialLogins: { - status: "strong", - details: "30+ providers including all major platforms", - }, - enterpriseSSO: { - status: "strong", - details: "SAML, OIDC, AD, LDAP (Professional+)", - }, - passkeys: { status: "strong", details: "WebAuthn/FIDO2 biometric auth" }, - mfa: { status: "strong", details: "SMS, TOTP, Email, Push, WebAuthn" }, - rbac: { - status: "strong", - details: "Core RBAC (Professional+), fine-grained permissions", - }, - userProfiles: { - status: "strong", - details: "Customizable with metadata & progressive profiling", - }, - organizations: { - status: "strong", - details: "B2B organizations (Professional+)", - }, - frontendSDKs: { - status: "strong", - details: "React, Angular, Vue, iOS, Android, many more", - }, - prebuiltUI: { - status: "strong", - details: "Universal Login with customizable Lock widget", - }, - documentation: { - status: "strong", - details: "Comprehensive docs with quickstarts", - }, - apiApproach: { status: "strong", details: "REST API + Management API" }, - sessionManagement: { - status: "strong", - details: "Refresh tokens, SSO sessions, device tracking", - }, - jwtSupport: { - status: "strong", - details: "JWTs with custom claims & namespacing", - }, - compliance: { - status: "strong", - details: "SOC 2 Type II, ISO 27001, GDPR, HIPAA", - }, - rateLimiting: { - status: "strong", - details: "Configurable rate limits & anomaly detection", - }, - freeTier: { status: "strong", details: "7,500 MAU" }, - paidPricing: { - status: "strong", - details: "$35/mo (Essentials), $240/mo (Professional)", - }, - openSource: { status: "none", details: "Proprietary" }, - selfHosted: { - status: "none", - details: "Cloud-only (Private Cloud available)", - }, - oauthProviders: { - status: "strong", - details: "30+ social + enterprise connections", - }, - webhooks: { - status: "strong", - details: "Log streams & webhooks (Professional+)", - }, - thirdPartyIntegrations: { - status: "strong", - details: "Extensive marketplace with 100+ integrations", - }, - }, - }, - { - name: "Supabase Auth", - logo: , - website: "https://supabase.com/auth", - verificationUrl: "https://supabase.com/pricing", - tagline: { - status: "strong", - details: "Open source auth with PostgreSQL Row Level Security", - }, - features: { - emailPassword: { - status: "strong", - details: "Email + password with confirmation", - }, - passwordless: { status: "strong", details: "Magic links via email" }, - socialLogins: { - status: "strong", - details: "Google, GitHub, GitLab, Slack, 10+ providers", - }, - enterpriseSSO: { - status: "partial", - details: "SAML (Enterprise plan only)", - }, - passkeys: { status: "partial", details: "Experimental WebAuthn support" }, - mfa: { status: "strong", details: "TOTP authenticator apps" }, - rbac: { - status: "strong", - details: "Row Level Security (RLS) with PostgreSQL policies", - }, - userProfiles: { - status: "strong", - details: "Stored in users table with custom fields", - }, - organizations: { - status: "partial", - details: "Build your own with RLS policies", - }, - frontendSDKs: { - status: "strong", - details: "JavaScript, React, Vue, Svelte, Angular, Flutter", - }, - prebuiltUI: { - status: "strong", - details: "Auth UI library with customizable components", - }, - documentation: { - status: "strong", - details: "Excellent docs with video tutorials", - }, - apiApproach: { - status: "strong", - details: "RESTful + Realtime + GraphQL (pg_graphql)", - }, - sessionManagement: { - status: "strong", - details: "JWT with refresh tokens & auto-refresh", - }, - jwtSupport: { - status: "strong", - details: "JWTs with custom claims via PostgreSQL functions", - }, - compliance: { - status: "strong", - details: "SOC 2 Type II, GDPR, HIPAA (Enterprise)", - }, - rateLimiting: { - status: "strong", - details: "Built-in rate limiting per endpoint", - }, - freeTier: { status: "strong", details: "50,000 MAU" }, - paidPricing: { status: "strong", details: "$25/mo + $0.00325/MAU" }, - openSource: { - status: "strong", - details: "MIT License (fully open source)", - }, - selfHosted: { - status: "strong", - details: "Docker self-hosting available", - }, - oauthProviders: { - status: "strong", - details: "10+ providers with custom OAuth", - }, - webhooks: { - status: "strong", - details: "Database webhooks via pg_net or Edge Functions", - }, - thirdPartyIntegrations: { - status: "partial", - details: "Growing ecosystem with partner integrations", - }, - }, - }, - { - name: "Auth.js (NextAuth)", - logo: , - website: "https://authjs.dev", - verificationUrl: "https://authjs.dev/getting-started/introduction", - tagline: { - status: "strong", - details: "Free and open source authentication for the web", - }, - features: { - emailPassword: { - status: "strong", - details: "Credentials provider with custom logic", - }, - passwordless: { status: "strong", details: "Email magic links built-in" }, - socialLogins: { - status: "strong", - details: "80+ built-in OAuth providers", - }, - enterpriseSSO: { - status: "partial", - details: "Via custom providers (SAML, OIDC possible)", - }, - passkeys: { - status: "partial", - details: "Via SimpleWebAuthn or custom implementation", - }, - mfa: { - status: "partial", - details: "Custom implementation via callbacks", - }, - rbac: { - status: "partial", - details: "Build your own with session callbacks", - }, - userProfiles: { - status: "partial", - details: "Store in your own database", - }, - organizations: { - status: "partial", - details: "Build your own with custom logic", - }, - frontendSDKs: { - status: "strong", - details: "Next.js, SvelteKit, SolidStart, Express", - }, - prebuiltUI: { - status: "partial", - details: "Basic sign-in pages (customizable)", - }, - documentation: { - status: "strong", - details: "Good docs with many examples", - }, - apiApproach: { - status: "strong", - details: "Framework-integrated API routes", - }, - sessionManagement: { - status: "strong", - details: "JWT or database sessions with rotation", - }, - jwtSupport: { - status: "strong", - details: "JWT with custom claims via callbacks", - }, - compliance: { - status: "partial", - details: "Your responsibility (self-hosted)", - }, - rateLimiting: { - status: "partial", - details: "Implement via middleware or proxies", - }, - freeTier: { - status: "strong", - details: "Unlimited (self-hosted, open source)", - }, - paidPricing: { status: "none", details: "Free forever" }, - openSource: { status: "strong", details: "ISC License (MIT-compatible)" }, - selfHosted: { - status: "strong", - details: "Required (runs on your infrastructure)", - }, - oauthProviders: { - status: "strong", - details: "80+ providers (Google, GitHub, Apple, etc.)", - }, - webhooks: { - status: "partial", - details: "Build your own with event callbacks", - }, - thirdPartyIntegrations: { - status: "partial", - details: "Community adapters for various databases", - }, - }, - }, - { - name: "Firebase Auth", - logo: , - website: "https://firebase.google.com/products/auth", - verificationUrl: "https://firebase.google.com/pricing", - tagline: { - status: "strong", - details: - "Simple, multi-platform sign-in with backend services and ready-made UI", - }, - features: { - emailPassword: { - status: "strong", - details: "Email + password with verification links", - }, - passwordless: { - status: "strong", - details: "Email links & anonymous auth", - }, - socialLogins: { - status: "strong", - details: "Google, Facebook, Apple, Microsoft, GitHub, Twitter", - }, - enterpriseSSO: { - status: "strong", - details: "SAML & OIDC (Identity Platform)", - }, - passkeys: { - status: "partial", - details: "Via Firebase Extensions or custom", - }, - mfa: { status: "strong", details: "SMS, TOTP (Google Authenticator)" }, - rbac: { status: "partial", details: "Custom claims + Security Rules" }, - userProfiles: { - status: "partial", - details: "Store in Firestore with custom logic", - }, - organizations: { - status: "partial", - details: "Build with Firestore & Security Rules", - }, - frontendSDKs: { - status: "strong", - details: "Web, iOS, Android, Flutter, Unity, C++", - }, - prebuiltUI: { - status: "strong", - details: "FirebaseUI for Web, iOS, Android", - }, - documentation: { - status: "strong", - details: "Excellent docs with video courses", - }, - apiApproach: { - status: "strong", - details: "Client SDKs + Admin SDK for backend", - }, - sessionManagement: { - status: "strong", - details: "ID tokens with automatic refresh", - }, - jwtSupport: { status: "strong", details: "Firebase ID tokens (JWTs)" }, - compliance: { - status: "strong", - details: "SOC 2, SOC 3, ISO 27001, GDPR", - }, - rateLimiting: { - status: "strong", - details: "App Check + Cloud Armor integration", - }, - freeTier: { - status: "strong", - details: "Unlimited auth users (no MAU limits)", - }, - paidPricing: { - status: "partial", - details: "Free auth; phone SMS $0.06/verification", - }, - openSource: { - status: "none", - details: "Proprietary (Firebase Emulators for dev)", - }, - selfHosted: { status: "none", details: "Cloud-only Google service" }, - oauthProviders: { - status: "strong", - details: "6+ social + custom OAuth/SAML", - }, - webhooks: { - status: "partial", - details: "Cloud Functions triggers for auth events", - }, - thirdPartyIntegrations: { - status: "strong", - details: "Google ecosystem + Firebase Extensions", - }, - }, - }, - { - name: "Lucia", - logo: , - website: "https://lucia-auth.com", - verificationUrl: "https://lucia-auth.com", - tagline: { - status: "strong", - details: - "Open source library to implement authentication using JavaScript", - }, - features: { - emailPassword: { - status: "strong", - details: "Build your own with database", - }, - passwordless: { - status: "partial", - details: "Implement yourself with email service", - }, - socialLogins: { - status: "strong", - details: "Arctic library: 50+ OAuth providers", - }, - enterpriseSSO: { - status: "partial", - details: "Custom SAML/OIDC implementation needed", - }, - passkeys: { status: "partial", details: "Use SimpleWebAuthn library" }, - mfa: { status: "partial", details: "Build your own TOTP/SMS logic" }, - rbac: { - status: "partial", - details: "Implement with your database schema", - }, - userProfiles: { - status: "partial", - details: "Your database, your schema", - }, - organizations: { status: "partial", details: "Build from scratch" }, - frontendSDKs: { - status: "partial", - details: "Framework-agnostic TypeScript library", - }, - prebuiltUI: { status: "none", details: "No pre-built UI (you build it)" }, - documentation: { status: "strong", details: "Clear docs with examples" }, - apiApproach: { status: "strong", details: "Session-based auth library" }, - sessionManagement: { - status: "strong", - details: "Secure database-backed sessions", - }, - jwtSupport: { - status: "partial", - details: "Use jose or other JWT library", - }, - compliance: { - status: "partial", - details: "Your responsibility (self-implemented)", - }, - rateLimiting: { status: "partial", details: "Implement via middleware" }, - freeTier: { - status: "strong", - details: "Unlimited (library, not a service)", - }, - paidPricing: { status: "none", details: "Free forever (MIT license)" }, - openSource: { status: "strong", details: "MIT License (fully open)" }, - selfHosted: { - status: "strong", - details: "Required (TypeScript library)", - }, - oauthProviders: { - status: "strong", - details: "Arctic: 50+ OAuth providers", - }, - webhooks: { status: "partial", details: "Build your own event system" }, - thirdPartyIntegrations: { - status: "none", - details: "Minimal (DIY approach)", - }, - }, - }, - { - name: "WorkOS", - logo: , - website: "https://workos.com", - verificationUrl: "https://workos.com/pricing", - tagline: { - status: "strong", - details: - "Your app, enterprise ready - APIs for SSO, SCIM, and user management", - }, - features: { - emailPassword: { status: "strong", details: "AuthKit email + password" }, - passwordless: { status: "strong", details: "Magic links via AuthKit" }, - socialLogins: { - status: "strong", - details: "Microsoft, Google, GitHub via AuthKit", - }, - enterpriseSSO: { - status: "strong", - details: "SAML, OIDC (enterprise focus)", - }, - passkeys: { status: "partial", details: "Coming soon to AuthKit" }, - mfa: { status: "strong", details: "TOTP, SMS included in AuthKit" }, - rbac: { - status: "strong", - details: "Built-in with AuthKit & Organizations API", - }, - userProfiles: { - status: "strong", - details: "User Management API with metadata", - }, - organizations: { - status: "strong", - details: "Organizations API (B2B focus)", - }, - frontendSDKs: { - status: "strong", - details: "React, Next.js, Node.js SDKs", - }, - prebuiltUI: { - status: "strong", - details: "AuthKit hosted UI with customization", - }, - documentation: { status: "strong", details: "Developer-focused docs" }, - apiApproach: { - status: "strong", - details: "Modern REST APIs with webhooks", - }, - sessionManagement: { - status: "strong", - details: "Managed sessions via AuthKit", - }, - jwtSupport: { status: "strong", details: "JWTs for API authentication" }, - compliance: { status: "strong", details: "SOC 2 Type II, GDPR, HIPAA" }, - rateLimiting: { - status: "strong", - details: "Enterprise-grade rate limiting", - }, - freeTier: { status: "strong", details: "1 million MAU (generous)" }, - paidPricing: { status: "strong", details: "$2,500/mo per 1M MAU" }, - openSource: { status: "none", details: "Proprietary" }, - selfHosted: { status: "none", details: "Cloud-only SaaS" }, - oauthProviders: { - status: "strong", - details: "Social + enterprise SSO providers", - }, - webhooks: { - status: "strong", - details: "Event-driven webhooks for all APIs", - }, - thirdPartyIntegrations: { - status: "strong", - details: "Directory Sync (SCIM), Audit Logs, MFA", - }, - }, - }, - { - name: "Keycloak", - logo: , - website: "https://www.keycloak.org", - verificationUrl: "https://www.keycloak.org/documentation", - tagline: { - status: "strong", - details: - "Open source identity and access management - add authentication with minimum effort", - }, - features: { - emailPassword: { status: "strong", details: "Username/email + password" }, - passwordless: { status: "partial", details: "WebAuthn or custom flows" }, - socialLogins: { - status: "strong", - details: "Google, GitHub, Facebook, LinkedIn, etc.", - }, - enterpriseSSO: { - status: "strong", - details: "SAML 2.0, OIDC, LDAP, Kerberos", - }, - passkeys: { status: "strong", details: "WebAuthn/FIDO2 built-in" }, - mfa: { status: "strong", details: "OTP, WebAuthn/FIDO2, SMS (via SPI)" }, - rbac: { - status: "strong", - details: "Fine-grained authorization with policies", - }, - userProfiles: { - status: "strong", - details: "Customizable attributes & federation", - }, - organizations: { - status: "strong", - details: "Realms & organizations (multi-tenancy)", - }, - frontendSDKs: { - status: "strong", - details: "JavaScript, Java, Python, .NET, Go adapters", - }, - prebuiltUI: { - status: "partial", - details: "Admin console + customizable login themes", - }, - documentation: { - status: "strong", - details: "Comprehensive official docs", - }, - apiApproach: { - status: "strong", - details: "REST Admin API + standard OAuth/OIDC", - }, - sessionManagement: { - status: "strong", - details: "SSO sessions, offline tokens, revocation", - }, - jwtSupport: { - status: "strong", - details: "JWTs with custom claims & mappers", - }, - compliance: { - status: "partial", - details: "Your responsibility (self-hosted)", - }, - rateLimiting: { - status: "partial", - details: "Via reverse proxy or extensions", - }, - freeTier: { - status: "strong", - details: "Unlimited (self-hosted, open source)", - }, - paidPricing: { - status: "none", - details: "Free (Red Hat support available)", - }, - openSource: { status: "strong", details: "Apache 2.0 License" }, - selfHosted: { - status: "strong", - details: "Required (Java app, Docker, Kubernetes)", - }, - oauthProviders: { - status: "strong", - details: "OAuth 2.0, OIDC, SAML, LDAP, social providers", - }, - webhooks: { - status: "partial", - details: "Event listeners via SPI extensions", - }, - thirdPartyIntegrations: { - status: "strong", - details: "Extensive via SPIs & adapters", - }, - }, - }, -]; - -export const authComparisonConfig: ComparisonConfig = { - title: "auth.compare", - subtitle: "⋅ Easily compare different authentication providers/libraries", - icon: , - providers, - categories, - lastUpdated: "2025-10-02", -}; diff --git a/src/data/auth/auth0.tsx b/src/data/auth/auth0.tsx new file mode 100644 index 0000000..cab2433 --- /dev/null +++ b/src/data/auth/auth0.tsx @@ -0,0 +1,106 @@ +import type { Provider } from "../../types/comparison"; + +function Auth0Logo() { + return ( + + Auth0 + + + ); +} + +export const auth0: Provider = { + name: "Auth0", + logo: , + website: "https://auth0.com", + tagline: { + status: "strong", + details: + "Easy to implement, adaptable authentication and authorization platform", + }, + features: { + emailPassword: { + status: "strong", + details: "Email + password with verification", + }, + passwordless: { status: "strong", details: "Email, SMS magic links" }, + socialLogins: { + status: "strong", + details: "30+ providers including all major platforms", + }, + enterpriseSSO: { + status: "strong", + details: "SAML, OIDC, AD, LDAP (Professional+)", + }, + passkeys: { status: "strong", details: "WebAuthn/FIDO2 biometric auth" }, + mfa: { status: "strong", details: "SMS, TOTP, Email, Push, WebAuthn" }, + rbac: { + status: "strong", + details: "Core RBAC (Professional+), fine-grained permissions", + }, + userProfiles: { + status: "strong", + details: "Customizable with metadata & progressive profiling", + }, + organizations: { + status: "strong", + details: "B2B organizations (Professional+)", + }, + frontendSDKs: { + status: "strong", + details: "React, Angular, Vue, iOS, Android, many more", + }, + prebuiltUI: { + status: "strong", + details: "Universal Login with customizable Lock widget", + }, + documentation: { + status: "strong", + details: "Comprehensive docs with quickstarts", + }, + apiApproach: { status: "strong", details: "REST API + Management API" }, + sessionManagement: { + status: "strong", + details: "Refresh tokens, SSO sessions, device tracking", + }, + jwtSupport: { + status: "strong", + details: "JWTs with custom claims & namespacing", + }, + compliance: { + status: "strong", + details: "SOC 2 Type II, ISO 27001, GDPR, HIPAA", + }, + rateLimiting: { + status: "strong", + details: "Configurable rate limits & anomaly detection", + }, + freeTier: { status: "strong", details: "7,500 MAU" }, + paidPricing: { + status: "strong", + details: "$35/mo (Essentials), $240/mo (Professional)", + }, + openSource: { status: "none", details: "Proprietary" }, + selfHosted: { + status: "none", + details: "Cloud-only (Private Cloud available)", + }, + oauthProviders: { + status: "strong", + details: "30+ social + enterprise connections", + }, + webhooks: { + status: "strong", + details: "Log streams & webhooks (Professional+)", + }, + thirdPartyIntegrations: { + status: "strong", + details: "Extensive marketplace with 100+ integrations", + }, + }, +}; diff --git a/src/data/auth/authjs.tsx b/src/data/auth/authjs.tsx new file mode 100644 index 0000000..bf22c8a --- /dev/null +++ b/src/data/auth/authjs.tsx @@ -0,0 +1,114 @@ +import type { Provider } from "../../types/comparison"; + +function AuthJsLogo() { + return ( + + Auth.js + + + ); +} + +export const authjs: Provider = { + name: "Auth.js (NextAuth)", + logo: , + website: "https://authjs.dev", + tagline: { + status: "strong", + details: "Free and open source authentication for the web", + }, + features: { + emailPassword: { + status: "strong", + details: "Credentials provider with custom logic", + }, + passwordless: { status: "strong", details: "Email magic links built-in" }, + socialLogins: { + status: "strong", + details: "80+ built-in OAuth providers", + }, + enterpriseSSO: { + status: "partial", + details: "Via custom providers (SAML, OIDC possible)", + }, + passkeys: { + status: "partial", + details: "Via SimpleWebAuthn or custom implementation", + }, + mfa: { + status: "partial", + details: "Custom implementation via callbacks", + }, + rbac: { + status: "partial", + details: "Build your own with session callbacks", + }, + userProfiles: { + status: "partial", + details: "Store in your own database", + }, + organizations: { + status: "partial", + details: "Build your own with custom logic", + }, + frontendSDKs: { + status: "strong", + details: "Next.js, SvelteKit, SolidStart, Express", + }, + prebuiltUI: { + status: "partial", + details: "Basic sign-in pages (customizable)", + }, + documentation: { + status: "strong", + details: "Good docs with many examples", + }, + apiApproach: { + status: "strong", + details: "Framework-integrated API routes", + }, + sessionManagement: { + status: "strong", + details: "JWT or database sessions with rotation", + }, + jwtSupport: { + status: "strong", + details: "JWT with custom claims via callbacks", + }, + compliance: { + status: "partial", + details: "Your responsibility (self-hosted)", + }, + rateLimiting: { + status: "partial", + details: "Implement via middleware or proxies", + }, + freeTier: { + status: "strong", + details: "Unlimited (self-hosted, open source)", + }, + paidPricing: { status: "none", details: "Free forever" }, + openSource: { status: "strong", details: "ISC License (MIT-compatible)" }, + selfHosted: { + status: "strong", + details: "Required (runs on your infrastructure)", + }, + oauthProviders: { + status: "strong", + details: "80+ providers (Google, GitHub, Apple, etc.)", + }, + webhooks: { + status: "partial", + details: "Build your own with event callbacks", + }, + thirdPartyIntegrations: { + status: "partial", + details: "Community adapters for various databases", + }, + }, +}; diff --git a/src/data/auth/clerk.tsx b/src/data/auth/clerk.tsx new file mode 100644 index 0000000..4d1a77d --- /dev/null +++ b/src/data/auth/clerk.tsx @@ -0,0 +1,117 @@ +import type { Provider } from "../../types/comparison"; + +function ClerkLogo() { + return ( + + Clerk + + + + + ); +} + +export const clerk: Provider = { + name: "Clerk", + logo: , + website: "https://clerk.com", + tagline: { + status: "strong", + details: + "Complete user management - authentication, profiles, and organizations", + }, + features: { + emailPassword: { + status: "strong", + details: "Email + password with verification", + }, + passwordless: { + status: "strong", + details: "Email magic links & verification codes", + }, + socialLogins: { + status: "strong", + details: "Google, GitHub, Microsoft, Apple, 20+ providers", + }, + enterpriseSSO: { + status: "strong", + details: "SAML & OIDC (Enhanced Auth $100/mo addon)", + }, + passkeys: { + status: "strong", + details: "WebAuthn/FIDO2 (Enhanced Auth $100/mo addon)", + }, + mfa: { + status: "strong", + details: "SMS, TOTP, Backup codes (Enhanced Auth $100/mo addon)", + }, + rbac: { + status: "strong", + details: "Custom roles & permissions (Enhanced Auth $100/mo addon)", + }, + userProfiles: { + status: "strong", + details: "Customizable with metadata fields", + }, + organizations: { + status: "strong", + details: "Built-in teams with invitations", + }, + frontendSDKs: { + status: "strong", + details: "React, Next.js, Remix, Gatsby, Vue, Svelte", + }, + prebuiltUI: { + status: "strong", + details: "Fully customizable components & themes", + }, + documentation: { + status: "strong", + details: "Excellent docs with tutorials & examples", + }, + apiApproach: { + status: "strong", + details: "REST API + SDKs with TypeScript support", + }, + sessionManagement: { + status: "strong", + details: "Customizable duration & refresh tokens", + }, + jwtSupport: { status: "strong", details: "JWTs with custom claims" }, + compliance: { + status: "strong", + details: "SOC 2 Type II, GDPR, HIPAA (Enterprise)", + }, + rateLimiting: { + status: "strong", + details: "Built-in DDoS & bot protection", + }, + freeTier: { status: "strong", details: "10,000 MAU" }, + paidPricing: { status: "strong", details: "$25/mo + $0.02/MAU" }, + openSource: { status: "none", details: "Proprietary" }, + selfHosted: { status: "none", details: "Cloud-only SaaS" }, + oauthProviders: { + status: "strong", + details: "20+ social, enterprise, Web3 providers", + }, + webhooks: { + status: "strong", + details: "Real-time event webhooks (Svix)", + }, + thirdPartyIntegrations: { + status: "strong", + details: "Segment, Vercel, Netlify, analytics tools", + }, + }, +}; diff --git a/src/data/auth/firebase.tsx b/src/data/auth/firebase.tsx new file mode 100644 index 0000000..600a239 --- /dev/null +++ b/src/data/auth/firebase.tsx @@ -0,0 +1,112 @@ +import type { Provider } from "../../types/comparison"; + +function FirebaseLogo() { + return ( + + Firebase + + + ); +} + +export const firebase: Provider = { + name: "Firebase Auth", + logo: , + website: "https://firebase.google.com/products/auth", + tagline: { + status: "strong", + details: + "Simple, multi-platform sign-in with backend services and ready-made UI", + }, + features: { + emailPassword: { + status: "strong", + details: "Email + password with verification links", + }, + passwordless: { + status: "strong", + details: "Email links & anonymous auth", + }, + socialLogins: { + status: "strong", + details: "Google, Facebook, Apple, Microsoft, GitHub, Twitter", + }, + enterpriseSSO: { + status: "strong", + details: "SAML & OIDC (Identity Platform)", + }, + passkeys: { + status: "partial", + details: "Via Firebase Extensions or custom", + }, + mfa: { status: "strong", details: "SMS, TOTP (Google Authenticator)" }, + rbac: { status: "partial", details: "Custom claims + Security Rules" }, + userProfiles: { + status: "partial", + details: "Store in Firestore with custom logic", + }, + organizations: { + status: "partial", + details: "Build with Firestore & Security Rules", + }, + frontendSDKs: { + status: "strong", + details: "Web, iOS, Android, Flutter, Unity, C++", + }, + prebuiltUI: { + status: "strong", + details: "FirebaseUI for Web, iOS, Android", + }, + documentation: { + status: "strong", + details: "Excellent docs with video courses", + }, + apiApproach: { + status: "strong", + details: "Client SDKs + Admin SDK for backend", + }, + sessionManagement: { + status: "strong", + details: "ID tokens with automatic refresh", + }, + jwtSupport: { status: "strong", details: "Firebase ID tokens (JWTs)" }, + compliance: { + status: "strong", + details: "SOC 2, SOC 3, ISO 27001, GDPR", + }, + rateLimiting: { + status: "strong", + details: "App Check + Cloud Armor integration", + }, + freeTier: { + status: "strong", + details: "Unlimited auth users (no MAU limits)", + }, + paidPricing: { + status: "partial", + details: "Free auth; phone SMS $0.06/verification", + }, + openSource: { + status: "none", + details: "Proprietary (Firebase Emulators for dev)", + }, + selfHosted: { status: "none", details: "Cloud-only Google service" }, + oauthProviders: { + status: "strong", + details: "6+ social + custom OAuth/SAML", + }, + webhooks: { + status: "partial", + details: "Cloud Functions triggers for auth events", + }, + thirdPartyIntegrations: { + status: "strong", + details: "Google ecosystem + Firebase Extensions", + }, + }, +}; diff --git a/src/data/auth/index.tsx b/src/data/auth/index.tsx new file mode 100644 index 0000000..74ed826 --- /dev/null +++ b/src/data/auth/index.tsx @@ -0,0 +1,116 @@ +import RiKey2Line from "remixicon-react/Key2LineIcon"; +import RiMoneyDollarCircleLine from "remixicon-react/MoneyDollarCircleLineIcon"; +import RiPlugLine from "remixicon-react/PlugLineIcon"; +import RiServerLine from "remixicon-react/ServerLineIcon"; +import RiShieldCheckLine from "remixicon-react/ShieldCheckLineIcon"; +import RiShieldKeyholeLine from "remixicon-react/ShieldKeyholeLineIcon"; +import RiTerminalBoxLine from "remixicon-react/TerminalBoxLineIcon"; +import RiUserLine from "remixicon-react/UserLineIcon"; +import type { Category, ComparisonConfig } from "../../types/comparison"; +import { auth0 } from "./auth0"; +import { authjs } from "./authjs"; +// Import all auth providers +import { clerk } from "./clerk"; +import { firebase } from "./firebase"; +import { keycloak } from "./keycloak"; +import { lucia } from "./lucia"; +import { supabase } from "./supabase"; +import { workos } from "./workos"; + +// Feature Categories +export const categories: Category[] = [ + { + id: "authentication", + label: "Core Authentication", + icon: , + features: { + emailPassword: "Email/Password", + passwordless: "Passwordless (Magic Links)", + socialLogins: "Social Logins", + enterpriseSSO: "Enterprise SSO (SAML/OIDC)", + passkeys: "Passkeys/WebAuthn", + }, + }, + { + id: "userManagement", + label: "User Management", + icon: , + features: { + mfa: "Multi-Factor Auth", + rbac: "RBAC/Permissions", + userProfiles: "User Profiles", + organizations: "Organizations/Teams", + }, + }, + { + id: "developerExperience", + label: "Developer Experience", + icon: , + features: { + frontendSDKs: "Frontend SDKs", + prebuiltUI: "Pre-built UI Components", + documentation: "Documentation Quality", + apiApproach: "API Approach", + }, + }, + { + id: "security", + label: "Security & Compliance", + icon: , + features: { + sessionManagement: "Session Management", + jwtSupport: "JWT Support", + compliance: "SOC 2 / GDPR Compliance", + rateLimiting: "Rate Limiting / DDoS Protection", + }, + }, + { + id: "pricing", + label: "Pricing", + icon: , + features: { + freeTier: "Free Tier", + paidPricing: "Paid Pricing", + }, + }, + { + id: "deployment", + label: "Deployment", + icon: , + features: { + openSource: "Open Source", + selfHosted: "Self-Hosted Option", + }, + }, + { + id: "integrations", + label: "Integrations", + icon: , + features: { + oauthProviders: "OAuth Providers", + webhooks: "Webhooks", + thirdPartyIntegrations: "Third-Party Integrations", + }, + }, +]; + +// Providers array +export const providers = [ + clerk, + auth0, + supabase, + authjs, + firebase, + lucia, + workos, + keycloak, +]; + +export const authComparisonConfig: ComparisonConfig = { + title: "auth.compare", + subtitle: "⋅ Easily compare different authentication providers/libraries", + icon: , + providers, + categories, + lastUpdated: "2025-10-02", +}; diff --git a/src/data/auth/keycloak.tsx b/src/data/auth/keycloak.tsx new file mode 100644 index 0000000..8f4c29b --- /dev/null +++ b/src/data/auth/keycloak.tsx @@ -0,0 +1,110 @@ +import type { Provider } from "../../types/comparison"; + +function KeycloakLogo() { + return ( + + Keycloak + + + + ); +} + +export const keycloak: Provider = { + name: "Keycloak", + logo: , + website: "https://www.keycloak.org", + tagline: { + status: "strong", + details: + "Open source identity and access management - add authentication with minimum effort", + }, + features: { + emailPassword: { status: "strong", details: "Username/email + password" }, + passwordless: { status: "partial", details: "WebAuthn or custom flows" }, + socialLogins: { + status: "strong", + details: "Google, GitHub, Facebook, LinkedIn, etc.", + }, + enterpriseSSO: { + status: "strong", + details: "SAML 2.0, OIDC, LDAP, Kerberos", + }, + passkeys: { status: "strong", details: "WebAuthn/FIDO2 built-in" }, + mfa: { status: "strong", details: "OTP, WebAuthn/FIDO2, SMS (via SPI)" }, + rbac: { + status: "strong", + details: "Fine-grained authorization with policies", + }, + userProfiles: { + status: "strong", + details: "Customizable attributes & federation", + }, + organizations: { + status: "strong", + details: "Realms & organizations (multi-tenancy)", + }, + frontendSDKs: { + status: "strong", + details: "JavaScript, Java, Python, .NET, Go adapters", + }, + prebuiltUI: { + status: "partial", + details: "Admin console + customizable login themes", + }, + documentation: { + status: "strong", + details: "Comprehensive official docs", + }, + apiApproach: { + status: "strong", + details: "REST Admin API + standard OAuth/OIDC", + }, + sessionManagement: { + status: "strong", + details: "SSO sessions, offline tokens, revocation", + }, + jwtSupport: { + status: "strong", + details: "JWTs with custom claims & mappers", + }, + compliance: { + status: "partial", + details: "Your responsibility (self-hosted)", + }, + rateLimiting: { + status: "partial", + details: "Via reverse proxy or extensions", + }, + freeTier: { + status: "strong", + details: "Unlimited (self-hosted, open source)", + }, + paidPricing: { + status: "none", + details: "Free (Red Hat support available)", + }, + openSource: { status: "strong", details: "Apache 2.0 License" }, + selfHosted: { + status: "strong", + details: "Required (Java app, Docker, Kubernetes)", + }, + oauthProviders: { + status: "strong", + details: "OAuth 2.0, OIDC, SAML, LDAP, social providers", + }, + webhooks: { + status: "partial", + details: "Event listeners via SPI extensions", + }, + thirdPartyIntegrations: { + status: "strong", + details: "Extensive via SPIs & adapters", + }, + }, +}; diff --git a/src/data/auth/lucia.tsx b/src/data/auth/lucia.tsx new file mode 100644 index 0000000..c5bb3d1 --- /dev/null +++ b/src/data/auth/lucia.tsx @@ -0,0 +1,104 @@ +import type { Provider } from "../../types/comparison"; + +function LuciaLogo() { + return ( + + Lucia + + + L + + + ); +} + +export const lucia: Provider = { + name: "Lucia", + logo: , + website: "https://lucia-auth.com", + tagline: { + status: "strong", + details: "Open source library to implement authentication using JavaScript", + }, + features: { + emailPassword: { + status: "strong", + details: "Build your own with database", + }, + passwordless: { + status: "partial", + details: "Implement yourself with email service", + }, + socialLogins: { + status: "strong", + details: "Arctic library: 50+ OAuth providers", + }, + enterpriseSSO: { + status: "partial", + details: "Custom SAML/OIDC implementation needed", + }, + passkeys: { status: "partial", details: "Use SimpleWebAuthn library" }, + mfa: { status: "partial", details: "Build your own TOTP/SMS logic" }, + rbac: { + status: "partial", + details: "Implement with your database schema", + }, + userProfiles: { + status: "partial", + details: "Your database, your schema", + }, + organizations: { status: "partial", details: "Build from scratch" }, + frontendSDKs: { + status: "partial", + details: "Framework-agnostic TypeScript library", + }, + prebuiltUI: { status: "none", details: "No pre-built UI (you build it)" }, + documentation: { status: "strong", details: "Clear docs with examples" }, + apiApproach: { status: "strong", details: "Session-based auth library" }, + sessionManagement: { + status: "strong", + details: "Secure database-backed sessions", + }, + jwtSupport: { + status: "partial", + details: "Use jose or other JWT library", + }, + compliance: { + status: "partial", + details: "Your responsibility (self-implemented)", + }, + rateLimiting: { status: "partial", details: "Implement via middleware" }, + freeTier: { + status: "strong", + details: "Unlimited (library, not a service)", + }, + paidPricing: { status: "none", details: "Free forever (MIT license)" }, + openSource: { status: "strong", details: "MIT License (fully open)" }, + selfHosted: { + status: "strong", + details: "Required (TypeScript library)", + }, + oauthProviders: { + status: "strong", + details: "Arctic: 50+ OAuth providers", + }, + webhooks: { status: "partial", details: "Build your own event system" }, + thirdPartyIntegrations: { + status: "none", + details: "Minimal (DIY approach)", + }, + }, +}; diff --git a/src/data/auth/supabase.tsx b/src/data/auth/supabase.tsx new file mode 100644 index 0000000..b811522 --- /dev/null +++ b/src/data/auth/supabase.tsx @@ -0,0 +1,148 @@ +import { useId } from "react"; +import type { Provider } from "../../types/comparison"; + +function SupabaseLogo() { + const gradientId0 = useId(); + const gradientId1 = useId(); + + return ( + + Supabase + + + + + + + + + + + + + + + ); +} + +export const supabase: Provider = { + name: "Supabase Auth", + logo: , + website: "https://supabase.com/auth", + tagline: { + status: "strong", + details: "Open source auth with PostgreSQL Row Level Security", + }, + features: { + emailPassword: { + status: "strong", + details: "Email + password with confirmation", + }, + passwordless: { status: "strong", details: "Magic links via email" }, + socialLogins: { + status: "strong", + details: "Google, GitHub, GitLab, Slack, 10+ providers", + }, + enterpriseSSO: { + status: "partial", + details: "SAML (Enterprise plan only)", + }, + passkeys: { status: "partial", details: "Experimental WebAuthn support" }, + mfa: { status: "strong", details: "TOTP authenticator apps" }, + rbac: { + status: "strong", + details: "Row Level Security (RLS) with PostgreSQL policies", + }, + userProfiles: { + status: "strong", + details: "Stored in users table with custom fields", + }, + organizations: { + status: "partial", + details: "Build your own with RLS policies", + }, + frontendSDKs: { + status: "strong", + details: "JavaScript, React, Vue, Svelte, Angular, Flutter", + }, + prebuiltUI: { + status: "strong", + details: "Auth UI library with customizable components", + }, + documentation: { + status: "strong", + details: "Excellent docs with video tutorials", + }, + apiApproach: { + status: "strong", + details: "RESTful + Realtime + GraphQL (pg_graphql)", + }, + sessionManagement: { + status: "strong", + details: "JWT with refresh tokens & auto-refresh", + }, + jwtSupport: { + status: "strong", + details: "JWTs with custom claims via PostgreSQL functions", + }, + compliance: { + status: "strong", + details: "SOC 2 Type II, GDPR, HIPAA (Enterprise)", + }, + rateLimiting: { + status: "strong", + details: "Built-in rate limiting per endpoint", + }, + freeTier: { status: "strong", details: "50,000 MAU" }, + paidPricing: { status: "strong", details: "$25/mo + $0.00325/MAU" }, + openSource: { + status: "strong", + details: "MIT License (fully open source)", + }, + selfHosted: { + status: "strong", + details: "Docker self-hosting available", + }, + oauthProviders: { + status: "strong", + details: "10+ providers with custom OAuth", + }, + webhooks: { + status: "strong", + details: "Database webhooks via pg_net or Edge Functions", + }, + thirdPartyIntegrations: { + status: "partial", + details: "Growing ecosystem with partner integrations", + }, + }, +}; diff --git a/src/data/auth/workos.tsx b/src/data/auth/workos.tsx new file mode 100644 index 0000000..ef812ed --- /dev/null +++ b/src/data/auth/workos.tsx @@ -0,0 +1,102 @@ +import type { Provider } from "../../types/comparison"; + +function WorkOSLogo() { + return ( + + WorkOS + + + W + + + ); +} + +export const workos: Provider = { + name: "WorkOS", + logo: , + website: "https://workos.com", + tagline: { + status: "strong", + details: + "Your app, enterprise ready - APIs for SSO, SCIM, and user management", + }, + features: { + emailPassword: { status: "strong", details: "AuthKit email + password" }, + passwordless: { status: "strong", details: "Magic links via AuthKit" }, + socialLogins: { + status: "strong", + details: "Microsoft, Google, GitHub via AuthKit", + }, + enterpriseSSO: { + status: "strong", + details: "SAML, OIDC (enterprise focus)", + }, + passkeys: { status: "partial", details: "Coming soon to AuthKit" }, + mfa: { status: "strong", details: "TOTP, SMS included in AuthKit" }, + rbac: { + status: "strong", + details: "Built-in with AuthKit & Organizations API", + }, + userProfiles: { + status: "strong", + details: "User Management API with metadata", + }, + organizations: { + status: "strong", + details: "Organizations API (B2B focus)", + }, + frontendSDKs: { + status: "strong", + details: "React, Next.js, Node.js SDKs", + }, + prebuiltUI: { + status: "strong", + details: "AuthKit hosted UI with customization", + }, + documentation: { status: "strong", details: "Developer-focused docs" }, + apiApproach: { + status: "strong", + details: "Modern REST APIs with webhooks", + }, + sessionManagement: { + status: "strong", + details: "Managed sessions via AuthKit", + }, + jwtSupport: { status: "strong", details: "JWTs for API authentication" }, + compliance: { status: "strong", details: "SOC 2 Type II, GDPR, HIPAA" }, + rateLimiting: { + status: "strong", + details: "Enterprise-grade rate limiting", + }, + freeTier: { status: "strong", details: "1 million MAU (generous)" }, + paidPricing: { status: "strong", details: "$2,500/mo per 1M MAU" }, + openSource: { status: "none", details: "Proprietary" }, + selfHosted: { status: "none", details: "Cloud-only SaaS" }, + oauthProviders: { + status: "strong", + details: "Social + enterprise SSO providers", + }, + webhooks: { + status: "strong", + details: "Event-driven webhooks for all APIs", + }, + thirdPartyIntegrations: { + status: "strong", + details: "Directory Sync (SCIM), Audit Logs, MFA", + }, + }, +}; diff --git a/src/data/featureflags-comparison.tsx b/src/data/featureflags-comparison.tsx deleted file mode 100644 index 0ee7e4d..0000000 --- a/src/data/featureflags-comparison.tsx +++ /dev/null @@ -1,1576 +0,0 @@ -import RiCodeLine from "remixicon-react/CodeLineIcon"; -import RiFlag2Line from "remixicon-react/Flag2LineIcon"; -import RiGroupLine from "remixicon-react/GroupLineIcon"; -import RiLineChartLine from "remixicon-react/LineChartLineIcon"; -import RiMoneyDollarCircleLine from "remixicon-react/MoneyDollarCircleLineIcon"; -import RiPlugLine from "remixicon-react/PlugLineIcon"; -import RiServerLine from "remixicon-react/ServerLineIcon"; -import RiShieldCheckLine from "remixicon-react/ShieldCheckLineIcon"; -import type { Category, ComparisonConfig, Provider } from "../types/comparison"; - -// Provider Logo Components -function LaunchDarklyLogo() { - return ( - - LaunchDarkly - - - - - - ); -} - -function FlagsmithLogo() { - return ( - - Flagsmith - - - - - ); -} - -function UnleashLogo() { - return ( - - Unleash - - - - - ); -} - -function PostHogLogo() { - return ( - - PostHog - - - - ); -} - -function SplitLogo() { - return ( - - Split - - - - ); -} - -function GrowthBookLogo() { - return ( - - GrowthBook - - - - ); -} - -function DevCycleLogo() { - return ( - - DevCycle - - - - - ); -} - -function ConfigCatLogo() { - return ( - - ConfigCat - - - - ); -} - -function ReflagLogo() { - return ( - - Reflag - - - - ); -} // Feature Categories -const categories: Category[] = [ - { - id: "flagManagement", - label: "Flag Management", - icon: , - features: { - booleanFlags: "Boolean Flags", - multivariateFlags: "Multivariate Flags", - jsonFlags: "JSON/Complex Flags", - flagDependencies: "Flag Dependencies", - scheduledRollouts: "Scheduled Rollouts", - }, - }, - { - id: "targeting", - label: "Targeting & Segmentation", - icon: , - features: { - userTargeting: "User Targeting", - percentageRollouts: "Percentage Rollouts", - customSegments: "Custom Segments", - geoTargeting: "Geographic Targeting", - contextualTargeting: "Contextual Targeting", - }, - }, - { - id: "experimentation", - label: "Experimentation & Analytics", - icon: , - features: { - abTesting: "A/B Testing", - multivariateExperiments: "Multivariate Experiments", - statisticalAnalysis: "Statistical Analysis", - metricsTracking: "Metrics Tracking", - experimentGoals: "Experiment Goals", - }, - }, - { - id: "developerExperience", - label: "Developer Experience", - icon: , - features: { - sdkLanguages: "SDK Languages", - localEvaluation: "Local Evaluation", - typeSafety: "Type Safety", - documentation: "Documentation", - apiQuality: "API/REST Quality", - }, - }, - { - id: "security", - label: "Security & Compliance", - icon: , - features: { - rbac: "Role-Based Access Control", - auditLogs: "Audit Logs", - environments: "Multiple Environments", - approvalWorkflows: "Approval Workflows", - compliance: "Compliance (SOC 2, GDPR)", - }, - }, - { - id: "pricing", - label: "Pricing", - icon: , - features: { - freeTier: "Free Tier", - paidPricing: "Paid Pricing", - }, - }, - { - id: "deployment", - label: "Deployment", - icon: , - features: { - openSource: "Open Source", - selfHosted: "Self-Hosted Option", - cloudHosted: "Cloud Hosted", - }, - }, - { - id: "integrations", - label: "Integrations", - icon: , - features: { - analytics: "Analytics Integrations", - dataWarehouses: "Data Warehouses", - cicd: "CI/CD Integration", - webhooks: "Webhooks", - }, - }, -]; - -// Provider Data -const providers: Provider[] = [ - { - name: "Reflag", - logo: , - website: "https://reflag.com", - verificationUrl: "https://reflag.com/pricing", - tagline: { - status: "strong", - details: "Modern feature flag platform built for developer experience", - }, - features: { - booleanFlags: { status: "strong", details: "Full support" }, - multivariateFlags: { - status: "strong", - details: "Multi-value flags with variants", - }, - jsonFlags: { - status: "strong", - details: "JSON configuration support", - }, - flagDependencies: { - status: "strong", - details: "Flag prerequisites & dependencies", - }, - scheduledRollouts: { - status: "strong", - details: "Time-based scheduled rollouts", - }, - userTargeting: { - status: "strong", - details: "User & attribute targeting", - }, - percentageRollouts: { - status: "strong", - details: "Gradual percentage-based rollouts", - }, - customSegments: { - status: "strong", - details: "Advanced segment builder", - }, - geoTargeting: { - status: "strong", - details: "Geographic targeting built-in", - }, - contextualTargeting: { - status: "strong", - details: "Rich context targeting", - }, - abTesting: { - status: "strong", - details: "Native A/B testing", - }, - multivariateExperiments: { - status: "strong", - details: "Multi-variant experiments", - }, - statisticalAnalysis: { - status: "strong", - details: "Built-in statistical analysis", - }, - metricsTracking: { - status: "strong", - details: "Custom metrics & goals", - }, - experimentGoals: { - status: "strong", - details: "Multiple goal tracking", - }, - sdkLanguages: { - status: "strong", - details: - "JavaScript, TypeScript, React, Node.js, Python, Go (expanding)", - }, - localEvaluation: { - status: "strong", - details: "Edge-optimized local evaluation", - }, - typeSafety: { - status: "strong", - details: "Full TypeScript support, auto-generated types", - }, - documentation: { - status: "strong", - details: "Comprehensive docs with examples", - }, - apiQuality: { - status: "strong", - details: "Modern REST API + GraphQL + SDKs", - }, - rbac: { - status: "strong", - details: "Granular role-based permissions", - }, - auditLogs: { - status: "strong", - details: "Complete audit trail", - }, - environments: { - status: "strong", - details: "Unlimited environments", - }, - approvalWorkflows: { - status: "strong", - details: "Multi-stage approval workflows", - }, - compliance: { - status: "strong", - details: "SOC 2, GDPR, CCPA compliant", - }, - freeTier: { - status: "strong", - details: "Generous free tier for developers", - }, - paidPricing: { - status: "strong", - details: "Competitive pricing, transparent tiers", - }, - openSource: { - status: "partial", - details: "Open source SDKs", - }, - selfHosted: { - status: "strong", - details: "Self-hosted option available", - }, - cloudHosted: { - status: "strong", - details: "Fully managed cloud", - }, - analytics: { - status: "strong", - details: "Native integrations with major analytics platforms", - }, - dataWarehouses: { - status: "strong", - details: "Direct data warehouse connections", - }, - cicd: { - status: "strong", - details: "GitHub Actions, GitLab CI, API automation", - }, - webhooks: { - status: "strong", - details: "Real-time webhooks for all events", - }, - }, - }, - { - name: "LaunchDarkly", - logo: , - website: "https://launchdarkly.com", - verificationUrl: "https://launchdarkly.com/pricing", - tagline: { - status: "strong", - details: - "Enterprise-grade feature management platform with advanced targeting", - }, - features: { - booleanFlags: { status: "strong", details: "Full support" }, - multivariateFlags: { - status: "strong", - details: "String, number, JSON variants", - }, - jsonFlags: { - status: "strong", - details: "Complex JSON configurations", - }, - flagDependencies: { - status: "strong", - details: "Prerequisites and dependencies", - }, - scheduledRollouts: { - status: "strong", - details: "Time-based rollout schedules", - }, - userTargeting: { - status: "strong", - details: "Individual user & segment targeting", - }, - percentageRollouts: { - status: "strong", - details: "Gradual rollouts with targeting", - }, - customSegments: { - status: "strong", - details: "Advanced segment builder with rules", - }, - geoTargeting: { - status: "strong", - details: "Country, region, city targeting", - }, - contextualTargeting: { - status: "strong", - details: "Custom context attributes", - }, - abTesting: { - status: "strong", - details: "Built-in experimentation platform", - }, - multivariateExperiments: { - status: "strong", - details: "Multi-armed bandit testing", - }, - statisticalAnalysis: { - status: "strong", - details: "Bayesian statistics engine", - }, - metricsTracking: { status: "strong", details: "Custom metrics & events" }, - experimentGoals: { - status: "strong", - details: "Primary & secondary goals", - }, - sdkLanguages: { - status: "strong", - details: "25+ languages (JS, Python, Go, Java, .NET, etc.)", - }, - localEvaluation: { - status: "strong", - details: "Edge evaluation with streaming updates", - }, - typeSafety: { status: "strong", details: "TypeScript, strongly typed" }, - documentation: { status: "strong", details: "Comprehensive docs" }, - apiQuality: { - status: "strong", - details: "REST API + GraphQL + SDKs", - }, - rbac: { - status: "strong", - details: "Custom roles & permissions", - }, - auditLogs: { - status: "strong", - details: "Complete audit trail", - }, - environments: { - status: "strong", - details: "Unlimited environments", - }, - approvalWorkflows: { - status: "strong", - details: "Change requests & approvals", - }, - compliance: { - status: "strong", - details: "SOC 2, GDPR, HIPAA, FedRAMP", - }, - freeTier: { - status: "partial", - details: "14-day trial, no free tier", - }, - paidPricing: { - status: "strong", - details: "Starts $10/seat/mo (Starter), custom Enterprise", - }, - openSource: { status: "none", details: "Proprietary" }, - selfHosted: { - status: "partial", - details: "Relay Proxy for on-prem", - }, - cloudHosted: { status: "strong", details: "Fully managed SaaS" }, - analytics: { - status: "strong", - details: "DataDog, New Relic, Segment, mParticle", - }, - dataWarehouses: { - status: "strong", - details: "Snowflake, BigQuery data export", - }, - cicd: { - status: "strong", - details: "GitHub Actions, GitLab CI, Terraform", - }, - webhooks: { status: "strong", details: "Flag change webhooks" }, - }, - }, - { - name: "Flagsmith", - logo: , - website: "https://flagsmith.com", - verificationUrl: "https://flagsmith.com/pricing", - tagline: { - status: "strong", - details: "Open source feature flag and remote config service", - }, - features: { - booleanFlags: { status: "strong", details: "Full support" }, - multivariateFlags: { - status: "strong", - details: "String, number, boolean variants", - }, - jsonFlags: { status: "strong", details: "JSON remote config" }, - flagDependencies: { - status: "partial", - details: "Via segment rules", - }, - scheduledRollouts: { - status: "strong", - details: "Scheduled flag changes", - }, - userTargeting: { - status: "strong", - details: "Identity-based targeting", - }, - percentageRollouts: { - status: "strong", - details: "Percentage-based splits", - }, - customSegments: { - status: "strong", - details: "Segment rules & conditions", - }, - geoTargeting: { - status: "partial", - details: "Via custom traits", - }, - contextualTargeting: { - status: "strong", - details: "Custom trait targeting", - }, - abTesting: { - status: "partial", - details: "Basic A/B via integrations", - }, - multivariateExperiments: { - status: "partial", - details: "Via integrations", - }, - statisticalAnalysis: { - status: "partial", - details: "Via analytics integrations", - }, - metricsTracking: { - status: "partial", - details: "Via integrations (Mixpanel, Heap)", - }, - experimentGoals: { - status: "partial", - details: "External analytics required", - }, - sdkLanguages: { - status: "strong", - details: "15+ languages (JS, Python, Java, .NET, Go, etc.)", - }, - localEvaluation: { - status: "strong", - details: "Local evaluation mode", - }, - typeSafety: { - status: "strong", - details: "TypeScript support", - }, - documentation: { - status: "strong", - details: "Good docs with examples", - }, - apiQuality: { - status: "strong", - details: "REST API + client SDKs", - }, - rbac: { - status: "strong", - details: "Roles & permissions (paid)", - }, - auditLogs: { - status: "strong", - details: "Audit log (paid)", - }, - environments: { - status: "strong", - details: "Multiple environments", - }, - approvalWorkflows: { - status: "partial", - details: "4-eyes via external process", - }, - compliance: { - status: "strong", - details: "SOC 2 Type II, GDPR", - }, - freeTier: { - status: "strong", - details: "Generous free tier: 50k requests/mo", - }, - paidPricing: { - status: "strong", - details: "$45/mo (Startup), custom Scale-Up/Enterprise", - }, - openSource: { - status: "strong", - details: "MIT & BSD licenses", - }, - selfHosted: { - status: "strong", - details: "Docker, Kubernetes, full self-host", - }, - cloudHosted: { - status: "strong", - details: "SaaS available", - }, - analytics: { - status: "strong", - details: "Mixpanel, Heap, Amplitude, Segment", - }, - dataWarehouses: { - status: "partial", - details: "Via data export API", - }, - cicd: { - status: "strong", - details: "GitHub Actions, API-based", - }, - webhooks: { - status: "strong", - details: "Change webhooks", - }, - }, - }, - { - name: "Unleash", - logo: , - website: "https://www.getunleash.io", - verificationUrl: "https://www.getunleash.io/pricing", - tagline: { - status: "strong", - details: "Privacy-first open source feature toggle system", - }, - features: { - booleanFlags: { status: "strong", details: "Full support" }, - multivariateFlags: { - status: "strong", - details: "Variants with payloads", - }, - jsonFlags: { - status: "strong", - details: "JSON payloads in variants", - }, - flagDependencies: { - status: "partial", - details: "Via strategy constraints", - }, - scheduledRollouts: { - status: "partial", - details: "Via external scheduling", - }, - userTargeting: { - status: "strong", - details: "User ID targeting", - }, - percentageRollouts: { - status: "strong", - details: "Gradual rollout strategy", - }, - customSegments: { - status: "strong", - details: "Constraint-based segments", - }, - geoTargeting: { - status: "partial", - details: "Via custom constraints", - }, - contextualTargeting: { - status: "strong", - details: "Context fields & constraints", - }, - abTesting: { - status: "partial", - details: "Basic via variant weights", - }, - multivariateExperiments: { - status: "partial", - details: "Variants, no built-in analysis", - }, - statisticalAnalysis: { - status: "none", - details: "External tools required", - }, - metricsTracking: { - status: "partial", - details: "Impression data, no analysis", - }, - experimentGoals: { - status: "none", - details: "Not built-in", - }, - sdkLanguages: { - status: "strong", - details: "20+ languages (JS, Java, Go, Python, .NET, etc.)", - }, - localEvaluation: { - status: "strong", - details: "Edge SDK for local eval", - }, - typeSafety: { - status: "strong", - details: "TypeScript, strongly typed SDKs", - }, - documentation: { - status: "strong", - details: "Excellent documentation", - }, - apiQuality: { - status: "strong", - details: "REST API + Admin API", - }, - rbac: { - status: "strong", - details: "RBAC (Enterprise)", - }, - auditLogs: { - status: "strong", - details: "Event log & audit trail", - }, - environments: { - status: "strong", - details: "Projects & environments", - }, - approvalWorkflows: { - status: "strong", - details: "Change requests (Enterprise)", - }, - compliance: { - status: "strong", - details: "SOC 2, GDPR-ready", - }, - freeTier: { - status: "strong", - details: "Open source (unlimited), Pro free tier", - }, - paidPricing: { - status: "strong", - details: "$80/mo Pro, custom Enterprise", - }, - openSource: { - status: "strong", - details: "Apache 2.0", - }, - selfHosted: { - status: "strong", - details: "Docker, Kubernetes, full self-host", - }, - cloudHosted: { - status: "strong", - details: "Managed cloud available", - }, - analytics: { - status: "partial", - details: "Webhook-based integrations", - }, - dataWarehouses: { - status: "partial", - details: "Event export via webhooks", - }, - cicd: { - status: "strong", - details: "API-driven, GitHub Actions", - }, - webhooks: { - status: "strong", - details: "Event webhooks", - }, - }, - }, - { - name: "PostHog", - logo: , - website: "https://posthog.com", - verificationUrl: "https://posthog.com/pricing", - tagline: { - status: "strong", - details: "All-in-one product OS with feature flags built-in", - }, - features: { - booleanFlags: { status: "strong", details: "Full support" }, - multivariateFlags: { - status: "strong", - details: "Multivariate flags", - }, - jsonFlags: { - status: "strong", - details: "JSON payloads", - }, - flagDependencies: { - status: "partial", - details: "Via property filters", - }, - scheduledRollouts: { - status: "partial", - details: "Manual scheduling", - }, - userTargeting: { - status: "strong", - details: "Person & group targeting", - }, - percentageRollouts: { - status: "strong", - details: "Percentage-based rollouts", - }, - customSegments: { - status: "strong", - details: "Cohorts & property filters", - }, - geoTargeting: { - status: "strong", - details: "GeoIP person properties", - }, - contextualTargeting: { - status: "strong", - details: "Custom properties", - }, - abTesting: { - status: "strong", - details: "Native experimentation platform", - }, - multivariateExperiments: { - status: "strong", - details: "Multi-variant experiments", - }, - statisticalAnalysis: { - status: "strong", - details: "Bayesian & Frequentist stats", - }, - metricsTracking: { - status: "strong", - details: "Full product analytics built-in", - }, - experimentGoals: { - status: "strong", - details: "Primary & secondary metrics", - }, - sdkLanguages: { - status: "strong", - details: "15+ languages (JS, Python, Go, PHP, Ruby, etc.)", - }, - localEvaluation: { - status: "strong", - details: "Local evaluation mode", - }, - typeSafety: { - status: "strong", - details: "TypeScript support", - }, - documentation: { - status: "strong", - details: "Great docs & tutorials", - }, - apiQuality: { - status: "strong", - details: "REST API + client SDKs", - }, - rbac: { - status: "strong", - details: "Organizations & permissions", - }, - auditLogs: { - status: "strong", - details: "Activity log", - }, - environments: { - status: "strong", - details: "Multiple projects", - }, - approvalWorkflows: { - status: "none", - details: "Not currently available", - }, - compliance: { - status: "strong", - details: "SOC 2, GDPR-compliant", - }, - freeTier: { - status: "strong", - details: "1M events/mo free", - }, - paidPricing: { - status: "strong", - details: "Pay-as-you-go: $0.00005/request after 1M", - }, - openSource: { - status: "strong", - details: "MIT license", - }, - selfHosted: { - status: "strong", - details: "Docker, Kubernetes self-host", - }, - cloudHosted: { - status: "strong", - details: "PostHog Cloud (US & EU)", - }, - analytics: { - status: "strong", - details: "Built-in product analytics", - }, - dataWarehouses: { - status: "strong", - details: "Snowflake, BigQuery export", - }, - cicd: { - status: "strong", - details: "API-based, Terraform provider", - }, - webhooks: { - status: "strong", - details: "Action webhooks", - }, - }, - }, - { - name: "Split", - logo: , - website: "https://www.split.io", - verificationUrl: "https://www.split.io/pricing", - tagline: { - status: "strong", - details: "Feature delivery platform with built-in impact monitoring", - }, - features: { - booleanFlags: { status: "strong", details: "Full support" }, - multivariateFlags: { - status: "strong", - details: "Multi-treatment splits", - }, - jsonFlags: { - status: "strong", - details: "Dynamic configurations", - }, - flagDependencies: { - status: "strong", - details: "Split dependencies", - }, - scheduledRollouts: { - status: "strong", - details: "Scheduled rollout plans", - }, - userTargeting: { - status: "strong", - details: "Targeting rules & allow lists", - }, - percentageRollouts: { - status: "strong", - details: "Traffic allocation", - }, - customSegments: { - status: "strong", - details: "Segment definitions", - }, - geoTargeting: { - status: "strong", - details: "Geo-based targeting", - }, - contextualTargeting: { - status: "strong", - details: "Attribute-based targeting", - }, - abTesting: { - status: "strong", - details: "Built-in experimentation", - }, - multivariateExperiments: { - status: "strong", - details: "Multi-treatment tests", - }, - statisticalAnalysis: { - status: "strong", - details: "Statistical engine", - }, - metricsTracking: { - status: "strong", - details: "Impact metrics & tracking", - }, - experimentGoals: { - status: "strong", - details: "Guardrail & primary metrics", - }, - sdkLanguages: { - status: "strong", - details: "12+ languages (JS, Java, Python, .NET, Go, etc.)", - }, - localEvaluation: { - status: "strong", - details: "In-memory evaluation", - }, - typeSafety: { - status: "strong", - details: "TypeScript definitions", - }, - documentation: { - status: "strong", - details: "Comprehensive documentation", - }, - apiQuality: { - status: "strong", - details: "REST API + Admin API", - }, - rbac: { - status: "strong", - details: "Team-based permissions", - }, - auditLogs: { - status: "strong", - details: "Complete audit trail", - }, - environments: { - status: "strong", - details: "Multiple environments", - }, - approvalWorkflows: { - status: "strong", - details: "Approval workflows", - }, - compliance: { - status: "strong", - details: "SOC 2, GDPR", - }, - freeTier: { - status: "partial", - details: "14-day trial, no free tier", - }, - paidPricing: { - status: "strong", - details: "Custom pricing (Team & Enterprise)", - }, - openSource: { - status: "none", - details: "Proprietary", - }, - selfHosted: { - status: "none", - details: "Cloud-only", - }, - cloudHosted: { - status: "strong", - details: "Fully managed SaaS", - }, - analytics: { - status: "strong", - details: "DataDog, New Relic, Segment integrations", - }, - dataWarehouses: { - status: "strong", - details: "Data pipeline to warehouses", - }, - cicd: { - status: "strong", - details: "CI/CD integrations", - }, - webhooks: { - status: "strong", - details: "Webhook notifications", - }, - }, - }, - { - name: "GrowthBook", - logo: , - website: "https://www.growthbook.io", - verificationUrl: "https://www.growthbook.io/pricing", - tagline: { - status: "strong", - details: "Open source feature flagging & A/B testing platform", - }, - features: { - booleanFlags: { status: "strong", details: "Full support" }, - multivariateFlags: { - status: "strong", - details: "Multi-value features", - }, - jsonFlags: { - status: "strong", - details: "JSON feature values", - }, - flagDependencies: { - status: "partial", - details: "Via targeting conditions", - }, - scheduledRollouts: { - status: "partial", - details: "Manual scheduling", - }, - userTargeting: { - status: "strong", - details: "Attribute-based targeting", - }, - percentageRollouts: { - status: "strong", - details: "Gradual rollouts", - }, - customSegments: { - status: "strong", - details: "Saved audiences", - }, - geoTargeting: { - status: "partial", - details: "Via custom attributes", - }, - contextualTargeting: { - status: "strong", - details: "Custom attribute targeting", - }, - abTesting: { - status: "strong", - details: "Visual A/B test builder", - }, - multivariateExperiments: { - status: "strong", - details: "Multi-variant experiments", - }, - statisticalAnalysis: { - status: "strong", - details: "Bayesian & Frequentist engines", - }, - metricsTracking: { - status: "strong", - details: "Metrics from data warehouses", - }, - experimentGoals: { - status: "strong", - details: "Primary & secondary metrics", - }, - sdkLanguages: { - status: "strong", - details: "15+ languages (JS, Python, Go, Ruby, PHP, etc.)", - }, - localEvaluation: { - status: "strong", - details: "Edge-optimized evaluation", - }, - typeSafety: { - status: "strong", - details: "TypeScript support", - }, - documentation: { - status: "strong", - details: "Good documentation", - }, - apiQuality: { - status: "strong", - details: "REST API + SDKs", - }, - rbac: { - status: "strong", - details: "Role-based permissions (Pro)", - }, - auditLogs: { - status: "strong", - details: "Audit log", - }, - environments: { - status: "strong", - details: "Multiple environments", - }, - approvalWorkflows: { - status: "partial", - details: "Via external process", - }, - compliance: { - status: "strong", - details: "SOC 2, GDPR", - }, - freeTier: { - status: "strong", - details: "Unlimited (self-hosted), Cloud free tier", - }, - paidPricing: { - status: "strong", - details: "$20/seat/mo Pro, custom Enterprise", - }, - openSource: { - status: "strong", - details: "MIT license", - }, - selfHosted: { - status: "strong", - details: "Docker self-host", - }, - cloudHosted: { - status: "strong", - details: "Managed cloud", - }, - analytics: { - status: "strong", - details: "Connects to data warehouses", - }, - dataWarehouses: { - status: "strong", - details: "Snowflake, BigQuery, Redshift, Mixpanel, GA", - }, - cicd: { - status: "strong", - details: "API-based automation", - }, - webhooks: { - status: "strong", - details: "Feature change webhooks", - }, - }, - }, - { - name: "DevCycle", - logo: , - website: "https://devcycle.com", - verificationUrl: "https://devcycle.com/pricing", - tagline: { - status: "strong", - details: "Developer-first feature flag management platform", - }, - features: { - booleanFlags: { status: "strong", details: "Full support" }, - multivariateFlags: { - status: "strong", - details: "Multi-value variables", - }, - jsonFlags: { - status: "strong", - details: "JSON variables", - }, - flagDependencies: { - status: "partial", - details: "Via targeting rules", - }, - scheduledRollouts: { - status: "strong", - details: "Scheduled changes", - }, - userTargeting: { - status: "strong", - details: "User & custom targeting", - }, - percentageRollouts: { - status: "strong", - details: "Percentage-based distribution", - }, - customSegments: { - status: "strong", - details: "Custom audiences", - }, - geoTargeting: { - status: "partial", - details: "Via custom properties", - }, - contextualTargeting: { - status: "strong", - details: "Custom property targeting", - }, - abTesting: { - status: "strong", - details: "Built-in experimentation", - }, - multivariateExperiments: { - status: "strong", - details: "Multi-variant tests", - }, - statisticalAnalysis: { - status: "partial", - details: "Basic statistics", - }, - metricsTracking: { - status: "strong", - details: "Event tracking", - }, - experimentGoals: { - status: "strong", - details: "Goal metrics", - }, - sdkLanguages: { - status: "strong", - details: "12+ languages (JS, React, Node, Python, Go, etc.)", - }, - localEvaluation: { - status: "strong", - details: "Local bucketing", - }, - typeSafety: { - status: "strong", - details: "Type-safe SDKs", - }, - documentation: { - status: "strong", - details: "Developer-focused docs", - }, - apiQuality: { - status: "strong", - details: "Management API + SDKs", - }, - rbac: { - status: "strong", - details: "Team permissions", - }, - auditLogs: { - status: "strong", - details: "Activity logs", - }, - environments: { - status: "strong", - details: "Multiple environments", - }, - approvalWorkflows: { - status: "partial", - details: "Review process", - }, - compliance: { - status: "strong", - details: "SOC 2, GDPR", - }, - freeTier: { - status: "strong", - details: "Free tier: 1k MAU", - }, - paidPricing: { - status: "strong", - details: "$30/mo (Startup), custom Growth/Enterprise", - }, - openSource: { - status: "partial", - details: "Open source SDKs", - }, - selfHosted: { - status: "none", - details: "Cloud-only", - }, - cloudHosted: { - status: "strong", - details: "Managed SaaS", - }, - analytics: { - status: "strong", - details: "Analytics integrations", - }, - dataWarehouses: { - status: "partial", - details: "Data export", - }, - cicd: { - status: "strong", - details: "GitHub integration, API", - }, - webhooks: { - status: "strong", - details: "Event webhooks", - }, - }, - }, - { - name: "ConfigCat", - logo: , - website: "https://configcat.com", - verificationUrl: "https://configcat.com/pricing", - tagline: { - status: "strong", - details: "Feature flag service with 10-minute setup", - }, - features: { - booleanFlags: { status: "strong", details: "Full support" }, - multivariateFlags: { - status: "strong", - details: "String, number, JSON", - }, - jsonFlags: { - status: "strong", - details: "JSON setting values", - }, - flagDependencies: { - status: "partial", - details: "Via targeting rules", - }, - scheduledRollouts: { - status: "partial", - details: "Manual time-based changes", - }, - userTargeting: { - status: "strong", - details: "User object targeting", - }, - percentageRollouts: { - status: "strong", - details: "Percentage options", - }, - customSegments: { - status: "strong", - details: "Segments with conditions", - }, - geoTargeting: { - status: "partial", - details: "Via custom attributes", - }, - contextualTargeting: { - status: "strong", - details: "Custom attribute targeting", - }, - abTesting: { - status: "partial", - details: "Basic A/B via percentages", - }, - multivariateExperiments: { - status: "partial", - details: "Via integrations", - }, - statisticalAnalysis: { - status: "none", - details: "External tools needed", - }, - metricsTracking: { - status: "partial", - details: "Via integrations", - }, - experimentGoals: { - status: "none", - details: "Not built-in", - }, - sdkLanguages: { - status: "strong", - details: "25+ languages (JS, Java, Python, .NET, Go, etc.)", - }, - localEvaluation: { - status: "strong", - details: "Auto-polling with caching", - }, - typeSafety: { - status: "strong", - details: "Strongly typed SDKs", - }, - documentation: { - status: "strong", - details: "Clear documentation", - }, - apiQuality: { - status: "strong", - details: "Public Management API", - }, - rbac: { - status: "strong", - details: "Permission groups (Team+)", - }, - auditLogs: { - status: "strong", - details: "Product audit log", - }, - environments: { - status: "strong", - details: "Unlimited configs & environments", - }, - approvalWorkflows: { - status: "partial", - details: "Two-step save", - }, - compliance: { - status: "strong", - details: "SOC 2, GDPR, CCPA", - }, - freeTier: { - status: "strong", - details: "Free forever: 10 flags, 1k requests", - }, - paidPricing: { - status: "strong", - details: "$39/mo (Pro), $139/mo (Smart), custom Enterprise", - }, - openSource: { - status: "partial", - details: "Open source SDKs", - }, - selfHosted: { - status: "none", - details: "Cloud-only", - }, - cloudHosted: { - status: "strong", - details: "Fully managed SaaS", - }, - analytics: { - status: "strong", - details: "Google Analytics, Mixpanel, Amplitude", - }, - dataWarehouses: { - status: "partial", - details: "Webhook-based export", - }, - cicd: { - status: "strong", - details: "Slack, Jira, Trello, Zapier, GitHub", - }, - webhooks: { - status: "strong", - details: "Config change webhooks", - }, - }, - }, -]; - -export const featureFlagsComparisonConfig: ComparisonConfig = { - title: "featureflags.compare", - subtitle: "⋅ Easily compare different feature flag providers and platforms", - icon: , - providers, - categories, - lastUpdated: "2025-10-03", -}; diff --git a/src/data/featureflags/configcat.tsx b/src/data/featureflags/configcat.tsx new file mode 100644 index 0000000..bf953a3 --- /dev/null +++ b/src/data/featureflags/configcat.tsx @@ -0,0 +1,167 @@ +import type { Provider } from "../../types/comparison"; + +function ConfigCatLogo() { + return ( + + ConfigCat + + + + ); +} + +export const configcat: Provider = { + name: "ConfigCat", + logo: , + website: "https://configcat.com", + tagline: { + status: "strong", + details: "Feature flag service with 10-minute setup", + }, + features: { + booleanFlags: { status: "strong", details: "Full support" }, + multivariateFlags: { + status: "strong", + details: "String, number, JSON", + }, + jsonFlags: { + status: "strong", + details: "JSON setting values", + }, + flagDependencies: { + status: "partial", + details: "Via targeting rules", + }, + scheduledRollouts: { + status: "partial", + details: "Manual time-based changes", + }, + userTargeting: { + status: "strong", + details: "User object targeting", + }, + percentageRollouts: { + status: "strong", + details: "Percentage options", + }, + customSegments: { + status: "strong", + details: "Segments with conditions", + }, + geoTargeting: { + status: "partial", + details: "Via custom attributes", + }, + contextualTargeting: { + status: "strong", + details: "Custom attribute targeting", + }, + abTesting: { + status: "partial", + details: "Basic A/B via percentages", + }, + multivariateExperiments: { + status: "partial", + details: "Via integrations", + }, + statisticalAnalysis: { + status: "none", + details: "External tools needed", + }, + metricsTracking: { + status: "partial", + details: "Via integrations", + }, + experimentGoals: { + status: "none", + details: "Not built-in", + }, + sdkLanguages: { + status: "strong", + details: "25+ languages (JS, Java, Python, .NET, Go, etc.)", + }, + localEvaluation: { + status: "strong", + details: "Auto-polling with caching", + }, + typeSafety: { + status: "strong", + details: "Strongly typed SDKs", + }, + documentation: { + status: "strong", + details: "Clear documentation", + }, + apiQuality: { + status: "strong", + details: "Public Management API", + }, + rbac: { + status: "strong", + details: "Permission groups (Team+)", + }, + auditLogs: { + status: "strong", + details: "Product audit log", + }, + environments: { + status: "strong", + details: "Unlimited configs & environments", + }, + approvalWorkflows: { + status: "partial", + details: "Two-step save", + }, + compliance: { + status: "strong", + details: "SOC 2, GDPR, CCPA", + }, + freeTier: { + status: "strong", + details: "Free: 10 flags, 2 environments, 5M config downloads", + }, + paidPricing: { + status: "strong", + details: "Pro: $110/mo (100 flags), Smart: $325/mo (unlimited)", + }, + openSource: { + status: "partial", + details: "Open source SDKs", + }, + selfHosted: { + status: "none", + details: "Cloud-only", + }, + cloudHosted: { + status: "strong", + details: "Fully managed SaaS", + }, + analytics: { + status: "strong", + details: "Google Analytics, Mixpanel, Amplitude", + }, + dataWarehouses: { + status: "partial", + details: "Webhook-based export", + }, + cicd: { + status: "strong", + details: "Slack, Jira, Trello, Zapier, GitHub", + }, + webhooks: { + status: "strong", + details: "Config change webhooks", + }, + }, +}; diff --git a/src/data/featureflags/devcycle.tsx b/src/data/featureflags/devcycle.tsx new file mode 100644 index 0000000..d8ac14c --- /dev/null +++ b/src/data/featureflags/devcycle.tsx @@ -0,0 +1,167 @@ +import type { Provider } from "../../types/comparison"; + +function DevCycleLogo() { + return ( + + DevCycle + + + + + ); +} + +export const devcycle: Provider = { + name: "DevCycle", + logo: , + website: "https://devcycle.com", + tagline: { + status: "strong", + details: "Developer-first feature flag management platform", + }, + features: { + booleanFlags: { status: "strong", details: "Full support" }, + multivariateFlags: { + status: "strong", + details: "Multi-value variables", + }, + jsonFlags: { + status: "strong", + details: "JSON variables", + }, + flagDependencies: { + status: "partial", + details: "Via targeting rules", + }, + scheduledRollouts: { + status: "strong", + details: "Scheduled changes", + }, + userTargeting: { + status: "strong", + details: "User & custom targeting", + }, + percentageRollouts: { + status: "strong", + details: "Percentage-based distribution", + }, + customSegments: { + status: "strong", + details: "Custom audiences", + }, + geoTargeting: { + status: "partial", + details: "Via custom properties", + }, + contextualTargeting: { + status: "strong", + details: "Custom property targeting", + }, + abTesting: { + status: "strong", + details: "Built-in experimentation", + }, + multivariateExperiments: { + status: "strong", + details: "Multi-variant tests", + }, + statisticalAnalysis: { + status: "partial", + details: "Basic statistics", + }, + metricsTracking: { + status: "strong", + details: "Event tracking", + }, + experimentGoals: { + status: "strong", + details: "Goal metrics", + }, + sdkLanguages: { + status: "strong", + details: "12+ languages (JS, React, Node, Python, Go, etc.)", + }, + localEvaluation: { + status: "strong", + details: "Local bucketing", + }, + typeSafety: { + status: "strong", + details: "Type-safe SDKs", + }, + documentation: { + status: "strong", + details: "Developer-focused docs", + }, + apiQuality: { + status: "strong", + details: "Management API + SDKs", + }, + rbac: { + status: "strong", + details: "Team permissions", + }, + auditLogs: { + status: "strong", + details: "Activity logs", + }, + environments: { + status: "strong", + details: "Multiple environments", + }, + approvalWorkflows: { + status: "partial", + details: "Review process", + }, + compliance: { + status: "strong", + details: "SOC 2, GDPR", + }, + freeTier: { + status: "strong", + details: "Free: 1K client MAUs", + }, + paidPricing: { + status: "strong", + details: "Developer: $10/mo (annual), Business: $500/mo (annual)", + }, + openSource: { + status: "partial", + details: "Open source SDKs", + }, + selfHosted: { + status: "none", + details: "Cloud-only", + }, + cloudHosted: { + status: "strong", + details: "Managed SaaS", + }, + analytics: { + status: "strong", + details: "Analytics integrations", + }, + dataWarehouses: { + status: "partial", + details: "Data export", + }, + cicd: { + status: "strong", + details: "GitHub integration, API", + }, + webhooks: { + status: "strong", + details: "Event webhooks", + }, + }, +}; diff --git a/src/data/featureflags/flagsmith.tsx b/src/data/featureflags/flagsmith.tsx new file mode 100644 index 0000000..64ec636 --- /dev/null +++ b/src/data/featureflags/flagsmith.tsx @@ -0,0 +1,159 @@ +import type { Provider } from "../../types/comparison"; + +function FlagsmithLogo() { + return ( + + Flagsmith + + + + + ); +} + +export const flagsmith: Provider = { + name: "Flagsmith", + logo: , + website: "https://flagsmith.com", + tagline: { + status: "strong", + details: "Open source feature flag and remote config service", + }, + features: { + booleanFlags: { status: "strong", details: "Full support" }, + multivariateFlags: { + status: "strong", + details: "String, number, boolean variants", + }, + jsonFlags: { status: "strong", details: "JSON remote config" }, + flagDependencies: { + status: "partial", + details: "Via segment rules", + }, + scheduledRollouts: { + status: "strong", + details: "Scheduled flag changes", + }, + userTargeting: { + status: "strong", + details: "Identity-based targeting", + }, + percentageRollouts: { + status: "strong", + details: "Percentage-based splits", + }, + customSegments: { + status: "strong", + details: "Segment rules & conditions", + }, + geoTargeting: { + status: "partial", + details: "Via custom traits", + }, + contextualTargeting: { + status: "strong", + details: "Custom trait targeting", + }, + abTesting: { + status: "partial", + details: "Basic A/B via integrations", + }, + multivariateExperiments: { + status: "partial", + details: "Via integrations", + }, + statisticalAnalysis: { + status: "partial", + details: "Via analytics integrations", + }, + metricsTracking: { + status: "partial", + details: "Via integrations (Mixpanel, Heap)", + }, + experimentGoals: { + status: "partial", + details: "External analytics required", + }, + sdkLanguages: { + status: "strong", + details: "15+ languages (JS, Python, Java, .NET, Go, etc.)", + }, + localEvaluation: { + status: "strong", + details: "Local evaluation mode", + }, + typeSafety: { + status: "strong", + details: "TypeScript support", + }, + documentation: { + status: "strong", + details: "Good docs with examples", + }, + apiQuality: { + status: "strong", + details: "REST API + client SDKs", + }, + rbac: { + status: "strong", + details: "Roles & permissions (paid)", + }, + auditLogs: { + status: "strong", + details: "Audit log (paid)", + }, + environments: { + status: "strong", + details: "Multiple environments", + }, + approvalWorkflows: { + status: "partial", + details: "4-eyes via external process", + }, + compliance: { + status: "strong", + details: "SOC 2 Type II, GDPR", + }, + freeTier: { + status: "strong", + details: "Free: 50K requests/month, 1 team member", + }, + paidPricing: { + status: "strong", + details: "Start-Up: $45/mo, 1M requests, 3 team members", + }, + openSource: { + status: "strong", + details: "MIT & BSD licenses", + }, + selfHosted: { + status: "strong", + details: "Docker, Kubernetes, full self-host", + }, + cloudHosted: { + status: "strong", + details: "SaaS available", + }, + analytics: { + status: "strong", + details: "Mixpanel, Heap, Amplitude, Segment", + }, + dataWarehouses: { + status: "partial", + details: "Via data export API", + }, + cicd: { + status: "strong", + details: "GitHub Actions, API-based", + }, + webhooks: { + status: "strong", + details: "Change webhooks", + }, + }, +}; diff --git a/src/data/featureflags/growthbook.tsx b/src/data/featureflags/growthbook.tsx new file mode 100644 index 0000000..fa6421f --- /dev/null +++ b/src/data/featureflags/growthbook.tsx @@ -0,0 +1,165 @@ +import type { Provider } from "../../types/comparison"; + +function GrowthBookLogo() { + return ( + + GrowthBook + + + + ); +} + +export const growthbook: Provider = { + name: "GrowthBook", + logo: , + website: "https://www.growthbook.io", + tagline: { + status: "strong", + details: "Open source feature flagging & A/B testing platform", + }, + features: { + booleanFlags: { status: "strong", details: "Full support" }, + multivariateFlags: { + status: "strong", + details: "Multi-value features", + }, + jsonFlags: { + status: "strong", + details: "JSON feature values", + }, + flagDependencies: { + status: "partial", + details: "Via targeting conditions", + }, + scheduledRollouts: { + status: "partial", + details: "Manual scheduling", + }, + userTargeting: { + status: "strong", + details: "Attribute-based targeting", + }, + percentageRollouts: { + status: "strong", + details: "Gradual rollouts", + }, + customSegments: { + status: "strong", + details: "Saved audiences", + }, + geoTargeting: { + status: "partial", + details: "Via custom attributes", + }, + contextualTargeting: { + status: "strong", + details: "Custom attribute targeting", + }, + abTesting: { + status: "strong", + details: "Visual A/B test builder", + }, + multivariateExperiments: { + status: "strong", + details: "Multi-variant experiments", + }, + statisticalAnalysis: { + status: "strong", + details: "Bayesian & Frequentist engines", + }, + metricsTracking: { + status: "strong", + details: "Metrics from data warehouses", + }, + experimentGoals: { + status: "strong", + details: "Primary & secondary metrics", + }, + sdkLanguages: { + status: "strong", + details: "15+ languages (JS, Python, Go, Ruby, PHP, etc.)", + }, + localEvaluation: { + status: "strong", + details: "Edge-optimized evaluation", + }, + typeSafety: { + status: "strong", + details: "TypeScript support", + }, + documentation: { + status: "strong", + details: "Good documentation", + }, + apiQuality: { + status: "strong", + details: "REST API + SDKs", + }, + rbac: { + status: "strong", + details: "Role-based permissions (Pro)", + }, + auditLogs: { + status: "strong", + details: "Audit log", + }, + environments: { + status: "strong", + details: "Multiple environments", + }, + approvalWorkflows: { + status: "partial", + details: "Via external process", + }, + compliance: { + status: "strong", + details: "SOC 2, GDPR", + }, + freeTier: { + status: "strong", + details: "Unlimited (self-hosted), Cloud free tier", + }, + paidPricing: { + status: "strong", + details: "$20/seat/mo Pro, custom Enterprise", + }, + openSource: { + status: "strong", + details: "MIT license", + }, + selfHosted: { + status: "strong", + details: "Docker self-host", + }, + cloudHosted: { + status: "strong", + details: "Managed cloud", + }, + analytics: { + status: "strong", + details: "Connects to data warehouses", + }, + dataWarehouses: { + status: "strong", + details: "Snowflake, BigQuery, Redshift, Mixpanel, GA", + }, + cicd: { + status: "strong", + details: "API-based automation", + }, + webhooks: { + status: "strong", + details: "Feature change webhooks", + }, + }, +}; diff --git a/src/data/featureflags/index.tsx b/src/data/featureflags/index.tsx new file mode 100644 index 0000000..5ef4290 --- /dev/null +++ b/src/data/featureflags/index.tsx @@ -0,0 +1,136 @@ +import RiCodeLine from "remixicon-react/CodeLineIcon"; +import RiFlag2Line from "remixicon-react/Flag2LineIcon"; +import RiGroupLine from "remixicon-react/GroupLineIcon"; +import RiLineChartLine from "remixicon-react/LineChartLineIcon"; +import RiMoneyDollarCircleLine from "remixicon-react/MoneyDollarCircleLineIcon"; +import RiPlugLine from "remixicon-react/PlugLineIcon"; +import RiServerLine from "remixicon-react/ServerLineIcon"; +import RiShieldCheckLine from "remixicon-react/ShieldCheckLineIcon"; +import type { Category, ComparisonConfig } from "../../types/comparison"; +import { configcat } from "./configcat"; +import { devcycle } from "./devcycle"; +import { flagsmith } from "./flagsmith"; +import { growthbook } from "./growthbook"; +import { launchdarkly } from "./launchdarkly"; +import { posthog } from "./posthog"; +// Import all providers +import { reflag } from "./reflag"; +import { split } from "./split"; +import { unleash } from "./unleash"; + +// Feature Categories +export const categories: Category[] = [ + { + id: "flagManagement", + label: "Flag Management", + icon: , + features: { + booleanFlags: "Boolean Flags", + multivariateFlags: "Multivariate Flags", + jsonFlags: "JSON/Complex Flags", + flagDependencies: "Flag Dependencies", + scheduledRollouts: "Scheduled Rollouts", + }, + }, + { + id: "targeting", + label: "Targeting & Segmentation", + icon: , + features: { + userTargeting: "User Targeting", + percentageRollouts: "Percentage Rollouts", + customSegments: "Custom Segments", + geoTargeting: "Geographic Targeting", + contextualTargeting: "Contextual Targeting", + }, + }, + { + id: "experimentation", + label: "Experimentation & Analytics", + icon: , + features: { + abTesting: "A/B Testing", + multivariateExperiments: "Multivariate Experiments", + statisticalAnalysis: "Statistical Analysis", + metricsTracking: "Metrics Tracking", + experimentGoals: "Experiment Goals", + }, + }, + { + id: "developerExperience", + label: "Developer Experience", + icon: , + features: { + sdkLanguages: "SDK Languages", + localEvaluation: "Local Evaluation", + typeSafety: "Type Safety", + documentation: "Documentation", + apiQuality: "API/REST Quality", + }, + }, + { + id: "security", + label: "Security & Compliance", + icon: , + features: { + rbac: "Role-Based Access Control", + auditLogs: "Audit Logs", + environments: "Multiple Environments", + approvalWorkflows: "Approval Workflows", + compliance: "Compliance (SOC 2, GDPR)", + }, + }, + { + id: "pricing", + label: "Pricing", + icon: , + features: { + freeTier: "Free Tier", + paidPricing: "Paid Pricing", + }, + }, + { + id: "deployment", + label: "Deployment", + icon: , + features: { + openSource: "Open Source", + selfHosted: "Self-Hosted Option", + cloudHosted: "Cloud Hosted", + }, + }, + { + id: "integrations", + label: "Integrations", + icon: , + features: { + analytics: "Analytics Integrations", + dataWarehouses: "Data Warehouses", + cicd: "CI/CD Integration", + webhooks: "Webhooks", + }, + }, +]; + +// Providers array +export const providers = [ + reflag, + launchdarkly, + flagsmith, + unleash, + posthog, + split, + growthbook, + devcycle, + configcat, +]; + +// Comparison config export +export const featureFlagsComparisonConfig: ComparisonConfig = { + title: "featureflags.compare", + subtitle: "⋅ Easily compare different feature flag providers and platforms", + icon: , + providers, + categories, + lastUpdated: "2025-10-03", +}; diff --git a/src/data/featureflags/launchdarkly.tsx b/src/data/featureflags/launchdarkly.tsx new file mode 100644 index 0000000..b0bc4a9 --- /dev/null +++ b/src/data/featureflags/launchdarkly.tsx @@ -0,0 +1,152 @@ +import type { Provider } from "../../types/comparison"; + +function LaunchDarklyLogo() { + return ( + + LaunchDarkly + + + + + + ); +} + +export const launchdarkly: Provider = { + name: "LaunchDarkly", + logo: , + website: "https://launchdarkly.com", + tagline: { + status: "strong", + details: + "Enterprise-grade feature management platform with advanced targeting", + }, + features: { + booleanFlags: { status: "strong", details: "Full support" }, + multivariateFlags: { + status: "strong", + details: "String, number, JSON variants", + }, + jsonFlags: { + status: "strong", + details: "Complex JSON configurations", + }, + flagDependencies: { + status: "strong", + details: "Prerequisites and dependencies", + }, + scheduledRollouts: { + status: "strong", + details: "Time-based rollout schedules", + }, + userTargeting: { + status: "strong", + details: "Individual user & segment targeting", + }, + percentageRollouts: { + status: "strong", + details: "Gradual rollouts with targeting", + }, + customSegments: { + status: "strong", + details: "Advanced segment builder with rules", + }, + geoTargeting: { + status: "strong", + details: "Country, region, city targeting", + }, + contextualTargeting: { + status: "strong", + details: "Custom context attributes", + }, + abTesting: { + status: "strong", + details: "Built-in experimentation platform", + }, + multivariateExperiments: { + status: "strong", + details: "Multi-armed bandit testing", + }, + statisticalAnalysis: { + status: "strong", + details: "Bayesian statistics engine", + }, + metricsTracking: { status: "strong", details: "Custom metrics & events" }, + experimentGoals: { + status: "strong", + details: "Primary & secondary goals", + }, + sdkLanguages: { + status: "strong", + details: "25+ languages (JS, Python, Go, Java, .NET, etc.)", + }, + localEvaluation: { + status: "strong", + details: "Edge evaluation with streaming updates", + }, + typeSafety: { status: "strong", details: "TypeScript, strongly typed" }, + documentation: { status: "strong", details: "Comprehensive docs" }, + apiQuality: { + status: "strong", + details: "REST API + GraphQL + SDKs", + }, + rbac: { + status: "strong", + details: "Custom roles & permissions", + }, + auditLogs: { + status: "strong", + details: "Complete audit trail", + }, + environments: { + status: "strong", + details: "Unlimited environments", + }, + approvalWorkflows: { + status: "strong", + details: "Change requests & approvals", + }, + compliance: { + status: "strong", + details: "SOC 2, GDPR, HIPAA, FedRAMP", + }, + freeTier: { + status: "strong", + details: + "Developer: Free, unlimited seats, 5 service connections, 1K client MAUs", + }, + paidPricing: { + status: "strong", + details: "Foundation: $12/service connection + $10/1K client MAU", + }, + openSource: { status: "none", details: "Proprietary" }, + selfHosted: { + status: "partial", + details: "Relay Proxy for on-prem", + }, + cloudHosted: { status: "strong", details: "Fully managed SaaS" }, + analytics: { + status: "strong", + details: "DataDog, New Relic, Segment, mParticle", + }, + dataWarehouses: { + status: "strong", + details: "Snowflake, BigQuery data export", + }, + cicd: { + status: "strong", + details: "GitHub Actions, GitLab CI, Terraform", + }, + webhooks: { status: "strong", details: "Flag change webhooks" }, + }, +}; diff --git a/src/data/featureflags/posthog.tsx b/src/data/featureflags/posthog.tsx new file mode 100644 index 0000000..5334f55 --- /dev/null +++ b/src/data/featureflags/posthog.tsx @@ -0,0 +1,168 @@ +import type { Provider } from "../../types/comparison"; + +function PostHogLogo() { + return ( + + PostHog + + + + ); +} + +export const posthog: Provider = { + name: "PostHog", + logo: , + website: "https://posthog.com", + tagline: { + status: "strong", + details: "All-in-one product OS with feature flags built-in", + }, + features: { + booleanFlags: { status: "strong", details: "Full support" }, + multivariateFlags: { + status: "strong", + details: "Multivariate flags", + }, + jsonFlags: { + status: "strong", + details: "JSON payloads", + }, + flagDependencies: { + status: "partial", + details: "Via property filters", + }, + scheduledRollouts: { + status: "partial", + details: "Manual scheduling", + }, + userTargeting: { + status: "strong", + details: "Person & group targeting", + }, + percentageRollouts: { + status: "strong", + details: "Percentage-based rollouts", + }, + customSegments: { + status: "strong", + details: "Cohorts & property filters", + }, + geoTargeting: { + status: "strong", + details: "GeoIP person properties", + }, + contextualTargeting: { + status: "strong", + details: "Custom properties", + }, + abTesting: { + status: "strong", + details: "Native experimentation platform", + }, + multivariateExperiments: { + status: "strong", + details: "Multi-variant experiments", + }, + statisticalAnalysis: { + status: "strong", + details: "Bayesian & Frequentist stats", + }, + metricsTracking: { + status: "strong", + details: "Full product analytics built-in", + }, + experimentGoals: { + status: "strong", + details: "Primary & secondary metrics", + }, + sdkLanguages: { + status: "strong", + details: "15+ languages (JS, Python, Go, PHP, Ruby, etc.)", + }, + localEvaluation: { + status: "strong", + details: "Local evaluation mode", + }, + typeSafety: { + status: "strong", + details: "TypeScript support", + }, + documentation: { + status: "strong", + details: "Great docs & tutorials", + }, + apiQuality: { + status: "strong", + details: "REST API + client SDKs", + }, + rbac: { + status: "strong", + details: "Organizations & permissions", + }, + auditLogs: { + status: "strong", + details: "Activity log", + }, + environments: { + status: "strong", + details: "Multiple projects", + }, + approvalWorkflows: { + status: "none", + details: "Not currently available", + }, + compliance: { + status: "strong", + details: "SOC 2, GDPR-compliant", + }, + freeTier: { + status: "strong", + details: "1M events/mo free", + }, + paidPricing: { + status: "strong", + details: "Pay-as-you-go: $0.00005/request after 1M", + }, + openSource: { + status: "strong", + details: "MIT license", + }, + selfHosted: { + status: "strong", + details: "Docker, Kubernetes self-host", + }, + cloudHosted: { + status: "strong", + details: "PostHog Cloud (US & EU)", + }, + analytics: { + status: "strong", + details: "Built-in product analytics", + }, + dataWarehouses: { + status: "strong", + details: "Snowflake, BigQuery export", + }, + cicd: { + status: "strong", + details: "API-based, Terraform provider", + }, + webhooks: { + status: "strong", + details: "Action webhooks", + }, + }, +}; diff --git a/src/data/featureflags/reflag.tsx b/src/data/featureflags/reflag.tsx new file mode 100644 index 0000000..a772614 --- /dev/null +++ b/src/data/featureflags/reflag.tsx @@ -0,0 +1,173 @@ +import type { Provider } from "../../types/comparison"; + +function ReflagLogo() { + return ( + + Reflag + + + + ); +} + +export const reflag: Provider = { + name: "Reflag", + logo: , + website: "https://reflag.com", + tagline: { + status: "strong", + details: "Modern feature flag platform built for developer experience", + reference: "https://reflag.com", + }, + features: { + booleanFlags: { + status: "strong", + details: "Full support", + reference: "https://reflag.com/docs/flags", + }, + multivariateFlags: { + status: "strong", + details: "Multi-value flags with variants", + reference: "https://reflag.com/docs/flags", + }, + jsonFlags: { + status: "strong", + details: "JSON configuration support", + reference: "https://reflag.com/docs/flags", + }, + flagDependencies: { + status: "strong", + details: "Flag prerequisites & dependencies", + reference: "https://reflag.com/docs/flags", + }, + scheduledRollouts: { + status: "strong", + details: "Time-based scheduled rollouts", + reference: "https://reflag.com/docs/rollouts", + }, + userTargeting: { + status: "strong", + details: "User & attribute targeting", + }, + percentageRollouts: { + status: "strong", + details: "Gradual percentage-based rollouts", + }, + customSegments: { + status: "strong", + details: "Advanced segment builder", + }, + geoTargeting: { + status: "strong", + details: "Geographic targeting built-in", + }, + contextualTargeting: { + status: "strong", + details: "Rich context targeting", + }, + abTesting: { + status: "strong", + details: "Native A/B testing", + }, + multivariateExperiments: { + status: "strong", + details: "Multi-variant experiments", + }, + statisticalAnalysis: { + status: "strong", + details: "Built-in statistical analysis", + }, + metricsTracking: { + status: "strong", + details: "Custom metrics & goals", + }, + experimentGoals: { + status: "strong", + details: "Multiple goal tracking", + }, + sdkLanguages: { + status: "strong", + details: "JavaScript, TypeScript, React, Node.js, Python, Go (expanding)", + }, + localEvaluation: { + status: "strong", + details: "Edge-optimized local evaluation", + }, + typeSafety: { + status: "strong", + details: "Full TypeScript support, auto-generated types", + }, + documentation: { + status: "strong", + details: "Comprehensive docs with examples", + }, + apiQuality: { + status: "strong", + details: "Modern REST API + GraphQL + SDKs", + }, + rbac: { + status: "strong", + details: "Granular role-based permissions", + }, + auditLogs: { + status: "strong", + details: "Complete audit trail", + }, + environments: { + status: "strong", + details: "Unlimited environments", + }, + approvalWorkflows: { + status: "strong", + details: "Multi-stage approval workflows", + }, + compliance: { + status: "strong", + details: "SOC 2, GDPR, CCPA compliant", + }, + freeTier: { + status: "strong", + details: "Generous free tier for developers", + }, + paidPricing: { + status: "strong", + details: "Competitive pricing, transparent tiers", + }, + openSource: { + status: "partial", + details: "Open source SDKs", + }, + selfHosted: { + status: "strong", + details: "Self-hosted option available", + }, + cloudHosted: { + status: "strong", + details: "Fully managed cloud", + }, + analytics: { + status: "strong", + details: "Native integrations with major analytics platforms", + }, + dataWarehouses: { + status: "strong", + details: "Direct data warehouse connections", + }, + cicd: { + status: "strong", + details: "GitHub Actions, GitLab CI, API automation", + }, + webhooks: { + status: "strong", + details: "Real-time webhooks for all events", + }, + }, +}; diff --git a/src/data/featureflags/split.tsx b/src/data/featureflags/split.tsx new file mode 100644 index 0000000..a45e4b6 --- /dev/null +++ b/src/data/featureflags/split.tsx @@ -0,0 +1,161 @@ +import type { Provider } from "../../types/comparison"; + +function SplitLogo() { + return ( + + Split + + + + ); +} + +export const split: Provider = { + name: "Split", + logo: , + website: "https://www.split.io", + tagline: { + status: "strong", + details: "Feature delivery platform with built-in impact monitoring", + }, + features: { + booleanFlags: { status: "strong", details: "Full support" }, + multivariateFlags: { + status: "strong", + details: "Multi-treatment splits", + }, + jsonFlags: { + status: "strong", + details: "Dynamic configurations", + }, + flagDependencies: { + status: "strong", + details: "Split dependencies", + }, + scheduledRollouts: { + status: "strong", + details: "Scheduled rollout plans", + }, + userTargeting: { + status: "strong", + details: "Targeting rules & allow lists", + }, + percentageRollouts: { + status: "strong", + details: "Traffic allocation", + }, + customSegments: { + status: "strong", + details: "Segment definitions", + }, + geoTargeting: { + status: "strong", + details: "Geo-based targeting", + }, + contextualTargeting: { + status: "strong", + details: "Attribute-based targeting", + }, + abTesting: { + status: "strong", + details: "Built-in experimentation", + }, + multivariateExperiments: { + status: "strong", + details: "Multi-treatment tests", + }, + statisticalAnalysis: { + status: "strong", + details: "Statistical engine", + }, + metricsTracking: { + status: "strong", + details: "Impact metrics & tracking", + }, + experimentGoals: { + status: "strong", + details: "Guardrail & primary metrics", + }, + sdkLanguages: { + status: "strong", + details: "12+ languages (JS, Java, Python, .NET, Go, etc.)", + }, + localEvaluation: { + status: "strong", + details: "In-memory evaluation", + }, + typeSafety: { + status: "strong", + details: "TypeScript definitions", + }, + documentation: { + status: "strong", + details: "Comprehensive documentation", + }, + apiQuality: { + status: "strong", + details: "REST API + Admin API", + }, + rbac: { + status: "strong", + details: "Team-based permissions", + }, + auditLogs: { + status: "strong", + details: "Complete audit trail", + }, + environments: { + status: "strong", + details: "Multiple environments", + }, + approvalWorkflows: { + status: "strong", + details: "Approval workflows", + }, + compliance: { + status: "strong", + details: "SOC 2, GDPR", + }, + freeTier: { + status: "partial", + details: "14-day trial, no free tier", + }, + paidPricing: { + status: "strong", + details: "Custom pricing (Team & Enterprise)", + }, + openSource: { + status: "none", + details: "Proprietary", + }, + selfHosted: { + status: "none", + details: "Cloud-only", + }, + cloudHosted: { + status: "strong", + details: "Fully managed SaaS", + }, + analytics: { + status: "strong", + details: "DataDog, New Relic, Segment integrations", + }, + dataWarehouses: { + status: "strong", + details: "Data pipeline to warehouses", + }, + cicd: { + status: "strong", + details: "CI/CD integrations", + }, + webhooks: { + status: "strong", + details: "Webhook notifications", + }, + }, +}; diff --git a/src/data/featureflags/unleash.tsx b/src/data/featureflags/unleash.tsx new file mode 100644 index 0000000..214979d --- /dev/null +++ b/src/data/featureflags/unleash.tsx @@ -0,0 +1,167 @@ +import type { Provider } from "../../types/comparison"; + +function UnleashLogo() { + return ( + + Unleash + + + + + ); +} + +export const unleash: Provider = { + name: "Unleash", + logo: , + website: "https://www.getunleash.io", + tagline: { + status: "strong", + details: "Privacy-first open source feature toggle system", + }, + features: { + booleanFlags: { status: "strong", details: "Full support" }, + multivariateFlags: { + status: "strong", + details: "Variants with payloads", + }, + jsonFlags: { + status: "strong", + details: "JSON payloads in variants", + }, + flagDependencies: { + status: "partial", + details: "Via strategy constraints", + }, + scheduledRollouts: { + status: "partial", + details: "Via external scheduling", + }, + userTargeting: { + status: "strong", + details: "User ID targeting", + }, + percentageRollouts: { + status: "strong", + details: "Gradual rollout strategy", + }, + customSegments: { + status: "strong", + details: "Constraint-based segments", + }, + geoTargeting: { + status: "partial", + details: "Via custom constraints", + }, + contextualTargeting: { + status: "strong", + details: "Context fields & constraints", + }, + abTesting: { + status: "partial", + details: "Basic via variant weights", + }, + multivariateExperiments: { + status: "partial", + details: "Variants, no built-in analysis", + }, + statisticalAnalysis: { + status: "none", + details: "External tools required", + }, + metricsTracking: { + status: "partial", + details: "Impression data, no analysis", + }, + experimentGoals: { + status: "none", + details: "Not built-in", + }, + sdkLanguages: { + status: "strong", + details: "20+ languages (JS, Java, Go, Python, .NET, etc.)", + }, + localEvaluation: { + status: "strong", + details: "Edge SDK for local eval", + }, + typeSafety: { + status: "strong", + details: "TypeScript, strongly typed SDKs", + }, + documentation: { + status: "strong", + details: "Excellent documentation", + }, + apiQuality: { + status: "strong", + details: "REST API + Admin API", + }, + rbac: { + status: "strong", + details: "RBAC (Enterprise)", + }, + auditLogs: { + status: "strong", + details: "Event log & audit trail", + }, + environments: { + status: "strong", + details: "Projects & environments", + }, + approvalWorkflows: { + status: "strong", + details: "Change requests (Enterprise)", + }, + compliance: { + status: "strong", + details: "SOC 2, GDPR-ready", + }, + freeTier: { + status: "strong", + details: "Open source (unlimited), Pro free tier", + }, + paidPricing: { + status: "strong", + details: "Pay-as-you-go: $75/seat/mo, 53M API requests (Cloud)", + }, + openSource: { + status: "strong", + details: "Apache 2.0", + }, + selfHosted: { + status: "strong", + details: "Docker, Kubernetes, full self-host", + }, + cloudHosted: { + status: "strong", + details: "Managed cloud available", + }, + analytics: { + status: "partial", + details: "Webhook-based integrations", + }, + dataWarehouses: { + status: "partial", + details: "Event export via webhooks", + }, + cicd: { + status: "strong", + details: "API-driven, GitHub Actions", + }, + webhooks: { + status: "strong", + details: "Event webhooks", + }, + }, +}; diff --git a/src/types/comparison.ts b/src/types/comparison.ts index 6b1515f..21e1637 100644 --- a/src/types/comparison.ts +++ b/src/types/comparison.ts @@ -1,11 +1,12 @@ import type * as React from "react"; // Status types -export type Status = "strong" | "partial" | "none"; +export type Status = "strong" | "partial" | "none" | "unknown"; export type FeatureValue = { status: Status; details: string; + reference?: string; // URL reference for where the information was found }; // Provider data structure @@ -13,7 +14,6 @@ export type Provider = { name: string; logo: React.ReactNode; website: string; - verificationUrl?: string; // URL where pricing/feature information was verified tagline: FeatureValue; features: Record; }; From 1d844fe43f3b417ff400b28a943017ab2db80e00 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 3 Oct 2025 15:00:25 +0000 Subject: [PATCH 6/6] Add reference URLs to all provider features for verification Co-authored-by: laander <222419+laander@users.noreply.github.com> --- src/data/analytics/amplitude.tsx | 106 ++++++++++++------- src/data/analytics/ga4.tsx | 98 +++++++++++------- src/data/analytics/heap.tsx | 106 ++++++++++++------- src/data/analytics/mixpanel.tsx | 4 + src/data/analytics/pendo.tsx | 104 ++++++++++++------- src/data/analytics/plausible.tsx | 100 +++++++++++------- src/data/analytics/posthog.tsx | 120 ++++++++++++++++----- src/data/analytics/segment.tsx | 108 +++++++++++++------ src/data/auth/auth0.tsx | 91 ++++++++++++++-- src/data/auth/authjs.tsx | 94 ++++++++++++++++- src/data/auth/clerk.tsx | 93 +++++++++++++++-- src/data/auth/firebase.tsx | 95 +++++++++++++++-- src/data/auth/keycloak.tsx | 93 +++++++++++++++-- src/data/auth/lucia.tsx | 80 ++++++++++++-- src/data/auth/supabase.tsx | 90 +++++++++++++++- src/data/auth/workos.tsx | 81 ++++++++++++--- src/data/featureflags/configcat.tsx | 138 ++++++++++++++++++++++++- src/data/featureflags/devcycle.tsx | 138 ++++++++++++++++++++++++- src/data/featureflags/flagsmith.tsx | 136 +++++++++++++++++++++++- src/data/featureflags/growthbook.tsx | 138 ++++++++++++++++++++++++- src/data/featureflags/launchdarkly.tsx | 132 +++++++++++++++++++++-- src/data/featureflags/posthog.tsx | 138 ++++++++++++++++++++++++- src/data/featureflags/reflag.tsx | 116 +++++++++++++++++++++ src/data/featureflags/split.tsx | 138 ++++++++++++++++++++++++- src/data/featureflags/unleash.tsx | 138 ++++++++++++++++++++++++- 25 files changed, 2352 insertions(+), 323 deletions(-) diff --git a/src/data/analytics/amplitude.tsx b/src/data/analytics/amplitude.tsx index e5aa62d..9aafb3d 100644 --- a/src/data/analytics/amplitude.tsx +++ b/src/data/analytics/amplitude.tsx @@ -20,76 +20,112 @@ export const amplitude: Provider = { logo: , website: "https://amplitude.com", tagline: { + status: "strong", + details: "Digital analytics platform for product teams", + + reference: "https://amplitude.com/pricing", }, features: { - autoCapture: { status: "partial", details: "Limited auto-tracking" }, - customEvents: { status: "strong", details: "Custom event tracking" }, - userProperties: { status: "strong", details: "User properties" }, - groupAnalytics: { status: "strong", details: "Account-level analytics" }, + autoCapture: { status: "partial", details: "Limited auto-tracking", reference: "https://amplitude.com/pricing" }, + customEvents: { status: "strong", details: "Custom event tracking", reference: "https://amplitude.com/pricing" }, + userProperties: { status: "strong", details: "User properties", reference: "https://amplitude.com/pricing" }, + groupAnalytics: { status: "strong", details: "Account-level analytics", reference: "https://amplitude.com/pricing" }, retroactiveAnalysis: { + status: "strong", + details: "Govern events retroactively", + + reference: "https://amplitude.com/pricing", }, - funnels: { status: "strong", details: "Conversion funnels" }, - retention: { status: "strong", details: "Retention analysis" }, - cohorts: { status: "strong", details: "Behavioral cohorts" }, - pathAnalysis: { status: "strong", details: "Pathfinder analysis" }, - trends: { status: "strong", details: "Event segmentation" }, - dashboards: { status: "strong", details: "Custom dashboards" }, - realtime: { status: "partial", details: "Near real-time" }, - customReports: { status: "strong", details: "Saved reports" }, + funnels: { status: "strong", details: "Conversion funnels", reference: "https://amplitude.com/pricing" }, + retention: { status: "strong", details: "Retention analysis", reference: "https://amplitude.com/pricing" }, + cohorts: { status: "strong", details: "Behavioral cohorts", reference: "https://amplitude.com/pricing" }, + pathAnalysis: { status: "strong", details: "Pathfinder analysis", reference: "https://amplitude.com/pricing" }, + trends: { status: "strong", details: "Event segmentation", reference: "https://amplitude.com/pricing" }, + dashboards: { status: "strong", details: "Custom dashboards", reference: "https://amplitude.com/pricing" }, + realtime: { status: "partial", details: "Near real-time", reference: "https://amplitude.com/pricing" }, + customReports: { status: "strong", details: "Saved reports", reference: "https://amplitude.com/pricing" }, dataExploration: { + status: "strong", + details: "Amplitude Analytics UI", + + reference: "https://amplitude.com/pricing", }, - alerts: { status: "strong", details: "Anomaly detection" }, + alerts: { status: "strong", details: "Anomaly detection", reference: "https://amplitude.com/pricing" }, sessionReplay: { + status: "strong", + details: "Session Replay (via acquisition)", + + reference: "https://amplitude.com/pricing", }, - heatmaps: { status: "none", details: "Not available" }, - userProfiles: { status: "strong", details: "User lookup" }, - userJourneys: { status: "strong", details: "User journey maps" }, - attribution: { status: "strong", details: "Impact analysis" }, - abTesting: { status: "strong", details: "Amplitude Experiment" }, - featureFlags: { status: "strong", details: "Feature flags included" }, - experiments: { status: "strong", details: "Full experimentation" }, + heatmaps: { status: "none", details: "Not available", reference: "https://amplitude.com/pricing" }, + userProfiles: { status: "strong", details: "User lookup", reference: "https://amplitude.com/pricing" }, + userJourneys: { status: "strong", details: "User journey maps", reference: "https://amplitude.com/pricing" }, + attribution: { status: "strong", details: "Impact analysis", reference: "https://amplitude.com/pricing" }, + abTesting: { status: "strong", details: "Amplitude Experiment", reference: "https://amplitude.com/pricing" }, + featureFlags: { status: "strong", details: "Feature flags included", reference: "https://amplitude.com/pricing" }, + experiments: { status: "strong", details: "Full experimentation", reference: "https://amplitude.com/pricing" }, statisticalAnalysis: { + status: "strong", + details: "Sequential testing", + + reference: "https://amplitude.com/pricing", }, sdkLanguages: { + status: "strong", + details: "15+ languages (JS, iOS, Android, etc.)", + + reference: "https://www.docs.developers.amplitude.com", }, - apiAccess: { status: "strong", details: "REST & GraphQL APIs" }, - dataWarehouse: { status: "strong", details: "Data streaming" }, - sqlAccess: { status: "partial", details: "Limited SQL access" }, - documentation: { status: "strong", details: "Detailed documentation" }, - gdprCompliant: { status: "strong", details: "GDPR compliant" }, - cookieless: { status: "partial", details: "Cookie-based" }, - dataResidency: { status: "strong", details: "Multi-region support" }, - anonymization: { status: "strong", details: "User deletion" }, - compliance: { status: "strong", details: "SOC 2, GDPR, HIPAA" }, + apiAccess: { status: "strong", details: "REST & GraphQL APIs", reference: "https://www.docs.developers.amplitude.com" }, + dataWarehouse: { status: "strong", details: "Data streaming", reference: "https://amplitude.com/pricing" }, + sqlAccess: { status: "partial", details: "Limited SQL access", reference: "https://amplitude.com/pricing" }, + documentation: { status: "strong", details: "Detailed documentation", reference: "https://www.docs.developers.amplitude.com" }, + gdprCompliant: { status: "strong", details: "GDPR compliant", reference: "https://amplitude.com/privacy" }, + cookieless: { status: "partial", details: "Cookie-based", reference: "https://amplitude.com/privacy" }, + dataResidency: { status: "strong", details: "Multi-region support", reference: "https://amplitude.com/privacy" }, + anonymization: { status: "strong", details: "User deletion", reference: "https://amplitude.com/privacy" }, + compliance: { status: "strong", details: "SOC 2, GDPR, HIPAA", reference: "https://amplitude.com/privacy" }, freeTier: { + status: "strong", + details: "Starter: 50K MTUs (Monthly Tracked Users), up to 10M events", + + reference: "https://amplitude.com/pricing", }, pricingModel: { + status: "strong", + details: "Plus: $49/mo for 300K MTUs at $0.049/MTU", + + reference: "https://amplitude.com/pricing", }, - openSource: { status: "none", details: "Proprietary" }, - selfHosted: { status: "none", details: "Cloud-only" }, - cloudHosted: { status: "strong", details: "Fully managed" }, - cdp: { status: "strong", details: "Segment, mParticle, Tealium" }, - marketing: { status: "strong", details: "Salesforce, Braze, Iterable" }, + openSource: { status: "none", details: "Proprietary", reference: "https://amplitude.com/pricing" }, + selfHosted: { status: "none", details: "Cloud-only", reference: "https://amplitude.com/pricing" }, + cloudHosted: { status: "strong", details: "Fully managed", reference: "https://amplitude.com/pricing" }, + cdp: { status: "strong", details: "Segment, mParticle, Tealium", reference: "https://amplitude.com/pricing" }, + marketing: { status: "strong", details: "Salesforce, Braze, Iterable", reference: "https://amplitude.com/pricing" }, datatools: { + status: "strong", + details: "Snowflake, BigQuery, S3", + + reference: "https://amplitude.com/pricing", }, - webhooks: { status: "strong", details: "Cohort syncing" }, + webhooks: { status: "strong", details: "Cohort syncing", reference: "https://amplitude.com/pricing" }, }, }; diff --git a/src/data/analytics/ga4.tsx b/src/data/analytics/ga4.tsx index 058e11c..66dbc0d 100644 --- a/src/data/analytics/ga4.tsx +++ b/src/data/analytics/ga4.tsx @@ -30,64 +30,84 @@ export const ga4: Provider = { logo: , website: "https://analytics.google.com", tagline: { + status: "strong", + details: "Industry-standard web analytics", + + reference: "https://support.google.com/analytics/answer/9306384", }, features: { - autoCapture: { status: "partial", details: "Enhanced measurement" }, - customEvents: { status: "strong", details: "Custom event tracking" }, - userProperties: { status: "strong", details: "User properties" }, - groupAnalytics: { status: "none", details: "Not available" }, + autoCapture: { status: "partial", details: "Enhanced measurement", reference: "https://support.google.com/analytics/answer/9306384" }, + customEvents: { status: "strong", details: "Custom event tracking", reference: "https://support.google.com/analytics/answer/9306384" }, + userProperties: { status: "strong", details: "User properties", reference: "https://support.google.com/analytics/answer/9306384" }, + groupAnalytics: { status: "none", details: "Not available", reference: "https://support.google.com/analytics/answer/9306384" }, retroactiveAnalysis: { + status: "none", + details: "Not available", + + reference: "https://support.google.com/analytics/answer/9306384", }, - funnels: { status: "strong", details: "Funnel exploration" }, - retention: { status: "partial", details: "Basic retention" }, - cohorts: { status: "strong", details: "Audiences" }, - pathAnalysis: { status: "strong", details: "Path exploration" }, - trends: { status: "strong", details: "Event trends" }, - dashboards: { status: "strong", details: "Custom dashboards" }, - realtime: { status: "strong", details: "Real-time reports" }, - customReports: { status: "strong", details: "Custom reports" }, - dataExploration: { status: "strong", details: "Explore UI" }, - alerts: { status: "strong", details: "Custom alerts" }, - sessionReplay: { status: "none", details: "Not available" }, - heatmaps: { status: "none", details: "Not available" }, - userProfiles: { status: "none", details: "Not available" }, - userJourneys: { status: "strong", details: "User paths" }, - attribution: { status: "strong", details: "Attribution modeling" }, - abTesting: { status: "partial", details: "Via Google Optimize" }, - featureFlags: { status: "none", details: "Not available" }, - experiments: { status: "partial", details: "Via Google Optimize" }, + funnels: { status: "strong", details: "Funnel exploration", reference: "https://support.google.com/analytics/answer/9306384" }, + retention: { status: "partial", details: "Basic retention", reference: "https://support.google.com/analytics/answer/9306384" }, + cohorts: { status: "strong", details: "Audiences", reference: "https://support.google.com/analytics/answer/9306384" }, + pathAnalysis: { status: "strong", details: "Path exploration", reference: "https://support.google.com/analytics/answer/9306384" }, + trends: { status: "strong", details: "Event trends", reference: "https://support.google.com/analytics/answer/9306384" }, + dashboards: { status: "strong", details: "Custom dashboards", reference: "https://support.google.com/analytics/answer/9306384" }, + realtime: { status: "strong", details: "Real-time reports", reference: "https://support.google.com/analytics/answer/9306384" }, + customReports: { status: "strong", details: "Custom reports", reference: "https://support.google.com/analytics/answer/9306384" }, + dataExploration: { status: "strong", details: "Explore UI", reference: "https://support.google.com/analytics/answer/9306384" }, + alerts: { status: "strong", details: "Custom alerts", reference: "https://support.google.com/analytics/answer/9306384" }, + sessionReplay: { status: "none", details: "Not available", reference: "https://support.google.com/analytics/answer/9306384" }, + heatmaps: { status: "none", details: "Not available", reference: "https://support.google.com/analytics/answer/9306384" }, + userProfiles: { status: "none", details: "Not available", reference: "https://support.google.com/analytics/answer/9306384" }, + userJourneys: { status: "strong", details: "User paths", reference: "https://support.google.com/analytics/answer/9306384" }, + attribution: { status: "strong", details: "Attribution modeling", reference: "https://support.google.com/analytics/answer/9306384" }, + abTesting: { status: "partial", details: "Via Google Optimize", reference: "https://support.google.com/analytics/answer/9306384" }, + featureFlags: { status: "none", details: "Not available", reference: "https://support.google.com/analytics/answer/9306384" }, + experiments: { status: "partial", details: "Via Google Optimize", reference: "https://support.google.com/analytics/answer/9306384" }, statisticalAnalysis: { + status: "partial", + details: "Basic stats", + + reference: "https://support.google.com/analytics/answer/9306384", }, sdkLanguages: { + status: "strong", + details: "gtag.js, Firebase SDKs", + + reference: "https://developers.google.com/analytics", }, - apiAccess: { status: "strong", details: "Data API" }, - dataWarehouse: { status: "strong", details: "BigQuery export" }, - sqlAccess: { status: "strong", details: "BigQuery SQL" }, - documentation: { status: "strong", details: "Extensive docs" }, - gdprCompliant: { status: "strong", details: "GDPR features" }, - cookieless: { status: "partial", details: "Cookie-based" }, - dataResidency: { status: "partial", details: "Google-controlled" }, - anonymization: { status: "strong", details: "IP anonymization" }, - compliance: { status: "strong", details: "Google compliance" }, - freeTier: { status: "strong", details: "Free: 10M events/month" }, + apiAccess: { status: "strong", details: "Data API", reference: "https://developers.google.com/analytics" }, + dataWarehouse: { status: "strong", details: "BigQuery export", reference: "https://support.google.com/analytics/answer/9306384" }, + sqlAccess: { status: "strong", details: "BigQuery SQL", reference: "https://support.google.com/analytics/answer/9306384" }, + documentation: { status: "strong", details: "Extensive docs", reference: "https://developers.google.com/analytics" }, + gdprCompliant: { status: "strong", details: "GDPR features", reference: "https://policies.google.com/privacy" }, + cookieless: { status: "partial", details: "Cookie-based", reference: "https://policies.google.com/privacy" }, + dataResidency: { status: "partial", details: "Google-controlled", reference: "https://policies.google.com/privacy" }, + anonymization: { status: "strong", details: "IP anonymization", reference: "https://policies.google.com/privacy" }, + compliance: { status: "strong", details: "Google compliance", reference: "https://policies.google.com/privacy" }, + freeTier: { status: "strong", details: "Free: 10M events/month", reference: "https://support.google.com/analytics/answer/9306384" }, pricingModel: { + status: "strong", + details: "GA4 360: Custom pricing", + + reference: "https://support.google.com/analytics/answer/9306384", }, - openSource: { status: "none", details: "Proprietary" }, - selfHosted: { status: "none", details: "Cloud-only" }, - cloudHosted: { status: "strong", details: "Google Cloud" }, - cdp: { status: "partial", details: "Limited integrations" }, - marketing: { status: "strong", details: "Google Ads, Search Console" }, - datatools: { status: "strong", details: "BigQuery, Data Studio" }, - webhooks: { status: "none", details: "Not available" }, + openSource: { status: "none", details: "Proprietary", reference: "https://support.google.com/analytics/answer/9306384" }, + selfHosted: { status: "none", details: "Cloud-only", reference: "https://support.google.com/analytics/answer/9306384" }, + cloudHosted: { status: "strong", details: "Google Cloud", reference: "https://support.google.com/analytics/answer/9306384" }, + cdp: { status: "partial", details: "Limited integrations", reference: "https://support.google.com/analytics/answer/9306384" }, + marketing: { status: "strong", details: "Google Ads, Search Console", reference: "https://support.google.com/analytics/answer/9306384" }, + datatools: { status: "strong", details: "BigQuery, Data Studio", reference: "https://support.google.com/analytics/answer/9306384" }, + webhooks: { status: "none", details: "Not available", reference: "https://support.google.com/analytics/answer/9306384" }, }, }; diff --git a/src/data/analytics/heap.tsx b/src/data/analytics/heap.tsx index 4c3b365..646e31e 100644 --- a/src/data/analytics/heap.tsx +++ b/src/data/analytics/heap.tsx @@ -24,76 +24,112 @@ export const heap: Provider = { logo: , website: "https://heap.io", tagline: { + status: "strong", + details: "Automatic event tracking for product analytics", + + reference: "https://heap.io/pricing", }, features: { autoCapture: { + status: "strong", + details: "Complete auto-capture of all events", + + reference: "https://heap.io/pricing", }, - customEvents: { status: "strong", details: "Custom event tracking" }, - userProperties: { status: "strong", details: "User properties" }, + customEvents: { status: "strong", details: "Custom event tracking", reference: "https://heap.io/pricing" }, + userProperties: { status: "strong", details: "User properties", reference: "https://heap.io/pricing" }, groupAnalytics: { + status: "strong", + details: "Account-level analytics", + + reference: "https://heap.io/pricing", }, retroactiveAnalysis: { + status: "strong", + details: "Define events retroactively", + + reference: "https://heap.io/pricing", }, - funnels: { status: "strong", details: "Conversion funnels" }, - retention: { status: "strong", details: "Retention analysis" }, - cohorts: { status: "strong", details: "User segments" }, - pathAnalysis: { status: "strong", details: "User journeys" }, - trends: { status: "strong", details: "Event trends" }, - dashboards: { status: "strong", details: "Custom dashboards" }, - realtime: { status: "partial", details: "Near real-time" }, - customReports: { status: "strong", details: "Saved reports" }, - dataExploration: { status: "strong", details: "Heap Explore UI" }, - alerts: { status: "strong", details: "Anomaly detection" }, - sessionReplay: { status: "strong", details: "Session replay" }, - heatmaps: { status: "strong", details: "Click heatmaps" }, - userProfiles: { status: "strong", details: "User profiles" }, - userJourneys: { status: "strong", details: "User paths" }, - attribution: { status: "strong", details: "Impact analysis" }, - abTesting: { status: "partial", details: "Basic testing" }, - featureFlags: { status: "none", details: "Not available" }, - experiments: { status: "partial", details: "Limited experiments" }, + funnels: { status: "strong", details: "Conversion funnels", reference: "https://heap.io/pricing" }, + retention: { status: "strong", details: "Retention analysis", reference: "https://heap.io/pricing" }, + cohorts: { status: "strong", details: "User segments", reference: "https://heap.io/pricing" }, + pathAnalysis: { status: "strong", details: "User journeys", reference: "https://heap.io/pricing" }, + trends: { status: "strong", details: "Event trends", reference: "https://heap.io/pricing" }, + dashboards: { status: "strong", details: "Custom dashboards", reference: "https://heap.io/pricing" }, + realtime: { status: "partial", details: "Near real-time", reference: "https://heap.io/pricing" }, + customReports: { status: "strong", details: "Saved reports", reference: "https://heap.io/pricing" }, + dataExploration: { status: "strong", details: "Heap Explore UI", reference: "https://heap.io/pricing" }, + alerts: { status: "strong", details: "Anomaly detection", reference: "https://heap.io/pricing" }, + sessionReplay: { status: "strong", details: "Session replay", reference: "https://heap.io/pricing" }, + heatmaps: { status: "strong", details: "Click heatmaps", reference: "https://heap.io/pricing" }, + userProfiles: { status: "strong", details: "User profiles", reference: "https://heap.io/pricing" }, + userJourneys: { status: "strong", details: "User paths", reference: "https://heap.io/pricing" }, + attribution: { status: "strong", details: "Impact analysis", reference: "https://heap.io/pricing" }, + abTesting: { status: "partial", details: "Basic testing", reference: "https://heap.io/pricing" }, + featureFlags: { status: "none", details: "Not available", reference: "https://heap.io/pricing" }, + experiments: { status: "partial", details: "Limited experiments", reference: "https://heap.io/pricing" }, statisticalAnalysis: { + status: "partial", + details: "Basic stats", + + reference: "https://heap.io/pricing", }, sdkLanguages: { + status: "strong", + details: "10+ languages (JS, iOS, Android, etc.)", + + reference: "https://developers.heap.io", }, - apiAccess: { status: "strong", details: "REST API" }, - dataWarehouse: { status: "strong", details: "Data warehouse sync" }, - sqlAccess: { status: "strong", details: "SQL access" }, - documentation: { status: "strong", details: "Comprehensive docs" }, - gdprCompliant: { status: "strong", details: "GDPR compliant" }, - cookieless: { status: "partial", details: "Cookie-based" }, - dataResidency: { status: "partial", details: "US, EU" }, - anonymization: { status: "strong", details: "Data deletion" }, - compliance: { status: "strong", details: "SOC 2, GDPR" }, + apiAccess: { status: "strong", details: "REST API", reference: "https://developers.heap.io" }, + dataWarehouse: { status: "strong", details: "Data warehouse sync", reference: "https://heap.io/pricing" }, + sqlAccess: { status: "strong", details: "SQL access", reference: "https://heap.io/pricing" }, + documentation: { status: "strong", details: "Comprehensive docs", reference: "https://developers.heap.io" }, + gdprCompliant: { status: "strong", details: "GDPR compliant", reference: "https://heap.io/privacy" }, + cookieless: { status: "partial", details: "Cookie-based", reference: "https://heap.io/privacy" }, + dataResidency: { status: "partial", details: "US, EU", reference: "https://heap.io/privacy" }, + anonymization: { status: "strong", details: "Data deletion", reference: "https://heap.io/privacy" }, + compliance: { status: "strong", details: "SOC 2, GDPR", reference: "https://heap.io/privacy" }, freeTier: { + status: "strong", + details: "Free: 10K sessions/month", + + reference: "https://heap.io/pricing", }, pricingModel: { + status: "strong", + details: "Growth: Starting at $3,600/year", + + reference: "https://heap.io/pricing", }, - openSource: { status: "none", details: "Proprietary" }, - selfHosted: { status: "none", details: "Cloud-only" }, - cloudHosted: { status: "strong", details: "Fully managed" }, - cdp: { status: "strong", details: "Segment, mParticle" }, - marketing: { status: "strong", details: "Salesforce, Marketo" }, + openSource: { status: "none", details: "Proprietary", reference: "https://heap.io/pricing" }, + selfHosted: { status: "none", details: "Cloud-only", reference: "https://heap.io/pricing" }, + cloudHosted: { status: "strong", details: "Fully managed", reference: "https://heap.io/pricing" }, + cdp: { status: "strong", details: "Segment, mParticle", reference: "https://heap.io/pricing" }, + marketing: { status: "strong", details: "Salesforce, Marketo", reference: "https://heap.io/pricing" }, datatools: { + status: "strong", + details: "Snowflake, BigQuery, Redshift", + + reference: "https://heap.io/pricing", }, - webhooks: { status: "strong", details: "Webhooks" }, + webhooks: { status: "strong", details: "Webhooks", reference: "https://heap.io/pricing" }, }, }; diff --git a/src/data/analytics/mixpanel.tsx b/src/data/analytics/mixpanel.tsx index 8168465..176da83 100644 --- a/src/data/analytics/mixpanel.tsx +++ b/src/data/analytics/mixpanel.tsx @@ -22,8 +22,12 @@ export const mixpanel: Provider = { logo: , website: "https://mixpanel.com", tagline: { + status: "strong", + details: "Product analytics for mobile and web applications", + + reference: "", }, features: { autoCapture: { diff --git a/src/data/analytics/pendo.tsx b/src/data/analytics/pendo.tsx index 062a4c2..907f080 100644 --- a/src/data/analytics/pendo.tsx +++ b/src/data/analytics/pendo.tsx @@ -25,73 +25,105 @@ export const pendo: Provider = { logo: , website: "https://pendo.io", tagline: { + status: "strong", + details: "Product experience platform with analytics", + + reference: "https://www.pendo.io/pricing", }, features: { autoCapture: { + status: "strong", + details: "Auto-capture all clicks", + + reference: "https://www.pendo.io/pricing", }, - customEvents: { status: "strong", details: "Track events & metadata" }, - userProperties: { status: "strong", details: "User metadata" }, - groupAnalytics: { status: "strong", details: "Account-level data" }, + customEvents: { status: "strong", details: "Track events & metadata", reference: "https://www.pendo.io/pricing" }, + userProperties: { status: "strong", details: "User metadata", reference: "https://www.pendo.io/pricing" }, + groupAnalytics: { status: "strong", details: "Account-level data", reference: "https://www.pendo.io/pricing" }, retroactiveAnalysis: { + status: "strong", + details: "Define events retroactively", + + reference: "https://www.pendo.io/pricing", }, - funnels: { status: "strong", details: "Funnel analysis" }, - retention: { status: "strong", details: "Retention reports" }, - cohorts: { status: "strong", details: "Segments" }, - pathAnalysis: { status: "strong", details: "Path analysis" }, - trends: { status: "strong", details: "Usage trends" }, - dashboards: { status: "strong", details: "Custom dashboards" }, - realtime: { status: "partial", details: "Near real-time" }, - customReports: { status: "strong", details: "Report builder" }, - dataExploration: { status: "strong", details: "Pendo Analyze" }, - alerts: { status: "partial", details: "Basic alerts" }, - sessionReplay: { status: "strong", details: "Session replay" }, - heatmaps: { status: "strong", details: "Page heatmaps" }, - userProfiles: { status: "strong", details: "Visitor profiles" }, - userJourneys: { status: "strong", details: "User paths" }, - attribution: { status: "partial", details: "Feature adoption" }, - abTesting: { status: "partial", details: "Guide experiments" }, - featureFlags: { status: "none", details: "Not available" }, - experiments: { status: "partial", details: "Limited testing" }, + funnels: { status: "strong", details: "Funnel analysis", reference: "https://www.pendo.io/pricing" }, + retention: { status: "strong", details: "Retention reports", reference: "https://www.pendo.io/pricing" }, + cohorts: { status: "strong", details: "Segments", reference: "https://www.pendo.io/pricing" }, + pathAnalysis: { status: "strong", details: "Path analysis", reference: "https://www.pendo.io/pricing" }, + trends: { status: "strong", details: "Usage trends", reference: "https://www.pendo.io/pricing" }, + dashboards: { status: "strong", details: "Custom dashboards", reference: "https://www.pendo.io/pricing" }, + realtime: { status: "partial", details: "Near real-time", reference: "https://www.pendo.io/pricing" }, + customReports: { status: "strong", details: "Report builder", reference: "https://www.pendo.io/pricing" }, + dataExploration: { status: "strong", details: "Pendo Analyze", reference: "https://www.pendo.io/pricing" }, + alerts: { status: "partial", details: "Basic alerts", reference: "https://www.pendo.io/pricing" }, + sessionReplay: { status: "strong", details: "Session replay", reference: "https://www.pendo.io/pricing" }, + heatmaps: { status: "strong", details: "Page heatmaps", reference: "https://www.pendo.io/pricing" }, + userProfiles: { status: "strong", details: "Visitor profiles", reference: "https://www.pendo.io/pricing" }, + userJourneys: { status: "strong", details: "User paths", reference: "https://www.pendo.io/pricing" }, + attribution: { status: "partial", details: "Feature adoption", reference: "https://www.pendo.io/pricing" }, + abTesting: { status: "partial", details: "Guide experiments", reference: "https://www.pendo.io/pricing" }, + featureFlags: { status: "none", details: "Not available", reference: "https://www.pendo.io/pricing" }, + experiments: { status: "partial", details: "Limited testing", reference: "https://www.pendo.io/pricing" }, statisticalAnalysis: { + status: "partial", + details: "Basic stats", + + reference: "https://www.pendo.io/pricing", }, sdkLanguages: { + status: "strong", + details: "JS, iOS, Android, React Native", + + reference: "https://support.pendo.io", }, - apiAccess: { status: "strong", details: "REST API" }, + apiAccess: { status: "strong", details: "REST API", reference: "https://support.pendo.io" }, dataWarehouse: { + status: "strong", + details: "Data Sync to warehouse", + + reference: "https://www.pendo.io/pricing", }, - sqlAccess: { status: "none", details: "Not available" }, - documentation: { status: "strong", details: "Detailed docs" }, - gdprCompliant: { status: "strong", details: "GDPR compliant" }, - cookieless: { status: "partial", details: "Cookie-based" }, - dataResidency: { status: "partial", details: "US, EU" }, - anonymization: { status: "strong", details: "Data deletion" }, - compliance: { status: "strong", details: "SOC 2, GDPR" }, - freeTier: { status: "strong", details: "Starter: Free up to 500 MAUs" }, + sqlAccess: { status: "none", details: "Not available", reference: "https://www.pendo.io/pricing" }, + documentation: { status: "strong", details: "Detailed docs", reference: "https://support.pendo.io" }, + gdprCompliant: { status: "strong", details: "GDPR compliant", reference: "https://www.pendo.io/legal/privacy-policy" }, + cookieless: { status: "partial", details: "Cookie-based", reference: "https://www.pendo.io/legal/privacy-policy" }, + dataResidency: { status: "partial", details: "US, EU", reference: "https://www.pendo.io/legal/privacy-policy" }, + anonymization: { status: "strong", details: "Data deletion", reference: "https://www.pendo.io/legal/privacy-policy" }, + compliance: { status: "strong", details: "SOC 2, GDPR", reference: "https://www.pendo.io/legal/privacy-policy" }, + freeTier: { status: "strong", details: "Starter: Free up to 500 MAUs", reference: "https://www.pendo.io/pricing" }, pricingModel: { + status: "strong", + details: "Growth: Starting at $7,000/year", + + reference: "https://www.pendo.io/pricing", }, - openSource: { status: "none", details: "Proprietary" }, - selfHosted: { status: "none", details: "Cloud-only" }, - cloudHosted: { status: "strong", details: "Fully managed" }, - cdp: { status: "partial", details: "Limited integrations" }, - marketing: { status: "partial", details: "Salesforce, HubSpot" }, + openSource: { status: "none", details: "Proprietary", reference: "https://www.pendo.io/pricing" }, + selfHosted: { status: "none", details: "Cloud-only", reference: "https://www.pendo.io/pricing" }, + cloudHosted: { status: "strong", details: "Fully managed", reference: "https://www.pendo.io/pricing" }, + cdp: { status: "partial", details: "Limited integrations", reference: "https://www.pendo.io/pricing" }, + marketing: { status: "partial", details: "Salesforce, HubSpot", reference: "https://www.pendo.io/pricing" }, datatools: { + status: "strong", + details: "Snowflake, BigQuery, Redshift", + + reference: "https://www.pendo.io/pricing", }, - webhooks: { status: "strong", details: "Webhooks" }, + webhooks: { status: "strong", details: "Webhooks", reference: "https://www.pendo.io/pricing" }, }, }; diff --git a/src/data/analytics/plausible.tsx b/src/data/analytics/plausible.tsx index bd9df1f..afe1dc3 100644 --- a/src/data/analytics/plausible.tsx +++ b/src/data/analytics/plausible.tsx @@ -26,67 +26,91 @@ export const plausible: Provider = { logo: , website: "https://plausible.io", tagline: { + status: "strong", + details: "Privacy-first, lightweight analytics", + + reference: "https://plausible.io/pricing", }, features: { - autoCapture: { status: "strong", details: "Auto-capture pageviews" }, - customEvents: { status: "strong", details: "Custom events" }, - userProperties: { status: "none", details: "Not available" }, - groupAnalytics: { status: "none", details: "Not available" }, + autoCapture: { status: "strong", details: "Auto-capture pageviews", reference: "https://plausible.io/pricing" }, + customEvents: { status: "strong", details: "Custom events", reference: "https://plausible.io/pricing" }, + userProperties: { status: "none", details: "Not available", reference: "https://plausible.io/pricing" }, + groupAnalytics: { status: "none", details: "Not available", reference: "https://plausible.io/pricing" }, retroactiveAnalysis: { + status: "none", + details: "Not available", + + reference: "https://plausible.io/pricing", }, - funnels: { status: "strong", details: "Funnel analysis" }, - retention: { status: "none", details: "Not available" }, - cohorts: { status: "none", details: "Not available" }, - pathAnalysis: { status: "none", details: "Not available" }, - trends: { status: "strong", details: "Traffic trends" }, - dashboards: { status: "strong", details: "Single dashboard" }, - realtime: { status: "strong", details: "Real-time visitors" }, - customReports: { status: "partial", details: "Saved filters" }, + funnels: { status: "strong", details: "Funnel analysis", reference: "https://plausible.io/pricing" }, + retention: { status: "none", details: "Not available", reference: "https://plausible.io/pricing" }, + cohorts: { status: "none", details: "Not available", reference: "https://plausible.io/pricing" }, + pathAnalysis: { status: "none", details: "Not available", reference: "https://plausible.io/pricing" }, + trends: { status: "strong", details: "Traffic trends", reference: "https://plausible.io/pricing" }, + dashboards: { status: "strong", details: "Single dashboard", reference: "https://plausible.io/pricing" }, + realtime: { status: "strong", details: "Real-time visitors", reference: "https://plausible.io/pricing" }, + customReports: { status: "partial", details: "Saved filters", reference: "https://plausible.io/pricing" }, dataExploration: { + status: "partial", + details: "Simple filtering", + + reference: "https://plausible.io/pricing", }, - alerts: { status: "strong", details: "Traffic spike alerts" }, - sessionReplay: { status: "none", details: "Not available" }, - heatmaps: { status: "none", details: "Not available" }, - userProfiles: { status: "none", details: "Not available" }, - userJourneys: { status: "none", details: "Not available" }, - attribution: { status: "strong", details: "UTM tracking" }, - abTesting: { status: "none", details: "Not available" }, - featureFlags: { status: "none", details: "Not available" }, - experiments: { status: "none", details: "Not available" }, + alerts: { status: "strong", details: "Traffic spike alerts", reference: "https://plausible.io/pricing" }, + sessionReplay: { status: "none", details: "Not available", reference: "https://plausible.io/pricing" }, + heatmaps: { status: "none", details: "Not available", reference: "https://plausible.io/pricing" }, + userProfiles: { status: "none", details: "Not available", reference: "https://plausible.io/pricing" }, + userJourneys: { status: "none", details: "Not available", reference: "https://plausible.io/pricing" }, + attribution: { status: "strong", details: "UTM tracking", reference: "https://plausible.io/pricing" }, + abTesting: { status: "none", details: "Not available", reference: "https://plausible.io/pricing" }, + featureFlags: { status: "none", details: "Not available", reference: "https://plausible.io/pricing" }, + experiments: { status: "none", details: "Not available", reference: "https://plausible.io/pricing" }, statisticalAnalysis: { + status: "none", + details: "Not available", + + reference: "https://plausible.io/pricing", }, sdkLanguages: { + status: "partial", + details: "JS script + community SDKs", + + reference: "https://plausible.io/docs", }, - apiAccess: { status: "strong", details: "Stats & Events API" }, - dataWarehouse: { status: "none", details: "Not available" }, - sqlAccess: { status: "none", details: "Not available" }, - documentation: { status: "strong", details: "Clear docs" }, - gdprCompliant: { status: "strong", details: "GDPR by default" }, - cookieless: { status: "strong", details: "Cookieless tracking" }, - dataResidency: { status: "strong", details: "EU, US options" }, - anonymization: { status: "strong", details: "No PII collected" }, - compliance: { status: "strong", details: "GDPR, CCPA, PECR" }, - freeTier: { status: "none", details: "No free tier" }, + apiAccess: { status: "strong", details: "Stats & Events API", reference: "https://plausible.io/docs" }, + dataWarehouse: { status: "none", details: "Not available", reference: "https://plausible.io/pricing" }, + sqlAccess: { status: "none", details: "Not available", reference: "https://plausible.io/pricing" }, + documentation: { status: "strong", details: "Clear docs", reference: "https://plausible.io/docs" }, + gdprCompliant: { status: "strong", details: "GDPR by default", reference: "https://plausible.io/privacy" }, + cookieless: { status: "strong", details: "Cookieless tracking", reference: "https://plausible.io/privacy" }, + dataResidency: { status: "strong", details: "EU, US options", reference: "https://plausible.io/privacy" }, + anonymization: { status: "strong", details: "No PII collected", reference: "https://plausible.io/privacy" }, + compliance: { status: "strong", details: "GDPR, CCPA, PECR", reference: "https://plausible.io/privacy" }, + freeTier: { status: "none", details: "No free tier", reference: "https://plausible.io/pricing" }, pricingModel: { + status: "strong", + details: "$9/mo for 10K pageviews", + + reference: "https://plausible.io/pricing", }, - openSource: { status: "strong", details: "AGPLv3 license" }, - selfHosted: { status: "strong", details: "Self-hosted option" }, - cloudHosted: { status: "strong", details: "Managed cloud" }, - cdp: { status: "none", details: "Not available" }, - marketing: { status: "partial", details: "Limited integrations" }, - datatools: { status: "none", details: "Not available" }, - webhooks: { status: "none", details: "Not available" }, + openSource: { status: "strong", details: "AGPLv3 license", reference: "https://plausible.io/pricing" }, + selfHosted: { status: "strong", details: "Self-hosted option", reference: "https://plausible.io/pricing" }, + cloudHosted: { status: "strong", details: "Managed cloud", reference: "https://plausible.io/pricing" }, + cdp: { status: "none", details: "Not available", reference: "https://plausible.io/pricing" }, + marketing: { status: "partial", details: "Limited integrations", reference: "https://plausible.io/pricing" }, + datatools: { status: "none", details: "Not available", reference: "https://plausible.io/pricing" }, + webhooks: { status: "none", details: "Not available", reference: "https://plausible.io/pricing" }, }, }; diff --git a/src/data/analytics/posthog.tsx b/src/data/analytics/posthog.tsx index 846dbd1..ce4c33f 100644 --- a/src/data/analytics/posthog.tsx +++ b/src/data/analytics/posthog.tsx @@ -27,97 +27,161 @@ export const posthog: Provider = { logo: , website: "https://posthog.com", tagline: { + status: "strong", + details: "All-in-one product OS with analytics, session replay, and more", + + reference: "https://posthog.com/pricing", }, features: { autoCapture: { + status: "strong", + details: "Automatic event capture without code", + + reference: "https://posthog.com/pricing", }, - customEvents: { status: "strong", details: "Custom event tracking" }, - userProperties: { status: "strong", details: "User properties & traits" }, + customEvents: { status: "strong", details: "Custom event tracking", reference: "https://posthog.com/pricing" }, + userProperties: { status: "strong", details: "User properties & traits", reference: "https://posthog.com/pricing" }, groupAnalytics: { + status: "strong", + details: "Group analytics for B2B", + + reference: "https://posthog.com/pricing", }, retroactiveAnalysis: { + status: "strong", + details: "Query historical data retroactively", + + reference: "https://posthog.com/pricing", }, - funnels: { status: "strong", details: "Conversion funnels" }, - retention: { status: "strong", details: "Retention analysis" }, - cohorts: { status: "strong", details: "User cohorts" }, - pathAnalysis: { status: "strong", details: "User path analysis" }, - trends: { status: "strong", details: "Trend analysis" }, - dashboards: { status: "strong", details: "Custom dashboards" }, - realtime: { status: "strong", details: "Real-time analytics" }, - customReports: { status: "strong", details: "Custom insights" }, + funnels: { status: "strong", details: "Conversion funnels", reference: "https://posthog.com/pricing" }, + retention: { status: "strong", details: "Retention analysis", reference: "https://posthog.com/pricing" }, + cohorts: { status: "strong", details: "User cohorts", reference: "https://posthog.com/pricing" }, + pathAnalysis: { status: "strong", details: "User path analysis", reference: "https://posthog.com/pricing" }, + trends: { status: "strong", details: "Trend analysis", reference: "https://posthog.com/pricing" }, + dashboards: { status: "strong", details: "Custom dashboards", reference: "https://posthog.com/pricing" }, + realtime: { status: "strong", details: "Real-time analytics", reference: "https://posthog.com/pricing" }, + customReports: { status: "strong", details: "Custom insights", reference: "https://posthog.com/pricing" }, dataExploration: { + status: "strong", + details: "SQL and visual exploration", + + reference: "https://posthog.com/pricing", }, - alerts: { status: "partial", details: "Basic alerts" }, + alerts: { status: "partial", details: "Basic alerts", reference: "https://posthog.com/pricing" }, sessionReplay: { + status: "strong", + details: "Full session replay with console logs", + + reference: "https://posthog.com/pricing", }, - heatmaps: { status: "strong", details: "Heatmaps & clickmaps" }, - userProfiles: { status: "strong", details: "Individual user profiles" }, - userJourneys: { status: "strong", details: "User journey tracking" }, - attribution: { status: "partial", details: "Basic attribution" }, - abTesting: { status: "strong", details: "A/B testing built-in" }, - featureFlags: { status: "strong", details: "Feature flags included" }, + heatmaps: { status: "strong", details: "Heatmaps & clickmaps", reference: "https://posthog.com/pricing" }, + userProfiles: { status: "strong", details: "Individual user profiles", reference: "https://posthog.com/pricing" }, + userJourneys: { status: "strong", details: "User journey tracking", reference: "https://posthog.com/pricing" }, + attribution: { status: "partial", details: "Basic attribution", reference: "https://posthog.com/pricing" }, + abTesting: { status: "strong", details: "A/B testing built-in", reference: "https://posthog.com/pricing" }, + featureFlags: { status: "strong", details: "Feature flags included", reference: "https://posthog.com/pricing" }, experiments: { + status: "strong", + details: "Full experimentation platform", + + reference: "https://posthog.com/pricing", }, statisticalAnalysis: { + status: "strong", + details: "Bayesian & frequentist stats", + + reference: "https://posthog.com/pricing", }, sdkLanguages: { + status: "strong", + details: "15+ languages (JS, Python, Go, PHP, etc.)", + + reference: "https://posthog.com/docs", }, - apiAccess: { status: "strong", details: "Full REST API" }, + apiAccess: { status: "strong", details: "Full REST API", reference: "https://posthog.com/docs" }, dataWarehouse: { + status: "strong", + details: "Export to Snowflake, BigQuery", + + reference: "https://posthog.com/pricing", }, - sqlAccess: { status: "strong", details: "SQL query interface" }, - documentation: { status: "strong", details: "Excellent documentation" }, - gdprCompliant: { status: "strong", details: "GDPR compliant" }, + sqlAccess: { status: "strong", details: "SQL query interface", reference: "https://posthog.com/pricing" }, + documentation: { status: "strong", details: "Excellent documentation", reference: "https://posthog.com/docs" }, + gdprCompliant: { status: "strong", details: "GDPR compliant", reference: "https://posthog.com/privacy" }, cookieless: { + status: "partial", + details: "Cookie-based by default, can configure", + + reference: "https://posthog.com/privacy", }, - dataResidency: { status: "strong", details: "US & EU regions" }, - anonymization: { status: "strong", details: "Data anonymization" }, - compliance: { status: "strong", details: "SOC 2, GDPR" }, - freeTier: { status: "strong", details: "1M events/month free" }, + dataResidency: { status: "strong", details: "US & EU regions", reference: "https://posthog.com/privacy" }, + anonymization: { status: "strong", details: "Data anonymization", reference: "https://posthog.com/privacy" }, + compliance: { status: "strong", details: "SOC 2, GDPR", reference: "https://posthog.com/privacy" }, + freeTier: { status: "strong", details: "1M events/month free", reference: "https://posthog.com/pricing" }, pricingModel: { + status: "strong", + details: "Pay-as-you-go per event ($0.00005/event)", + + reference: "https://posthog.com/pricing", }, - openSource: { status: "strong", details: "MIT license" }, + openSource: { status: "strong", details: "MIT license", reference: "https://posthog.com/pricing" }, selfHosted: { + status: "strong", + details: "Docker/Kubernetes self-host", + + reference: "https://posthog.com/pricing", }, - cloudHosted: { status: "strong", details: "PostHog Cloud (US & EU)" }, + cloudHosted: { status: "strong", details: "PostHog Cloud (US & EU)", reference: "https://posthog.com/pricing" }, cdp: { + status: "strong", + details: "Segment, RudderStack integration", + + reference: "https://posthog.com/pricing", }, marketing: { + status: "strong", + details: "Hubspot, Salesforce, Intercom", + + reference: "https://posthog.com/pricing", }, datatools: { + status: "strong", + details: "Snowflake, BigQuery, S3", + + reference: "https://posthog.com/pricing", }, - webhooks: { status: "strong", details: "Webhooks & actions" }, + webhooks: { status: "strong", details: "Webhooks & actions", reference: "https://posthog.com/pricing" }, }, }; diff --git a/src/data/analytics/segment.tsx b/src/data/analytics/segment.tsx index cb678b6..0ee5e93 100644 --- a/src/data/analytics/segment.tsx +++ b/src/data/analytics/segment.tsx @@ -24,79 +24,119 @@ export const segment: Provider = { logo: , website: "https://segment.com", tagline: { + status: "strong", + details: "Customer data platform with analytics", + + reference: "https://segment.com/pricing", }, features: { - autoCapture: { status: "none", details: "Manual tracking" }, - customEvents: { status: "strong", details: "Track, identify, page" }, - userProperties: { status: "strong", details: "User traits" }, - groupAnalytics: { status: "strong", details: "Group calls" }, + autoCapture: { status: "none", details: "Manual tracking", reference: "https://segment.com/pricing" }, + customEvents: { status: "strong", details: "Track, identify, page", reference: "https://segment.com/pricing" }, + userProperties: { status: "strong", details: "User traits", reference: "https://segment.com/pricing" }, + groupAnalytics: { status: "strong", details: "Group calls", reference: "https://segment.com/pricing" }, retroactiveAnalysis: { + status: "none", + details: "Not available", + + reference: "https://segment.com/pricing", }, - funnels: { status: "partial", details: "Via destinations" }, - retention: { status: "partial", details: "Via destinations" }, - cohorts: { status: "partial", details: "Via destinations" }, - pathAnalysis: { status: "none", details: "Not available" }, - trends: { status: "partial", details: "Via destinations" }, - dashboards: { status: "partial", details: "Limited built-in" }, - realtime: { status: "strong", details: "Real-time streaming" }, - customReports: { status: "partial", details: "Via destinations" }, + funnels: { status: "partial", details: "Via destinations", reference: "https://segment.com/pricing" }, + retention: { status: "partial", details: "Via destinations", reference: "https://segment.com/pricing" }, + cohorts: { status: "partial", details: "Via destinations", reference: "https://segment.com/pricing" }, + pathAnalysis: { status: "none", details: "Not available", reference: "https://segment.com/pricing" }, + trends: { status: "partial", details: "Via destinations", reference: "https://segment.com/pricing" }, + dashboards: { status: "partial", details: "Limited built-in", reference: "https://segment.com/pricing" }, + realtime: { status: "strong", details: "Real-time streaming", reference: "https://segment.com/pricing" }, + customReports: { status: "partial", details: "Via destinations", reference: "https://segment.com/pricing" }, dataExploration: { + status: "partial", + details: "Limited (focus on CDP)", + + reference: "https://segment.com/pricing", }, - alerts: { status: "partial", details: "Data quality alerts" }, - sessionReplay: { status: "none", details: "Not available" }, - heatmaps: { status: "none", details: "Not available" }, - userProfiles: { status: "strong", details: "Unified profiles" }, - userJourneys: { status: "partial", details: "Via destinations" }, - attribution: { status: "partial", details: "Via destinations" }, - abTesting: { status: "none", details: "Not available" }, - featureFlags: { status: "none", details: "Not available" }, - experiments: { status: "none", details: "Not available" }, + alerts: { status: "partial", details: "Data quality alerts", reference: "https://segment.com/pricing" }, + sessionReplay: { status: "none", details: "Not available", reference: "https://segment.com/pricing" }, + heatmaps: { status: "none", details: "Not available", reference: "https://segment.com/pricing" }, + userProfiles: { status: "strong", details: "Unified profiles", reference: "https://segment.com/pricing" }, + userJourneys: { status: "partial", details: "Via destinations", reference: "https://segment.com/pricing" }, + attribution: { status: "partial", details: "Via destinations", reference: "https://segment.com/pricing" }, + abTesting: { status: "none", details: "Not available", reference: "https://segment.com/pricing" }, + featureFlags: { status: "none", details: "Not available", reference: "https://segment.com/pricing" }, + experiments: { status: "none", details: "Not available", reference: "https://segment.com/pricing" }, statisticalAnalysis: { + status: "none", + details: "Not available", + + reference: "https://segment.com/pricing", }, sdkLanguages: { + status: "strong", + details: "20+ languages (JS, iOS, Android, etc.)", + + reference: "https://segment.com/docs", }, - apiAccess: { status: "strong", details: "HTTP Tracking API" }, + apiAccess: { status: "strong", details: "HTTP Tracking API", reference: "https://segment.com/docs" }, dataWarehouse: { + status: "strong", + details: "Warehouses as destinations", + + reference: "https://segment.com/pricing", }, - sqlAccess: { status: "none", details: "Not available" }, - documentation: { status: "strong", details: "Extensive docs" }, - gdprCompliant: { status: "strong", details: "GDPR tools" }, - cookieless: { status: "partial", details: "Cookie-based" }, - dataResidency: { status: "strong", details: "Multi-region" }, - anonymization: { status: "strong", details: "User deletion API" }, - compliance: { status: "strong", details: "SOC 2, GDPR, HIPAA" }, + sqlAccess: { status: "none", details: "Not available", reference: "https://segment.com/pricing" }, + documentation: { status: "strong", details: "Extensive docs", reference: "https://segment.com/docs" }, + gdprCompliant: { status: "strong", details: "GDPR tools", reference: "https://segment.com/legal/privacy" }, + cookieless: { status: "partial", details: "Cookie-based", reference: "https://segment.com/legal/privacy" }, + dataResidency: { status: "strong", details: "Multi-region", reference: "https://segment.com/legal/privacy" }, + anonymization: { status: "strong", details: "User deletion API", reference: "https://segment.com/legal/privacy" }, + compliance: { status: "strong", details: "SOC 2, GDPR, HIPAA", reference: "https://segment.com/legal/privacy" }, freeTier: { + status: "strong", + details: "Free: 1K MTUs, 2 sources", + + reference: "https://segment.com/pricing", }, pricingModel: { + status: "strong", + details: "Team: $120/mo for 10K MTUs", + + reference: "https://segment.com/pricing", }, - openSource: { status: "partial", details: "Open-source libraries" }, - selfHosted: { status: "none", details: "Cloud-only" }, - cloudHosted: { status: "strong", details: "Fully managed" }, - cdp: { status: "strong", details: "Core CDP platform" }, + openSource: { status: "partial", details: "Open-source libraries", reference: "https://segment.com/pricing" }, + selfHosted: { status: "none", details: "Cloud-only", reference: "https://segment.com/pricing" }, + cloudHosted: { status: "strong", details: "Fully managed", reference: "https://segment.com/pricing" }, + cdp: { status: "strong", details: "Core CDP platform", reference: "https://segment.com/pricing" }, marketing: { + status: "strong", + details: "450+ destinations", + + reference: "https://segment.com/pricing", }, datatools: { + status: "strong", + details: "All major warehouses", + + reference: "https://segment.com/pricing", }, - webhooks: { status: "strong", details: "Webhooks destination" }, + webhooks: { status: "strong", details: "Webhooks destination", reference: "https://segment.com/pricing" }, }, }; diff --git a/src/data/auth/auth0.tsx b/src/data/auth/auth0.tsx index cab2433..1210f6c 100644 --- a/src/data/auth/auth0.tsx +++ b/src/data/auth/auth0.tsx @@ -19,88 +19,163 @@ export const auth0: Provider = { logo: , website: "https://auth0.com", tagline: { + status: "strong", - details: - "Easy to implement, adaptable authentication and authorization platform", + + details: "Easy to implement, adaptable authentication and authorization platform", + + reference: "https://auth0.com/pricing", }, features: { emailPassword: { + status: "strong", + details: "Email + password with verification", + + reference: "https://auth0.com/pricing", }, - passwordless: { status: "strong", details: "Email, SMS magic links" }, + passwordless: { status: "strong", details: "Email, SMS magic links", reference: "https://auth0.com/pricing" }, socialLogins: { + status: "strong", + details: "30+ providers including all major platforms", + + reference: "https://auth0.com/pricing", }, enterpriseSSO: { + status: "strong", + details: "SAML, OIDC, AD, LDAP (Professional+)", + + reference: "https://auth0.com/pricing", }, - passkeys: { status: "strong", details: "WebAuthn/FIDO2 biometric auth" }, - mfa: { status: "strong", details: "SMS, TOTP, Email, Push, WebAuthn" }, + passkeys: { status: "strong", details: "WebAuthn/FIDO2 biometric auth", reference: "https://auth0.com/pricing" }, + mfa: { status: "strong", details: "SMS, TOTP, Email, Push, WebAuthn", reference: "https://auth0.com/pricing" }, rbac: { + status: "strong", + details: "Core RBAC (Professional+), fine-grained permissions", + + reference: "https://auth0.com/pricing", }, userProfiles: { + status: "strong", + details: "Customizable with metadata & progressive profiling", + + reference: "https://auth0.com/pricing", }, organizations: { + status: "strong", + details: "B2B organizations (Professional+)", + + reference: "https://auth0.com/pricing", }, frontendSDKs: { + status: "strong", + details: "React, Angular, Vue, iOS, Android, many more", + + reference: "https://auth0.com/docs", }, prebuiltUI: { + status: "strong", + details: "Universal Login with customizable Lock widget", + + reference: "https://auth0.com/pricing", }, documentation: { + status: "strong", + details: "Comprehensive docs with quickstarts", + + reference: "https://auth0.com/docs", }, - apiApproach: { status: "strong", details: "REST API + Management API" }, + apiApproach: { status: "strong", details: "REST API + Management API", reference: "https://auth0.com/docs" }, sessionManagement: { + status: "strong", + details: "Refresh tokens, SSO sessions, device tracking", + + reference: "https://auth0.com/pricing", }, jwtSupport: { + status: "strong", + details: "JWTs with custom claims & namespacing", + + reference: "https://auth0.com/pricing", }, compliance: { + status: "strong", + details: "SOC 2 Type II, ISO 27001, GDPR, HIPAA", + + reference: "https://auth0.com/privacy", }, rateLimiting: { + status: "strong", + details: "Configurable rate limits & anomaly detection", + + reference: "https://auth0.com/pricing", }, - freeTier: { status: "strong", details: "7,500 MAU" }, + freeTier: { status: "strong", details: "7,500 MAU", reference: "https://auth0.com/pricing" }, paidPricing: { + status: "strong", + details: "$35/mo (Essentials), $240/mo (Professional)", + + reference: "https://auth0.com/pricing", }, - openSource: { status: "none", details: "Proprietary" }, + openSource: { status: "none", details: "Proprietary", reference: "https://auth0.com/pricing" }, selfHosted: { + status: "none", + details: "Cloud-only (Private Cloud available)", + + reference: "https://auth0.com/pricing", }, oauthProviders: { + status: "strong", + details: "30+ social + enterprise connections", + + reference: "https://auth0.com/pricing", }, webhooks: { + status: "strong", + details: "Log streams & webhooks (Professional+)", + + reference: "https://auth0.com/pricing", }, thirdPartyIntegrations: { + status: "strong", + details: "Extensive marketplace with 100+ integrations", + + reference: "https://auth0.com/pricing", }, }, }; diff --git a/src/data/auth/authjs.tsx b/src/data/auth/authjs.tsx index bf22c8a..b051d20 100644 --- a/src/data/auth/authjs.tsx +++ b/src/data/auth/authjs.tsx @@ -19,96 +19,184 @@ export const authjs: Provider = { logo: , website: "https://authjs.dev", tagline: { + status: "strong", + details: "Free and open source authentication for the web", + + reference: "https://authjs.dev", }, features: { emailPassword: { + status: "strong", + details: "Credentials provider with custom logic", + + reference: "https://authjs.dev", }, - passwordless: { status: "strong", details: "Email magic links built-in" }, + passwordless: { status: "strong", details: "Email magic links built-in", reference: "https://authjs.dev" }, socialLogins: { + status: "strong", + details: "80+ built-in OAuth providers", + + reference: "https://authjs.dev", }, enterpriseSSO: { + status: "partial", + details: "Via custom providers (SAML, OIDC possible)", + + reference: "https://authjs.dev", }, passkeys: { + status: "partial", + details: "Via SimpleWebAuthn or custom implementation", + + reference: "https://authjs.dev", }, mfa: { + status: "partial", + details: "Custom implementation via callbacks", + + reference: "https://authjs.dev", }, rbac: { + status: "partial", + details: "Build your own with session callbacks", + + reference: "https://authjs.dev", }, userProfiles: { + status: "partial", + details: "Store in your own database", + + reference: "https://authjs.dev", }, organizations: { + status: "partial", + details: "Build your own with custom logic", + + reference: "https://authjs.dev", }, frontendSDKs: { + status: "strong", + details: "Next.js, SvelteKit, SolidStart, Express", + + reference: "https://authjs.dev/getting-started/introduction", }, prebuiltUI: { + status: "partial", + details: "Basic sign-in pages (customizable)", + + reference: "https://authjs.dev", }, documentation: { + status: "strong", + details: "Good docs with many examples", + + reference: "https://authjs.dev/getting-started/introduction", }, apiApproach: { + status: "strong", + details: "Framework-integrated API routes", + + reference: "https://authjs.dev/getting-started/introduction", }, sessionManagement: { + status: "strong", + details: "JWT or database sessions with rotation", + + reference: "https://authjs.dev", }, jwtSupport: { + status: "strong", + details: "JWT with custom claims via callbacks", + + reference: "https://authjs.dev", }, compliance: { + status: "partial", + details: "Your responsibility (self-hosted)", + + reference: "https://authjs.dev", }, rateLimiting: { + status: "partial", + details: "Implement via middleware or proxies", + + reference: "https://authjs.dev", }, freeTier: { + status: "strong", + details: "Unlimited (self-hosted, open source)", + + reference: "https://authjs.dev", }, - paidPricing: { status: "none", details: "Free forever" }, - openSource: { status: "strong", details: "ISC License (MIT-compatible)" }, + paidPricing: { status: "none", details: "Free forever", reference: "https://authjs.dev" }, + openSource: { status: "strong", details: "ISC License (MIT-compatible)", reference: "https://authjs.dev" }, selfHosted: { + status: "strong", + details: "Required (runs on your infrastructure)", + + reference: "https://authjs.dev", }, oauthProviders: { + status: "strong", + details: "80+ providers (Google, GitHub, Apple, etc.)", + + reference: "https://authjs.dev", }, webhooks: { + status: "partial", + details: "Build your own with event callbacks", + + reference: "https://authjs.dev", }, thirdPartyIntegrations: { + status: "partial", + details: "Community adapters for various databases", + + reference: "https://authjs.dev", }, }, }; diff --git a/src/data/auth/clerk.tsx b/src/data/auth/clerk.tsx index 4d1a77d..45adcf2 100644 --- a/src/data/auth/clerk.tsx +++ b/src/data/auth/clerk.tsx @@ -27,91 +27,170 @@ export const clerk: Provider = { logo: , website: "https://clerk.com", tagline: { + status: "strong", - details: - "Complete user management - authentication, profiles, and organizations", + + details: "Complete user management - authentication, profiles, and organizations", + + reference: "https://clerk.com/pricing", }, features: { emailPassword: { + status: "strong", + details: "Email + password with verification", + + reference: "https://clerk.com/pricing", }, passwordless: { + status: "strong", + details: "Email magic links & verification codes", + + reference: "https://clerk.com/pricing", }, socialLogins: { + status: "strong", + details: "Google, GitHub, Microsoft, Apple, 20+ providers", + + reference: "https://clerk.com/pricing", }, enterpriseSSO: { + status: "strong", + details: "SAML & OIDC (Enhanced Auth $100/mo addon)", + + reference: "https://clerk.com/pricing", }, passkeys: { + status: "strong", + details: "WebAuthn/FIDO2 (Enhanced Auth $100/mo addon)", + + reference: "https://clerk.com/pricing", }, mfa: { + status: "strong", + details: "SMS, TOTP, Backup codes (Enhanced Auth $100/mo addon)", + + reference: "https://clerk.com/pricing", }, rbac: { + status: "strong", + details: "Custom roles & permissions (Enhanced Auth $100/mo addon)", + + reference: "https://clerk.com/pricing", }, userProfiles: { + status: "strong", + details: "Customizable with metadata fields", + + reference: "https://clerk.com/pricing", }, organizations: { + status: "strong", + details: "Built-in teams with invitations", + + reference: "https://clerk.com/pricing", }, frontendSDKs: { + status: "strong", + details: "React, Next.js, Remix, Gatsby, Vue, Svelte", + + reference: "https://clerk.com/docs", }, prebuiltUI: { + status: "strong", + details: "Fully customizable components & themes", + + reference: "https://clerk.com/pricing", }, documentation: { + status: "strong", + details: "Excellent docs with tutorials & examples", + + reference: "https://clerk.com/docs", }, apiApproach: { + status: "strong", + details: "REST API + SDKs with TypeScript support", + + reference: "https://clerk.com/docs", }, sessionManagement: { + status: "strong", + details: "Customizable duration & refresh tokens", + + reference: "https://clerk.com/pricing", }, - jwtSupport: { status: "strong", details: "JWTs with custom claims" }, + jwtSupport: { status: "strong", details: "JWTs with custom claims", reference: "https://clerk.com/pricing" }, compliance: { + status: "strong", + details: "SOC 2 Type II, GDPR, HIPAA (Enterprise)", + + reference: "https://clerk.com/legal/privacy", }, rateLimiting: { + status: "strong", + details: "Built-in DDoS & bot protection", + + reference: "https://clerk.com/pricing", }, - freeTier: { status: "strong", details: "10,000 MAU" }, - paidPricing: { status: "strong", details: "$25/mo + $0.02/MAU" }, - openSource: { status: "none", details: "Proprietary" }, - selfHosted: { status: "none", details: "Cloud-only SaaS" }, + freeTier: { status: "strong", details: "10,000 MAU", reference: "https://clerk.com/pricing" }, + paidPricing: { status: "strong", details: "$25/mo + $0.02/MAU", reference: "https://clerk.com/pricing" }, + openSource: { status: "none", details: "Proprietary", reference: "https://clerk.com/pricing" }, + selfHosted: { status: "none", details: "Cloud-only SaaS", reference: "https://clerk.com/pricing" }, oauthProviders: { + status: "strong", + details: "20+ social, enterprise, Web3 providers", + + reference: "https://clerk.com/pricing", }, webhooks: { + status: "strong", + details: "Real-time event webhooks (Svix)", + + reference: "https://clerk.com/pricing", }, thirdPartyIntegrations: { + status: "strong", + details: "Segment, Vercel, Netlify, analytics tools", + + reference: "https://clerk.com/pricing", }, }, }; diff --git a/src/data/auth/firebase.tsx b/src/data/auth/firebase.tsx index 600a239..98e6468 100644 --- a/src/data/auth/firebase.tsx +++ b/src/data/auth/firebase.tsx @@ -19,94 +19,177 @@ export const firebase: Provider = { logo: , website: "https://firebase.google.com/products/auth", tagline: { + status: "strong", - details: - "Simple, multi-platform sign-in with backend services and ready-made UI", + + details: "Simple, multi-platform sign-in with backend services and ready-made UI", + + reference: "https://firebase.google.com/pricing", }, features: { emailPassword: { + status: "strong", + details: "Email + password with verification links", + + reference: "https://firebase.google.com/pricing", }, passwordless: { + status: "strong", + details: "Email links & anonymous auth", + + reference: "https://firebase.google.com/pricing", }, socialLogins: { + status: "strong", + details: "Google, Facebook, Apple, Microsoft, GitHub, Twitter", + + reference: "https://firebase.google.com/pricing", }, enterpriseSSO: { + status: "strong", + details: "SAML & OIDC (Identity Platform)", + + reference: "https://firebase.google.com/pricing", }, passkeys: { + status: "partial", + details: "Via Firebase Extensions or custom", + + reference: "https://firebase.google.com/pricing", }, - mfa: { status: "strong", details: "SMS, TOTP (Google Authenticator)" }, - rbac: { status: "partial", details: "Custom claims + Security Rules" }, + mfa: { status: "strong", details: "SMS, TOTP (Google Authenticator)", reference: "https://firebase.google.com/pricing" }, + rbac: { status: "partial", details: "Custom claims + Security Rules", reference: "https://firebase.google.com/pricing" }, userProfiles: { + status: "partial", + details: "Store in Firestore with custom logic", + + reference: "https://firebase.google.com/pricing", }, organizations: { + status: "partial", + details: "Build with Firestore & Security Rules", + + reference: "https://firebase.google.com/pricing", }, frontendSDKs: { + status: "strong", + details: "Web, iOS, Android, Flutter, Unity, C++", + + reference: "https://firebase.google.com/docs/auth", }, prebuiltUI: { + status: "strong", + details: "FirebaseUI for Web, iOS, Android", + + reference: "https://firebase.google.com/pricing", }, documentation: { + status: "strong", + details: "Excellent docs with video courses", + + reference: "https://firebase.google.com/docs/auth", }, apiApproach: { + status: "strong", + details: "Client SDKs + Admin SDK for backend", + + reference: "https://firebase.google.com/docs/auth", }, sessionManagement: { + status: "strong", + details: "ID tokens with automatic refresh", + + reference: "https://firebase.google.com/pricing", }, - jwtSupport: { status: "strong", details: "Firebase ID tokens (JWTs)" }, + jwtSupport: { status: "strong", details: "Firebase ID tokens (JWTs)", reference: "https://firebase.google.com/pricing" }, compliance: { + status: "strong", + details: "SOC 2, SOC 3, ISO 27001, GDPR", + + reference: "https://policies.google.com/privacy", }, rateLimiting: { + status: "strong", + details: "App Check + Cloud Armor integration", + + reference: "https://firebase.google.com/pricing", }, freeTier: { + status: "strong", + details: "Unlimited auth users (no MAU limits)", + + reference: "https://firebase.google.com/pricing", }, paidPricing: { + status: "partial", + details: "Free auth; phone SMS $0.06/verification", + + reference: "https://firebase.google.com/pricing", }, openSource: { + status: "none", + details: "Proprietary (Firebase Emulators for dev)", + + reference: "https://firebase.google.com/pricing", }, - selfHosted: { status: "none", details: "Cloud-only Google service" }, + selfHosted: { status: "none", details: "Cloud-only Google service", reference: "https://firebase.google.com/pricing" }, oauthProviders: { + status: "strong", + details: "6+ social + custom OAuth/SAML", + + reference: "https://firebase.google.com/pricing", }, webhooks: { + status: "partial", + details: "Cloud Functions triggers for auth events", + + reference: "https://firebase.google.com/pricing", }, thirdPartyIntegrations: { + status: "strong", + details: "Google ecosystem + Firebase Extensions", + + reference: "https://firebase.google.com/pricing", }, }, }; diff --git a/src/data/auth/keycloak.tsx b/src/data/auth/keycloak.tsx index 8f4c29b..083921d 100644 --- a/src/data/auth/keycloak.tsx +++ b/src/data/auth/keycloak.tsx @@ -20,91 +20,170 @@ export const keycloak: Provider = { logo: , website: "https://www.keycloak.org", tagline: { + status: "strong", - details: - "Open source identity and access management - add authentication with minimum effort", + + details: "Open source identity and access management - add authentication with minimum effort", + + reference: "https://www.keycloak.org", }, features: { - emailPassword: { status: "strong", details: "Username/email + password" }, - passwordless: { status: "partial", details: "WebAuthn or custom flows" }, + emailPassword: { status: "strong", details: "Username/email + password", reference: "https://www.keycloak.org" }, + passwordless: { status: "partial", details: "WebAuthn or custom flows", reference: "https://www.keycloak.org" }, socialLogins: { + status: "strong", + details: "Google, GitHub, Facebook, LinkedIn, etc.", + + reference: "https://www.keycloak.org", }, enterpriseSSO: { + status: "strong", + details: "SAML 2.0, OIDC, LDAP, Kerberos", + + reference: "https://www.keycloak.org", }, - passkeys: { status: "strong", details: "WebAuthn/FIDO2 built-in" }, - mfa: { status: "strong", details: "OTP, WebAuthn/FIDO2, SMS (via SPI)" }, + passkeys: { status: "strong", details: "WebAuthn/FIDO2 built-in", reference: "https://www.keycloak.org" }, + mfa: { status: "strong", details: "OTP, WebAuthn/FIDO2, SMS (via SPI)", reference: "https://www.keycloak.org" }, rbac: { + status: "strong", + details: "Fine-grained authorization with policies", + + reference: "https://www.keycloak.org", }, userProfiles: { + status: "strong", + details: "Customizable attributes & federation", + + reference: "https://www.keycloak.org", }, organizations: { + status: "strong", + details: "Realms & organizations (multi-tenancy)", + + reference: "https://www.keycloak.org", }, frontendSDKs: { + status: "strong", + details: "JavaScript, Java, Python, .NET, Go adapters", + + reference: "https://www.keycloak.org/documentation", }, prebuiltUI: { + status: "partial", + details: "Admin console + customizable login themes", + + reference: "https://www.keycloak.org", }, documentation: { + status: "strong", + details: "Comprehensive official docs", + + reference: "https://www.keycloak.org/documentation", }, apiApproach: { + status: "strong", + details: "REST Admin API + standard OAuth/OIDC", + + reference: "https://www.keycloak.org/documentation", }, sessionManagement: { + status: "strong", + details: "SSO sessions, offline tokens, revocation", + + reference: "https://www.keycloak.org", }, jwtSupport: { + status: "strong", + details: "JWTs with custom claims & mappers", + + reference: "https://www.keycloak.org", }, compliance: { + status: "partial", + details: "Your responsibility (self-hosted)", + + reference: "https://www.keycloak.org", }, rateLimiting: { + status: "partial", + details: "Via reverse proxy or extensions", + + reference: "https://www.keycloak.org", }, freeTier: { + status: "strong", + details: "Unlimited (self-hosted, open source)", + + reference: "https://www.keycloak.org", }, paidPricing: { + status: "none", + details: "Free (Red Hat support available)", + + reference: "https://www.keycloak.org", }, - openSource: { status: "strong", details: "Apache 2.0 License" }, + openSource: { status: "strong", details: "Apache 2.0 License", reference: "https://www.keycloak.org" }, selfHosted: { + status: "strong", + details: "Required (Java app, Docker, Kubernetes)", + + reference: "https://www.keycloak.org", }, oauthProviders: { + status: "strong", + details: "OAuth 2.0, OIDC, SAML, LDAP, social providers", + + reference: "https://www.keycloak.org", }, webhooks: { + status: "partial", + details: "Event listeners via SPI extensions", + + reference: "https://www.keycloak.org", }, thirdPartyIntegrations: { + status: "strong", + details: "Extensive via SPIs & adapters", + + reference: "https://www.keycloak.org", }, }, }; diff --git a/src/data/auth/lucia.tsx b/src/data/auth/lucia.tsx index c5bb3d1..d3a05ce 100644 --- a/src/data/auth/lucia.tsx +++ b/src/data/auth/lucia.tsx @@ -30,75 +30,135 @@ export const lucia: Provider = { logo: , website: "https://lucia-auth.com", tagline: { + status: "strong", + details: "Open source library to implement authentication using JavaScript", + + reference: "https://lucia-auth.com", }, features: { emailPassword: { + status: "strong", + details: "Build your own with database", + + reference: "https://lucia-auth.com", }, passwordless: { + status: "partial", + details: "Implement yourself with email service", + + reference: "https://lucia-auth.com", }, socialLogins: { + status: "strong", + details: "Arctic library: 50+ OAuth providers", + + reference: "https://lucia-auth.com", }, enterpriseSSO: { + status: "partial", + details: "Custom SAML/OIDC implementation needed", + + reference: "https://lucia-auth.com", }, - passkeys: { status: "partial", details: "Use SimpleWebAuthn library" }, - mfa: { status: "partial", details: "Build your own TOTP/SMS logic" }, + passkeys: { status: "partial", details: "Use SimpleWebAuthn library", reference: "https://lucia-auth.com" }, + mfa: { status: "partial", details: "Build your own TOTP/SMS logic", reference: "https://lucia-auth.com" }, rbac: { + status: "partial", + details: "Implement with your database schema", + + reference: "https://lucia-auth.com", }, userProfiles: { + status: "partial", + details: "Your database, your schema", + + reference: "https://lucia-auth.com", }, - organizations: { status: "partial", details: "Build from scratch" }, + organizations: { status: "partial", details: "Build from scratch", reference: "https://lucia-auth.com" }, frontendSDKs: { + status: "partial", + details: "Framework-agnostic TypeScript library", + + reference: "https://lucia-auth.com", }, - prebuiltUI: { status: "none", details: "No pre-built UI (you build it)" }, - documentation: { status: "strong", details: "Clear docs with examples" }, - apiApproach: { status: "strong", details: "Session-based auth library" }, + prebuiltUI: { status: "none", details: "No pre-built UI (you build it)", reference: "https://lucia-auth.com" }, + documentation: { status: "strong", details: "Clear docs with examples", reference: "https://lucia-auth.com" }, + apiApproach: { status: "strong", details: "Session-based auth library", reference: "https://lucia-auth.com" }, sessionManagement: { + status: "strong", + details: "Secure database-backed sessions", + + reference: "https://lucia-auth.com", }, jwtSupport: { + status: "partial", + details: "Use jose or other JWT library", + + reference: "https://lucia-auth.com", }, compliance: { + status: "partial", + details: "Your responsibility (self-implemented)", + + reference: "https://lucia-auth.com", }, - rateLimiting: { status: "partial", details: "Implement via middleware" }, + rateLimiting: { status: "partial", details: "Implement via middleware", reference: "https://lucia-auth.com" }, freeTier: { + status: "strong", + details: "Unlimited (library, not a service)", + + reference: "https://lucia-auth.com", }, - paidPricing: { status: "none", details: "Free forever (MIT license)" }, - openSource: { status: "strong", details: "MIT License (fully open)" }, + paidPricing: { status: "none", details: "Free forever (MIT license)", reference: "https://lucia-auth.com" }, + openSource: { status: "strong", details: "MIT License (fully open)", reference: "https://lucia-auth.com" }, selfHosted: { + status: "strong", + details: "Required (TypeScript library)", + + reference: "https://lucia-auth.com", }, oauthProviders: { + status: "strong", + details: "Arctic: 50+ OAuth providers", + + reference: "https://lucia-auth.com", }, - webhooks: { status: "partial", details: "Build your own event system" }, + webhooks: { status: "partial", details: "Build your own event system", reference: "https://lucia-auth.com" }, thirdPartyIntegrations: { + status: "none", + details: "Minimal (DIY approach)", + + reference: "https://lucia-auth.com", }, }, }; diff --git a/src/data/auth/supabase.tsx b/src/data/auth/supabase.tsx index b811522..127d584 100644 --- a/src/data/auth/supabase.tsx +++ b/src/data/auth/supabase.tsx @@ -59,90 +59,170 @@ export const supabase: Provider = { logo: , website: "https://supabase.com/auth", tagline: { + status: "strong", + details: "Open source auth with PostgreSQL Row Level Security", + + reference: "https://supabase.com/pricing", }, features: { emailPassword: { + status: "strong", + details: "Email + password with confirmation", + + reference: "https://supabase.com/pricing", }, - passwordless: { status: "strong", details: "Magic links via email" }, + passwordless: { status: "strong", details: "Magic links via email", reference: "https://supabase.com/pricing" }, socialLogins: { + status: "strong", + details: "Google, GitHub, GitLab, Slack, 10+ providers", + + reference: "https://supabase.com/pricing", }, enterpriseSSO: { + status: "partial", + details: "SAML (Enterprise plan only)", + + reference: "https://supabase.com/pricing", }, - passkeys: { status: "partial", details: "Experimental WebAuthn support" }, - mfa: { status: "strong", details: "TOTP authenticator apps" }, + passkeys: { status: "partial", details: "Experimental WebAuthn support", reference: "https://supabase.com/pricing" }, + mfa: { status: "strong", details: "TOTP authenticator apps", reference: "https://supabase.com/pricing" }, rbac: { + status: "strong", + details: "Row Level Security (RLS) with PostgreSQL policies", + + reference: "https://supabase.com/pricing", }, userProfiles: { + status: "strong", + details: "Stored in users table with custom fields", + + reference: "https://supabase.com/pricing", }, organizations: { + status: "partial", + details: "Build your own with RLS policies", + + reference: "https://supabase.com/pricing", }, frontendSDKs: { + status: "strong", + details: "JavaScript, React, Vue, Svelte, Angular, Flutter", + + reference: "https://supabase.com/docs/guides/auth", }, prebuiltUI: { + status: "strong", + details: "Auth UI library with customizable components", + + reference: "https://supabase.com/pricing", }, documentation: { + status: "strong", + details: "Excellent docs with video tutorials", + + reference: "https://supabase.com/docs/guides/auth", }, apiApproach: { + status: "strong", + details: "RESTful + Realtime + GraphQL (pg_graphql)", + + reference: "https://supabase.com/docs/guides/auth", }, sessionManagement: { + status: "strong", + details: "JWT with refresh tokens & auto-refresh", + + reference: "https://supabase.com/pricing", }, jwtSupport: { + status: "strong", + details: "JWTs with custom claims via PostgreSQL functions", + + reference: "https://supabase.com/pricing", }, compliance: { + status: "strong", + details: "SOC 2 Type II, GDPR, HIPAA (Enterprise)", + + reference: "https://supabase.com/privacy", }, rateLimiting: { + status: "strong", + details: "Built-in rate limiting per endpoint", + + reference: "https://supabase.com/pricing", }, - freeTier: { status: "strong", details: "50,000 MAU" }, - paidPricing: { status: "strong", details: "$25/mo + $0.00325/MAU" }, + freeTier: { status: "strong", details: "50,000 MAU", reference: "https://supabase.com/pricing" }, + paidPricing: { status: "strong", details: "$25/mo + $0.00325/MAU", reference: "https://supabase.com/pricing" }, openSource: { + status: "strong", + details: "MIT License (fully open source)", + + reference: "https://supabase.com/pricing", }, selfHosted: { + status: "strong", + details: "Docker self-hosting available", + + reference: "https://supabase.com/pricing", }, oauthProviders: { + status: "strong", + details: "10+ providers with custom OAuth", + + reference: "https://supabase.com/pricing", }, webhooks: { + status: "strong", + details: "Database webhooks via pg_net or Edge Functions", + + reference: "https://supabase.com/pricing", }, thirdPartyIntegrations: { + status: "partial", + details: "Growing ecosystem with partner integrations", + + reference: "https://supabase.com/pricing", }, }, }; diff --git a/src/data/auth/workos.tsx b/src/data/auth/workos.tsx index ef812ed..e0b1333 100644 --- a/src/data/auth/workos.tsx +++ b/src/data/auth/workos.tsx @@ -30,73 +30,128 @@ export const workos: Provider = { logo: , website: "https://workos.com", tagline: { + status: "strong", - details: - "Your app, enterprise ready - APIs for SSO, SCIM, and user management", + + details: "Your app, enterprise ready - APIs for SSO, SCIM, and user management", + + reference: "https://workos.com/pricing", }, features: { - emailPassword: { status: "strong", details: "AuthKit email + password" }, - passwordless: { status: "strong", details: "Magic links via AuthKit" }, + emailPassword: { status: "strong", details: "AuthKit email + password", reference: "https://workos.com/pricing" }, + passwordless: { status: "strong", details: "Magic links via AuthKit", reference: "https://workos.com/pricing" }, socialLogins: { + status: "strong", + details: "Microsoft, Google, GitHub via AuthKit", + + reference: "https://workos.com/pricing", }, enterpriseSSO: { + status: "strong", + details: "SAML, OIDC (enterprise focus)", + + reference: "https://workos.com/pricing", }, - passkeys: { status: "partial", details: "Coming soon to AuthKit" }, - mfa: { status: "strong", details: "TOTP, SMS included in AuthKit" }, + passkeys: { status: "partial", details: "Coming soon to AuthKit", reference: "https://workos.com/pricing" }, + mfa: { status: "strong", details: "TOTP, SMS included in AuthKit", reference: "https://workos.com/pricing" }, rbac: { + status: "strong", + details: "Built-in with AuthKit & Organizations API", + + reference: "https://workos.com/pricing", }, userProfiles: { + status: "strong", + details: "User Management API with metadata", + + reference: "https://workos.com/pricing", }, organizations: { + status: "strong", + details: "Organizations API (B2B focus)", + + reference: "https://workos.com/pricing", }, frontendSDKs: { + status: "strong", + details: "React, Next.js, Node.js SDKs", + + reference: "https://workos.com/docs", }, prebuiltUI: { + status: "strong", + details: "AuthKit hosted UI with customization", + + reference: "https://workos.com/pricing", }, - documentation: { status: "strong", details: "Developer-focused docs" }, + documentation: { status: "strong", details: "Developer-focused docs", reference: "https://workos.com/docs" }, apiApproach: { + status: "strong", + details: "Modern REST APIs with webhooks", + + reference: "https://workos.com/docs", }, sessionManagement: { + status: "strong", + details: "Managed sessions via AuthKit", + + reference: "https://workos.com/pricing", }, - jwtSupport: { status: "strong", details: "JWTs for API authentication" }, - compliance: { status: "strong", details: "SOC 2 Type II, GDPR, HIPAA" }, + jwtSupport: { status: "strong", details: "JWTs for API authentication", reference: "https://workos.com/pricing" }, + compliance: { status: "strong", details: "SOC 2 Type II, GDPR, HIPAA", reference: "https://workos.com/legal/privacy-policy" }, rateLimiting: { + status: "strong", + details: "Enterprise-grade rate limiting", + + reference: "https://workos.com/pricing", }, - freeTier: { status: "strong", details: "1 million MAU (generous)" }, - paidPricing: { status: "strong", details: "$2,500/mo per 1M MAU" }, - openSource: { status: "none", details: "Proprietary" }, - selfHosted: { status: "none", details: "Cloud-only SaaS" }, + freeTier: { status: "strong", details: "1 million MAU (generous)", reference: "https://workos.com/pricing" }, + paidPricing: { status: "strong", details: "$2,500/mo per 1M MAU", reference: "https://workos.com/pricing" }, + openSource: { status: "none", details: "Proprietary", reference: "https://workos.com/pricing" }, + selfHosted: { status: "none", details: "Cloud-only SaaS", reference: "https://workos.com/pricing" }, oauthProviders: { + status: "strong", + details: "Social + enterprise SSO providers", + + reference: "https://workos.com/pricing", }, webhooks: { + status: "strong", + details: "Event-driven webhooks for all APIs", + + reference: "https://workos.com/pricing", }, thirdPartyIntegrations: { + status: "strong", + details: "Directory Sync (SCIM), Audit Logs, MFA", + + reference: "https://workos.com/pricing", }, }, }; diff --git a/src/data/featureflags/configcat.tsx b/src/data/featureflags/configcat.tsx index bf953a3..36a1215 100644 --- a/src/data/featureflags/configcat.tsx +++ b/src/data/featureflags/configcat.tsx @@ -26,142 +26,278 @@ export const configcat: Provider = { logo: , website: "https://configcat.com", tagline: { + status: "strong", + details: "Feature flag service with 10-minute setup", + + reference: "https://configcat.com/pricing", }, features: { - booleanFlags: { status: "strong", details: "Full support" }, + booleanFlags: { status: "strong", details: "Full support", reference: "https://configcat.com/pricing" }, multivariateFlags: { + status: "strong", + details: "String, number, JSON", + + reference: "https://configcat.com/pricing", }, jsonFlags: { + status: "strong", + details: "JSON setting values", + + reference: "https://configcat.com/pricing", }, flagDependencies: { + status: "partial", + details: "Via targeting rules", + + reference: "https://configcat.com/pricing", }, scheduledRollouts: { + status: "partial", + details: "Manual time-based changes", + + reference: "https://configcat.com/pricing", }, userTargeting: { + status: "strong", + details: "User object targeting", + + reference: "https://configcat.com/pricing", }, percentageRollouts: { + status: "strong", + details: "Percentage options", + + reference: "https://configcat.com/pricing", }, customSegments: { + status: "strong", + details: "Segments with conditions", + + reference: "https://configcat.com/pricing", }, geoTargeting: { + status: "partial", + details: "Via custom attributes", + + reference: "https://configcat.com/pricing", }, contextualTargeting: { + status: "strong", + details: "Custom attribute targeting", + + reference: "https://configcat.com/pricing", }, abTesting: { + status: "partial", + details: "Basic A/B via percentages", + + reference: "https://configcat.com/pricing", }, multivariateExperiments: { + status: "partial", + details: "Via integrations", + + reference: "https://configcat.com/pricing", }, statisticalAnalysis: { + status: "none", + details: "External tools needed", + + reference: "https://configcat.com/pricing", }, metricsTracking: { + status: "partial", + details: "Via integrations", + + reference: "https://configcat.com/pricing", }, experimentGoals: { + status: "none", + details: "Not built-in", + + reference: "https://configcat.com/pricing", }, sdkLanguages: { + status: "strong", + details: "25+ languages (JS, Java, Python, .NET, Go, etc.)", + + reference: "https://configcat.com/docs", }, localEvaluation: { + status: "strong", + details: "Auto-polling with caching", + + reference: "https://configcat.com/pricing", }, typeSafety: { + status: "strong", + details: "Strongly typed SDKs", + + reference: "https://configcat.com/pricing", }, documentation: { + status: "strong", + details: "Clear documentation", + + reference: "https://configcat.com/docs", }, apiQuality: { + status: "strong", + details: "Public Management API", + + reference: "https://configcat.com/docs", }, rbac: { + status: "strong", + details: "Permission groups (Team+)", + + reference: "https://configcat.com/pricing", }, auditLogs: { + status: "strong", + details: "Product audit log", + + reference: "https://configcat.com/pricing", }, environments: { + status: "strong", + details: "Unlimited configs & environments", + + reference: "https://configcat.com/pricing", }, approvalWorkflows: { + status: "partial", + details: "Two-step save", + + reference: "https://configcat.com/pricing", }, compliance: { + status: "strong", + details: "SOC 2, GDPR, CCPA", + + reference: "https://configcat.com/privacy", }, freeTier: { + status: "strong", + details: "Free: 10 flags, 2 environments, 5M config downloads", + + reference: "https://configcat.com/pricing", }, paidPricing: { + status: "strong", + details: "Pro: $110/mo (100 flags), Smart: $325/mo (unlimited)", + + reference: "https://configcat.com/pricing", }, openSource: { + status: "partial", + details: "Open source SDKs", + + reference: "https://configcat.com/pricing", }, selfHosted: { + status: "none", + details: "Cloud-only", + + reference: "https://configcat.com/pricing", }, cloudHosted: { + status: "strong", + details: "Fully managed SaaS", + + reference: "https://configcat.com/pricing", }, analytics: { + status: "strong", + details: "Google Analytics, Mixpanel, Amplitude", + + reference: "https://configcat.com/pricing", }, dataWarehouses: { + status: "partial", + details: "Webhook-based export", + + reference: "https://configcat.com/pricing", }, cicd: { + status: "strong", + details: "Slack, Jira, Trello, Zapier, GitHub", + + reference: "https://configcat.com/pricing", }, webhooks: { + status: "strong", + details: "Config change webhooks", + + reference: "https://configcat.com/pricing", }, }, }; diff --git a/src/data/featureflags/devcycle.tsx b/src/data/featureflags/devcycle.tsx index d8ac14c..4206275 100644 --- a/src/data/featureflags/devcycle.tsx +++ b/src/data/featureflags/devcycle.tsx @@ -26,142 +26,278 @@ export const devcycle: Provider = { logo: , website: "https://devcycle.com", tagline: { + status: "strong", + details: "Developer-first feature flag management platform", + + reference: "https://devcycle.com/pricing", }, features: { - booleanFlags: { status: "strong", details: "Full support" }, + booleanFlags: { status: "strong", details: "Full support", reference: "https://devcycle.com/pricing" }, multivariateFlags: { + status: "strong", + details: "Multi-value variables", + + reference: "https://devcycle.com/pricing", }, jsonFlags: { + status: "strong", + details: "JSON variables", + + reference: "https://devcycle.com/pricing", }, flagDependencies: { + status: "partial", + details: "Via targeting rules", + + reference: "https://devcycle.com/pricing", }, scheduledRollouts: { + status: "strong", + details: "Scheduled changes", + + reference: "https://devcycle.com/pricing", }, userTargeting: { + status: "strong", + details: "User & custom targeting", + + reference: "https://devcycle.com/pricing", }, percentageRollouts: { + status: "strong", + details: "Percentage-based distribution", + + reference: "https://devcycle.com/pricing", }, customSegments: { + status: "strong", + details: "Custom audiences", + + reference: "https://devcycle.com/pricing", }, geoTargeting: { + status: "partial", + details: "Via custom properties", + + reference: "https://devcycle.com/pricing", }, contextualTargeting: { + status: "strong", + details: "Custom property targeting", + + reference: "https://devcycle.com/pricing", }, abTesting: { + status: "strong", + details: "Built-in experimentation", + + reference: "https://devcycle.com/pricing", }, multivariateExperiments: { + status: "strong", + details: "Multi-variant tests", + + reference: "https://devcycle.com/pricing", }, statisticalAnalysis: { + status: "partial", + details: "Basic statistics", + + reference: "https://devcycle.com/pricing", }, metricsTracking: { + status: "strong", + details: "Event tracking", + + reference: "https://devcycle.com/pricing", }, experimentGoals: { + status: "strong", + details: "Goal metrics", + + reference: "https://devcycle.com/pricing", }, sdkLanguages: { + status: "strong", + details: "12+ languages (JS, React, Node, Python, Go, etc.)", + + reference: "https://docs.devcycle.com", }, localEvaluation: { + status: "strong", + details: "Local bucketing", + + reference: "https://devcycle.com/pricing", }, typeSafety: { + status: "strong", + details: "Type-safe SDKs", + + reference: "https://devcycle.com/pricing", }, documentation: { + status: "strong", + details: "Developer-focused docs", + + reference: "https://docs.devcycle.com", }, apiQuality: { + status: "strong", + details: "Management API + SDKs", + + reference: "https://docs.devcycle.com", }, rbac: { + status: "strong", + details: "Team permissions", + + reference: "https://devcycle.com/pricing", }, auditLogs: { + status: "strong", + details: "Activity logs", + + reference: "https://devcycle.com/pricing", }, environments: { + status: "strong", + details: "Multiple environments", + + reference: "https://devcycle.com/pricing", }, approvalWorkflows: { + status: "partial", + details: "Review process", + + reference: "https://devcycle.com/pricing", }, compliance: { + status: "strong", + details: "SOC 2, GDPR", + + reference: "https://devcycle.com/privacy-policy", }, freeTier: { + status: "strong", + details: "Free: 1K client MAUs", + + reference: "https://devcycle.com/pricing", }, paidPricing: { + status: "strong", + details: "Developer: $10/mo (annual), Business: $500/mo (annual)", + + reference: "https://devcycle.com/pricing", }, openSource: { + status: "partial", + details: "Open source SDKs", + + reference: "https://devcycle.com/pricing", }, selfHosted: { + status: "none", + details: "Cloud-only", + + reference: "https://devcycle.com/pricing", }, cloudHosted: { + status: "strong", + details: "Managed SaaS", + + reference: "https://devcycle.com/pricing", }, analytics: { + status: "strong", + details: "Analytics integrations", + + reference: "https://devcycle.com/pricing", }, dataWarehouses: { + status: "partial", + details: "Data export", + + reference: "https://devcycle.com/pricing", }, cicd: { + status: "strong", + details: "GitHub integration, API", + + reference: "https://devcycle.com/pricing", }, webhooks: { + status: "strong", + details: "Event webhooks", + + reference: "https://devcycle.com/pricing", }, }, }; diff --git a/src/data/featureflags/flagsmith.tsx b/src/data/featureflags/flagsmith.tsx index 64ec636..ce74a22 100644 --- a/src/data/featureflags/flagsmith.tsx +++ b/src/data/featureflags/flagsmith.tsx @@ -21,139 +21,271 @@ export const flagsmith: Provider = { logo: , website: "https://flagsmith.com", tagline: { + status: "strong", + details: "Open source feature flag and remote config service", + + reference: "https://flagsmith.com/pricing", }, features: { - booleanFlags: { status: "strong", details: "Full support" }, + booleanFlags: { status: "strong", details: "Full support", reference: "https://flagsmith.com/pricing" }, multivariateFlags: { + status: "strong", + details: "String, number, boolean variants", + + reference: "https://flagsmith.com/pricing", }, - jsonFlags: { status: "strong", details: "JSON remote config" }, + jsonFlags: { status: "strong", details: "JSON remote config", reference: "https://flagsmith.com/pricing" }, flagDependencies: { + status: "partial", + details: "Via segment rules", + + reference: "https://flagsmith.com/pricing", }, scheduledRollouts: { + status: "strong", + details: "Scheduled flag changes", + + reference: "https://flagsmith.com/pricing", }, userTargeting: { + status: "strong", + details: "Identity-based targeting", + + reference: "https://flagsmith.com/pricing", }, percentageRollouts: { + status: "strong", + details: "Percentage-based splits", + + reference: "https://flagsmith.com/pricing", }, customSegments: { + status: "strong", + details: "Segment rules & conditions", + + reference: "https://flagsmith.com/pricing", }, geoTargeting: { + status: "partial", + details: "Via custom traits", + + reference: "https://flagsmith.com/pricing", }, contextualTargeting: { + status: "strong", + details: "Custom trait targeting", + + reference: "https://flagsmith.com/pricing", }, abTesting: { + status: "partial", + details: "Basic A/B via integrations", + + reference: "https://flagsmith.com/pricing", }, multivariateExperiments: { + status: "partial", + details: "Via integrations", + + reference: "https://flagsmith.com/pricing", }, statisticalAnalysis: { + status: "partial", + details: "Via analytics integrations", + + reference: "https://flagsmith.com/pricing", }, metricsTracking: { + status: "partial", + details: "Via integrations (Mixpanel, Heap)", + + reference: "https://flagsmith.com/pricing", }, experimentGoals: { + status: "partial", + details: "External analytics required", + + reference: "https://flagsmith.com/pricing", }, sdkLanguages: { + status: "strong", + details: "15+ languages (JS, Python, Java, .NET, Go, etc.)", + + reference: "https://docs.flagsmith.com", }, localEvaluation: { + status: "strong", + details: "Local evaluation mode", + + reference: "https://flagsmith.com/pricing", }, typeSafety: { + status: "strong", + details: "TypeScript support", + + reference: "https://flagsmith.com/pricing", }, documentation: { + status: "strong", + details: "Good docs with examples", + + reference: "https://docs.flagsmith.com", }, apiQuality: { + status: "strong", + details: "REST API + client SDKs", + + reference: "https://docs.flagsmith.com", }, rbac: { + status: "strong", + details: "Roles & permissions (paid)", + + reference: "https://flagsmith.com/pricing", }, auditLogs: { + status: "strong", + details: "Audit log (paid)", + + reference: "https://flagsmith.com/pricing", }, environments: { + status: "strong", + details: "Multiple environments", + + reference: "https://flagsmith.com/pricing", }, approvalWorkflows: { + status: "partial", + details: "4-eyes via external process", + + reference: "https://flagsmith.com/pricing", }, compliance: { + status: "strong", + details: "SOC 2 Type II, GDPR", + + reference: "https://flagsmith.com/privacy-policy", }, freeTier: { + status: "strong", + details: "Free: 50K requests/month, 1 team member", + + reference: "https://flagsmith.com/pricing", }, paidPricing: { + status: "strong", + details: "Start-Up: $45/mo, 1M requests, 3 team members", + + reference: "https://flagsmith.com/pricing", }, openSource: { + status: "strong", + details: "MIT & BSD licenses", + + reference: "https://flagsmith.com/pricing", }, selfHosted: { + status: "strong", + details: "Docker, Kubernetes, full self-host", + + reference: "https://flagsmith.com/pricing", }, cloudHosted: { + status: "strong", + details: "SaaS available", + + reference: "https://flagsmith.com/pricing", }, analytics: { + status: "strong", + details: "Mixpanel, Heap, Amplitude, Segment", + + reference: "https://flagsmith.com/pricing", }, dataWarehouses: { + status: "partial", + details: "Via data export API", + + reference: "https://flagsmith.com/pricing", }, cicd: { + status: "strong", + details: "GitHub Actions, API-based", + + reference: "https://flagsmith.com/pricing", }, webhooks: { + status: "strong", + details: "Change webhooks", + + reference: "https://flagsmith.com/pricing", }, }, }; diff --git a/src/data/featureflags/growthbook.tsx b/src/data/featureflags/growthbook.tsx index fa6421f..881e418 100644 --- a/src/data/featureflags/growthbook.tsx +++ b/src/data/featureflags/growthbook.tsx @@ -24,142 +24,278 @@ export const growthbook: Provider = { logo: , website: "https://www.growthbook.io", tagline: { + status: "strong", + details: "Open source feature flagging & A/B testing platform", + + reference: "https://www.growthbook.io/pricing", }, features: { - booleanFlags: { status: "strong", details: "Full support" }, + booleanFlags: { status: "strong", details: "Full support", reference: "https://www.growthbook.io/pricing" }, multivariateFlags: { + status: "strong", + details: "Multi-value features", + + reference: "https://www.growthbook.io/pricing", }, jsonFlags: { + status: "strong", + details: "JSON feature values", + + reference: "https://www.growthbook.io/pricing", }, flagDependencies: { + status: "partial", + details: "Via targeting conditions", + + reference: "https://www.growthbook.io/pricing", }, scheduledRollouts: { + status: "partial", + details: "Manual scheduling", + + reference: "https://www.growthbook.io/pricing", }, userTargeting: { + status: "strong", + details: "Attribute-based targeting", + + reference: "https://www.growthbook.io/pricing", }, percentageRollouts: { + status: "strong", + details: "Gradual rollouts", + + reference: "https://www.growthbook.io/pricing", }, customSegments: { + status: "strong", + details: "Saved audiences", + + reference: "https://www.growthbook.io/pricing", }, geoTargeting: { + status: "partial", + details: "Via custom attributes", + + reference: "https://www.growthbook.io/pricing", }, contextualTargeting: { + status: "strong", + details: "Custom attribute targeting", + + reference: "https://www.growthbook.io/pricing", }, abTesting: { + status: "strong", + details: "Visual A/B test builder", + + reference: "https://www.growthbook.io/pricing", }, multivariateExperiments: { + status: "strong", + details: "Multi-variant experiments", + + reference: "https://www.growthbook.io/pricing", }, statisticalAnalysis: { + status: "strong", + details: "Bayesian & Frequentist engines", + + reference: "https://www.growthbook.io/pricing", }, metricsTracking: { + status: "strong", + details: "Metrics from data warehouses", + + reference: "https://www.growthbook.io/pricing", }, experimentGoals: { + status: "strong", + details: "Primary & secondary metrics", + + reference: "https://www.growthbook.io/pricing", }, sdkLanguages: { + status: "strong", + details: "15+ languages (JS, Python, Go, Ruby, PHP, etc.)", + + reference: "https://docs.growthbook.io", }, localEvaluation: { + status: "strong", + details: "Edge-optimized evaluation", + + reference: "https://www.growthbook.io/pricing", }, typeSafety: { + status: "strong", + details: "TypeScript support", + + reference: "https://www.growthbook.io/pricing", }, documentation: { + status: "strong", + details: "Good documentation", + + reference: "https://docs.growthbook.io", }, apiQuality: { + status: "strong", + details: "REST API + SDKs", + + reference: "https://docs.growthbook.io", }, rbac: { + status: "strong", + details: "Role-based permissions (Pro)", + + reference: "https://www.growthbook.io/pricing", }, auditLogs: { + status: "strong", + details: "Audit log", + + reference: "https://www.growthbook.io/pricing", }, environments: { + status: "strong", + details: "Multiple environments", + + reference: "https://www.growthbook.io/pricing", }, approvalWorkflows: { + status: "partial", + details: "Via external process", + + reference: "https://www.growthbook.io/pricing", }, compliance: { + status: "strong", + details: "SOC 2, GDPR", + + reference: "https://www.growthbook.io/privacy", }, freeTier: { + status: "strong", + details: "Unlimited (self-hosted), Cloud free tier", + + reference: "https://www.growthbook.io/pricing", }, paidPricing: { + status: "strong", + details: "$20/seat/mo Pro, custom Enterprise", + + reference: "https://www.growthbook.io/pricing", }, openSource: { + status: "strong", + details: "MIT license", + + reference: "https://www.growthbook.io/pricing", }, selfHosted: { + status: "strong", + details: "Docker self-host", + + reference: "https://www.growthbook.io/pricing", }, cloudHosted: { + status: "strong", + details: "Managed cloud", + + reference: "https://www.growthbook.io/pricing", }, analytics: { + status: "strong", + details: "Connects to data warehouses", + + reference: "https://www.growthbook.io/pricing", }, dataWarehouses: { + status: "strong", + details: "Snowflake, BigQuery, Redshift, Mixpanel, GA", + + reference: "https://www.growthbook.io/pricing", }, cicd: { + status: "strong", + details: "API-based automation", + + reference: "https://www.growthbook.io/pricing", }, webhooks: { + status: "strong", + details: "Feature change webhooks", + + reference: "https://www.growthbook.io/pricing", }, }, }; diff --git a/src/data/featureflags/launchdarkly.tsx b/src/data/featureflags/launchdarkly.tsx index b0bc4a9..8213523 100644 --- a/src/data/featureflags/launchdarkly.tsx +++ b/src/data/featureflags/launchdarkly.tsx @@ -27,126 +27,236 @@ export const launchdarkly: Provider = { logo: , website: "https://launchdarkly.com", tagline: { + status: "strong", - details: - "Enterprise-grade feature management platform with advanced targeting", + + details: "Enterprise-grade feature management platform with advanced targeting", + + reference: "https://launchdarkly.com/pricing", }, features: { - booleanFlags: { status: "strong", details: "Full support" }, + booleanFlags: { status: "strong", details: "Full support", reference: "https://launchdarkly.com/pricing" }, multivariateFlags: { + status: "strong", + details: "String, number, JSON variants", + + reference: "https://launchdarkly.com/pricing", }, jsonFlags: { + status: "strong", + details: "Complex JSON configurations", + + reference: "https://launchdarkly.com/pricing", }, flagDependencies: { + status: "strong", + details: "Prerequisites and dependencies", + + reference: "https://launchdarkly.com/pricing", }, scheduledRollouts: { + status: "strong", + details: "Time-based rollout schedules", + + reference: "https://launchdarkly.com/pricing", }, userTargeting: { + status: "strong", + details: "Individual user & segment targeting", + + reference: "https://launchdarkly.com/pricing", }, percentageRollouts: { + status: "strong", + details: "Gradual rollouts with targeting", + + reference: "https://launchdarkly.com/pricing", }, customSegments: { + status: "strong", + details: "Advanced segment builder with rules", + + reference: "https://launchdarkly.com/pricing", }, geoTargeting: { + status: "strong", + details: "Country, region, city targeting", + + reference: "https://launchdarkly.com/pricing", }, contextualTargeting: { + status: "strong", + details: "Custom context attributes", + + reference: "https://launchdarkly.com/pricing", }, abTesting: { + status: "strong", + details: "Built-in experimentation platform", + + reference: "https://launchdarkly.com/pricing", }, multivariateExperiments: { + status: "strong", + details: "Multi-armed bandit testing", + + reference: "https://launchdarkly.com/pricing", }, statisticalAnalysis: { + status: "strong", + details: "Bayesian statistics engine", + + reference: "https://launchdarkly.com/pricing", }, - metricsTracking: { status: "strong", details: "Custom metrics & events" }, + metricsTracking: { status: "strong", details: "Custom metrics & events", reference: "https://launchdarkly.com/pricing" }, experimentGoals: { + status: "strong", + details: "Primary & secondary goals", + + reference: "https://launchdarkly.com/pricing", }, sdkLanguages: { + status: "strong", + details: "25+ languages (JS, Python, Go, Java, .NET, etc.)", + + reference: "https://docs.launchdarkly.com", }, localEvaluation: { + status: "strong", + details: "Edge evaluation with streaming updates", + + reference: "https://launchdarkly.com/pricing", }, - typeSafety: { status: "strong", details: "TypeScript, strongly typed" }, - documentation: { status: "strong", details: "Comprehensive docs" }, + typeSafety: { status: "strong", details: "TypeScript, strongly typed", reference: "https://launchdarkly.com/pricing" }, + documentation: { status: "strong", details: "Comprehensive docs", reference: "https://docs.launchdarkly.com" }, apiQuality: { + status: "strong", + details: "REST API + GraphQL + SDKs", + + reference: "https://docs.launchdarkly.com", }, rbac: { + status: "strong", + details: "Custom roles & permissions", + + reference: "https://launchdarkly.com/pricing", }, auditLogs: { + status: "strong", + details: "Complete audit trail", + + reference: "https://launchdarkly.com/pricing", }, environments: { + status: "strong", + details: "Unlimited environments", + + reference: "https://launchdarkly.com/pricing", }, approvalWorkflows: { + status: "strong", + details: "Change requests & approvals", + + reference: "https://launchdarkly.com/pricing", }, compliance: { + status: "strong", + details: "SOC 2, GDPR, HIPAA, FedRAMP", + + reference: "https://launchdarkly.com/policies/privacy", }, freeTier: { + status: "strong", - details: - "Developer: Free, unlimited seats, 5 service connections, 1K client MAUs", + + details: "Developer: Free, unlimited seats, 5 service connections, 1K client MAUs", + + reference: "https://launchdarkly.com/pricing", }, paidPricing: { + status: "strong", + details: "Foundation: $12/service connection + $10/1K client MAU", + + reference: "https://launchdarkly.com/pricing", }, - openSource: { status: "none", details: "Proprietary" }, + openSource: { status: "none", details: "Proprietary", reference: "https://launchdarkly.com/pricing" }, selfHosted: { + status: "partial", + details: "Relay Proxy for on-prem", + + reference: "https://launchdarkly.com/pricing", }, - cloudHosted: { status: "strong", details: "Fully managed SaaS" }, + cloudHosted: { status: "strong", details: "Fully managed SaaS", reference: "https://launchdarkly.com/pricing" }, analytics: { + status: "strong", + details: "DataDog, New Relic, Segment, mParticle", + + reference: "https://launchdarkly.com/pricing", }, dataWarehouses: { + status: "strong", + details: "Snowflake, BigQuery data export", + + reference: "https://launchdarkly.com/pricing", }, cicd: { + status: "strong", + details: "GitHub Actions, GitLab CI, Terraform", + + reference: "https://launchdarkly.com/pricing", }, - webhooks: { status: "strong", details: "Flag change webhooks" }, + webhooks: { status: "strong", details: "Flag change webhooks", reference: "https://launchdarkly.com/pricing" }, }, }; diff --git a/src/data/featureflags/posthog.tsx b/src/data/featureflags/posthog.tsx index 5334f55..75afd32 100644 --- a/src/data/featureflags/posthog.tsx +++ b/src/data/featureflags/posthog.tsx @@ -27,142 +27,278 @@ export const posthog: Provider = { logo: , website: "https://posthog.com", tagline: { + status: "strong", + details: "All-in-one product OS with feature flags built-in", + + reference: "https://posthog.com/pricing", }, features: { - booleanFlags: { status: "strong", details: "Full support" }, + booleanFlags: { status: "strong", details: "Full support", reference: "https://posthog.com/pricing" }, multivariateFlags: { + status: "strong", + details: "Multivariate flags", + + reference: "https://posthog.com/pricing", }, jsonFlags: { + status: "strong", + details: "JSON payloads", + + reference: "https://posthog.com/pricing", }, flagDependencies: { + status: "partial", + details: "Via property filters", + + reference: "https://posthog.com/pricing", }, scheduledRollouts: { + status: "partial", + details: "Manual scheduling", + + reference: "https://posthog.com/pricing", }, userTargeting: { + status: "strong", + details: "Person & group targeting", + + reference: "https://posthog.com/pricing", }, percentageRollouts: { + status: "strong", + details: "Percentage-based rollouts", + + reference: "https://posthog.com/pricing", }, customSegments: { + status: "strong", + details: "Cohorts & property filters", + + reference: "https://posthog.com/pricing", }, geoTargeting: { + status: "strong", + details: "GeoIP person properties", + + reference: "https://posthog.com/pricing", }, contextualTargeting: { + status: "strong", + details: "Custom properties", + + reference: "https://posthog.com/pricing", }, abTesting: { + status: "strong", + details: "Native experimentation platform", + + reference: "https://posthog.com/pricing", }, multivariateExperiments: { + status: "strong", + details: "Multi-variant experiments", + + reference: "https://posthog.com/pricing", }, statisticalAnalysis: { + status: "strong", + details: "Bayesian & Frequentist stats", + + reference: "https://posthog.com/pricing", }, metricsTracking: { + status: "strong", + details: "Full product analytics built-in", + + reference: "https://posthog.com/pricing", }, experimentGoals: { + status: "strong", + details: "Primary & secondary metrics", + + reference: "https://posthog.com/pricing", }, sdkLanguages: { + status: "strong", + details: "15+ languages (JS, Python, Go, PHP, Ruby, etc.)", + + reference: "https://posthog.com/docs", }, localEvaluation: { + status: "strong", + details: "Local evaluation mode", + + reference: "https://posthog.com/pricing", }, typeSafety: { + status: "strong", + details: "TypeScript support", + + reference: "https://posthog.com/pricing", }, documentation: { + status: "strong", + details: "Great docs & tutorials", + + reference: "https://posthog.com/docs", }, apiQuality: { + status: "strong", + details: "REST API + client SDKs", + + reference: "https://posthog.com/docs", }, rbac: { + status: "strong", + details: "Organizations & permissions", + + reference: "https://posthog.com/pricing", }, auditLogs: { + status: "strong", + details: "Activity log", + + reference: "https://posthog.com/pricing", }, environments: { + status: "strong", + details: "Multiple projects", + + reference: "https://posthog.com/pricing", }, approvalWorkflows: { + status: "none", + details: "Not currently available", + + reference: "https://posthog.com/pricing", }, compliance: { + status: "strong", + details: "SOC 2, GDPR-compliant", + + reference: "https://posthog.com/privacy", }, freeTier: { + status: "strong", + details: "1M events/mo free", + + reference: "https://posthog.com/pricing", }, paidPricing: { + status: "strong", + details: "Pay-as-you-go: $0.00005/request after 1M", + + reference: "https://posthog.com/pricing", }, openSource: { + status: "strong", + details: "MIT license", + + reference: "https://posthog.com/pricing", }, selfHosted: { + status: "strong", + details: "Docker, Kubernetes self-host", + + reference: "https://posthog.com/pricing", }, cloudHosted: { + status: "strong", + details: "PostHog Cloud (US & EU)", + + reference: "https://posthog.com/pricing", }, analytics: { + status: "strong", + details: "Built-in product analytics", + + reference: "https://posthog.com/pricing", }, dataWarehouses: { + status: "strong", + details: "Snowflake, BigQuery export", + + reference: "https://posthog.com/pricing", }, cicd: { + status: "strong", + details: "API-based, Terraform provider", + + reference: "https://posthog.com/pricing", }, webhooks: { + status: "strong", + details: "Action webhooks", + + reference: "https://posthog.com/pricing", }, }, }; diff --git a/src/data/featureflags/reflag.tsx b/src/data/featureflags/reflag.tsx index a772614..e70423b 100644 --- a/src/data/featureflags/reflag.tsx +++ b/src/data/featureflags/reflag.tsx @@ -54,120 +54,236 @@ export const reflag: Provider = { reference: "https://reflag.com/docs/rollouts", }, userTargeting: { + status: "strong", + details: "User & attribute targeting", + + reference: "https://reflag.com/pricing", }, percentageRollouts: { + status: "strong", + details: "Gradual percentage-based rollouts", + + reference: "https://reflag.com/pricing", }, customSegments: { + status: "strong", + details: "Advanced segment builder", + + reference: "https://reflag.com/pricing", }, geoTargeting: { + status: "strong", + details: "Geographic targeting built-in", + + reference: "https://reflag.com/pricing", }, contextualTargeting: { + status: "strong", + details: "Rich context targeting", + + reference: "https://reflag.com/pricing", }, abTesting: { + status: "strong", + details: "Native A/B testing", + + reference: "https://reflag.com/pricing", }, multivariateExperiments: { + status: "strong", + details: "Multi-variant experiments", + + reference: "https://reflag.com/pricing", }, statisticalAnalysis: { + status: "strong", + details: "Built-in statistical analysis", + + reference: "https://reflag.com/pricing", }, metricsTracking: { + status: "strong", + details: "Custom metrics & goals", + + reference: "https://reflag.com/pricing", }, experimentGoals: { + status: "strong", + details: "Multiple goal tracking", + + reference: "https://reflag.com/pricing", }, sdkLanguages: { + status: "strong", + details: "JavaScript, TypeScript, React, Node.js, Python, Go (expanding)", + + reference: "https://reflag.com/docs", }, localEvaluation: { + status: "strong", + details: "Edge-optimized local evaluation", + + reference: "https://reflag.com/pricing", }, typeSafety: { + status: "strong", + details: "Full TypeScript support, auto-generated types", + + reference: "https://reflag.com/pricing", }, documentation: { + status: "strong", + details: "Comprehensive docs with examples", + + reference: "https://reflag.com/docs", }, apiQuality: { + status: "strong", + details: "Modern REST API + GraphQL + SDKs", + + reference: "https://reflag.com/docs", }, rbac: { + status: "strong", + details: "Granular role-based permissions", + + reference: "https://reflag.com/pricing", }, auditLogs: { + status: "strong", + details: "Complete audit trail", + + reference: "https://reflag.com/pricing", }, environments: { + status: "strong", + details: "Unlimited environments", + + reference: "https://reflag.com/pricing", }, approvalWorkflows: { + status: "strong", + details: "Multi-stage approval workflows", + + reference: "https://reflag.com/pricing", }, compliance: { + status: "strong", + details: "SOC 2, GDPR, CCPA compliant", + + reference: "https://reflag.com/privacy", }, freeTier: { + status: "strong", + details: "Generous free tier for developers", + + reference: "https://reflag.com/pricing", }, paidPricing: { + status: "strong", + details: "Competitive pricing, transparent tiers", + + reference: "https://reflag.com/pricing", }, openSource: { + status: "partial", + details: "Open source SDKs", + + reference: "https://reflag.com/pricing", }, selfHosted: { + status: "strong", + details: "Self-hosted option available", + + reference: "https://reflag.com/pricing", }, cloudHosted: { + status: "strong", + details: "Fully managed cloud", + + reference: "https://reflag.com/pricing", }, analytics: { + status: "strong", + details: "Native integrations with major analytics platforms", + + reference: "https://reflag.com/pricing", }, dataWarehouses: { + status: "strong", + details: "Direct data warehouse connections", + + reference: "https://reflag.com/pricing", }, cicd: { + status: "strong", + details: "GitHub Actions, GitLab CI, API automation", + + reference: "https://reflag.com/pricing", }, webhooks: { + status: "strong", + details: "Real-time webhooks for all events", + + reference: "https://reflag.com/pricing", }, }, }; diff --git a/src/data/featureflags/split.tsx b/src/data/featureflags/split.tsx index a45e4b6..865e957 100644 --- a/src/data/featureflags/split.tsx +++ b/src/data/featureflags/split.tsx @@ -20,142 +20,278 @@ export const split: Provider = { logo: , website: "https://www.split.io", tagline: { + status: "strong", + details: "Feature delivery platform with built-in impact monitoring", + + reference: "https://www.split.io/pricing", }, features: { - booleanFlags: { status: "strong", details: "Full support" }, + booleanFlags: { status: "strong", details: "Full support", reference: "https://www.split.io/pricing" }, multivariateFlags: { + status: "strong", + details: "Multi-treatment splits", + + reference: "https://www.split.io/pricing", }, jsonFlags: { + status: "strong", + details: "Dynamic configurations", + + reference: "https://www.split.io/pricing", }, flagDependencies: { + status: "strong", + details: "Split dependencies", + + reference: "https://www.split.io/pricing", }, scheduledRollouts: { + status: "strong", + details: "Scheduled rollout plans", + + reference: "https://www.split.io/pricing", }, userTargeting: { + status: "strong", + details: "Targeting rules & allow lists", + + reference: "https://www.split.io/pricing", }, percentageRollouts: { + status: "strong", + details: "Traffic allocation", + + reference: "https://www.split.io/pricing", }, customSegments: { + status: "strong", + details: "Segment definitions", + + reference: "https://www.split.io/pricing", }, geoTargeting: { + status: "strong", + details: "Geo-based targeting", + + reference: "https://www.split.io/pricing", }, contextualTargeting: { + status: "strong", + details: "Attribute-based targeting", + + reference: "https://www.split.io/pricing", }, abTesting: { + status: "strong", + details: "Built-in experimentation", + + reference: "https://www.split.io/pricing", }, multivariateExperiments: { + status: "strong", + details: "Multi-treatment tests", + + reference: "https://www.split.io/pricing", }, statisticalAnalysis: { + status: "strong", + details: "Statistical engine", + + reference: "https://www.split.io/pricing", }, metricsTracking: { + status: "strong", + details: "Impact metrics & tracking", + + reference: "https://www.split.io/pricing", }, experimentGoals: { + status: "strong", + details: "Guardrail & primary metrics", + + reference: "https://www.split.io/pricing", }, sdkLanguages: { + status: "strong", + details: "12+ languages (JS, Java, Python, .NET, Go, etc.)", + + reference: "https://help.split.io/hc/en-us", }, localEvaluation: { + status: "strong", + details: "In-memory evaluation", + + reference: "https://www.split.io/pricing", }, typeSafety: { + status: "strong", + details: "TypeScript definitions", + + reference: "https://www.split.io/pricing", }, documentation: { + status: "strong", + details: "Comprehensive documentation", + + reference: "https://help.split.io/hc/en-us", }, apiQuality: { + status: "strong", + details: "REST API + Admin API", + + reference: "https://help.split.io/hc/en-us", }, rbac: { + status: "strong", + details: "Team-based permissions", + + reference: "https://www.split.io/pricing", }, auditLogs: { + status: "strong", + details: "Complete audit trail", + + reference: "https://www.split.io/pricing", }, environments: { + status: "strong", + details: "Multiple environments", + + reference: "https://www.split.io/pricing", }, approvalWorkflows: { + status: "strong", + details: "Approval workflows", + + reference: "https://www.split.io/pricing", }, compliance: { + status: "strong", + details: "SOC 2, GDPR", + + reference: "https://www.split.io/privacy-policy", }, freeTier: { + status: "partial", + details: "14-day trial, no free tier", + + reference: "https://www.split.io/pricing", }, paidPricing: { + status: "strong", + details: "Custom pricing (Team & Enterprise)", + + reference: "https://www.split.io/pricing", }, openSource: { + status: "none", + details: "Proprietary", + + reference: "https://www.split.io/pricing", }, selfHosted: { + status: "none", + details: "Cloud-only", + + reference: "https://www.split.io/pricing", }, cloudHosted: { + status: "strong", + details: "Fully managed SaaS", + + reference: "https://www.split.io/pricing", }, analytics: { + status: "strong", + details: "DataDog, New Relic, Segment integrations", + + reference: "https://www.split.io/pricing", }, dataWarehouses: { + status: "strong", + details: "Data pipeline to warehouses", + + reference: "https://www.split.io/pricing", }, cicd: { + status: "strong", + details: "CI/CD integrations", + + reference: "https://www.split.io/pricing", }, webhooks: { + status: "strong", + details: "Webhook notifications", + + reference: "https://www.split.io/pricing", }, }, }; diff --git a/src/data/featureflags/unleash.tsx b/src/data/featureflags/unleash.tsx index 214979d..98afbf9 100644 --- a/src/data/featureflags/unleash.tsx +++ b/src/data/featureflags/unleash.tsx @@ -26,142 +26,278 @@ export const unleash: Provider = { logo: , website: "https://www.getunleash.io", tagline: { + status: "strong", + details: "Privacy-first open source feature toggle system", + + reference: "https://www.getunleash.io/pricing", }, features: { - booleanFlags: { status: "strong", details: "Full support" }, + booleanFlags: { status: "strong", details: "Full support", reference: "https://www.getunleash.io/pricing" }, multivariateFlags: { + status: "strong", + details: "Variants with payloads", + + reference: "https://www.getunleash.io/pricing", }, jsonFlags: { + status: "strong", + details: "JSON payloads in variants", + + reference: "https://www.getunleash.io/pricing", }, flagDependencies: { + status: "partial", + details: "Via strategy constraints", + + reference: "https://www.getunleash.io/pricing", }, scheduledRollouts: { + status: "partial", + details: "Via external scheduling", + + reference: "https://www.getunleash.io/pricing", }, userTargeting: { + status: "strong", + details: "User ID targeting", + + reference: "https://www.getunleash.io/pricing", }, percentageRollouts: { + status: "strong", + details: "Gradual rollout strategy", + + reference: "https://www.getunleash.io/pricing", }, customSegments: { + status: "strong", + details: "Constraint-based segments", + + reference: "https://www.getunleash.io/pricing", }, geoTargeting: { + status: "partial", + details: "Via custom constraints", + + reference: "https://www.getunleash.io/pricing", }, contextualTargeting: { + status: "strong", + details: "Context fields & constraints", + + reference: "https://www.getunleash.io/pricing", }, abTesting: { + status: "partial", + details: "Basic via variant weights", + + reference: "https://www.getunleash.io/pricing", }, multivariateExperiments: { + status: "partial", + details: "Variants, no built-in analysis", + + reference: "https://www.getunleash.io/pricing", }, statisticalAnalysis: { + status: "none", + details: "External tools required", + + reference: "https://www.getunleash.io/pricing", }, metricsTracking: { + status: "partial", + details: "Impression data, no analysis", + + reference: "https://www.getunleash.io/pricing", }, experimentGoals: { + status: "none", + details: "Not built-in", + + reference: "https://www.getunleash.io/pricing", }, sdkLanguages: { + status: "strong", + details: "20+ languages (JS, Java, Go, Python, .NET, etc.)", + + reference: "https://docs.getunleash.io", }, localEvaluation: { + status: "strong", + details: "Edge SDK for local eval", + + reference: "https://www.getunleash.io/pricing", }, typeSafety: { + status: "strong", + details: "TypeScript, strongly typed SDKs", + + reference: "https://www.getunleash.io/pricing", }, documentation: { + status: "strong", + details: "Excellent documentation", + + reference: "https://docs.getunleash.io", }, apiQuality: { + status: "strong", + details: "REST API + Admin API", + + reference: "https://docs.getunleash.io", }, rbac: { + status: "strong", + details: "RBAC (Enterprise)", + + reference: "https://www.getunleash.io/pricing", }, auditLogs: { + status: "strong", + details: "Event log & audit trail", + + reference: "https://www.getunleash.io/pricing", }, environments: { + status: "strong", + details: "Projects & environments", + + reference: "https://www.getunleash.io/pricing", }, approvalWorkflows: { + status: "strong", + details: "Change requests (Enterprise)", + + reference: "https://www.getunleash.io/pricing", }, compliance: { + status: "strong", + details: "SOC 2, GDPR-ready", + + reference: "https://www.getunleash.io/privacy-policy", }, freeTier: { + status: "strong", + details: "Open source (unlimited), Pro free tier", + + reference: "https://www.getunleash.io/pricing", }, paidPricing: { + status: "strong", + details: "Pay-as-you-go: $75/seat/mo, 53M API requests (Cloud)", + + reference: "https://www.getunleash.io/pricing", }, openSource: { + status: "strong", + details: "Apache 2.0", + + reference: "https://www.getunleash.io/pricing", }, selfHosted: { + status: "strong", + details: "Docker, Kubernetes, full self-host", + + reference: "https://www.getunleash.io/pricing", }, cloudHosted: { + status: "strong", + details: "Managed cloud available", + + reference: "https://www.getunleash.io/pricing", }, analytics: { + status: "partial", + details: "Webhook-based integrations", + + reference: "https://www.getunleash.io/pricing", }, dataWarehouses: { + status: "partial", + details: "Event export via webhooks", + + reference: "https://www.getunleash.io/pricing", }, cicd: { + status: "strong", + details: "API-driven, GitHub Actions", + + reference: "https://www.getunleash.io/pricing", }, webhooks: { + status: "strong", + details: "Event webhooks", + + reference: "https://www.getunleash.io/pricing", }, }, };