diff --git a/frontend/src/components/ComparisonChart.tsx b/frontend/src/components/ComparisonChart.tsx new file mode 100644 index 000000000..e9176c924 --- /dev/null +++ b/frontend/src/components/ComparisonChart.tsx @@ -0,0 +1,253 @@ +import { Check, X, HelpCircle, DollarSign, MinusCircle } from "lucide-react"; + +interface ComparisonData { + feature: string; + maple: string; + lumo: string; + duckAI: string; + chatGPT: string; + claude: string; + grok: string; +} + +const comparisonData: ComparisonData[] = [ + { + feature: "Public Proof of Encryption (TEE)", + maple: "Yes", + lumo: "No", + duckAI: "No", + chatGPT: "No", + claude: "No", + grok: "No" + }, + { + feature: "Open-Source Code", + maple: "Yes", + lumo: "Partial", + duckAI: "No", + chatGPT: "No", + claude: "No", + grok: "No" + }, + { + feature: "Open Models", + maple: "Yes", + lumo: "Yes", + duckAI: "Partial", + chatGPT: "No", + claude: "No", + grok: "No" + }, + { + feature: "Never uses your data to train AI", + maple: "Yes", + lumo: "?", + duckAI: "?", + chatGPT: "No", + claude: "No", + grok: "No" + }, + { + feature: "Doesn't log your chats", + maple: "Yes", + lumo: "?", + duckAI: "?", + chatGPT: "No", + claude: "No", + grok: "No" + }, + { + feature: "Zero Data Retention", + maple: "Yes", + lumo: "?", + duckAI: "?", + chatGPT: "$", + claude: "$", + grok: "$" + }, + { + feature: "Integration With Coding IDE", + maple: "Yes", + lumo: "No", + duckAI: "No", + chatGPT: "Yes", + claude: "Yes", + grok: "Yes" + }, + { + feature: "Teams Plan", + maple: "Yes", + lumo: "No", + duckAI: "No", + chatGPT: "Yes", + claude: "Yes", + grok: "Yes" + }, + { + feature: "Developer API", + maple: "Yes", + lumo: "No", + duckAI: "No", + chatGPT: "Yes", + claude: "Yes", + grok: "Yes" + } +]; + +const ValueIcon = ({ value }: { value: string }) => { + switch (value) { + case "Yes": + return ( +
+ +
+ ); + case "No": + return ( +
+ +
+ ); + case "?": + return ( +
+ +
+ ); + case "$": + return ( +
+ +
+ ); + case "Partial": + return ( +
+ +
+ ); + default: + return {value}; + } +}; + +export function ComparisonChart() { + const products = [ + { key: "maple", name: "Maple", highlight: true }, + { key: "lumo", name: "Lumo", highlight: false }, + { key: "duckAI", name: "Duck AI", highlight: false }, + { key: "chatGPT", name: "ChatGPT", highlight: false }, + { key: "claude", name: "Claude", highlight: false }, + { key: "grok", name: "Grok", highlight: false } + ]; + + return ( +
+
+
+

+ How We Compare +

+

+ See how Maple stacks up against other AI chat platforms when it comes to privacy, + security, and developer features. +

+
+ +
+
+
+ {/* Header Row */} +
+
+ +
+ {products.map((product) => ( +
+ {product.name} +
+ ))} +
+ + {/* Data Rows */} + {comparisonData.map((row, index) => ( +
+
+ {row.feature} +
+ {products.map((product) => ( +
+
+ +
+
+ ))} +
+ ))} +
+
+
+ + {/* Legend */} +
+
+ + Available +
+
+ + Not Available +
+
+ + Partially Available +
+
+ + Claim Unverifiable +
+
+ + Expensive Paid Feature +
+
+
+
+ ); +} diff --git a/frontend/src/components/Marketing.tsx b/frontend/src/components/Marketing.tsx index 70e57fc85..bdd248309 100644 --- a/frontend/src/components/Marketing.tsx +++ b/frontend/src/components/Marketing.tsx @@ -6,6 +6,7 @@ import { useQuery } from "@tanstack/react-query"; import { getBillingService } from "@/billing/billingService"; import { PRICING_PLANS, type PlanFeature } from "@/config/pricingConfig"; import { isIOS } from "@/utils/platform"; +import { ComparisonChart } from "./ComparisonChart"; function CTAButton({ children, @@ -560,6 +561,9 @@ export function Marketing() { + {/* Comparison Chart */} + + {/* Testimonials */}