Skip to content

Commit cba9409

Browse files
authored
feat(kiloclaw-config): Add link to kiloclaw/config-services to /claw (#1067) (#1091)
Adds card to `/claw` pointing to kilo.ai/kiloclaw/config-service. Card shows up if KiloClaw does not exist or is less than 7 days old. <img width="1234" height="120" alt="image" src="https://github.com/user-attachments/assets/3460bcf1-ffef-4982-b208-3b5817c282f1" /> Note: final version does not have $49 so we don't have to worry if we change price.
2 parents 53a7874 + 461b18e commit cba9409

1 file changed

Lines changed: 33 additions & 1 deletion

File tree

src/app/(app)/claw/components/ClawDashboard.tsx

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
'use client';
22

33
import { useCallback, useState } from 'react';
4-
import { TriangleAlert } from 'lucide-react';
4+
import { Zap, TriangleAlert } from 'lucide-react';
55
import type { KiloClawDashboardStatus } from '@/lib/kiloclaw/types';
66
import {
77
useKiloClawGatewayStatus,
@@ -48,6 +48,13 @@ export function ClawDashboard({ status }: { status: KiloClawDashboardStatus | un
4848
const { data: isServiceDegraded } = useKiloClawServiceDegraded();
4949
const { data: earlybirdStatus } = useQuery(trpc.kiloclaw.getEarlybirdStatus.queryOptions());
5050

51+
const SEVEN_DAYS_MS = 7 * 24 * 60 * 60 * 1000;
52+
const instanceYoung =
53+
instanceStatus !== null &&
54+
instanceStatus.provisionedAt !== null &&
55+
Date.now() - instanceStatus.provisionedAt < SEVEN_DAYS_MS;
56+
const configServiceNudgeVisible = !instanceStatus || instanceYoung;
57+
5158
const [dirtySecrets, setDirtySecrets] = useState<Set<string>>(new Set());
5259

5360
const onSecretsChanged = useCallback((entryId: string) => {
@@ -90,6 +97,31 @@ export function ClawDashboard({ status }: { status: KiloClawDashboardStatus | un
9097
</Alert>
9198
)}
9299

100+
{configServiceNudgeVisible && (
101+
<div className="border-brand-primary/30 bg-brand-primary/5 flex flex-col gap-3 rounded-xl border p-4 sm:flex-row sm:items-center sm:justify-between">
102+
<div className="flex items-start gap-3">
103+
<Zap className="text-brand-primary mt-0.5 h-5 w-5 shrink-0" />
104+
<div>
105+
<p className="text-brand-primary text-sm font-semibold">
106+
Go from inbox chaos to an AI executive assistant — in one hour.
107+
</p>
108+
<p className="text-muted-foreground mt-0.5 text-sm">
109+
A KiloClaw expert configures your email, calendar, and messaging live on a call.
110+
Includes <b>2 months free</b> hosting.
111+
</p>
112+
</div>
113+
</div>
114+
<a
115+
href="https://kilo.ai/kiloclaw/config-service"
116+
target="_blank"
117+
rel="noopener noreferrer"
118+
className="bg-brand-primary text-primary-foreground hover:bg-brand-primary/90 inline-flex shrink-0 items-center justify-center rounded-md px-4 py-2 text-sm font-medium transition-colors"
119+
>
120+
Book your session
121+
</a>
122+
</div>
123+
)}
124+
93125
<Card className="mt-6">
94126
{!instanceStatus ? (
95127
<CardContent className="p-5">

0 commit comments

Comments
 (0)