diff --git a/app/(auth)/sign-up/[[...sign-up]]/page.tsx b/app/(auth)/sign-up/[[...sign-up]]/page.tsx
index 05d6adb..e809dfd 100644
--- a/app/(auth)/sign-up/[[...sign-up]]/page.tsx
+++ b/app/(auth)/sign-up/[[...sign-up]]/page.tsx
@@ -15,18 +15,18 @@ import { resolveSignedInAppDestination } from '@/lib/public-auth-routing';
function getIntentCopy(intent: string | undefined) {
if (intent === 'pilot') {
return {
- label: 'Start Free Pilot',
- title: 'Create your account and start pilot onboarding',
+ label: 'Start 14-day pilot',
+ title: 'Create your account and start your 14-day pilot',
detail:
- 'This path is for a business owner creating a new CallbackCloser account. If you are already signed in, CallbackCloser will send you to onboarding, your dashboard, or the admin new-business flow based on your role.',
+ 'Create your CallbackCloser account here. Once you are in, we create your workspace, handle the setup for you, and notify you when your Lead Recovery Command Center is ready.',
};
}
return {
label: 'Create Account',
title: 'Create your CallbackCloser account',
- detail:
- 'Create a new owner account here. Founder-operated customer pilot setup is separate and stays inside the admin new-business flow.',
+ detail:
+ 'Create a new owner account here. CallbackCloser handles setup for you, then unlocks your workspace when everything is ready.',
};
}
@@ -46,7 +46,7 @@ export default async function SignUpPage({
{copy.title}
{copy.detail}
- Existing users should sign in. CallbackCloser operators setting up a customer pilot should use the admin new-business flow, not public signup.
+ Existing users should sign in. We keep customer setup managed, so you do not need to configure the phone or messaging system yourself.
@@ -86,7 +86,7 @@ export default async function SignUpPage({
{copy.title}
{copy.detail}
- Existing users should sign in. CallbackCloser operators setting up a customer pilot should use the admin new-business flow, not public signup.
+ Existing users should sign in. We keep customer setup managed, so you do not need to configure the phone or messaging system yourself.
diff --git a/app/admin/[businessId]/page.tsx b/app/admin/[businessId]/page.tsx
index 04504d1..367c880 100644
--- a/app/admin/[businessId]/page.tsx
+++ b/app/admin/[businessId]/page.tsx
@@ -31,6 +31,7 @@ import { Select } from '@/components/ui/select';
import { Textarea } from '@/components/ui/textarea';
import { buildAdminCustomerOpenHref } from '@/lib/admin-customer-paths';
import { buildAdminOnboardingConfidence, canDeleteTestBusiness, getDeleteTestBusinessBlockedReason, isBusinessArchived } from '@/lib/admin-dashboard';
+import { customerSetupStatusLabels, shouldShowCustomerSetupWaitingPage } from '@/lib/customer-setup';
import { buildAdminMissedCallValidationTruth, buildAdminOperationalProofs } from '@/lib/admin-operator-proof';
import { buildAdminNextStepGuide, buildAdminSetupPanels } from '@/lib/admin-setup-remediation';
import {
@@ -367,6 +368,7 @@ export default async function AdminBusinessDetailPage({
const nextStep = getStepByKey(setupFlow.steps, nextStepGuide.key);
const nextStepHref = buildStepPath(business.id, nextStepGuide.key, timelineFilter, activityExpanded);
const selectedStep = getStepByKey(setupFlow.steps, selectedStepKey);
+ const showPendingSetupBanner = shouldShowCustomerSetupWaitingPage(business.provisioningStatus);
const created = getQueryValue(searchParams, 'created') === '1';
const saved = getQueryValue(searchParams, 'saved') === '1';
@@ -1136,6 +1138,20 @@ export default async function AdminBusinessDetailPage({
{liveAcknowledged === 'warnings' ? 'Business marked live with explicit warning acknowledgment.' : 'Business marked live after launch checks.'}
) : null}
+ {showPendingSetupBanner ? (
+
+
+ This business is waiting for founder setup
+
+ The owner should only see the setup-in-progress page until you finish the launch checklist and mark the workspace live.
+
+
+
+ {customerSetupStatusLabels[business.provisioningStatus]}
+ Next action: {onboardingConfidence.nextAction}
+
+
+ ) : null}
{archived ?
- Customer pilot setup starts here. Public signup is for business owners creating their own account; founder/operator setup for a real customer stays in this admin new-business flow.
+ New public pilot signups land here waiting for founder setup. Finish the owner details, launch prep, and go-live checks before the customer sees the full workspace.
- Start with the business details and number-connection path here. After you save, CallbackCloser opens the same shared setup flow used later for ongoing business control, without auto-provisioning ahead of your chosen account mode.
-
-
-
-
-
- Start setup
-
- }
- steps={setupPreviewFlow.steps}
- />
-
-
-
- What happens after this form
- Reduce onboarding drag by carrying your number-connection choices directly into the guided control panel.
-
-
-
1. The shared setup flow opens with your chosen account mode and business-number path already saved for this business.
-
2. Nothing gets auto-provisioned before you can review Messaging Service, number assignment, webhooks, and honest A2P status in plain English.
-
3. You send the test SMS, run the missed-call validation, and only mark live after the checklist is actually clear.
-
-
-
-
-
- Business profile and defaults
- Set the core business details so we can get your missed-call coverage live fast.
-
-
- {error ? (
-
If you are already ready to try the product, you can also create an account and complete the in-app setup flow.
+
If you are ready to try the product, create your account and we will handle the setup for you.
If you are an active pilot customer, include your business name, texting line, and the recent call or SMS time when reporting an issue.
For SMS consent, STOP or HELP behavior, or public trust-page questions, email support and reference{' '}
callbackcloser.com so we can match the request to the live pilot setup.
-
Founder/operator customer pilot setup is separate from public signup and stays inside the admin new-business flow.
+
We keep the launch managed and notify you when your Lead Recovery Command Center is ready.
- Start pilot onboarding
+ Start 14-day pilot
Create account
diff --git a/app/page.tsx b/app/page.tsx
index 770f652..8133a95 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -7,123 +7,43 @@ import { buttonVariants } from '@/components/ui/button';
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
import { PUBLIC_CREATE_ACCOUNT_PATH, PUBLIC_START_FREE_PILOT_PATH } from '@/lib/public-auth-routing';
-const roiPoints = [
+const flowSteps = [
{
- title: 'Reply before they move on',
- description: 'Missed callers hear back fast instead of calling the next business on the list.',
+ title: 'Missed call comes in',
+ detail: 'Your customer calls. If the call is missed, CallbackCloser starts the follow-up immediately.',
},
{
- title: 'Get the details without chasing them',
- description: 'You get the job type, urgency, ZIP, and callback timing without manually texting back and forth.',
+ title: 'Text goes out in seconds',
+ detail: 'The customer gets a simple reply asking what they need help with and how soon they need it.',
},
{
- title: 'Know who is worth calling first',
- description: 'Qualified leads are handed off with a ready-to-close summary instead of a cold voicemail.',
+ title: 'The lead gets qualified',
+ detail: 'CallbackCloser captures service need, urgency, location, and the best callback time without dragging the customer through a long form.',
},
{
- title: 'One extra job can cover the cost',
- description: 'For most service businesses, a single recovered repair or install pays for CallbackCloser.',
+ title: 'You get a ready-to-call summary',
+ detail: 'Instead of a cold voicemail, you see a clear lead handoff and know who to call first.',
},
];
-const painPoints = [
- {
- title: 'Every missed call can become a lost job',
- description: 'When the phone rings and nobody answers, that customer usually needs help now, not tomorrow.',
- },
- {
- title: 'Customers move on fast',
- description: 'If they do not hear back quickly, they call the next shop and you never get the chance to close them.',
- },
- {
- title: 'Voicemail rarely saves the lead',
- description: 'Most callers do not leave enough detail to help you call back with confidence, if they leave one at all.',
- },
- {
- title: 'Most owners never see the lost revenue',
- description: 'Missed calls feel small until you add up how many booked jobs disappear every month.',
- },
+const pilotIncludes = [
+ '14-day pilot',
+ 'White-glove setup included',
+ 'Missed-call SMS recovery',
+ 'Qualified lead summaries',
+ 'Owner alerts',
+ 'Lead Recovery Command Center',
+ 'One business texting number included',
+ 'You approve before continuing',
];
-const workflowSteps = [
- {
- title: 'A customer calls and you miss it',
- description: 'The lead does not have to sit in voicemail while your team is on jobs or with other customers.',
- },
- {
- title: 'CallbackCloser texts them right away',
- description: 'They hear back in seconds, not hours, so you stay in the running for the job.',
- },
- {
- title: 'We find out what they need',
- description: 'The conversation captures the job type, urgency, and location without your team doing the back-and-forth.',
- },
- {
- title: 'You get a qualified lead to follow up with',
- description: 'You get a ready-to-close handoff so the next call is focused on booking the job.',
- },
-];
-
-const proofStats = [
- {
- label: 'Response timing',
- value: 'Seconds, not hours',
- detail: 'Missed callers hear back quickly while the job is still active and the lead still wants help.',
- },
- {
- label: 'Lead handoff',
- value: 'Qualified before callback',
- detail: 'Owners see the job type, urgency, ZIP, and callback context before the next phone call.',
- },
- {
- label: 'Setup model',
- value: 'Managed for you',
- detail: 'CallbackCloser handles the texting line, routing support, and activation checklist in one place.',
- },
- {
- label: 'Public trust',
- value: 'Visible and clear',
- detail: 'Privacy Policy, Terms & Conditions, Refund Policy, and SMS Consent stay public and easy to review.',
- },
-];
-
-const screenshotCards = [
- {
- label: 'Leads list',
- title: 'Recovered leads prioritized for callback',
- description: 'See new leads, urgency, location, and follow-up status in one clean queue.',
- },
- {
- label: 'Conversation detail',
- title: 'Full SMS thread with quick follow-up actions',
- description: 'Read the conversation, confirm what the caller needs, and move the lead forward fast.',
- },
- {
- label: 'Business settings',
- title: 'Activation checklist, routing, and owner alerts in one place',
- description: 'Keep routing, owner alerts, and launch status visible before your team depends on it.',
- },
-];
-
-const planTeasers = [
- {
- name: 'Starter',
- description: 'Start turning missed calls into real opportunities with one included business texting number and less admin work.',
- },
- {
- name: 'Growth',
- description: 'Handle more missed-call opportunities and keep follow-up clean as your team gets busier.',
- },
- {
- name: 'Agency / Multi-location',
- description: 'Hands-on rollout planning for teams covering multiple brands or locations.',
- },
-];
-
-const onboardingSteps = [
- 'We provision your business texting line and connect routing so missed callers are covered fast.',
- 'We confirm the first text and lead questions before live traffic starts.',
- 'We verify owner notifications and run a missed-call test with you before go-live.',
+const trustLinks = [
+ { href: '/pricing', label: 'Pricing' },
+ { href: '/refund', label: 'Refund' },
+ { href: '/privacy', label: 'Privacy' },
+ { href: '/terms', label: 'Terms' },
+ { href: '/sms-consent', label: 'SMS Consent' },
+ { href: '/contact', label: 'Contact' },
];
export default function LandingPage() {
@@ -134,99 +54,68 @@ export default function LandingPage() {
-
+
+ 14-day pilot with white-glove setup
- Built for service businesses that lose jobs to missed calls
-
-
- Stop losing jobs from missed calls
-
-
- CallbackCloser texts missed callers instantly, qualifies them, and sends you a ready-to-close lead.
-
-
-
-
- Start Free Pilot
-
-
- Create Account
-
-
- See Demo
-
-
-
- Reply in seconds
- Recover more jobs
- Ready-to-close leads
- Less admin chasing
-
-
Close one extra job and this can pay for itself.
+
+ Turn missed calls into qualified leads automatically
+
+
+ CallbackCloser texts missed callers in seconds, collects the job details, and sends you a ready-to-call lead summary.
+
- Start Free Pilot creates a new account or takes an existing user to the right next step automatically.
- Founder-operated customer pilot setup stays separate in the admin new-business flow.
+ Start a 14-day pilot. We help set up your missed-call recovery flow and notify you when it is ready.
-
-
- {roiPoints.map((point) => (
-
-
{point.title}
-
{point.description}
-
- ))}
+
+
+ Try the missed-call simulator
+
+
+ Start 14-day pilot
+
+
+
+ Reply in seconds
+ Qualified before callback
+ White-glove setup
+ Live dashboard when ready
-
- What you get back
- Faster response, fewer cold leads, and a clearer path to closing the job.
+
+ What the owner sees
+ A short missed-call recovery flow that ends with a ready-to-call lead.
-
+
2:14 PM
Missed call
-
Homeowner calls about same-day AC repair while your techs are on jobs.
+
A homeowner calls while your team is on jobs.
-
-
2:14 PM
- Auto-text sent
-
-
- CallbackCloser replies right away so the customer does not disappear before you can get back to them.
-
-
-
-
-
2:16 PM
- Lead qualified
-
-
- The job type, urgency, ZIP, and callback timing come in before you even make the next call.
-
+
Customer reply
+
“Repair. Today. John, Knoxville. ASAP.”
-
2:16 PM
- Owner alert sent
+
Owner alert
+ Qualified lead
-
Ready-to-close lead
+
John · Repair · Today · Knoxville · ASAP
- AC repair, urgent today, ZIP 78660, asked for an afternoon callback. Your team can call back ready to book the job, not hunt for details.
+ CallbackCloser hands off a clear summary so the callback can focus on booking the job instead of hunting for details.
-
-
Show the product in 30 seconds
-
- Open the public demo to show the missed-call follow-up, owner alert, and dashboard handoff without login or setup.
-
-
- Open public demo
+
+
+ Run the simulator
+
+
+ See the product story
@@ -234,187 +123,94 @@ export default function LandingPage() {
-
-
-
- The real problem
-
Most missed calls are not just missed calls
-
- They are missed estimates, missed repairs, missed installs, and missed revenue you never get a clean chance to win back.
-
A simple missed-call recovery flow built for service businesses
- CallbackCloser keeps the handoff simple so you can focus on calling back the right lead and closing the work.
+ The goal is straightforward: keep the customer engaged, qualify the request quickly, and get the owner to the callback with context.
Proof that missed calls can still turn into paying work
-
- The public site should make the operational value obvious: faster response, cleaner handoff, and trust pages that are
- easy to verify before a business ever goes live.
-
+
- White-glove pilot onboarding
- Hands-on setup so your missed calls are covered fast and the first test goes cleanly.
+ Owner alert preview
+ The handoff is short, practical, and ready for a callback.
-
-
- {onboardingSteps.map((step, index) => (
-
-
- {index + 1}. {step}
-
-
- ))}
-
- We help you get live fast, cover the missed-call gap, and confirm the first real handoff before your team depends on it.
-
-
-
-
Launch standard
-
- Every rollout is built to give the business a managed texting line, visible trust pages, and a clean first test call.
-
-
-
- One business texting number is included in the base service.
-
- SMS Consent, Privacy Policy, Refund, and Terms & Conditions pages stay public before activation.
-
- Owner alerts and callback summaries are verified before launch.
-
-
+
+
Hot missed-call lead
+
Name: John
+
Service: Repair
+
Urgency: Today
+
Location: Knoxville
+
Callback: ASAP
+
Call now: (555) 123-4567
+
View lead: /app/leads/demo
-
-
-
-
- Product preview
-
See how missed calls turn into follow-up-ready leads
-
- A quick look at the product surfaces that keep missed-call follow-up organized for the owner and the office.
-
-
+
+
+ Pilot offer
+
Start with a 14-day pilot
+
+ We're onboarding a small number of local service businesses with hands-on setup. We set up your missed-call recovery flow, verify the first test, and notify you when your account is ready.
+
+
-
- {screenshotCards.map((card) => (
-
-
-
-
- {card.label}
- Inside CallbackCloser
-
-
-
-
-
-
-
-
+
- {card.title}
- {card.description}
+ Early pilot pricing
+
+ Early pilot pricing starts at $50 for the first 14 days to cover setup, texting, and usage while we prove the system can recover leads for your business.
+
+
+ {pilotIncludes.map((item) => (
+
- {item}
+ ))}
+
+
+ Start 14-day pilot
+
+
+ Create account
+
+
+
- ))}
+
-
-
-
-
- Simple plan choices
- Visitors should understand the offer in under 20 seconds.
-
-
- {planTeasers.map((plan) => (
-
-
{plan.name}
-
{plan.description}
-
- ))}
-
-
- Start capturing missed leads
-
-
-
-
-
-
-
- Compliance stays visible
- Trust language remains present without dominating the pitch.
-
-
-
- CallbackCloser keeps pricing, refund, Privacy Policy, Terms & Conditions, contact, and SMS Consent pages visible
- before a business ever starts a pilot.
-
-
- STOP, START, and HELP support remain part of the product flow, and the public consent page still explains message frequency and message/data rates.
-
diff --git a/app/pricing/page.tsx b/app/pricing/page.tsx
index ff85ca8..7857d1c 100644
--- a/app/pricing/page.tsx
+++ b/app/pricing/page.tsx
@@ -7,46 +7,23 @@ import { buttonVariants } from '@/components/ui/button';
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
import { PUBLIC_CREATE_ACCOUNT_PATH, PUBLIC_START_FREE_PILOT_PATH } from '@/lib/public-auth-routing';
-const pricingPlans = [
- {
- name: 'Starter',
- summary: 'For owner-operators who want missed calls turning back into paying jobs quickly.',
- details: [
- 'Includes one business texting number',
- 'Includes standard setup and managed provisioning',
- 'Text missed callers before they move on',
- 'Get a qualified lead instead of a dead voicemail',
- 'See recovered leads and follow-up status clearly',
- 'White-glove pilot onboarding to get live quickly',
- ],
- },
- {
- name: 'Growth',
- summary: 'For growing service teams that need to protect more revenue from missed calls.',
- details: [
- 'Everything in Starter',
- 'Optional extra numbers and rollout help',
- 'More follow-up capacity for busier inbound volume',
- 'Priority rollout help so missed calls stay covered',
- 'Clear billing visibility as usage grows',
- ],
- },
- {
- name: 'Agency / Multi-location',
- summary: 'For operators covering multiple locations, brands, or client accounts.',
- details: [
- 'Multi-location rollout planning',
- 'Hands-on guidance for multiple phone lines and routing',
- 'Custom onboarding and launch sequencing',
- 'Contact sales before activation',
- ],
- },
+const pilotFeatures = [
+ '14-day pilot',
+ 'White-glove setup included',
+ 'Missed-call SMS recovery',
+ 'Qualified lead summaries',
+ 'Owner alerts',
+ 'Lead Recovery Command Center',
+ 'One business texting number included',
+ 'You approve before continuing',
];
-const clarityPoints = [
- 'See your current plan, next billing date, and usage clearly inside the app.',
- 'If billing is inactive, you still see captured leads while auto-texting is paused.',
- 'If usage is capped, the app tells you plainly instead of leaving you guessing.',
+const trustLinks = [
+ { href: '/refund', label: 'Refund Policy' },
+ { href: '/privacy', label: 'Privacy Policy' },
+ { href: '/terms', label: 'Terms & Conditions' },
+ { href: '/sms-consent', label: 'SMS Consent' },
+ { href: '/contact', label: 'Contact' },
];
export default function PricingPage() {
@@ -56,79 +33,58 @@ export default function PricingPage() {
- Transparent packaging
-
Simple pricing for missed-call recovery
+ Pricing
+
Start with a 14-day pilot
- CallbackCloser is priced so business owners can understand the value quickly: protect more missed-call revenue without adding more office admin.
+ CallbackCloser is currently offered as a hands-on pilot for local service businesses that want missed-call recovery set up for them.
- CallbackCloser keeps the public structure simple: Starter, Growth, and Agency / Multi-location. Base service includes one
- business texting number, standard setup, and managed provisioning. If you want rollout help before checkout, email{' '}
-
- support@callbackcloser.com
-
- . Founder-run customer pilot setup is separate from public signup.
+ We keep the offer straightforward: you try the simulator, create your account, we handle the setup, and we notify you when your Lead Recovery Command Center is ready.
-
-
- ))}
-
-
-
-
- Billing clarity inside the app
- The billing page is designed to remove the fear of hidden costs and surprise pauses.
-
-
- {clarityPoints.map((point) => (
-
- {point}
-
+
+
+ Early pilot pricing
+
+ Early pilot pricing starts at $50 for the first 14 days to cover setup, texting, and usage while we prove the system can recover leads for your business.
+
+
+
+ {pilotFeatures.map((feature) => (
+
- {feature}
))}
+
+
+ Start 14-day pilot
+
+
+ Try the missed-call simulator
+
+
-
-
- Trust and compliance
- Trust stays visible without turning the page into policy copy.
-
-
-
Public pricing, contact, Privacy Policy, Terms & Conditions, refund, and SMS Consent pages remain visible before activation.
-
STOP, START, and HELP handling remain part of the live messaging flow, and the consent page stays public.
-
Businesses remain responsible for lawful texting practices and consent requirements in their market.
+
+
+ What the pilot includes
+ Built for a founder-run, done-for-you setup instead of an unfinished DIY rollout.
+
+
+
+ We prepare the texting flow, confirm the first qualification handoff, and keep the launch status visible before you rely on it.
+
+
+ Your workspace stays on a setup-in-progress view until the system is ready. Then we notify you and unlock the full dashboard.
+
+
+ If you need multi-location rollout help or a custom setup path, contact us before activation so the pilot matches your operating model.
+
-
+
Create account
-
- Review SMS consent
-
Talk to us
@@ -136,6 +92,38 @@ export default function PricingPage() {
+
+
+
+
+ Why the pilot is structured this way
+ The offer is designed to feel clear and founder-operated, not like unfinished plan cards.
+
+
+
We keep the setup managed so you are not asked to run a phone-system project on day one.
+
The simulator shows the full customer experience before you commit.
+
If the pilot proves the missed-call recovery flow is working for your business, we can continue from there with real billing inside the app.
+
+
+
+
+
+ Trust and compliance
+ Important public pages stay visible without crowding the main offer.
+
+
+
STOP, START, and HELP handling remain part of the live messaging flow, and the consent page stays public.
+
Privacy, terms, refund, and contact information remain available before activation.
- Start Free Pilot
+ Start 14-day pilot
View product demo
diff --git a/components/customer-setup-waiting-page.tsx b/components/customer-setup-waiting-page.tsx
new file mode 100644
index 0000000..7fcf741
--- /dev/null
+++ b/components/customer-setup-waiting-page.tsx
@@ -0,0 +1,98 @@
+import Link from 'next/link';
+import { type BusinessProvisioningStatus } from '@prisma/client';
+
+import { Badge } from '@/components/ui/badge';
+import { buttonVariants } from '@/components/ui/button';
+import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card';
+import {
+ customerSetupStatusLabels,
+ getCustomerSetupStatusDetail,
+ isGenericManagedSetupBusinessName,
+} from '@/lib/customer-setup';
+
+export function CustomerSetupWaitingPage({
+ businessName,
+ status,
+}: {
+ businessName: string | null;
+ status: BusinessProvisioningStatus;
+}) {
+ const showBusinessName = businessName && !isGenericManagedSetupBusinessName(businessName);
+
+ return (
+
+
+ Setup in progress
+
+
+ Your missed-call recovery system is being set up
+
+
+ We're preparing CallbackCloser for your business. You do not need to configure anything right now. We'll
+ notify you as soon as your account is ready.
+
+
+
+
+
+
+
+ What happens next
+ We keep the launch handled for you, then unlock the full workspace when it is ready.
+
+
+
+
1. We review your account
+
We confirm the owner details and queue your business for setup.
+
+
+
2. We prepare the missed-call recovery flow
+
We handle the setup work, test the first handoff, and keep the status honest.
+
+
+
3. You get the ready notice
+
As soon as the workspace is ready, we email you and unlock the Lead Recovery Command Center.
+
+
+
+
+
+
+ Account status
+ Everything here stays customer-facing and non-technical.
+
+
+ {showBusinessName ? (
+