From 6ae52de08029fa726f6ce27d40e058e8c802ba5e Mon Sep 17 00:00:00 2001 From: Lucy Aziz Date: Tue, 28 Apr 2026 17:06:33 -0400 Subject: [PATCH] Homepage redesign and Solutions overview: mental model, routing, visual polish - welcome.mdx: add 2-sentence mental model blurb above search bar, move Build with Turnkey section to top for immediate routing, add Other Solutions grid, feature card grid, branded whitepaper CTA tile - solutions/overview.mdx: new page with intro copy and CardGroups by product category (Embedded Wallets, Company Wallets, Key Management, Verifiable Cloud) - docs.json: add Solutions Overview page to nav - scripts/sync-solutions-order.js: new script to keep homepage use case lists in sync with docs.json nav ordering - .claude/settings.json: PostToolUse hook to auto-run sync script on docs.json edits Co-Authored-By: Claude Sonnet 4.6 --- .claude/settings.json | 16 +++ docs.json | 4 + scripts/sync-solutions-order.js | 65 +++++++++++ solutions/overview.mdx | 69 ++++++++++- welcome.mdx | 201 ++++++++++++++++++-------------- 5 files changed, 263 insertions(+), 92 deletions(-) create mode 100644 .claude/settings.json create mode 100644 scripts/sync-solutions-order.js diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 00000000..5f9894f4 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,16 @@ +{ + "hooks": { + "PostToolUse": [ + { + "matcher": "Write|Edit", + "hooks": [ + { + "type": "command", + "command": "jq -r '.tool_input.file_path // \"\"' | grep -q 'docs\\.json$' && cd /Users/lucy/docs && node scripts/sync-solutions-order.js 2>/dev/null || true", + "statusMessage": "Syncing homepage solution order..." + } + ] + } + ] + } +} diff --git a/docs.json b/docs.json index 3a976daf..0d44b2a0 100644 --- a/docs.json +++ b/docs.json @@ -55,6 +55,10 @@ { "tab": "Solutions", "groups": [ + { + "group": "Overview", + "pages": ["solutions/overview"] + }, { "group": "Embedded Wallets", "pages": [ diff --git a/scripts/sync-solutions-order.js b/scripts/sync-solutions-order.js new file mode 100644 index 00000000..db8853dc --- /dev/null +++ b/scripts/sync-solutions-order.js @@ -0,0 +1,65 @@ +#!/usr/bin/env node +// Keeps welcome.mdx solution ordering in sync with the Solutions tab in docs.json. +// Run manually: node scripts/sync-solutions-order.js +// Also runs automatically via Claude Code hook when docs.json is edited. + +const fs = require('fs'); +const path = require('path'); + +const ROOT = path.join(__dirname, '..'); +const DOCS_JSON = path.join(ROOT, 'docs.json'); +const WELCOME_MDX = path.join(ROOT, 'welcome.mdx'); + +// Display names for each page path as they appear on the homepage. +// Update this map if a page is renamed or a new use case is added. +const PAGE_NAMES = { + 'embedded-wallets/code-examples/embedded-consumer-wallet': 'Embedded Consumer Wallets', + 'products/embedded-business-wallets/overview': 'Embedded Business Wallets', + 'embedded-wallets/embedded-waas': 'Wallets-as-a-Service', + 'products/embedded-wallets/features/agentic-wallets': 'Agentic Wallets', + 'company-wallets/code-examples/signing-transactions': 'Signing Transactions', + 'company-wallets/code-examples/smart-contract-management': 'Smart Contract Management', + 'company-wallets/code-examples/payment-orchestration': 'Payment Orchestration', + 'company-wallets/use-cases/agentic-wallets': 'Agentic Wallets', +}; + +function getUseCases(docsJson, tabName, groupName) { + const tab = docsJson.navigation.tabs.find(t => t.tab === tabName); + if (!tab) return []; + const group = tab.groups.find(g => g.group === groupName); + if (!group) return []; + const useCasesGroup = group.pages.find(p => typeof p === 'object' && p.group === 'Use cases'); + if (!useCasesGroup) return []; + return useCasesGroup.pages.filter(p => typeof p === 'string' && PAGE_NAMES[p]); +} + +function buildList(pages) { + return pages.map((p, i) => ` ${i + 1}. [${PAGE_NAMES[p]}](/${p})`).join('\n'); +} + +function escapeRegex(str) { + return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +} + +function replaceSection(content, marker, newList) { + const start = `{/* sync-start: ${marker} */}`; + const end = `{/* sync-end: ${marker} */}`; + const re = new RegExp(`${escapeRegex(start)}[\\s\\S]*?${escapeRegex(end)}`); + const replacement = `${start}\n${newList}\n ${end}`; + if (!re.test(content)) { + console.warn(`Warning: marker "${marker}" not found in welcome.mdx — skipping.`); + return content; + } + return content.replace(re, replacement); +} + +const docsJson = JSON.parse(fs.readFileSync(DOCS_JSON, 'utf8')); +const embeddedPages = getUseCases(docsJson, 'Solutions', 'Embedded Wallets'); +const companyPages = getUseCases(docsJson, 'Solutions', 'Company Wallets'); + +let welcome = fs.readFileSync(WELCOME_MDX, 'utf8'); +welcome = replaceSection(welcome, 'embedded-wallets-use-cases', buildList(embeddedPages)); +welcome = replaceSection(welcome, 'company-wallets-use-cases', buildList(companyPages)); +fs.writeFileSync(WELCOME_MDX, welcome); + +console.log('✓ welcome.mdx solution ordering synced from docs.json'); diff --git a/solutions/overview.mdx b/solutions/overview.mdx index 34871e29..2c89114e 100644 --- a/solutions/overview.mdx +++ b/solutions/overview.mdx @@ -1,8 +1,69 @@ --- -title: "ROUTER PAGE" -description: "PLACEHOLDER LANDING PAGE" +title: "Introducing Solutions" +description: "Structured starting points for building onchain with Turnkey" --- -# Solutions +To help you ship quickly, we've packaged common patterns like wallet provisioning, policy enforcement, and transaction flows into easy integration paths called solutions. Each solution is built on Turnkey's underlying primitives, so you're never locked into a rigid workflow and can always go deeper when you need more flexibility. -> **This is a placeholder landing page.** Content will be written in a future phase. +Whether you're building consumer apps, business tooling, or AI-powered systems, there's a solution designed for your use case. + +--- + +## Embedded Wallets + +Wallet experiences built directly into your product. Users authenticate with email, passkeys, or social login — you control the UX. + + + + Non-custodial wallets with plug-and-play UI for consumer onboarding. + + + Multi-user access with policy controls and automated payment flows. + + + Transaction signing and smart contract interaction for AI agents. + + + White-labeled wallets with isolated user environments for your own wallet product. + + + +--- + +## Company Wallets + +Wallets your organization operates for onchain automation — high-volume signing with programmable controls. + + + + Automated stablecoin movement flows at scale. + + + Production infrastructure for governing smart contract execution. + + + +--- + +## Key Management + +Enterprise-grade security for your most sensitive keys — hardware-backed with programmable access controls. + + + + Secure key generation and policy-controlled access for encrypted data. + + + Non-custodial wallet recovery with instant policy enforcement. + + + +--- + +## Turnkey Verifiable Cloud + +Run code inside hardware-isolated enclaves with verifiable computation guarantees. + + + Purpose-built for applications where trust and auditability are non-negotiable. + diff --git a/welcome.mdx b/welcome.mdx index 28872794..ca79622d 100644 --- a/welcome.mdx +++ b/welcome.mdx @@ -4,14 +4,16 @@ description: "Secure, flexible, and scalable wallet infrastructure" mode: "custom" --- -
+
+ +
-

Turnkey: Secure, flexible, and scalable wallet infrastructure

+

Secure, flexible, and scalable wallet infrastructure

-

- Turnkey provides the infrastructure to create and manage wallets, sign transactions, and secure cryptographic keys — where every key operation is hardware-isolated, policy-governed, and cryptographically auditable. Build on a foundation where security isn't a tradeoff. +

+ Turnkey is infrastructure for generating wallets and keys, signing transactions, and controlling who can use them, when, and how. Private keys are secured in hardware-isolated enclaves and never exposed — not even to Turnkey.

- Search the docs... + Search Turnkey's docs... ⌘K
-
- -

Explore Turnkey's products

+

Build with Turnkey

+ +
+ +
+
+
+
Solutions
+
Pre-built patterns for common use cases
+
+
+
+
SDK
+
TypeScript, React, React Native, and more
+
+
+
+
API
+
REST API for complete control over every operation
+
+
+
+ +
+

+ Build at whichever level best meets your needs. Start with Solutions for common patterns, go deeper with our SDKs for more control, or reach all the way down to the API for complete flexibility. The full stack is always available. +

+ +
- +
- - **Wallet experiences built into your product** - - Build wallets directly into your app — for consumers, business accounts, or as the foundation for your own wallet product. Users authenticate with email, passkeys, or social login. You control the experience. - - {/* - ⚠️ INTERNAL NOTE — NOT FOR PUBLICATION - Are embedded wallets always non-custodial? Previous description said "non-custodial" - but the product supports non-custodial and hybrid custody models. - Needs stakeholder confirmation before finalizing this description. - */} - +
- - **Wallets your organization operates for onchain automation** +

Explore our solutions

- Run high-volume signing workflows with programmable controls — spending limits, multi-party approvals, role-based access, and automated policy execution. Purpose-built for teams that need to operate onchain at scale. -
+ - - **Enterprise-grade security for your most sensitive keys** + + Build wallets directly into your app. Users authenticate with email, passkeys, or social login. You control the experience. - Hardware-backed key storage with programmable access controls, quorum approvals, and tamper-evident audit logs. The security model your most critical infrastructure deserves. + {/* sync-start: embedded-wallets-use-cases */} + 1. [Embedded Consumer Wallets](/embedded-wallets/code-examples/embedded-consumer-wallet) + 2. [Embedded Business Wallets](/products/embedded-business-wallets/overview) + 3. [Wallets-as-a-Service](/embedded-wallets/embedded-waas) + 4. [Agentic Wallets](/products/embedded-wallets/features/agentic-wallets) + {/* sync-end: embedded-wallets-use-cases */} - - **Run code inside hardware-isolated enclaves** `Beta` + + Automate your onchain operations with wallets, keys and programmable controls purpose built for scale. - Execute workloads with verifiable computation guarantees — built for applications where trust and auditability are non-negotiable. + {/* sync-start: company-wallets-use-cases */} + 1. [Signing Transactions](/company-wallets/code-examples/signing-transactions) + 2. [Smart Contract Management](/company-wallets/code-examples/smart-contract-management) + 3. [Payment Orchestration](/company-wallets/code-examples/payment-orchestration) + 4. [Agentic Wallets](/company-wallets/use-cases/agentic-wallets) + {/* sync-end: company-wallets-use-cases */} -
- -

How Turnkey works

- - - Understand the core architecture behind Turnkey's key infrastructure. - - -
- -

Start building

- - - - - Create your organization and generate an API keypair — the two steps every Turnkey integration starts with. - - - - Jump into code with a step-by-step guide for building embedded wallets. - - - - Get started running workloads inside Turnkey's secure enclave infrastructure. - + +
+ +

Explore our features

+ + + + + + + + + + + + + + + + + + +
+
Read our whitepaper for an in-depth look at Turnkey's security model and verifiable key management infrastructure.
+ + Read the Turnkey Whitepaper → + +
+