diff --git a/src/i18n/locales/de/translation.json b/src/i18n/locales/de/translation.json index 14a202b0..4f31db9c 100644 --- a/src/i18n/locales/de/translation.json +++ b/src/i18n/locales/de/translation.json @@ -1063,8 +1063,6 @@ "managePlan": "Plan verwalten", "hostedPlans": "Gehostete Pläne", "hostedPlansDescription": "Wir hosten alles auf Hetzner (EU). Sie zahlen für Hosting, Rechenleistung und Support.", - "alternatives": "Alternativen", - "alternativesDescription": "Volle Kontrolle benötigt oder spezielle Anforderungen?", "free": { "name": "Kostenlos", "price": "€0", @@ -1110,59 +1108,10 @@ "Zusätzlicher Speicher auf Anfrage" ] }, - "enterprise": { - "name": "Enterprise", - "price": "Auf Anfrage", - "description": "Ihre Infrastruktur, wir deployen", - "features": [ - "Single-Tenant-Deployment", - "Ihr Netzwerk oder dediziert gehostet", - "Unbegrenzte Aufträge, Teile, Speicher", - "Vollständiger API, Webhooks, MCP Server", - "SSO/SAML-Authentifizierung", - "White-Label inklusive", - "Dedizierter Support-Kanal", - "Individuelles SLA bei Bedarf" - ], - "cta": "Angebot anfordern" - }, - "selfHosted": { - "name": "Self-Hosted", - "price": "€0", - "description": "Ihr Setup, Sie sind auf sich gestellt", - "features": [ - "Herunterladen und selbst betreiben", - "Unbegrenzte Aufträge, Teile, Speicher", - "Vollständiger API, Webhooks, MCP Server", - "Quellcode unter BSL 1.1", - "Community-Support über Docs", - "GitHub Discussions", - "Kein offizieller Support" - ], - "cta": "Auf GitHub ansehen", - "note": "Für technische Benutzer, datenschutzbewusste Unternehmen, oder diejenigen, die ohnehin nicht zahlen werden. Kostet uns nichts." - }, "perMonth": "/Monat", "perYear": "/Jahr", "billedMonthly": "Monatlich abgerechnet", - "billedAnnually": "Jährlich abgerechnet", - "howItWorks": { - "title": "Wie es funktioniert", - "selfServiceTitle": "Self-Service", - "selfServiceDescription": "Keine Onboarding-Gespräche. Keine Berater. Melden Sie sich an, konfigurieren Sie Ihre Stufen und Materialien, verbinden Sie Ihre API, und los. Nur Dokumentation und E-Mail-Support (Pro+).", - "upgradeTitle": "Wie Sie upgraden", - "upgradeDescription": "Bereit für ein Upgrade? Klicken Sie auf \"Upgrade anfordern\", um office@sheetmetalconnect.com zu mailen. Wir melden uns mit den nächsten Schritten.", - "usageTitle": "Nutzung & Limits", - "usageDescription": "Überwachen Sie Ihre Nutzung auf Ihrer Mein Plan-Seite. Sie sehen Echtzeit-Statistiken und Warnungen, wenn Sie sich Limits nähern." - }, - "securityBanner": { - "title": "Enterprise-Sicherheit", - "description": "Kostenlos, Pro & Premium: Multi-Tenant-Architektur mit vollständiger Datenisolierung pro Mandant. Row-Level-Security erzwingt Trennung auf Datenbankebene. Enterprise: Single-Tenant-Deployment auf Ihrer Infrastruktur. Alle Stufen umfassen HTTPS, gehashte Passwörter, verschlüsselte API-Schlüssel und signierte URLs für Dateizugriff." - }, - "whyHosted": { - "title": "Warum für Hosting bezahlen?", - "description": "Die meisten Metallverarbeiter sind keine DevOps-Leute. Sie werden nicht selbst hosten. Sie zahlen für Hosting, Rechenleistung und Support — nicht für die Software selbst." - } + "billedAnnually": "Jährlich abgerechnet" }, "myPlan": { "title": "Mein Plan", @@ -1189,8 +1138,6 @@ "managePayment": "Zahlungsmethode verwalten", "manufacturingCells": "Fertigungszellen", "mostPopular": "Am beliebtesten", - "multiTenant": "Multi-Mandant", - "multiTenantDescription": "Gemeinsame Infrastruktur mit dedizierter Datenisolierung", "nextBillingDate": "Nächstes Abrechnungsdatum", "noSalesCalls": "Keine Vertriebsgespräche erforderlich", "operators": "Bediener", @@ -1203,8 +1150,6 @@ "planFeatures": "Plan-Funktionen", "readyToUpgrade": "Bereit für ein Upgrade?", "requestUpgrade": "Upgrade anfordern", - "singleTenant": "Single-Tenant", - "singleTenantDescription": "Dedizierte Infrastruktur für maximale Kontrolle und Sicherheit", "status": "Status", "storage": "Speicher", "subtitle": "Verwalten Sie Ihr Abonnement und Ihre Nutzung", diff --git a/src/i18n/locales/en/translation.json b/src/i18n/locales/en/translation.json index ad1e99e3..3065cb25 100644 --- a/src/i18n/locales/en/translation.json +++ b/src/i18n/locales/en/translation.json @@ -1195,8 +1195,6 @@ "managePlan": "Manage Plan", "hostedPlans": "Hosted Plans", "hostedPlansDescription": "We host everything on Hetzner (EU). You pay for hosting, compute, and support.", - "alternatives": "Alternatives", - "alternativesDescription": "Need full control or have special requirements?", "free": { "name": "Free", "price": "€0", @@ -1242,59 +1240,10 @@ "Extra storage on request" ] }, - "enterprise": { - "name": "Enterprise", - "price": "By request", - "description": "Your infrastructure, I deploy", - "features": [ - "Single-tenant deployment", - "Your network or dedicated hosted", - "Unlimited jobs, parts, storage", - "Full API, Webhooks, MCP Server", - "SSO/SAML authentication", - "White-label included", - "Dedicated support channel", - "Custom SLA if needed" - ], - "cta": "Contact for Quote" - }, - "selfHosted": { - "name": "Self-Hosted", - "price": "€0", - "description": "Your setup, you're on your own", - "features": [ - "Download and run yourself", - "Unlimited jobs, parts, storage", - "Full API, Webhooks, MCP Server", - "Source code under BSL 1.1", - "Community support via docs", - "GitHub Discussions", - "No official support" - ], - "cta": "View on GitHub", - "note": "For technical users, privacy-conscious companies, or those who won't pay anyway. Costs us nothing." - }, "perMonth": "/month", "perYear": "/year", "billedMonthly": "Billed monthly", - "billedAnnually": "Billed annually", - "howItWorks": { - "title": "How It Works", - "selfServiceTitle": "Self-Service", - "selfServiceDescription": "No onboarding calls. No consultants. Sign up, configure your stages and materials, connect your API, and go. Documentation and email support (Pro+) only.", - "upgradeTitle": "How to Upgrade", - "upgradeDescription": "Ready to upgrade? Click \"Request Upgrade\" to email office@sheetmetalconnect.com. We'll get back to you with next steps.", - "usageTitle": "Usage & Limits", - "usageDescription": "Monitor your usage from your My Plan page. You'll see real-time statistics and alerts when approaching limits." - }, - "securityBanner": { - "title": "Enterprise-Grade Security", - "description": "Free, Pro & Premium: Multi-tenant architecture with complete data isolation per tenant. Row-level security enforces separation at the database level. Enterprise: Single-tenant deployment on your infrastructure. All tiers include HTTPS, hashed passwords, encrypted API keys, and signed URLs for file access." - }, - "whyHosted": { - "title": "Why pay for hosted?", - "description": "Most metal fabricators aren't DevOps people. They won't self-host. You're paying for hosting, compute, and support — not for the software itself." - } + "billedAnnually": "Billed annually" }, "myPlan": { "title": "My Plan", @@ -1321,8 +1270,6 @@ "managePayment": "Manage Payment Method", "manufacturingCells": "Manufacturing Cells", "mostPopular": "Most Popular", - "multiTenant": "Multi-Tenant", - "multiTenantDescription": "Shared infrastructure with dedicated data isolation", "nextBillingDate": "Next Billing Date", "noSalesCalls": "No sales calls required", "operators": "Operators", @@ -1335,8 +1282,6 @@ "planFeatures": "Plan Features", "readyToUpgrade": "Ready to upgrade?", "requestUpgrade": "Request Upgrade", - "singleTenant": "Single-Tenant", - "singleTenantDescription": "Dedicated infrastructure for maximum control and security", "status": "Status", "storage": "Storage", "subtitle": "Manage your subscription and usage", diff --git a/src/i18n/locales/nl/translation.json b/src/i18n/locales/nl/translation.json index 392e0f92..c3556b3a 100644 --- a/src/i18n/locales/nl/translation.json +++ b/src/i18n/locales/nl/translation.json @@ -1333,8 +1333,6 @@ "managePlan": "Abonnement beheren", "hostedPlans": "Gehoste abonnementen", "hostedPlansDescription": "Wij hosten alles op Hetzner (EU). U betaalt voor hosting, rekenkracht en ondersteuning.", - "alternatives": "Alternatieven", - "alternativesDescription": "Volledige controle nodig of speciale vereisten?", "free": { "name": "Gratis", "price": "€0", @@ -1380,59 +1378,10 @@ "Extra opslag op aanvraag" ] }, - "enterprise": { - "name": "Enterprise", - "price": "Op aanvraag", - "description": "Uw infrastructuur, wij implementeren", - "features": [ - "Single-tenant implementatie", - "Uw netwerk of dedicated gehost", - "Onbeperkte opdrachten, onderdelen, opslag", - "Volledige API, Webhooks, MCP Server", - "SSO/SAML authenticatie", - "White-label inbegrepen", - "Toegewijd ondersteuningskanaal", - "Aangepaste SLA indien nodig" - ], - "cta": "Vraag offerte aan" - }, - "selfHosted": { - "name": "Self-Hosted", - "price": "€0", - "description": "Uw setup, u bent op uzelf aangewezen", - "features": [ - "Download en draai zelf", - "Onbeperkte opdrachten, onderdelen, opslag", - "Volledige API, Webhooks, MCP Server", - "Broncode onder BSL 1.1", - "Community-ondersteuning via docs", - "GitHub Discussions", - "Geen officiële ondersteuning" - ], - "cta": "Bekijk op GitHub", - "note": "Voor technische gebruikers, privacybewuste bedrijven, of degenen die toch niet betalen. Kost ons niets." - }, "perMonth": "/maand", "perYear": "/jaar", "billedMonthly": "Maandelijks gefactureerd", - "billedAnnually": "Jaarlijks gefactureerd", - "howItWorks": { - "title": "Hoe het werkt", - "selfServiceTitle": "Self-service", - "selfServiceDescription": "Geen onboarding-gesprekken. Geen consultants. Meld u aan, configureer uw fasen en materialen, sluit uw API aan, en ga. Alleen documentatie en e-mailondersteuning (Pro+).", - "upgradeTitle": "Hoe upgraden", - "upgradeDescription": "Klaar om te upgraden? Klik op \"Upgrade aanvragen\" om office@sheetmetalconnect.com te e-mailen. We nemen contact met u op met de volgende stappen.", - "usageTitle": "Gebruik & limieten", - "usageDescription": "Monitor uw gebruik vanaf uw Mijn abonnement-pagina. U ziet realtime statistieken en waarschuwingen wanneer u limieten nadert." - }, - "securityBanner": { - "title": "Enterprise-niveau beveiliging", - "description": "Gratis, Pro & Premium: Multi-tenant architectuur met volledige gegevensisolatie per tenant. Beveiliging op rijniveau zorgt voor scheiding op databaseniveau. Enterprise: Single-tenant implementatie op uw infrastructuur. Alle niveaus bevatten HTTPS, gehashte wachtwoorden, versleutelde API-sleutels en ondertekende URL's voor bestandstoegang." - }, - "whyHosted": { - "title": "Waarom betalen voor gehost?", - "description": "De meeste metaalbedrijven zijn geen DevOps-mensen. Zij zullen niet zelf hosten. U betaalt voor hosting, rekenkracht en ondersteuning — niet voor de software zelf." - } + "billedAnnually": "Jaarlijks gefactureerd" }, "myPlan": { "title": "Mijn abonnement", @@ -1460,8 +1409,6 @@ "managePayment": "Betaalmethode beheren", "manufacturingCells": "Productiecellen", "mostPopular": "Meest populair", - "multiTenant": "Multi-tenant", - "multiTenantDescription": "Gedeelde infrastructuur met toegewijde gegevensisolatie", "nextBillingDate": "Volgende factureringsdatum", "noSalesCalls": "Geen verkoopgesprekken vereist", "operators": "Operators", @@ -1474,8 +1421,6 @@ "planFeatures": "Abonnementskenmerken", "readyToUpgrade": "Klaar om te upgraden?", "requestUpgrade": "Upgrade aanvragen", - "singleTenant": "Single-tenant", - "singleTenantDescription": "Toegewijde infrastructuur voor maximale controle en beveiliging", "status": "Status", "storage": "Opslag", "totalJobs": "Totaal opdrachten", diff --git a/src/pages/Pricing.tsx b/src/pages/Pricing.tsx index 4098cad9..f05d1f14 100644 --- a/src/pages/Pricing.tsx +++ b/src/pages/Pricing.tsx @@ -1,7 +1,7 @@ import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; -import { Check, X, Mail, Shield, Server, Users, Zap, Star, ArrowRight, Building2, Github } from "lucide-react"; +import { Check, X, Mail, Users, Zap, Star, ArrowRight } from "lucide-react"; import { useSubscription } from "@/hooks/useSubscription"; import { Link } from "react-router-dom"; import { useTranslation } from "react-i18next"; @@ -43,29 +43,6 @@ const hostedTiers = [ }, ]; -// Alternative options -const alternativeTiers = [ - { - id: "enterprise", - nameKey: "pricing.enterprise.name", - descriptionKey: "pricing.enterprise.description", - priceKey: "pricing.enterprise.price", - featuresKey: "pricing.enterprise.features", - ctaKey: "pricing.enterprise.cta", - icon: Building2, - }, - { - id: "selfHosted", - nameKey: "pricing.selfHosted.name", - descriptionKey: "pricing.selfHosted.description", - priceKey: "pricing.selfHosted.price", - featuresKey: "pricing.selfHosted.features", - ctaKey: "pricing.selfHosted.cta", - noteKey: "pricing.selfHosted.note", - icon: Github, - isGithub: true, - }, -]; export default function Pricing() { const { t } = useTranslation(); @@ -83,27 +60,6 @@ Tenant ID: ${subscription?.tenant_id || 'N/A'} Please provide me with more information about the upgrade process. -Thank you!`; - - window.location.href = `mailto:office@sheetmetalconnect.com?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`; - }; - - const handleEnterpriseRequest = () => { - const subject = "Enterprise Inquiry"; - const body = `Hello, - -I'm interested in the Enterprise plan for Eryxon Flow. - -Current Plan: ${getPlanDisplayName(currentPlan)} -Tenant ID: ${subscription?.tenant_id || 'N/A'} - -I would like to discuss: -- Single-tenant deployment options -- Custom requirements -- Pricing - -Please get in touch to discuss further. - Thank you!`; window.location.href = `mailto:office@sheetmetalconnect.com?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`; @@ -238,149 +194,6 @@ Thank you!`; - {/* Section 2: Alternatives */} -
-
-

