From d9e3883d11db2a22a61ad29782307019eece02c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl-Gerhard=20Lindesva=CC=88rd?= Date: Wed, 5 Nov 2025 09:03:03 +0100 Subject: [PATCH] fix: simply billing --- apps/public/components/sections/faq.tsx | 2 +- .../components/organization/billing-faq.tsx | 10 +- .../organization/billing-prompt.tsx | 201 +++++ .../{usage.tsx => billing-usage.tsx} | 89 +- .../src/components/organization/billing.tsx | 616 ++++++-------- .../organization/current-subscription.tsx | 283 ------- apps/start/src/modals/billing-success.tsx | 47 ++ apps/start/src/modals/index.tsx | 10 + apps/start/src/modals/select-billing-plan.tsx | 309 +++++++ apps/start/src/routeTree.gen.ts | 786 +++++++++--------- ... _app.$organizationId.$projectId.chat.tsx} | 2 +- ...$organizationId.$projectId.dashboards.tsx} | 2 +- ...d.$projectId.dashboards_.$dashboardId.tsx} | 2 +- ...d.$projectId.events._tabs.conversions.tsx} | 2 +- ...tionId.$projectId.events._tabs.events.tsx} | 2 +- ...ationId.$projectId.events._tabs.index.tsx} | 2 +- ...ationId.$projectId.events._tabs.stats.tsx} | 2 +- ...rganizationId.$projectId.events._tabs.tsx} | 2 +- .../_app.$organizationId.$projectId.index.tsx | 59 ++ ....$projectId.notifications._tabs.index.tsx} | 2 +- ...tId.notifications._tabs.notifications.tsx} | 2 +- ....$projectId.notifications._tabs.rules.tsx} | 2 +- ...tionId.$projectId.notifications._tabs.tsx} | 2 +- ..._app.$organizationId.$projectId.pages.tsx} | 2 +- ...ctId.profiles.$profileId._tabs.events.tsx} | 2 +- ...ectId.profiles.$profileId._tabs.index.tsx} | 2 +- ....$projectId.profiles.$profileId._tabs.tsx} | 2 +- ...d.$projectId.profiles._tabs.anonymous.tsx} | 2 +- ....$projectId.profiles._tabs.identified.tsx} | 2 +- ...ionId.$projectId.profiles._tabs.index.tsx} | 2 +- ...$projectId.profiles._tabs.power-users.tsx} | 2 +- ...anizationId.$projectId.profiles._tabs.tsx} | 2 +- ...p.$organizationId.$projectId.realtime.tsx} | 2 +- ...$organizationId.$projectId.references.tsx} | 2 +- ...pp.$organizationId.$projectId.reports.tsx} | 2 +- ...ationId.$projectId.reports_.$reportId.tsx} | 2 +- ...p.$organizationId.$projectId.sessions.tsx} | 2 +- ...ionId.$projectId.sessions_.$sessionId.tsx} | 2 +- ...nId.$projectId.settings._tabs.clients.tsx} | 2 +- ...nId.$projectId.settings._tabs.details.tsx} | 2 +- ...onId.$projectId.settings._tabs.events.tsx} | 2 +- ...ionId.$projectId.settings._tabs.index.tsx} | 2 +- ...anizationId.$projectId.settings._tabs.tsx} | 2 +- .../_app.$organizationId.$projectId.tsx | 81 +- .../routes/_app.$organizationId.billing.tsx | 26 +- .../start/src/routes/_app.$organizationId.tsx | 36 +- apps/start/src/styles.css | 12 + packages/db/src/clickhouse/query-builder.ts | 56 ++ packages/db/src/prisma-client.ts | 16 + packages/db/src/services/chart.service.ts | 39 +- .../db/src/services/organization.service.ts | 35 +- packages/db/src/services/overview.service.ts | 4 +- packages/payments/src/prices.ts | 2 + 53 files changed, 1543 insertions(+), 1240 deletions(-) create mode 100644 apps/start/src/components/organization/billing-prompt.tsx rename apps/start/src/components/organization/{usage.tsx => billing-usage.tsx} (80%) delete mode 100644 apps/start/src/components/organization/current-subscription.tsx create mode 100644 apps/start/src/modals/billing-success.tsx create mode 100644 apps/start/src/modals/select-billing-plan.tsx rename apps/start/src/routes/{_app.$organizationId.$projectId_.chat.tsx => _app.$organizationId.$projectId.chat.tsx} (98%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.dashboards.tsx => _app.$organizationId.$projectId.dashboards.tsx} (99%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.dashboards_.$dashboardId.tsx => _app.$organizationId.$projectId.dashboards_.$dashboardId.tsx} (99%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.events._tabs.conversions.tsx => _app.$organizationId.$projectId.events._tabs.conversions.tsx} (94%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.events._tabs.events.tsx => _app.$organizationId.$projectId.events._tabs.events.tsx} (95%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.events._tabs.index.tsx => _app.$organizationId.$projectId.events._tabs.index.tsx} (85%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.events._tabs.stats.tsx => _app.$organizationId.$projectId.events._tabs.stats.tsx} (98%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.events._tabs.tsx => _app.$organizationId.$projectId.events._tabs.tsx} (96%) create mode 100644 apps/start/src/routes/_app.$organizationId.$projectId.index.tsx rename apps/start/src/routes/{_app.$organizationId.$projectId_.notifications._tabs.index.tsx => _app.$organizationId.$projectId.notifications._tabs.index.tsx} (84%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.notifications._tabs.notifications.tsx => _app.$organizationId.$projectId.notifications._tabs.notifications.tsx} (92%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.notifications._tabs.rules.tsx => _app.$organizationId.$projectId.notifications._tabs.rules.tsx} (97%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.notifications._tabs.tsx => _app.$organizationId.$projectId.notifications._tabs.tsx} (96%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.pages.tsx => _app.$organizationId.$projectId.pages.tsx} (99%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.profiles.$profileId._tabs.events.tsx => _app.$organizationId.$projectId.profiles.$profileId._tabs.events.tsx} (94%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.profiles.$profileId._tabs.index.tsx => _app.$organizationId.$projectId.profiles.$profileId._tabs.index.tsx} (98%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.profiles.$profileId._tabs.tsx => _app.$organizationId.$projectId.profiles.$profileId._tabs.tsx} (98%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.profiles._tabs.anonymous.tsx => _app.$organizationId.$projectId.profiles._tabs.anonymous.tsx} (95%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.profiles._tabs.identified.tsx => _app.$organizationId.$projectId.profiles._tabs.identified.tsx} (94%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.profiles._tabs.index.tsx => _app.$organizationId.$projectId.profiles._tabs.index.tsx} (85%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.profiles._tabs.power-users.tsx => _app.$organizationId.$projectId.profiles._tabs.power-users.tsx} (94%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.profiles._tabs.tsx => _app.$organizationId.$projectId.profiles._tabs.tsx} (96%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.realtime.tsx => _app.$organizationId.$projectId.realtime.tsx} (98%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.references.tsx => _app.$organizationId.$projectId.references.tsx} (99%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.reports.tsx => _app.$organizationId.$projectId.reports.tsx} (92%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.reports_.$reportId.tsx => _app.$organizationId.$projectId.reports_.$reportId.tsx} (95%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.sessions.tsx => _app.$organizationId.$projectId.sessions.tsx} (96%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.sessions_.$sessionId.tsx => _app.$organizationId.$projectId.sessions_.$sessionId.tsx} (98%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.settings._tabs.clients.tsx => _app.$organizationId.$projectId.settings._tabs.clients.tsx} (89%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.settings._tabs.details.tsx => _app.$organizationId.$projectId.settings._tabs.details.tsx} (94%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.settings._tabs.events.tsx => _app.$organizationId.$projectId.settings._tabs.events.tsx} (93%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.settings._tabs.index.tsx => _app.$organizationId.$projectId.settings._tabs.index.tsx} (85%) rename apps/start/src/routes/{_app.$organizationId.$projectId_.settings._tabs.tsx => _app.$organizationId.$projectId.settings._tabs.tsx} (97%) diff --git a/apps/public/components/sections/faq.tsx b/apps/public/components/sections/faq.tsx index 54e6d666..1bdc2d88 100644 --- a/apps/public/components/sections/faq.tsx +++ b/apps/public/components/sections/faq.tsx @@ -13,7 +13,7 @@ const questions = [ { question: 'Does OpenPanel have a free tier?', answer: [ - 'For our Cloud plan we offer a 14 days free trial, this is mostly for you to be able to try out OpenPanel before committing to a paid plan.', + 'For our Cloud plan we offer a 30 days free trial, this is mostly for you to be able to try out OpenPanel before committing to a paid plan.', 'OpenPanel is also open-source and you can self-host it for free!', '', 'Why does OpenPanel not have a free tier?', diff --git a/apps/start/src/components/organization/billing-faq.tsx b/apps/start/src/components/organization/billing-faq.tsx index 28b52bf7..2ae71f51 100644 --- a/apps/start/src/components/organization/billing-faq.tsx +++ b/apps/start/src/components/organization/billing-faq.tsx @@ -10,7 +10,7 @@ const questions = [ { question: 'Does OpenPanel have a free tier?', answer: [ - 'For our Cloud plan we offer a 14 days free trial, this is mostly for you to be able to try out OpenPanel before committing to a paid plan.', + 'For our Cloud plan we offer a 30 days free trial, this is mostly for you to be able to try out OpenPanel before committing to a paid plan.', 'OpenPanel is also open-source and you can self-host it for free!', '', 'Why does OpenPanel not have a free tier?', @@ -37,13 +37,19 @@ const questions = [ 'You can change your billing information by clicking the "Manage your subscription" button in the billing section.', ], }, + { + question: 'We need a custom plan, can you help us?', + answer: [ + 'Yes, we can help you with that. Please contact us at hello@openpanel.com to request a quote.', + ], + }, ]; export function BillingFaq() { return ( - Usage + Frequently asked questions