Skip to content

Commit 6cd0155

Browse files
authored
Merge pull request #976 from mnfst/humanizing
fix: humanize user-facing website text
2 parents 137c9c5 + cecc2e8 commit 6cd0155

File tree

18 files changed

+849
-728
lines changed

18 files changed

+849
-728
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"manifest": patch
3+
---
4+
5+
Rewrite user-facing text to remove AI writing patterns (em dashes, promotional language, verbose empty states)

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ OpenClaw costs
3030

3131
## What do you get?
3232

33-
- 🔀 **Routes every request to the right model**and cuts costs up to 70%
34-
- 📊 **Track your expenses**real-time dashboard that shows tokens and costs per model
35-
- 🔔 **Set limits**set up alerts (soft or hard) if your consumption exceeds a certain volume
33+
- 🔀 **Route requests to the right model**cut costs up to 70%
34+
- 📊 **Track spending**see tokens and costs per model in real time
35+
- 🔔 **Set limits**get alerts when usage goes over a threshold
3636

3737
## Why Manifest
3838

@@ -122,7 +122,7 @@ Or add `"telemetryOptOut": true` to `~/.openclaw/manifest/config.json`.
122122

123123
## Supported Providers
124124

125-
Manifest supports **300+ models** across all major LLM providers. Every provider supports smart routing, real-time cost tracking, and OTLP telemetry.
125+
Works with **300+ models** across these providers:
126126

127127
| Provider | Models |
128128
|----------|--------|

packages/frontend/index.html

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77
<link href="/fonts/boxicons/boxicons-duotone.min.css" rel="stylesheet" />
88
<meta
99
name="description"
10-
content="Open Source platform to monitor and control OpenClaw costs and performance."
10+
content="Monitor and control your OpenClaw costs."
1111
/>
1212
<meta property="og:title" content="Manifest" />
1313
<meta
1414
property="og:description"
15-
content="Open Source platform to monitor and control OpenClaw costs and performance."
15+
content="Monitor and control your OpenClaw costs."
1616
/>
1717
<meta property="og:type" content="website" />
1818
<meta property="og:url" content="https://app.manifest.build" />
@@ -21,7 +21,7 @@
2121
<meta name="twitter:title" content="Manifest" />
2222
<meta
2323
name="twitter:description"
24-
content="Open Source platform to monitor and control OpenClaw costs and performance."
24+
content="Monitor and control your OpenClaw costs."
2525
/>
2626
<meta name="twitter:image" content="https://app.manifest.build/og-image.png" />
2727
<script src="/theme-init.js"></script>

packages/frontend/src/components/EmailProviderSetup.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
import { createSignal, type Component } from "solid-js";
2-
import EmailProviderModal from "./EmailProviderModal.jsx";
1+
import { createSignal, type Component } from 'solid-js';
2+
import EmailProviderModal from './EmailProviderModal.jsx';
33

44
interface Props {
55
onConfigured: () => void;
66
}
77