{t("pricing.alternatives")}

-

- {t("pricing.alternativesDescription")} -

-
- -
- {alternativeTiers.map((tier) => { - const Icon = tier.icon; - - return ( - - -
-
- -
-
- {t(tier.nameKey)} - {t(tier.descriptionKey)} -
-
- -
-
- {t(tier.priceKey)} - {tier.id !== 'enterprise' && ( - {t("pricing.perMonth")} - )} -
-
-
- - -
    - {(t(tier.featuresKey, { returnObjects: true }) as string[]).map((feature, index) => ( -
  • - - {feature} -
  • - ))} -
- {tier.noteKey && ( -

- {t(tier.noteKey)} -

- )} -
- - - {tier.isGithub ? ( - - - - ) : ( - - )} - -
- ); - })} -
-
- - {/* Security Banner */} - - -
- -
-

{t("pricing.securityBanner.title")}

-

- {t("pricing.securityBanner.description")} -

-
-
-
-
- - {/* How It Works */} - - - {t("pricing.howItWorks.title")} - - -
-

{t("pricing.howItWorks.selfServiceTitle")}

-

- {t("pricing.howItWorks.selfServiceDescription")} -

-
- -
-

{t("pricing.howItWorks.upgradeTitle")}

-

- {t("pricing.howItWorks.upgradeDescription")} -

