@@ -261,7 +267,7 @@ export function InviteOnlyCard({ redirectTo }: { redirectTo: string }) {
Back to sign in
@@ -273,18 +279,18 @@ export function InviteOnlyCard({ redirectTo }: { redirectTo: string }) {
const VALUE_PROPS = [
{
icon: Zap,
- title: "Get Started Quickly",
- desc: "Set up your account in just a few simple steps.",
+ title: "Live Site Audits",
+ desc: "120+ technical checks, prioritized by what actually moves rankings.",
},
{
icon: ShieldCheck,
- title: "Your Data is Safe",
- desc: "Enterprise-grade security to keep your information protected.",
+ title: "Review Before It Ships",
+ desc: "AI-drafted fixes wait for your approval — nothing publishes itself.",
},
{
icon: TrendingUp,
- title: "Build for What's Next",
- desc: "Powerful tools and flexible features to help you grow.",
+ title: "Client-Ready Reporting",
+ desc: "Rank movement and traffic, in language your clients understand.",
},
];
@@ -301,10 +307,10 @@ export function AuthPageShell({
};
}) {
return (
-
+
@@ -312,47 +318,44 @@ export function AuthPageShell({
-
-
- Metatroncube
-
-
- Solutions
-
+
+ CrawlerX
-
-
- JOIN OUR PLATFORM
+
+
+ WEBSITE INTELLIGENCE THAT ACTS
- Build something
+ Find it. Fix it.
-
- exceptional.
+
+ Prove it.
- Create your account and get started in minutes. Join a growing
- community of creators, builders and innovators.
+ Sign in to audit your sites, review AI-drafted fixes and report
+ progress your clients actually understand.
{VALUE_PROPS.map(({ icon: Icon, title, desc }) => (
-
-
+
+
-
{title}
+
+ {title}
+
{desc}
@@ -361,10 +364,10 @@ export function AuthPageShell({
))}
-
- "More than software,
+
+ "Built for agencies who bill
- it's a better tomorrow."
+ by results, not by hours."
@@ -380,7 +383,7 @@ export function AuthPageShell({
{topLink.linkText}
@@ -389,7 +392,9 @@ export function AuthPageShell({
) : null}
-
{children}
+
+ {children}
+
diff --git a/src/client/features/billing/PricingGraphics.tsx b/src/client/features/billing/PricingGraphics.tsx
index 4ea6c1f..b38eaf4 100644
--- a/src/client/features/billing/PricingGraphics.tsx
+++ b/src/client/features/billing/PricingGraphics.tsx
@@ -15,28 +15,59 @@ import {
export function CrawlerXLogo() {
return (
-
- {/* Top facet - Cyan / Ice Blue (#4faede) */}
+
+ {/* Top facet - CrawlerX accent teal (#3fb6ae) */}
- {/* Left facet - MetatronCube Blue (#3779b9) */}
+ {/* Left facet - CrawlerX primary teal (#0e6e6a) */}
- {/* Right facet - Deep Navy (#0f1d34) */}
+ {/* Right facet - CrawlerX ink navy (#0f161c) */}
{/* Subtle highlights */}
-
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
@@ -72,7 +103,7 @@ export function DotGridMatrix({ className }: { className?: string }) {
height="16"
patternUnits="userSpaceOnUse"
>
-
+
@@ -91,7 +122,7 @@ export function Floating3DChartCard({ className }: { className?: string }) {
{/* Top Row: "Grow Faster" Pill & Growth Arrow */}
-
+
Grow Faster
@@ -111,9 +142,16 @@ export function Floating3DChartCard({ className }: { className?: string }) {
strokeLinejoin="round"
/>
-
-
-
+
+
+
@@ -121,20 +159,36 @@ export function Floating3DChartCard({ className }: { className?: string }) {
{/* 4 Rising Theme Blue Bars */}
{/* Small Plant in White Pot */}
@@ -153,35 +207,41 @@ export function Floating3DSearchCard({ className }: { className?: string }) {
{/* Search Input Simulation */}
{/* 3 Theme Pills */}
- Better Rankings
+
+ Better Rankings
+
-
-
-
More Traffic
+
+
+
+ More Traffic
+
-
-
-
Real Results
+
+
+
+ Real Results
+
{/* Hand-drawn Loop Arrow */}
-
+
-
-
-
-
+
+
+
+
@@ -223,7 +290,7 @@ export function CornerWaveDecoration() {
>
@@ -244,13 +311,13 @@ export function renderPlanIcon(type: keyof typeof PLAN_ICONS) {
}
const TRUST_ICONS: Record
= {
- guarantee: ,
- upi: ,
- gst: ,
- cards: ,
+ guarantee: ,
+ upi: ,
+ gst: ,
+ cards: ,
support: 🇮🇳 ,
};
export function renderTrustIcon(id: string) {
- return TRUST_ICONS[id] ?? ;
+ return TRUST_ICONS[id] ?? ;
}
diff --git a/src/client/features/onboarding/OnboardingChat.tsx b/src/client/features/onboarding/OnboardingChat.tsx
index 32461b9..3214c9e 100644
--- a/src/client/features/onboarding/OnboardingChat.tsx
+++ b/src/client/features/onboarding/OnboardingChat.tsx
@@ -85,7 +85,7 @@ function SiteForm({ projectId }: { projectId: string }) {
>
diff --git a/src/client/features/onboarding/PostSignupOnboarding.tsx b/src/client/features/onboarding/PostSignupOnboarding.tsx
index 470a3c6..b238294 100644
--- a/src/client/features/onboarding/PostSignupOnboarding.tsx
+++ b/src/client/features/onboarding/PostSignupOnboarding.tsx
@@ -60,7 +60,7 @@ export function PostSignupOnboarding({
diff --git a/src/client/styles/app.css b/src/client/styles/app.css
index 1a199e4..2181052 100644
--- a/src/client/styles/app.css
+++ b/src/client/styles/app.css
@@ -8,14 +8,14 @@
"Helvetica Neue", Arial, sans-serif;
}
-/* CrawlerX brand gradient (MetatronCube blue → deep black), used on the
- sign-in surface and the sidebar header. */
+/* CrawlerX brand gradient (teal → ink navy), used on the sign-in surface and
+ the sidebar header. Matches the brand guide's product-UI palette. */
:root {
--brand-gradient: linear-gradient(
135deg,
- #3779b9 0%,
- #0f1d34 70%,
- #00060c 100%
+ #0e6e6a 0%,
+ #0f161c 70%,
+ #060a0d 100%
);
}
@@ -38,7 +38,7 @@
exclude: properties;
}
-/* Light theme — CrawlerX / MetatronCube brand (primary #3779b9) */
+/* Light theme — CrawlerX brand (primary #0E6E6A, from the brand guide) */
@plugin "daisyui/theme" {
name: "crawlerx";
default: true;
@@ -48,15 +48,15 @@
--color-base-200: #f6f8fa;
--color-base-300: #e6eaef;
--color-base-content: #151515;
- --color-primary: #3779b9;
+ --color-primary: #0e6e6a;
--color-primary-content: #ffffff;
- --color-secondary: #0f1d34;
+ --color-secondary: #0f161c;
--color-secondary-content: #ffffff;
- --color-accent: #4faede;
+ --color-accent: #3fb6ae;
--color-accent-content: #06263a;
--color-neutral: #151515;
--color-neutral-content: #ffffff;
- --color-info: #3779b9;
+ --color-info: #0e6e6a;
--color-info-content: #ffffff;
--color-success: oklch(65% 0.18 145);
--color-success-content: oklch(100% 0 0);
@@ -83,16 +83,16 @@
--color-base-200: #0e121b;
--color-base-300: #232a37;
--color-base-content: #e8ebf0;
- --color-primary: #3f8ad4;
- --color-primary-content: #ffffff;
+ --color-primary: #3fb6ae;
+ --color-primary-content: #06263a;
--color-secondary: #9fb3c8;
--color-secondary-content: #0e121b;
- --color-accent: #4faede;
+ --color-accent: #3fb6ae;
--color-accent-content: #06263a;
--color-neutral: #e8ebf0;
--color-neutral-content: #141821;
- --color-info: #3f8ad4;
- --color-info-content: #ffffff;
+ --color-info: #3fb6ae;
+ --color-info-content: #06263a;
--color-success: oklch(65% 0.18 145);
--color-success-content: oklch(100% 0 0);
--color-warning: oklch(80% 0.15 80);
diff --git a/src/routes/_authenticated.oauth-consent.tsx b/src/routes/_authenticated.oauth-consent.tsx
index 878cbdc..366c37e 100644
--- a/src/routes/_authenticated.oauth-consent.tsx
+++ b/src/routes/_authenticated.oauth-consent.tsx
@@ -73,7 +73,7 @@ function OAuthConsentPage() {
diff --git a/src/routes/_authenticated.subscribe.tsx b/src/routes/_authenticated.subscribe.tsx
index eac2a04..5d15768 100644
--- a/src/routes/_authenticated.subscribe.tsx
+++ b/src/routes/_authenticated.subscribe.tsx
@@ -125,8 +125,7 @@ function SubscribePage() {
});
const siteCount = Math.max(1, projectsQuery.data?.length ?? 1);
const activePlanId: "free" | "starter" | "pro" | "agency" =
- billingQuery.data?.planId ??
- (planStatus === "paid" ? "pro" : "free");
+ billingQuery.data?.planId ?? (planStatus === "paid" ? "pro" : "free");
const subscribeRouteState = getSubscribeRouteState({
hasSession,
isCustomerLoading: customerQuery.isLoading,
@@ -184,14 +183,14 @@ function SubscribePage() {
Finalizing your subscription…
-
+
Setting up your workspace limits and credits.
@@ -239,7 +238,9 @@ function SubscribePage() {
throw new Error("Stripe checkout session did not return a valid URL.");
} catch (err: unknown) {
- const errObj = err as { message?: string; data?: { message?: string } } | undefined;
+ const errObj = err as
+ | { message?: string; data?: { message?: string } }
+ | undefined;
const rawMsg = errObj?.data?.message || errObj?.message;
const msg = rawMsg
? getStandardErrorMessage(new Error(rawMsg), rawMsg)
@@ -278,8 +279,13 @@ function SubscribePage() {
}
throw new Error("Unable to retrieve Stripe billing portal URL.");
} catch (err: unknown) {
- const errObj = err as { message?: string; data?: { message?: string } } | undefined;
- const msg = errObj?.data?.message || errObj?.message || "Failed to open billing portal.";
+ const errObj = err as
+ | { message?: string; data?: { message?: string } }
+ | undefined;
+ const msg =
+ errObj?.data?.message ||
+ errObj?.message ||
+ "Failed to open billing portal.";
toast.error(msg);
} finally {
setIsOpeningPortal(false);
@@ -379,7 +385,8 @@ function SubscribePage() {
{/* Footer */}
- CrawlerX by Metatroncube Solutions • Enterprise & Custom Agency Plans: {SUPPORT_EMAIL}
+ CrawlerX by Metatroncube Solutions • Enterprise & Custom Agency Plans:{" "}
+ {SUPPORT_EMAIL}