88
const EmailProviderSetup: Component<Props> = (props) => {
99
const [modalOpen, setModalOpen] = createSignal(false);
10-
const [selectedProvider, setSelectedProvider] = createSignal<string>("resend");
10+
const [selectedProvider, setSelectedProvider] = createSignal<string>('resend');
1111

1212
const openModal = (provider: string) => {
1313
setSelectedProvider(provider);
@@ -22,25 +22,25 @@ const EmailProviderSetup: Component<Props> = (props) => {
2222
</p>
2323

2424
<div class="provider-setup-grid">
25-
<button class="provider-setup-card" onClick={() => openModal("resend")}>
25+
<button class="provider-setup-card" onClick={() => openModal('resend')}>
2626
<img src="/logos/resend.svg" alt="" class="provider-setup-card__logo" />
2727
<div>
2828
<div class="provider-setup-card__name">Resend</div>
29-
<div class="provider-setup-card__desc">Modern email API</div>
29+
<div class="provider-setup-card__desc">Email API</div>
3030
</div>
3131
</button>
32-
<button class="provider-setup-card" onClick={() => openModal("mailgun")}>
32+
<button class="provider-setup-card" onClick={() => openModal('mailgun')}>
3333
<img src="/logos/mailgun.svg" alt="" class="provider-setup-card__logo" />
3434
<div>
3535
<div class="provider-setup-card__name">Mailgun</div>
36-
<div class="provider-setup-card__desc">Reliable email service</div>
36+
<div class="provider-setup-card__desc">Transactional email</div>
3737
</div>
3838
</button>
39-
<button class="provider-setup-card" onClick={() => openModal("sendgrid")}>
39+
<button class="provider-setup-card" onClick={() => openModal('sendgrid')}>
4040
<img src="/logos/sendgrid.svg" alt="" class="provider-setup-card__logo" />
4141
<div>
4242
<div class="provider-setup-card__name">SendGrid</div>
43-
<div class="provider-setup-card__desc">Scalable email delivery</div>
43+
<div class="provider-setup-card__desc">Email delivery</div>
4444
</div>
4545
</button>
4646
</div>

packages/frontend/src/components/SetupModal.tsx

Lines changed: 94 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,48 +1,65 @@
1-
import { createResource, createSignal, For, Show, type Component } from 'solid-js'
2-
import SetupStepInstall from './SetupStepInstall.jsx'
3-
import SetupStepConfigure from './SetupStepConfigure.jsx'
4-
import SetupStepVerify from './SetupStepVerify.jsx'
5-
import SetupStepLocalConfigure from './SetupStepLocalConfigure.jsx'
6-
import { getAgentKey, getHealth } from '../services/api.js'
1+
import { createResource, createSignal, For, Show, type Component } from 'solid-js';
2+
import SetupStepInstall from './SetupStepInstall.jsx';
3+
import SetupStepConfigure from './SetupStepConfigure.jsx';
4+
import SetupStepVerify from './SetupStepVerify.jsx';
5+
import SetupStepLocalConfigure from './SetupStepLocalConfigure.jsx';
6+
import { getAgentKey, getHealth } from '../services/api.js';
77

8-
interface StepDef { n: number; label: string }
8+
interface StepDef {
9+
n: number;
10+
label: string;
11+
}
912

1013
const CLOUD_STEPS: StepDef[] = [
1114
{ n: 1, label: 'Install' },
1215
{ n: 2, label: 'Configure' },
1316
{ n: 3, label: 'Activate' },
14-
]
17+
];
1518

1619
const LOCAL_STEPS: StepDef[] = [
1720
{ n: 1, label: 'Configure' },
1821
{ n: 2, label: 'Verify' },
19-
]
22+
];
2023

21-
const SetupModal: Component<{ open: boolean; agentName: string; apiKey?: string | null; onClose: () => void; onDone?: () => void }> = (props) => {
22-
const [step, setStep] = createSignal(1)
24+
const SetupModal: Component<{
25+
open: boolean;
26+
agentName: string;
27+
apiKey?: string | null;
28+
onClose: () => void;
29+
onDone?: () => void;
30+
}> = (props) => {
31+
const [step, setStep] = createSignal(1);
2332

24-
const [healthData] = createResource(() => props.open, (open) => open ? getHealth() : null)
25-
const isLocal = () => (healthData() as { mode?: string })?.mode === 'local'
33+
const [healthData] = createResource(
34+
() => props.open,
35+
(open) => (open ? getHealth() : null),
36+
);
37+
const isLocal = () => (healthData() as { mode?: string })?.mode === 'local';
2638

2739
const [apiKeyData] = createResource(
2840
() => (props.open ? props.agentName : null),
2941
(n) => (n ? getAgentKey(n) : null),
30-
)
42+
);
3143

3244
const endpoint = () => {
33-
const custom = apiKeyData()?.pluginEndpoint
34-
if (custom) return custom
35-
const host = window.location.hostname
36-
if (host === 'app.manifest.build') return null
37-
return `${window.location.origin}/otlp`
38-
}
45+
const custom = apiKeyData()?.pluginEndpoint;
46+
if (custom) return custom;
47+
const host = window.location.hostname;
48+
if (host === 'app.manifest.build') return null;
49+
return `${window.location.origin}/otlp`;
50+
};
3951

40-
const steps = () => isLocal() ? LOCAL_STEPS : CLOUD_STEPS
41-
const totalSteps = () => steps().length
52+
const steps = () => (isLocal() ? LOCAL_STEPS : CLOUD_STEPS);
53+
const totalSteps = () => steps().length;
4254

4355
return (
4456
<Show when={props.open}>
45-
<div class="modal-overlay setup-modal__overlay" onClick={(e) => { if (e.target === e.currentTarget) props.onClose(); }}>
57+
<div
58+
class="modal-overlay setup-modal__overlay"
59+
onClick={(e) => {
60+
if (e.target === e.currentTarget) props.onClose();
61+
}}
62+
>
4663
<div class="modal-card" style="max-width: 600px;">
4764
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--gap-sm);">
4865
<div class="modal-card__title">Set up your agent</div>
@@ -51,14 +68,35 @@ const SetupModal: Component<{ open: boolean; agentName: string; apiKey?: string
5168
onClick={() => props.onClose()}
5269
aria-label="Close"
5370
>
54-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 6 6 18"/><path d="m6 6 12 12"/></svg>
71+
<svg
72+
width="16"
73+
height="16"
74+
viewBox="0 0 24 24"
75+
fill="none"
76+
stroke="currentColor"
77+
stroke-width="2"
78+
stroke-linecap="round"
79+
stroke-linejoin="round"
80+
>
81+
<path d="M18 6 6 18" />
82+
<path d="m6 6 12 12" />
83+
</svg>
5584
</button>
5685
</div>
5786
<p class="modal-card__desc">
58-
<Show when={isLocal()} fallback={
59-
<>Follow these steps to send telemetry from your agent to Manifest. Once your first messages arrive, <strong>your dashboard populates automatically</strong>.</>
60-
}>
61-
<>Your local server is running. Configure the OpenClaw plugin and verify that telemetry data is flowing.</>
87+
<Show
88+
when={isLocal()}
89+
fallback={
90+
<>
91+
Follow these steps to send telemetry from your agent to Manifest. Once your first
92+
messages arrive, <strong>your dashboard updates on its own</strong>.
93+
</>
94+
}
95+
>
96+
<>
97+
Your local server is running. Configure the OpenClaw plugin and verify that
98+
telemetry data is flowing.
99+
</>
62100
</Show>
63101
</p>
64102

@@ -80,7 +118,16 @@ const SetupModal: Component<{ open: boolean; agentName: string; apiKey?: string
80118
>
81119
<div class="modal-stepper__circle">
82120
<Show when={step() > s.n} fallback={s.n}>
83-
<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><polyline points="20 6 9 17 4 12" /></svg>
121+
<svg
122+
width="14"
123+
height="14"
124+
viewBox="0 0 24 24"
125+
fill="none"
126+
stroke="currentColor"
127+
stroke-width="3"
128+
>
129+
<polyline points="20 6 9 17 4 12" />
130+
</svg>
84131
</Show>
85132
</div>
86133
<span class="modal-stepper__label">{s.label}</span>
@@ -130,26 +177,29 @@ const SetupModal: Component<{ open: boolean; agentName: string; apiKey?: string
130177
>
131178
Back
132179
</button>
133-
<Show when={step() < totalSteps()} fallback={
134-
<button
135-
class="setup-modal__next"
136-
onClick={() => { props.onDone?.(); props.onClose(); }}
137-
>
138-
Done
139-
</button>
140-
}>
141-
<button
142-
class="setup-modal__next"
143-
onClick={() => setStep((s) => s + 1)}
144-
>
180+
<Show
181+
when={step() < totalSteps()}
182+
fallback={
183+
<button
184+
class="setup-modal__next"
185+
onClick={() => {
186+
props.onDone?.();
187+
props.onClose();
188+
}}
189+
>
190+
Done
191+
</button>
192+
}
193+
>
194+
<button class="setup-modal__next" onClick={() => setStep((s) => s + 1)}>
145195
Next
146196
</button>
147197
</Show>
148198
</div>
149199
</div>
150200
</div>
151201
</Show>
152-
)
153-
}
202+
);
203+
};
154204

155-
export default SetupModal
205+
export default SetupModal;

0 commit comments

Comments
 (0)