-
- -
-

{t("pricing.howItWorks.usageTitle")}

-

- {t("pricing.howItWorks.usageDescription")}{' '} - - {t("navigation.myPlan")} - -

-
-
-
- - {/* Why Hosted */} - - -
- -
-

{t("pricing.whyHosted.title")}

-

- {t("pricing.whyHosted.description")} -

-
-
-
-
); } diff --git a/src/pages/common/MyPlan.tsx b/src/pages/common/MyPlan.tsx index 329f552b..956bae1a 100644 --- a/src/pages/common/MyPlan.tsx +++ b/src/pages/common/MyPlan.tsx @@ -34,8 +34,8 @@ const pricingTiers = [ "250 parts per month", "500 MB storage", "Limited API access", - "No webhooks", - "No MCP server", + "Webhooks included", + "MCP server included", "Docs only", ], }, @@ -44,22 +44,22 @@ const pricingTiers = [ name: "Pro", price: "€97", popular: true, - description: "Real usage, my infra, email support.", + description: "Real usage, email support.", features: [ "500 jobs per month", "5,000 parts per month", "10 GB storage", "Full API access", - "Webhooks included", - "MCP server access", - "Email support", + "Webhooks", + "MCP server", + "Email support (no SLA)", ], }, { id: "premium", name: "Premium", price: "€497", - description: "High limits, SSO, priority support. Still my infra.", + description: "High limits, SSO, priority support.", features: [ "Fair use (high limits)", "100 GB storage", @@ -70,21 +70,6 @@ const pricingTiers = [ "Priority email support", ], }, - { - id: "enterprise", - name: "Enterprise", - price: "Contact", - description: "Your network, I deploy, custom scope.", - features: [ - "Unlimited jobs & parts", - "Your infrastructure", - "Your Supabase instance", - "SSO/SAML included", - "White-label included", - "Dedicated support", - "Custom SLA", - ], - }, ]; export const MyPlan: React.FC = () => { @@ -384,20 +369,6 @@ export const MyPlan: React.FC = () => { - {/* Security & Architecture Notice */} - - - - {currentPlan === "premium" - ? t("myPlan.singleTenant") - : t("myPlan.multiTenant")} - - - {currentPlan === "premium" - ? t("myPlan.singleTenantDescription") - : t("myPlan.multiTenantDescription")} - - ); };