@@ -620,7 +624,7 @@ export function HomeRoute() {
description: isCs()
? "Historie návštěv, poznámky a preference na jednom místě."
: "Visit history, notes, and preferences all in one place.",
- href: "/dashboard/customers",
+ href: appUrl("/dashboard/customers"),
children: (
@@ -654,7 +658,7 @@ export function HomeRoute() {
description: isCs()
? "Podrobné statistiky, exporty a přehledy pro váš podnik."
: "Detailed statistics, exports, and business insights.",
- href: "/dashboard?tab=analytics",
+ href: appUrl("/dashboard"),
children: (
@@ -709,13 +713,13 @@ export function HomeRoute() {
{i18n.t("home.how.subtitle")}
-
- {i18n.t("home.how.cta")}
+ {primaryLabel()}
-
+
{/* Character guide */}
@@ -801,6 +805,13 @@ export function HomeRoute() {
{i18n.t("home.pricing.subtitle")}
+
+
+ {isCs()
+ ? "Bookra se spouští brzy. Předplatné zatím nelze zakoupit, ceny jsou orientační."
+ : "Bookra launches soon. Subscriptions are not yet available; prices are indicative."}
+
+
{/* Billing Toggle */}
@@ -899,12 +910,12 @@ export function HomeRoute() {
))}
-
- {plan.cta}
-
+ {isAppHost() || plan.id === "business" ? plan.cta : primaryLabel()}
+
))}
@@ -984,15 +995,15 @@ export function HomeRoute() {
{i18n.t("home.cta.subtitle")}
@@ -1213,10 +1224,10 @@ export function HomeRoute() {
: "Manage bookings, customers, and your team from anywhere. An intuitive interface designed for mobile."}
diff --git a/apps/frontend/src/routes/pricing-route.tsx b/apps/frontend/src/routes/pricing-route.tsx
index c016e95..9105bc5 100644
--- a/apps/frontend/src/routes/pricing-route.tsx
+++ b/apps/frontend/src/routes/pricing-route.tsx
@@ -1,6 +1,7 @@
import { createSignal, createMemo, Show, For } from "solid-js";
import { useNavigate } from "@solidjs/router";
import { useI18n } from "../providers/i18n-provider";
+import { isAppHost, WAITLIST_MAILTO } from "../lib/app-host";
const PricingRoute = () => {
const navigate = useNavigate();
@@ -81,9 +82,14 @@ const PricingRoute = () => {
]);
const handleSelectPlan = (planId: string) => {
- // Redirect to signup with plan selection
+ // Pre-launch: www collects launch notifications; the app host keeps the signup flow.
+ if (!isAppHost()) {
+ window.location.href = WAITLIST_MAILTO;
+ return;
+ }
navigate("/?signup=true&plan=" + planId + "&billing=" + billingInterval());
};
+ const waitlistLabel = () => (isCs() ? "Oznamte mi spuštění" : "Notify me at launch");
const { t } = useI18n();
@@ -179,6 +185,13 @@ const PricingRoute = () => {
? "Vyberte si plán, který vyhovuje vašemu podnikání. Žádné skryté poplatky, žádné překvapení."
: "Choose a plan that fits your business. No hidden fees, no surprises."}
+
+
+ {isCs()
+ ? "Bookra se spouští brzy. Předplatné zatím nelze zakoupit, ceny jsou orientační."
+ : "Bookra launches soon. Subscriptions are not yet available; prices are indicative."}
+
+
{/* Billing Toggle */}
@@ -285,7 +298,7 @@ const PricingRoute = () => {
: 'bg-ink text-canvas hover:bg-ink/90 hover:shadow-lg hover:-translate-y-0.5'
}`}
>
- {plan.cta}
+ {isAppHost() || plan.id === "business" ? plan.cta : waitlistLabel()}
@@ -388,15 +401,15 @@ const PricingRoute = () => {
{isCs() ? "Stále si nejste jistí?" : "Still not sure?"}
- {isCs()
- ? "Začněte s bezplatným 15denním trial a rozhodněte se později."
- : "Start with a free 15-day trial and decide later."}
+ {isCs()
+ ? "Bookra se spouští brzy. Nechte nám e-mail a po spuštění dostanete 15denní trial zdarma."
+ : "Bookra launches soon. Leave us your email and get a free 15-day trial at launch."}
- {isCs() ? "Začít zdarma" : "Start for free"}
+ {isAppHost() ? (isCs() ? "Začít zdarma" : "Start for free") : waitlistLabel()}
diff --git a/apps/frontend/tsconfig.tsbuildinfo b/apps/frontend/tsconfig.tsbuildinfo
index fa50d38..5a50941 100644
--- a/apps/frontend/tsconfig.tsbuildinfo
+++ b/apps/frontend/tsconfig.tsbuildinfo
@@ -1 +1 @@
-{"root":["./src/App.tsx","./src/main.tsx","./src/components/animated-list.tsx","./src/components/bookra-character.tsx","./src/components/calendar-feed.tsx","./src/components/dashboard-mockup.tsx","./src/components/floating-dock.tsx","./src/components/hover-feature-cards.tsx","./src/components/index.ts","./src/components/integration-modal.tsx","./src/components/location-map.tsx","./src/components/pinned-list.tsx","./src/components/shell.tsx","./src/components/sms-settings.tsx","./src/components/video-player.tsx","./src/components/widget-builder.tsx","./src/components/dashboard/activity-timeline.tsx","./src/components/dashboard/calendar-view.tsx","./src/components/dashboard/export-csv-button.tsx","./src/components/dashboard/icons.tsx","./src/components/dashboard/kpi-card.tsx","./src/components/dashboard/notification-dropdown.tsx","./src/components/dashboard/revenue-chart.tsx","./src/components/dashboard/types.ts","./src/components/ui/avatar.tsx","./src/components/ui/badge.tsx","./src/components/ui/button.tsx","./src/components/ui/card.tsx","./src/components/ui/dialog.tsx","./src/components/ui/index.ts","./src/components/ui/input.tsx","./src/components/ui/select.tsx","./src/components/ui/skeleton.tsx","./src/components/ui/tabs.tsx","./src/components/ui/textarea.tsx","./src/components/ui/tooltip.tsx","./src/lib/api-client.ts","./src/lib/map.ts","./src/lib/sentry.ts","./src/lib/types.ts","./src/providers/auth-provider.tsx","./src/providers/i18n-provider.tsx","./src/providers/theme-provider.tsx","./src/routes/about-route.tsx","./src/routes/auth-callback-route.tsx","./src/routes/booking-manage-route.tsx","./src/routes/contact-route.tsx","./src/routes/home-route.tsx","./src/routes/legal-route.tsx","./src/routes/not-found-route.tsx","./src/routes/pricing-route.tsx","./src/routes/public-booking-route.tsx","./src/routes/dashboard/billing-page.tsx","./src/routes/dashboard/bookings-page.tsx","./src/routes/dashboard/customers-page.tsx","./src/routes/dashboard/dashboard-data.ts","./src/routes/dashboard/layout.tsx","./src/routes/dashboard/overview-page.tsx","./src/routes/dashboard/services-page.tsx","./src/routes/dashboard/settings-page.tsx","./src/routes/dashboard/staff-page.tsx","./src/routes/dashboard/zones-page.tsx","./vite.config.ts"],"version":"5.9.3"}
\ No newline at end of file
+{"root":["./src/App.tsx","./src/main.tsx","./src/components/animated-list.tsx","./src/components/bookra-character.tsx","./src/components/calendar-feed.tsx","./src/components/dashboard-mockup.tsx","./src/components/floating-dock.tsx","./src/components/hover-feature-cards.tsx","./src/components/index.ts","./src/components/integration-modal.tsx","./src/components/location-map.tsx","./src/components/pinned-list.tsx","./src/components/shell.tsx","./src/components/sms-settings.tsx","./src/components/video-player.tsx","./src/components/widget-builder.tsx","./src/components/dashboard/activity-timeline.tsx","./src/components/dashboard/calendar-view.tsx","./src/components/dashboard/export-csv-button.tsx","./src/components/dashboard/icons.tsx","./src/components/dashboard/kpi-card.tsx","./src/components/dashboard/notification-dropdown.tsx","./src/components/dashboard/revenue-chart.tsx","./src/components/dashboard/types.ts","./src/components/ui/avatar.tsx","./src/components/ui/badge.tsx","./src/components/ui/button.tsx","./src/components/ui/card.tsx","./src/components/ui/dialog.tsx","./src/components/ui/index.ts","./src/components/ui/input.tsx","./src/components/ui/select.tsx","./src/components/ui/skeleton.tsx","./src/components/ui/tabs.tsx","./src/components/ui/textarea.tsx","./src/components/ui/tooltip.tsx","./src/lib/api-client.ts","./src/lib/app-host.ts","./src/lib/map.ts","./src/lib/sentry.ts","./src/lib/types.ts","./src/providers/auth-provider.tsx","./src/providers/i18n-provider.tsx","./src/providers/theme-provider.tsx","./src/routes/about-route.tsx","./src/routes/auth-callback-route.tsx","./src/routes/booking-manage-route.tsx","./src/routes/contact-route.tsx","./src/routes/home-route.tsx","./src/routes/legal-route.tsx","./src/routes/not-found-route.tsx","./src/routes/pricing-route.tsx","./src/routes/public-booking-route.tsx","./src/routes/dashboard/billing-page.tsx","./src/routes/dashboard/bookings-page.tsx","./src/routes/dashboard/customers-page.tsx","./src/routes/dashboard/dashboard-data.ts","./src/routes/dashboard/layout.tsx","./src/routes/dashboard/overview-page.tsx","./src/routes/dashboard/services-page.tsx","./src/routes/dashboard/settings-page.tsx","./src/routes/dashboard/staff-page.tsx","./src/routes/dashboard/zones-page.tsx","./vite.config.ts"],"version":"5.9.3"}
\ No newline at end of file
diff --git a/apps/frontend/vercel.json b/apps/frontend/vercel.json
new file mode 100644
index 0000000..0f32683
--- /dev/null
+++ b/apps/frontend/vercel.json
@@ -0,0 +1,3 @@
+{
+ "rewrites": [{ "source": "/(.*)", "destination": "/index.html" }]
+}