// Quill Keyboard — bring-your-own-key / privacy + FAQ
function FlowNode({ icon, title, sub, tile }) {
return (
{typeof icon === 'string' ? : icon}
);
}
function FlowArrow() {
return (
);
}
function Privacy() {
const points = [
['shield-check', 'No middleman', 'The keyboard talks straight to Anthropic. We don’t host the model or see a single token of your usage.'],
['user-x', 'No accounts', 'No sign-up, no profile. Nothing to breach because there’s nothing stored.'],
['chart-no-axes-column', 'No analytics SDKs', 'No trackers bundled in. We don’t log prompts, keystrokes, or what app you’re in.'],
];
return (
{/* the flow diagram */}
} title="Anthropic" sub="Claude responds" />
No server of ours in the middle. We’re precise about this on purpose.
{points.map(([ic, t, b]) => (
))}
);
}
function FaqItem({ q, a, open, onClick }) {
return (
);
}
function FAQ() {
const [open, setOpen] = useState(0);
const items = [
['What does it cost?', 'You pay Anthropic directly for what you use — usually pennies a day. There’s no subscription and no per-token markup from us. Quill Keyboard itself is the app you download; the usage is between you and Anthropic.'],
['What’s an API key, and how do I get one?', 'A key is a private token from Anthropic that lets the keyboard ask Claude to do things on your behalf. Create one at console.anthropic.com, then paste it into Settings once. We walk you through it on first launch.'],
['Why does the keyboard need Full Access?', 'Full Access is what lets the keyboard reach the network to send your prompt to Anthropic. Without it, iOS blocks the connection and the actions can’t run. It’s the only reason it’s needed.'],
['What don’t you collect?', 'No analytics SDKs, no accounts, no prompt logging. Your prompts go straight to Anthropic over HTTPS using your key — not through our servers.'],
['Which languages are supported?', 'English and Persian (فارسی) ship with full layouts — letters, numbers, symbols, emoji — and the same AI actions in both. Translation covers English, German, and Persian out of the box.'],
['Can I choose the model?', 'Yes. Switch between Claude Opus, Sonnet, and Haiku in Settings. The list pulls the latest available models from Anthropic directly, so new releases appear automatically.'],
];
return (
{items.map(([q, a], i) => (
setOpen(open === i ? -1 : i)} />
))}
);
}
Object.assign(window, { Privacy, FAQ, FlowNode });