From b836cf240810eda6e13f90859c2a14d00d729651 Mon Sep 17 00:00:00 2001 From: CahidArda Date: Fri, 3 Jul 2026 12:52:55 +0300 Subject: [PATCH 01/28] docs: rework Get Started and Redis landing with shared catalog, console showcase, and migrate sections --- img/icons/box.svg | 11 ++++ img/icons/qstash.svg | 4 ++ img/icons/redis.svg | 7 +++ img/icons/search.svg | 11 ++++ img/icons/vector.svg | 8 +++ img/icons/workflow.svg | 4 ++ introduction.mdx | 84 ++++++++++++++++++++++---- llms-full.txt | 110 +++++++++++++++++++++++++++++++---- llms.txt | 2 +- redis/overall/getstarted.mdx | 39 +++++++++++++ snippets/catalog.jsx | 96 ++++++++++++++++++++++++++++++ snippets/migrate.jsx | 28 +++++++++ 12 files changed, 381 insertions(+), 23 deletions(-) create mode 100644 img/icons/box.svg create mode 100644 img/icons/qstash.svg create mode 100644 img/icons/redis.svg create mode 100644 img/icons/search.svg create mode 100644 img/icons/vector.svg create mode 100644 img/icons/workflow.svg create mode 100644 snippets/catalog.jsx create mode 100644 snippets/migrate.jsx diff --git a/img/icons/box.svg b/img/icons/box.svg new file mode 100644 index 00000000..3bffb3c9 --- /dev/null +++ b/img/icons/box.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/img/icons/qstash.svg b/img/icons/qstash.svg new file mode 100644 index 00000000..7dc08adf --- /dev/null +++ b/img/icons/qstash.svg @@ -0,0 +1,4 @@ + + + + diff --git a/img/icons/redis.svg b/img/icons/redis.svg new file mode 100644 index 00000000..04757d34 --- /dev/null +++ b/img/icons/redis.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/img/icons/search.svg b/img/icons/search.svg new file mode 100644 index 00000000..c5849e3d --- /dev/null +++ b/img/icons/search.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/img/icons/vector.svg b/img/icons/vector.svg new file mode 100644 index 00000000..339ece55 --- /dev/null +++ b/img/icons/vector.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/img/icons/workflow.svg b/img/icons/workflow.svg new file mode 100644 index 00000000..657ee0bd --- /dev/null +++ b/img/icons/workflow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/introduction.mdx b/introduction.mdx index 41dc6bd4..053e4f27 100644 --- a/introduction.mdx +++ b/introduction.mdx @@ -1,25 +1,87 @@ --- title: Get Started +description: Serverless data and messaging for developers — Redis, Vector, QStash, Workflow, Search, and Box, with SDKs, integrations, and a full-featured console. --- - - - Create a Redis Database within seconds +import { Catalog } from "/snippets/catalog.jsx"; +import { Migrate } from "/snippets/migrate.jsx"; + +Upstash gives you serverless data and messaging primitives that scale to zero and +charge per request. Pick a product to create your first database or endpoint in +seconds, or explore the SDKs, integrations, and demos below. + +## Products + + + + Serverless Redis with per-request pricing. + + + Vector database for AI and LLM apps. - - Create a Vector Database for AI & LLMs + + Message queue and scheduler over HTTP. - - Publish your first message + + Durable serverless functions. - - Write durable serverless functions + + Full-text and semantic search. - - Run AI agents and code in secure sandboxes + + Secure sandboxes for AI agents and code. +## SDKs + +Official clients for every runtime. + + + +## Integrations + +Connect Upstash to the tools you already use. + + + +## Featured demos + + + +## Do more from the console + +Manage your data, inspect logs, and watch metrics without leaving the dashboard. + + + + + Upstash Redis metrics in the console + + + + + Rate limit analytics dashboard + + + + + QStash message logs in the console + + + + + Workflow run view in the console + + + + +## Migrate to Upstash + +Moving from another provider? Migration guides are on the way. + + + ## Concepts diff --git a/llms-full.txt b/llms-full.txt index 7b63a2f1..31cdf7d9 100644 --- a/llms-full.txt +++ b/llms-full.txt @@ -8485,24 +8485,77 @@ Secondary: #00E9A3 (Cyan Green) # Get Started Source: https://upstash.com/docs/introduction - - - Create a Redis Database within seconds +import { Catalog } from "/snippets/catalog.jsx"; +import { Migrate } from "/snippets/migrate.jsx"; + +Upstash gives you serverless data and messaging primitives that scale to zero and +charge per request. Pick a product to create your first database or endpoint in +seconds, or explore the SDKs, integrations, and demos below. + +## Products + + + + Serverless Redis with per-request pricing. + + + Vector database for AI and LLM apps. - - Create a Vector Database for AI & LLMs + + Message queue and scheduler over HTTP. - - Publish your first message + + Durable serverless functions. - - Write durable serverless functions + + Full-text and semantic search. - - Run AI agents and code in secure sandboxes + + Secure sandboxes for AI agents and code. +## SDKs + +Official clients for every runtime. + + + +## Integrations + +Connect Upstash to the tools you already use. + + + +## Featured demos + + + +## Do more from the console + +Manage your data, inspect logs, and watch metrics without leaving the dashboard. + + + + Upstash Redis metrics in the console + + + Rate limit analytics dashboard + + + QStash message logs in the console + + + Workflow run view in the console + + + +## Migrate to Upstash + +Moving from another provider? Migration guides are on the way. + + + ## Concepts @@ -20780,6 +20833,9 @@ A Business Associate Agreement (BAA) and HIPAA compliance enablement is availabl # Getting Started Source: https://upstash.com/docs/redis/overall/getstarted +import { Catalog } from "/snippets/catalog.jsx"; +import { Migrate } from "/snippets/migrate.jsx"; + Upstash Redis is a **highly available, infinitely scalable** Redis-compatible database: * 99.99% uptime guarantee with auto-scaling ([Prod Pack](/docs/redis/overall/enterprise#prod-pack-features)) @@ -20857,6 +20913,38 @@ Manage Upstash Redis databases from Claude and other AI tools by using our [MCP * [REST API](/docs/redis/features/restapi): connect from edge and serverless runtimes where TCP is restricted. * [Pricing & Billing](/docs/redis/overall/billing): free tier, Pay-As-You-Go, and Fixed plan limits, plus how billing works. +## SDKs + + + +## Integrations + + + +## Do more from the console + +Browse your data, watch metrics, and inspect rate limits without leaving the dashboard. + + + + + Browse, search, and edit your keys directly in the console. Screenshot coming soon. + + + + Rate limit analytics dashboard + + + Upstash Redis metrics in the console + + + +## Migrate to Upstash + +Moving from another Redis provider? Migration guides are on the way. + + + # llms.txt Source: https://upstash.com/docs/redis/overall/llms-txt diff --git a/llms.txt b/llms.txt index 0ecc69b1..20988630 100644 --- a/llms.txt +++ b/llms.txt @@ -137,7 +137,7 @@ - [upstash_redis_database](https://upstash.com/docs/devops/terraform/resources/upstash_redis_database.md): Create and manage Upstash Redis databases. - [upstash_team](https://upstash.com/docs/devops/terraform/resources/upstash_team.md): Create and manage teams on Upstash. - [Bg color codes](https://upstash.com/docs/img/bg-color-codes.md) -- [Get Started](https://upstash.com/docs/introduction.md) +- [Get Started](https://upstash.com/docs/introduction.md): Serverless data and messaging for developers — Redis, Vector, QStash, Workflow, Search, and Box, with SDKs, integrations, and a full-featured console. - [Bulk Delete DLQ messages](https://upstash.com/docs/qstash/api-reference/dlq/bulk-delete-dlq-messages.md): Delete multiple messages from the DLQ - [Bulk Retry DLQ messages](https://upstash.com/docs/qstash/api-reference/dlq/bulk-retry-dlq-messages.md): Retry delivery of multiple messages from the DLQ - [Delete a DLQ message](https://upstash.com/docs/qstash/api-reference/dlq/delete-a-dlq-message.md): Manually remove a message from the DLQ diff --git a/redis/overall/getstarted.mdx b/redis/overall/getstarted.mdx index 23e98d02..df727c37 100755 --- a/redis/overall/getstarted.mdx +++ b/redis/overall/getstarted.mdx @@ -3,6 +3,9 @@ title: Getting Started description: Create an Upstash Redis database in seconds --- +import { Catalog } from "/snippets/catalog.jsx"; +import { Migrate } from "/snippets/migrate.jsx"; + Upstash Redis is a **highly available, infinitely scalable** Redis-compatible database: - 99.99% uptime guarantee with auto-scaling ([Prod Pack](/redis/overall/enterprise#prod-pack-features)) @@ -85,3 +88,39 @@ Manage Upstash Redis databases from Claude and other AI tools by using our [MCP - [Upstash Redis Search](/redis/search/introduction): full-text search built into Upstash Redis. - [REST API](/redis/features/restapi): connect from edge and serverless runtimes where TCP is restricted. - [Pricing & Billing](/redis/overall/billing): free tier, Pay-As-You-Go, and Fixed plan limits, plus how billing works. + +## SDKs + + + +## Integrations + + + +## Do more from the console + +Browse your data, watch metrics, and inspect rate limits without leaving the dashboard. + + + + + Browse, search, and edit your keys directly in the console. Screenshot coming soon. + + + + + Rate limit analytics dashboard + + + + + Upstash Redis metrics in the console + + + + +## Migrate to Upstash + +Moving from another Redis provider? Migration guides are on the way. + + diff --git a/snippets/catalog.jsx b/snippets/catalog.jsx new file mode 100644 index 00000000..e1601b02 --- /dev/null +++ b/snippets/catalog.jsx @@ -0,0 +1,96 @@ +// Single source of truth for SDKs, integrations, and demos across the docs. +// +// Used on the main Get Started page (all products, with a product icon per card) +// and on each product landing (filtered via the `product` prop, icon hidden). +// +// NOTE (Mintlify constraint, validated): an exported component CANNOT reference a +// sibling module-level `export const`. Mintlify compiles each export in isolation, +// so the data array MUST live inside the component's own function body. +// `.map`, `Card`/`CardGroup`, and cross-file imports all work fine. +// +// Fields: { title, description, href, product, type, featured? } +// product: "redis" | "vector" | "qstash" | "workflow" | "search" | "box" +// (or an array for multi-product entries) +// type: "sdk" | "integration" | "demo" + +export const Catalog = ({ product, type, featured, cols = 2 }) => { + const catalog = [ + // ---------- SDKs ---------- + { title: "@upstash/redis", description: "HTTP-based Redis client for serverless and edge.", href: "/redis/sdks/ts/overview", product: "redis", type: "sdk", featured: true }, + { title: "upstash-redis (Python)", description: "Serverless Redis client for Python.", href: "/redis/sdks/py/overview", product: "redis", type: "sdk" }, + { title: "@upstash/ratelimit", description: "Rate limiting for serverless, built on Redis.", href: "/redis/sdks/ratelimit-ts/overview", product: "redis", type: "sdk", featured: true }, + { title: "ratelimit (Python)", description: "Rate limiting SDK for Python.", href: "/redis/sdks/ratelimit-py/overview", product: "redis", type: "sdk" }, + { title: "@upstash/vector", description: "Vector database client for AI and LLM apps.", href: "/vector/sdks/ts/getting-started", product: "vector", type: "sdk", featured: true }, + { title: "upstash-vector (Python)", description: "Vector database client for Python.", href: "/vector/sdks/py/gettingstarted", product: "vector", type: "sdk" }, + { title: "@upstash/qstash", description: "Publish messages and schedule jobs over HTTP.", href: "/qstash/sdks/ts/overview", product: "qstash", type: "sdk", featured: true }, + { title: "qstash-py", description: "QStash messaging and scheduling for Python.", href: "/qstash/sdks/py/overview", product: "qstash", type: "sdk" }, + { title: "@upstash/workflow", description: "Durable serverless functions and workflows.", href: "/workflow/getstarted", product: "workflow", type: "sdk", featured: true }, + { title: "@upstash/search", description: "Full-text and semantic search client.", href: "/search/sdks/ts/getting-started", product: "search", type: "sdk", featured: true }, + + // ---------- Integrations ---------- + { title: "BullMQ", description: "Message queue built on Redis.", href: "/redis/integrations/bullmq", product: "redis", type: "integration", featured: true }, + { title: "Drizzle", description: "Cache Drizzle ORM queries with Upstash Redis.", href: "/redis/integrations/drizzle", product: "redis", type: "integration", featured: true }, + { title: "Celery", description: "Use Upstash Redis as a Celery broker.", href: "/redis/integrations/celery", product: "redis", type: "integration" }, + { title: "Sidekiq", description: "Background jobs for Ruby on Upstash Redis.", href: "/redis/integrations/sidekiq", product: "redis", type: "integration" }, + { title: "MCP Server", description: "Manage Upstash Redis from AI agents via MCP.", href: "/redis/integrations/mcp", product: "redis", type: "integration" }, + { title: "n8n (Redis)", description: "Automate workflows with Redis nodes in n8n.", href: "/redis/integrations/n8n", product: "redis", type: "integration" }, + { title: "Prometheus (Redis)", description: "Scrape Upstash Redis metrics into Prometheus.", href: "/redis/integrations/prometheus", product: "redis", type: "integration" }, + { title: "LangChain", description: "Vector store integration for LLM apps.", href: "/vector/integrations/langchain", product: "vector", type: "integration", featured: true }, + { title: "Vercel AI SDK", description: "Back the AI SDK with Upstash Vector.", href: "/vector/integrations/ai-sdk", product: "vector", type: "integration", featured: true }, + { title: "LlamaIndex", description: "Use Upstash Vector as a LlamaIndex store.", href: "/vector/integrations/llamaindex", product: "vector", type: "integration" }, + { title: "Flowise", description: "Build LLM flows on Upstash Vector.", href: "/vector/integrations/flowise", product: "vector", type: "integration" }, + { title: "Langflow", description: "Visual LLM apps backed by Upstash Vector.", href: "/vector/integrations/langflow", product: "vector", type: "integration" }, + { title: "LlamaParse", description: "Parse and index documents into Upstash Vector.", href: "/vector/integrations/llamaparse", product: "vector", type: "integration" }, + { title: "Resend", description: "Send emails from QStash workflows.", href: "/qstash/integrations/resend", product: "qstash", type: "integration", featured: true }, + { title: "Anthropic", description: "Call Claude reliably through QStash.", href: "/qstash/integrations/anthropic", product: "qstash", type: "integration" }, + { title: "LLM APIs", description: "Queue and retry LLM calls with QStash.", href: "/qstash/integrations/llm", product: "qstash", type: "integration" }, + { title: "Datadog", description: "Monitor QStash with Datadog.", href: "/qstash/integrations/datadog", product: "qstash", type: "integration" }, + { title: "Pipedream", description: "Trigger Pipedream workflows from QStash.", href: "/qstash/integrations/pipedream", product: "qstash", type: "integration" }, + { title: "n8n (QStash)", description: "Publish QStash messages from n8n.", href: "/qstash/integrations/n8n", product: "qstash", type: "integration" }, + + // ---------- Demos ---------- + { title: "E-commerce Order Fulfillment", description: "Durable order processing with Workflow.", href: "/workflow/examples/eCommerceOrderFulfillment", product: "workflow", type: "demo", featured: true }, + { title: "Image Processing", description: "Fan-out image jobs with Workflow.", href: "/workflow/examples/imageProcessing", product: "workflow", type: "demo", featured: true }, + { title: "Customer Onboarding", description: "Multi-step onboarding flow with delays.", href: "/workflow/examples/customerOnboarding", product: "workflow", type: "demo" }, + { title: "Payment Retry", description: "Retry failed payments with backoff.", href: "/workflow/examples/paymentRetry", product: "workflow", type: "demo" }, + { title: "Wait for Event", description: "Pause a workflow until an external event.", href: "/workflow/examples/waitForEvent", product: "workflow", type: "demo" }, + { title: "Auth Webhook", description: "Handle auth webhooks durably.", href: "/workflow/examples/authWebhook", product: "workflow", type: "demo" }, + ]; + + const matchesProduct = (entry) => + !product || + (Array.isArray(entry.product) + ? entry.product.includes(product) + : entry.product === product); + + const items = catalog.filter( + (entry) => + matchesProduct(entry) && + (!type || entry.type === type) && + (!featured || entry.featured), + ); + + // Show the product icon only on the main (cross-product) page; on a product + // landing the product is implicit, so the icon would be redundant. + const showIcon = !product; + + return ( + + {items.map((entry) => { + const prod = Array.isArray(entry.product) + ? entry.product[0] + : entry.product; + return ( + + {entry.description} + + ); + })} + + ); +}; diff --git a/snippets/migrate.jsx b/snippets/migrate.jsx new file mode 100644 index 00000000..70efcc5d --- /dev/null +++ b/snippets/migrate.jsx @@ -0,0 +1,28 @@ +// "Migrate to Upstash" stub. Guides are added later — for now this renders the +// grid of source platforms with a "coming soon" state. Cards are intentionally +// link-less until the destination pages exist. +// +// Same Mintlify constraint as catalog.jsx: data lives inside the component. + +export const Migrate = ({ product, cols = 3 }) => { + const sources = [ + { name: "Redis Cloud", product: "redis" }, + { name: "AWS ElastiCache", product: "redis" }, + { name: "Amazon DynamoDB", product: "redis" }, + { name: "GCP Memorystore", product: "redis" }, + { name: "Azure Cache for Redis", product: "redis" }, + { name: "Self-hosted Redis", product: "redis" }, + ]; + + const items = sources.filter((s) => !product || s.product === product); + + return ( + + {items.map((s) => ( + + Guide coming soon + + ))} + + ); +}; From 255f71dd4b79367862e65a1d80d73006923da4c7 Mon Sep 17 00:00:00 2001 From: CahidArda Date: Fri, 3 Jul 2026 13:19:42 +0300 Subject: [PATCH 02/28] docs: convert Get Started to full custom landing page with custom-styled components --- introduction.mdx | 119 ++++----------------- llms-full.txt | 110 ++++--------------- snippets/catalog.jsx | 38 +++---- snippets/landing.jsx | 91 ++++++++++++++++ snippets/migrate.jsx | 20 ++-- style.css | 248 +++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 411 insertions(+), 215 deletions(-) create mode 100644 snippets/landing.jsx diff --git a/introduction.mdx b/introduction.mdx index 053e4f27..134c54fc 100644 --- a/introduction.mdx +++ b/introduction.mdx @@ -1,114 +1,35 @@ --- title: Get Started description: Serverless data and messaging for developers — Redis, Vector, QStash, Workflow, Search, and Box, with SDKs, integrations, and a full-featured console. +mode: custom --- +import { Hero, SectionHead, ProductGrid, Console, Community } from "/snippets/landing.jsx"; import { Catalog } from "/snippets/catalog.jsx"; import { Migrate } from "/snippets/migrate.jsx"; -Upstash gives you serverless data and messaging primitives that scale to zero and -charge per request. Pick a product to create your first database or endpoint in -seconds, or explore the SDKs, integrations, and demos below. + -## Products +
+
+ + - - - Serverless Redis with per-request pricing. - - - Vector database for AI and LLM apps. - - - Message queue and scheduler over HTTP. - - - Durable serverless functions. - - - Full-text and semantic search. - - - Secure sandboxes for AI agents and code. - - + + -## SDKs + + -Official clients for every runtime. + + - + + -## Integrations + + -Connect Upstash to the tools you already use. - - - -## Featured demos - - - -## Do more from the console - -Manage your data, inspect logs, and watch metrics without leaving the dashboard. - - - - - Upstash Redis metrics in the console - - - - - Rate limit analytics dashboard - - - - - QStash message logs in the console - - - - - Workflow run view in the console - - - - -## Migrate to Upstash - -Moving from another provider? Migration guides are on the way. - - - -## Concepts - - - - Upstash is serverless. You don't need to provision any infrastructure. Just - create a database and start using it. - - - Price scales to zero. You don't pay for idle or unused resources. You pay - only for what you use. - - - Upstash Redis replicates your data for the best latency all over the world. - - - Upstash REST APIs enable access from all types of runtimes. - - - -## Get In touch - - - - Follow us on X for the latest news and updates. - - - Join our Discord Community and ask your questions to the team and other - developers. - - + + +
diff --git a/llms-full.txt b/llms-full.txt index 31cdf7d9..86c9e3ca 100644 --- a/llms-full.txt +++ b/llms-full.txt @@ -8485,107 +8485,35 @@ Secondary: #00E9A3 (Cyan Green) # Get Started Source: https://upstash.com/docs/introduction +import { Hero, SectionHead, ProductGrid, Console, Community } from "/snippets/landing.jsx"; import { Catalog } from "/snippets/catalog.jsx"; import { Migrate } from "/snippets/migrate.jsx"; -Upstash gives you serverless data and messaging primitives that scale to zero and -charge per request. Pick a product to create your first database or endpoint in -seconds, or explore the SDKs, integrations, and demos below. + -## Products +
+
+ + - - - Serverless Redis with per-request pricing. - - - Vector database for AI and LLM apps. - - - Message queue and scheduler over HTTP. - - - Durable serverless functions. - - - Full-text and semantic search. - - - Secure sandboxes for AI agents and code. - - - -## SDKs - -Official clients for every runtime. - - - -## Integrations - -Connect Upstash to the tools you already use. - - - -## Featured demos - - - -## Do more from the console - -Manage your data, inspect logs, and watch metrics without leaving the dashboard. - - - - Upstash Redis metrics in the console - - - Rate limit analytics dashboard - - - QStash message logs in the console - - - Workflow run view in the console - - - -## Migrate to Upstash + + -Moving from another provider? Migration guides are on the way. + + - + + -## Concepts + + - - - Upstash is serverless. You don't need to provision any infrastructure. Just - create a database and start using it. - - - Price scales to zero. You don't pay for idle or unused resources. You pay - only for what you use. - - - Upstash Redis replicates your data for the best latency all over the world. - - - Upstash REST APIs enable access from all types of runtimes. - - + + -## Get In touch - - - - Follow us on X for the latest news and updates. - - - Join our Discord Community and ask your questions to the team and other - developers. - - + + +
# Bulk Delete DLQ messages Source: https://upstash.com/docs/qstash/api-reference/dlq/bulk-delete-dlq-messages diff --git a/snippets/catalog.jsx b/snippets/catalog.jsx index e1601b02..23f32d44 100644 --- a/snippets/catalog.jsx +++ b/snippets/catalog.jsx @@ -1,19 +1,19 @@ // Single source of truth for SDKs, integrations, and demos across the docs. // -// Used on the main Get Started page (all products, with a product icon per card) -// and on each product landing (filtered via the `product` prop, icon hidden). +// Renders custom-styled cards (see .u-card in style.css) so it looks consistent +// on both the full-custom landing page and normal product pages. Used on the main +// Get Started page (all products, with a product icon per card) and on each product +// landing (filtered via `product`, icon hidden as redundant). // // NOTE (Mintlify constraint, validated): an exported component CANNOT reference a // sibling module-level `export const`. Mintlify compiles each export in isolation, // so the data array MUST live inside the component's own function body. -// `.map`, `Card`/`CardGroup`, and cross-file imports all work fine. // // Fields: { title, description, href, product, type, featured? } -// product: "redis" | "vector" | "qstash" | "workflow" | "search" | "box" -// (or an array for multi-product entries) +// product: "redis" | "vector" | "qstash" | "workflow" | "search" | "box" (or an array) // type: "sdk" | "integration" | "demo" -export const Catalog = ({ product, type, featured, cols = 2 }) => { +export const Catalog = ({ product, type, featured, cols = 3 }) => { const catalog = [ // ---------- SDKs ---------- { title: "@upstash/redis", description: "HTTP-based Redis client for serverless and edge.", href: "/redis/sdks/ts/overview", product: "redis", type: "sdk", featured: true }, @@ -70,27 +70,29 @@ export const Catalog = ({ product, type, featured, cols = 2 }) => { (!featured || entry.featured), ); - // Show the product icon only on the main (cross-product) page; on a product - // landing the product is implicit, so the icon would be redundant. + // Product icon only on the main (cross-product) page; on a product landing the + // product is implicit, so it would be redundant noise. const showIcon = !product; + const gridClass = "u-grid " + (cols >= 3 ? "u-grid--3" : "u-grid--2"); return ( - +
{items.map((entry) => { const prod = Array.isArray(entry.product) ? entry.product[0] : entry.product; return ( - - {entry.description} - + + {showIcon ? ( + + ) : null} +
+
{entry.title}
+
{entry.description}
+
+
); })} - +
); }; diff --git a/snippets/landing.jsx b/snippets/landing.jsx new file mode 100644 index 00000000..f9580ece --- /dev/null +++ b/snippets/landing.jsx @@ -0,0 +1,91 @@ +// Full-custom landing components (used by introduction.mdx with `mode: custom`). +// Styling lives in style.css (.u-* classes). Each component keeps its own data +// locally (Mintlify compiles exports in isolation — no cross-references). + +export const Hero = () => ( +
+

Build with Upstash

+

+ Serverless data and messaging — Redis, Vector, QStash, Workflow, Search, + and Box. Scale to zero, pay per request. +

+ +
+); + +export const SectionHead = ({ eyebrow, title, sub }) => ( +
+ {eyebrow ?
{eyebrow}
: null} +

{title}

+ {sub ?

{sub}

: null} +
+); + +export const ProductGrid = () => { + const products = [ + { name: "Redis", desc: "Serverless Redis with per-request pricing.", href: "/redis/overall/getstarted", icon: "redis" }, + { name: "Vector", desc: "Vector database for AI and LLM apps.", href: "/vector/overall/getstarted", icon: "vector" }, + { name: "QStash", desc: "Message queue and scheduler over HTTP.", href: "/qstash/overall/getstarted", icon: "qstash" }, + { name: "Workflow", desc: "Durable serverless functions.", href: "/workflow/getstarted", icon: "workflow" }, + { name: "Search", desc: "Full-text and semantic search.", href: "/search/overall/getstarted", icon: "search" }, + { name: "Box", desc: "Secure sandboxes for AI agents and code.", href: "/box/overall/quickstart", icon: "box" }, + ]; + return ( +
+ {products.map((p) => ( + + +
+
{p.name}
+
{p.desc}
+
+
+ ))} +
+ ); +}; + +export const Console = () => { + const shots = [ + { src: "/img/getting_started/charts.png", cap: "Redis — real-time metrics" }, + { src: "/img/ratelimit/dashboard.png", cap: "Ratelimit — analytics" }, + { src: "/img/qstash/log.png", cap: "QStash — message logs" }, + { src: "/img/qstash-workflow/run-view.png", cap: "Workflow — run inspector" }, + ]; + return ( +
+ {shots.map((s) => ( +
+ {s.cap} +
{s.cap}
+
+ ))} +
+ ); +}; + +export const Community = () => ( + +); diff --git a/snippets/migrate.jsx b/snippets/migrate.jsx index 70efcc5d..151148ab 100644 --- a/snippets/migrate.jsx +++ b/snippets/migrate.jsx @@ -1,8 +1,9 @@ // "Migrate to Upstash" stub. Guides are added later — for now this renders the -// grid of source platforms with a "coming soon" state. Cards are intentionally +// grid of source platforms in a "coming soon" state. Cards are intentionally // link-less until the destination pages exist. // -// Same Mintlify constraint as catalog.jsx: data lives inside the component. +// Custom-styled cards (see .u-card in style.css). Same Mintlify constraint as +// catalog.jsx: the data lives inside the component. export const Migrate = ({ product, cols = 3 }) => { const sources = [ @@ -15,14 +16,19 @@ export const Migrate = ({ product, cols = 3 }) => { ]; const items = sources.filter((s) => !product || s.product === product); + const gridClass = "u-grid " + (cols >= 3 ? "u-grid--3" : "u-grid--2"); return ( - +
{items.map((s) => ( - - Guide coming soon - +
+
+
+
{s.name}
+
Guide coming soon
+
+
))} - +
); }; diff --git a/style.css b/style.css index 8f3f7fd8..7e516536 100644 --- a/style.css +++ b/style.css @@ -13,3 +13,251 @@ margin: 1rem auto; } } + +/* ============================================================ + Custom landing page (mode: custom) + Upstash green: #10B981 / #34D399. Class-based dark mode (.dark). + ============================================================ */ + +.u-wrap { + max-width: 76rem; + margin: 0 auto; + padding: 0 1.5rem 6rem; +} + +/* ---- Hero ---- */ +.u-hero { + position: relative; + text-align: center; + padding: 5rem 1rem 3.5rem; + overflow: hidden; +} +.u-hero::before { + content: ""; + position: absolute; + top: -14rem; + left: 50%; + width: 52rem; + height: 32rem; + transform: translateX(-50%); + background: radial-gradient( + closest-side, + rgba(52, 211, 153, 0.22), + rgba(52, 211, 153, 0) + ); + pointer-events: none; + z-index: 0; +} +.u-hero > * { + position: relative; + z-index: 1; +} +.u-hero h1 { + font-size: clamp(2.25rem, 5vw, 3.5rem); + line-height: 1.05; + font-weight: 700; + letter-spacing: -0.02em; + margin: 0; +} +.u-hero p { + margin: 1.1rem auto 0; + max-width: 40rem; + font-size: 1.125rem; + color: #52606d; +} +.dark .u-hero p { + color: #9aa5b1; +} + +.u-cta { + display: flex; + gap: 0.75rem; + justify-content: center; + flex-wrap: wrap; + margin-top: 2rem; +} +.u-btn { + display: inline-flex; + align-items: center; + gap: 0.5rem; + padding: 0.65rem 1.25rem; + border-radius: 0.65rem; + font-weight: 600; + font-size: 0.95rem; + text-decoration: none; + transition: + transform 0.15s ease, + background 0.15s ease, + border-color 0.15s ease; +} +.u-btn--primary { + background: #10b981; + color: #05231a; +} +.u-btn--primary:hover { + background: #34d399; + transform: translateY(-1px); +} +.u-btn--ghost { + border: 1px solid rgba(0, 0, 0, 0.12); + color: inherit; +} +.dark .u-btn--ghost { + border-color: rgba(255, 255, 255, 0.16); +} +.u-btn--ghost:hover { + border-color: #10b981; + transform: translateY(-1px); +} + +/* ---- Section headings ---- */ +.u-section { + margin-top: 4rem; +} +.u-eyebrow { + font-size: 0.75rem; + font-weight: 700; + letter-spacing: 0.08em; + text-transform: uppercase; + color: #059669; +} +.dark .u-eyebrow { + color: #34d399; +} +.u-section h2 { + font-size: 1.6rem; + font-weight: 700; + letter-spacing: -0.01em; + margin: 0.35rem 0 0; +} +.u-section p.u-sub { + margin: 0.5rem 0 0; + color: #52606d; + font-size: 1rem; +} +.dark .u-section p.u-sub { + color: #9aa5b1; +} + +/* ---- Grids ---- */ +.u-grid { + display: grid; + gap: 1rem; + margin-top: 1.5rem; + grid-template-columns: repeat(1, minmax(0, 1fr)); +} +@media (min-width: 640px) { + .u-grid--2, + .u-grid--3 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } +} +@media (min-width: 900px) { + .u-grid--3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } +} + +/* ---- Cards ---- */ +.u-card { + display: flex; + gap: 0.9rem; + align-items: flex-start; + padding: 1.1rem; + border-radius: 0.9rem; + border: 1px solid rgba(0, 0, 0, 0.08); + background: #fff; + text-decoration: none; + color: inherit; + transition: + border-color 0.15s ease, + transform 0.15s ease, + box-shadow 0.15s ease; +} +.dark .u-card { + border-color: rgba(255, 255, 255, 0.1); + background: rgba(255, 255, 255, 0.03); +} +.u-card:hover { + border-color: #10b981; + transform: translateY(-2px); + box-shadow: 0 8px 24px -12px rgba(16, 185, 129, 0.45); +} +.u-card--static:hover { + transform: none; + box-shadow: none; + border-color: rgba(0, 0, 0, 0.08); +} +.dark .u-card--static:hover { + border-color: rgba(255, 255, 255, 0.1); +} +.u-card__icon { + flex: none; + width: 2.25rem; + height: 2.25rem; + border-radius: 0.55rem; +} +.u-card__icon--muted { + display: flex; + align-items: center; + justify-content: center; + color: #10b981; + background: rgba(16, 185, 129, 0.1); +} +.u-card__body { + min-width: 0; +} +.u-card__title { + font-weight: 600; + font-size: 0.95rem; + line-height: 1.3; +} +.u-card__desc { + margin-top: 0.2rem; + font-size: 0.85rem; + line-height: 1.4; + color: #626d7a; +} +.dark .u-card__desc { + color: #98a2b3; +} + +/* ---- Product cards (larger) ---- */ +.u-product .u-card__icon { + width: 2.75rem; + height: 2.75rem; + border-radius: 0.7rem; +} +.u-product .u-card__title { + font-size: 1.05rem; +} + +/* ---- Console showcase ---- */ +.u-console { + margin-top: 1.5rem; + border-radius: 1rem; + border: 1px solid rgba(0, 0, 0, 0.08); + overflow: hidden; + background: #f7f8fa; +} +.dark .u-console { + border-color: rgba(255, 255, 255, 0.1); + background: rgba(255, 255, 255, 0.02); +} +.u-console img { + display: block; + width: 100%; + height: 13rem; + object-fit: cover; + object-position: top center; +} +.u-console__cap { + padding: 0.75rem 1rem; + font-size: 0.85rem; + color: #626d7a; + border-top: 1px solid rgba(0, 0, 0, 0.06); +} +.dark .u-console__cap { + color: #98a2b3; + border-top-color: rgba(255, 255, 255, 0.08); +} From 13af489480b16e10d314bb2ededc9a9eacd31c76 Mon Sep 17 00:00:00 2001 From: CahidArda Date: Fri, 3 Jul 2026 13:53:46 +0300 Subject: [PATCH 03/28] docs: use mode:frame so the landing keeps the sidebar nav; auto-fill card grids --- introduction.mdx | 2 +- style.css | 15 ++++++--------- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/introduction.mdx b/introduction.mdx index 134c54fc..05be68d1 100644 --- a/introduction.mdx +++ b/introduction.mdx @@ -1,7 +1,7 @@ --- title: Get Started description: Serverless data and messaging for developers — Redis, Vector, QStash, Workflow, Search, and Box, with SDKs, integrations, and a full-featured console. -mode: custom +mode: frame --- import { Hero, SectionHead, ProductGrid, Console, Community } from "/snippets/landing.jsx"; diff --git a/style.css b/style.css index 7e516536..ee554e35 100644 --- a/style.css +++ b/style.css @@ -146,16 +146,13 @@ margin-top: 1.5rem; grid-template-columns: repeat(1, minmax(0, 1fr)); } -@media (min-width: 640px) { - .u-grid--2, - .u-grid--3 { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } +/* auto-fill so columns respond to the actual available width (works whether the + page is full-bleed `custom` or narrowed by the `frame` sidebar). */ +.u-grid--2 { + grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr)); } -@media (min-width: 900px) { - .u-grid--3 { - grid-template-columns: repeat(3, minmax(0, 1fr)); - } +.u-grid--3 { + grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)); } /* ---- Cards ---- */ From 6b63608e29d8657bbbc6b9634d90ad681582b318 Mon Sep 17 00:00:00 2001 From: CahidArda Date: Fri, 3 Jul 2026 14:27:23 +0300 Subject: [PATCH 04/28] docs: streamline landing (3-col products, agent resources); move SDKs/integrations/demos/console to product pages --- introduction.mdx | 16 +++------------- llms-full.txt | 16 +++------------- snippets/landing.jsx | 31 +++++++++++++++++-------------- style.css | 36 +++++++++++++++++++++++++++++++++++- 4 files changed, 58 insertions(+), 41 deletions(-) diff --git a/introduction.mdx b/introduction.mdx index 05be68d1..5df99d9a 100644 --- a/introduction.mdx +++ b/introduction.mdx @@ -4,8 +4,7 @@ description: Serverless data and messaging for developers — Redis, Vector, QSt mode: frame --- -import { Hero, SectionHead, ProductGrid, Console, Community } from "/snippets/landing.jsx"; -import { Catalog } from "/snippets/catalog.jsx"; +import { Hero, SectionHead, ProductGrid, AgentResources, Community } from "/snippets/landing.jsx"; import { Migrate } from "/snippets/migrate.jsx"; @@ -15,17 +14,8 @@ import { Migrate } from "/snippets/migrate.jsx"; - - - - - - - - - - - + + diff --git a/llms-full.txt b/llms-full.txt index 86c9e3ca..f0b1275d 100644 --- a/llms-full.txt +++ b/llms-full.txt @@ -8485,8 +8485,7 @@ Secondary: #00E9A3 (Cyan Green) # Get Started Source: https://upstash.com/docs/introduction -import { Hero, SectionHead, ProductGrid, Console, Community } from "/snippets/landing.jsx"; -import { Catalog } from "/snippets/catalog.jsx"; +import { Hero, SectionHead, ProductGrid, AgentResources, Community } from "/snippets/landing.jsx"; import { Migrate } from "/snippets/migrate.jsx"; @@ -8496,17 +8495,8 @@ import { Migrate } from "/snippets/migrate.jsx"; - - - - - - - - - - - + + diff --git a/snippets/landing.jsx b/snippets/landing.jsx index f9580ece..a077e72c 100644 --- a/snippets/landing.jsx +++ b/snippets/landing.jsx @@ -1,4 +1,4 @@ -// Full-custom landing components (used by introduction.mdx with `mode: custom`). +// Full-custom landing components (used by introduction.mdx with `mode: frame`). // Styling lives in style.css (.u-* classes). Each component keeps its own data // locally (Mintlify compiles exports in isolation — no cross-references). @@ -38,7 +38,7 @@ export const ProductGrid = () => { { name: "Box", desc: "Secure sandboxes for AI agents and code.", href: "/box/overall/quickstart", icon: "box" }, ]; return ( -
+
{products.map((p) => ( @@ -52,20 +52,23 @@ export const ProductGrid = () => { ); }; -export const Console = () => { - const shots = [ - { src: "/img/getting_started/charts.png", cap: "Redis — real-time metrics" }, - { src: "/img/ratelimit/dashboard.png", cap: "Ratelimit — analytics" }, - { src: "/img/qstash/log.png", cap: "QStash — message logs" }, - { src: "/img/qstash-workflow/run-view.png", cap: "Workflow — run inspector" }, +export const AgentResources = () => { + const items = [ + { name: "MCP Server", desc: "Manage Upstash from AI agents over MCP.", href: "/agent-resources/mcp", glyph: "⌘" }, + { name: "Skills", desc: "Ready-made skills for coding agents.", href: "/agent-resources/skills", glyph: "✦" }, + { name: "CLI", desc: "Manage Upstash from your terminal.", href: "/agent-resources/cli", glyph: "›" }, + { name: "Context7", desc: "Up-to-date code docs for LLMs and agents.", href: "https://context7.com", glyph: "7" }, ]; return ( -
- {shots.map((s) => ( -
- {s.cap} -
{s.cap}
-
+
); diff --git a/style.css b/style.css index ee554e35..91ba27c7 100644 --- a/style.css +++ b/style.css @@ -20,11 +20,26 @@ ============================================================ */ .u-wrap { - max-width: 76rem; + max-width: 78rem; margin: 0 auto; padding: 0 1.5rem 6rem; } +/* In `mode: frame` Mintlify keeps the left sidebar (content-area gets a ~23.7rem + left padding to clear it — we keep that) but STILL reserves a 28rem right column + for the table of contents, which frame hides — leaving it empty and squishing + the content. Collapse that empty ToC column and let content use the full width. + Scoped via :has(.u-wrap) so normal docs pages (and the Redis page, which has no + .u-wrap) keep their standard layout. NOTE: targets Mintlify-internal ids + (#content-area / #content-side-layout) — revisit if a Mintlify upgrade renames them. */ +#content-container:has(.u-wrap) #content-side-layout { + display: none; +} +#content-area:has(.u-wrap) { + width: 100%; +} + + /* ---- Hero ---- */ .u-hero { position: relative; @@ -154,6 +169,25 @@ .u-grid--3 { grid-template-columns: repeat(auto-fill, minmax(15rem, 1fr)); } +/* fixed-column variants (don't reflow to more columns on very wide layouts) */ +.u-grid--fixed3 { + grid-template-columns: repeat(3, minmax(0, 1fr)); +} +.u-grid--fixed4 { + grid-template-columns: repeat(4, minmax(0, 1fr)); +} +@media (max-width: 900px) { + .u-grid--fixed3, + .u-grid--fixed4 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } +} +@media (max-width: 560px) { + .u-grid--fixed3, + .u-grid--fixed4 { + grid-template-columns: 1fr; + } +} /* ---- Cards ---- */ .u-card { From c535d6a9c0641164003d63c2706597dc1b2675d1 Mon Sep 17 00:00:00 2001 From: CahidArda Date: Fri, 3 Jul 2026 14:39:25 +0300 Subject: [PATCH 05/28] docs: roll SDK/integration/demo/console sections onto product pages; add lang icons; restore Concepts; tune landing grid columns --- box/overall/quickstart.mdx | 23 +++++++ img/icons/lang/python.svg | 4 ++ img/icons/lang/ruby.svg | 4 ++ img/icons/lang/typescript.svg | 4 ++ introduction.mdx | 5 +- llms-full.txt | 100 +++++++++++++++++++++++++++++- qstash/overall/getstarted.mdx | 32 ++++++++++ search/overall/getstarted.mdx | 10 +++ snippets/catalog.jsx | 113 ++++++++++++++++------------------ snippets/landing.jsx | 23 ++++++- snippets/migrate.jsx | 3 +- style.css | 4 ++ vector/overall/getstarted.mdx | 12 +++- workflow/getstarted.mdx | 32 ++++++++++ 14 files changed, 304 insertions(+), 65 deletions(-) create mode 100644 img/icons/lang/python.svg create mode 100644 img/icons/lang/ruby.svg create mode 100644 img/icons/lang/typescript.svg diff --git a/box/overall/quickstart.mdx b/box/overall/quickstart.mdx index dff9846b..e53c46b5 100644 --- a/box/overall/quickstart.mdx +++ b/box/overall/quickstart.mdx @@ -2,6 +2,8 @@ title: "Quickstart" --- +import { Catalog } from "/snippets/catalog.jsx"; + **Upstash Box lets you give your AI agents a computer.** Every Upstash Box is a **secure, isolated cloud container with an AI Agent built-in**. Spin up as many as you want in parallel. Each one includes a full environment with a filesystem, shell, git, and a runtime. Your agent can read files, write code, and execute tasks inside it. @@ -244,3 +246,24 @@ Great example use cases: Boxes have Claude Code, Codex or OpenCode built-in. + +## Demos + + + +## Do more from the console + +Watch your agents work, stream logs, and manage sandboxes from the dashboard. + + + + + Manage and connect to your boxes from the terminal. Screenshot coming soon. + + + + + Stream logs from your running boxes in the console. Screenshot coming soon. + + + diff --git a/img/icons/lang/python.svg b/img/icons/lang/python.svg new file mode 100644 index 00000000..63177a44 --- /dev/null +++ b/img/icons/lang/python.svg @@ -0,0 +1,4 @@ + + + Py + diff --git a/img/icons/lang/ruby.svg b/img/icons/lang/ruby.svg new file mode 100644 index 00000000..2fa8c272 --- /dev/null +++ b/img/icons/lang/ruby.svg @@ -0,0 +1,4 @@ + + + Rb + diff --git a/img/icons/lang/typescript.svg b/img/icons/lang/typescript.svg new file mode 100644 index 00000000..4a281308 --- /dev/null +++ b/img/icons/lang/typescript.svg @@ -0,0 +1,4 @@ + + + TS + diff --git a/introduction.mdx b/introduction.mdx index 5df99d9a..7f9a1dd6 100644 --- a/introduction.mdx +++ b/introduction.mdx @@ -4,7 +4,7 @@ description: Serverless data and messaging for developers — Redis, Vector, QSt mode: frame --- -import { Hero, SectionHead, ProductGrid, AgentResources, Community } from "/snippets/landing.jsx"; +import { Hero, SectionHead, ProductGrid, AgentResources, Concepts, Community } from "/snippets/landing.jsx"; import { Migrate } from "/snippets/migrate.jsx"; @@ -17,6 +17,9 @@ import { Migrate } from "/snippets/migrate.jsx"; + + + diff --git a/llms-full.txt b/llms-full.txt index f0b1275d..e8961183 100644 --- a/llms-full.txt +++ b/llms-full.txt @@ -5021,6 +5021,8 @@ Please check our [pricing page](https://upstash.com/pricing/box) for the most up # Quickstart Source: https://upstash.com/docs/box/overall/quickstart +import { Catalog } from "/snippets/catalog.jsx"; + **Upstash Box lets you give your AI agents a computer.** Every Upstash Box is a **secure, isolated cloud container with an AI Agent built-in**. Spin up as many as you want in parallel. Each one includes a full environment with a filesystem, shell, git, and a runtime. Your agent can read files, write code, and execute tasks inside it. @@ -5262,6 +5264,27 @@ Great example use cases: +## Demos + + + +## Do more from the console + +Watch your agents work, stream logs, and manage sandboxes from the dashboard. + + + + + Manage and connect to your boxes from the terminal. Screenshot coming soon. + + + + + Stream logs from your running boxes in the console. Screenshot coming soon. + + + + # Schedules Source: https://upstash.com/docs/box/overall/schedules @@ -8485,7 +8508,7 @@ Secondary: #00E9A3 (Cyan Green) # Get Started Source: https://upstash.com/docs/introduction -import { Hero, SectionHead, ProductGrid, AgentResources, Community } from "/snippets/landing.jsx"; +import { Hero, SectionHead, ProductGrid, AgentResources, Concepts, Community } from "/snippets/landing.jsx"; import { Migrate } from "/snippets/migrate.jsx"; @@ -8498,6 +8521,9 @@ import { Migrate } from "/snippets/migrate.jsx"; + + + @@ -13736,6 +13762,8 @@ Enterprise customers receive dedicated resources to ensure isolation and consist # Getting Started Source: https://upstash.com/docs/qstash/overall/getstarted +import { Catalog } from "/snippets/catalog.jsx"; + QStash is a **serverless messaging and scheduling solution**. It fits easily into your existing workflow and allows you to build reliable systems without managing infrastructure. Instead of calling an endpoint directly, QStash acts as a middleman between you and an API to guarantee delivery, perform automatic retries on failure, and more. @@ -13884,6 +13912,30 @@ Learn more about different states [here](/docs/qstash/howto/debug-logs). +## SDKs + + + +## Integrations + + + +## Do more from the console + +Inspect messages, retries, and schedules without leaving the dashboard. + + + + QStash message logs in the console + + + QStash dead-letter queue + + + QStash schedules + + + # llms.txt Source: https://upstash.com/docs/qstash/overall/llms-txt @@ -33024,6 +33076,8 @@ For more details on how this integration works, check out [the official reposito # Getting Started Source: https://upstash.com/docs/search/overall/getstarted +import { Catalog } from "/snippets/catalog.jsx"; + ***