{ "version": "https://jsonfeed.org/version/1", "title": "Stack", "home_page_url": "https://stack.convex.dev", "feed_url": "https://stack.convex.dev/rss/feed.json", "description": "Latest posts from Stack", "icon": "https://stack.convex.dev/logos/stack-dark@3x.png", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "items": [ { "id": "https://stack.convex.dev/when-to-and-when-not-to-use-return-validators", "content_html": "We're changing our guidance for LLMs on Returns Validators.", "url": "https://stack.convex.dev/when-to-and-when-not-to-use-return-validators", "title": "When to and when not to use return validators", "summary": "We're changing our guidance for LLMs on Returns Validators.", "date_modified": "2026-02-27T05:25:57.467Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "TypeScript", "Fundamentals" ] }, { "id": "https://stack.convex.dev/on-competitive-benchmarks", "content_html": "Consider this our declaration of permanent disengagement from “bar chart wars.” It’s good dev marketing, but it’s a waste of time.", "url": "https://stack.convex.dev/on-competitive-benchmarks", "title": "I don't care about your database benchmarks (and neither should you)", "summary": "Consider this our declaration of permanent disengagement from “bar chart wars.” It’s good dev marketing, but it’s a waste of time.", "date_modified": "2026-02-25T16:50:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives" ] }, { "id": "https://stack.convex.dev/marketing-journey", "content_html": "So how did our marketing messaging get to where it is today? Let's go over all of the different things that we tried and the main lessons we took away from each iteration of Convex's messaging and design.", "url": "https://stack.convex.dev/marketing-journey", "title": "The Convex Marketing Journey 2022-2026", "summary": "So how did our marketing messaging get to where it is today? Let's go over all of the different things that we tried and the main lessons we took away from each iteration of Convex's messaging and design.", "date_modified": "2026-02-23T16:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Marketing" ] }, { "id": "https://stack.convex.dev/convex-gpu-runpod-workflows", "content_html": "Every GPU task I've run from a backend has the same problem: you fire off the job, then poll for results or wire up webhooks to know when it's done. This walkthrough shows a different approach. Convex triggers a GPU job on RunPod, and the RunPod worker calls mutations directly on Convex using the Python client. The frontend stays in sync through live queries. No polling, no webhook infrastructure. I'll walk through the full implementation using video background removal as the example, but the pattern works for any GPU workload — compression, transcription, object detection, whatever you need.", "url": "https://stack.convex.dev/convex-gpu-runpod-workflows", "title": "How to connect Convex to RunPod for serverless GPU workloads", "summary": "Every GPU task I've run from a backend has the same problem: you fire off the job, then poll for results or wire up webhooks to know when it's done. This walkthrough shows a different approach. Convex triggers a GPU job on RunPod, and the RunPod worker calls mutations directly on Convex using the Python client. The frontend stays in sync through live queries. No polling, no webhook infrastructure. I'll walk through the full implementation using video background removal as the example, but the pattern works for any GPU workload — compression, transcription, object detection, whatever you need.", "date_modified": "2026-02-09T22:33:22.983Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/tables-convex-modules-rest-apis", "content_html": "Hamza, shares a year-long build from 10 tables to 70+ Convex modules serving web, mobile, and REST APIs through a single deployment with one backend handling everything.", "url": "https://stack.convex.dev/tables-convex-modules-rest-apis", "title": "Building a 70-Module Convex Backend: Web, Mobile & API in One Deployment", "summary": "Hamza, shares a year-long build from 10 tables to 70+ Convex modules serving web, mobile, and REST APIs through a single deployment with one backend handling everything.", "date_modified": "2026-01-12T23:35:54.619Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "Fundamentals" ] }, { "id": "https://stack.convex.dev/efficient-count-sum-max-with-the-aggregate-component", "content_html": "Convex omits built-in aggregates because full-table scans don’t scale; the video shows how @convex-dev/aggregate (B-Tree powered) enables fast pagination, ranking, per-user stats, and randomization with fully reactive queries. It also covers keeping aggregates in sync via triggers/custom functions, backfilling with migrations, and the trade-offs that hint at possible platform-level support.", "url": "https://stack.convex.dev/efficient-count-sum-max-with-the-aggregate-component", "title": "Efficient COUNT, SUM, MAX with the Aggregate Component ", "summary": "Convex omits built-in aggregates because full-table scans don’t scale; the video shows how @convex-dev/aggregate (B-Tree powered) enables fast pagination, ranking, per-user stats, and randomization with fully reactive queries. It also covers keeping aggregates in sync via triggers/custom functions, backfilling with migrations, and the trade-offs that hint at possible platform-level support.", "date_modified": "2025-08-16T05:46:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Database" ] }, { "id": "https://stack.convex.dev/build-streaming-chat-app-with-persistent-text-streaming-component", "content_html": "Learn how Convex Components simplify building ChatGPT-style streaming chat by eliminating WebSocket complexity through plug-and-play, reusable backend modules and React hooks.", "url": "https://stack.convex.dev/build-streaming-chat-app-with-persistent-text-streaming-component", "title": "How to Build Streaming Chat Apps with Convex's Plug-and-Play Components", "summary": "Learn how Convex Components simplify building ChatGPT-style streaming chat by eliminating WebSocket complexity through plug-and-play, reusable backend modules and React hooks.", "date_modified": "2025-08-15T14:51:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/authorization", "content_html": "How to think about and implement authorization in your app. Think through each layers: clients, middleware, RBAC, RLS, and more. All with the power of code and abstractions.", "url": "https://stack.convex.dev/authorization", "title": "Authorization In Practice", "summary": "How to think about and implement authorization in your app. Think through each layers: clients, middleware, RBAC, RLS, and more. All with the power of code and abstractions.", "date_modified": "2025-08-07T23:32:20.998Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Authentication", "Fullstack", "Patterns", "Fundamentals" ] }, { "id": "https://stack.convex.dev/how-hard-is-it-to-migrate-away-from-convex", "content_html": "The video walks through an experiment in “de-lock-in-ifying” a small Convex app: starting with the basic TanStack Start template, the author recreates Convex queries, mutations and actions as TanStack Start server functions; swaps Convex’s reactive data layer for React Query (with manual cache invalidation); and replaces Convex’s built-in cloud database with a self-hosted Postgres instance accessed via Drizzle ORM—eventually wrapping Drizzle in a Convex-style API so most original code can be copy-pasted. They also bolt on transactions, discuss substitutes for other Convex features (file storage, realtime, auth, scheduling, search, etc.), and note that exporting Convex data is straightforward. The upshot: you can migrate off Convex without huge code changes, but you trade Convex’s “batteries-included” simplicity for extra infrastructure to manage—so the easiest escape hatch is still running Convex in self-hosted mode.", "url": "https://stack.convex.dev/how-hard-is-it-to-migrate-away-from-convex", "title": "How hard is it to migrate AWAY from Convex?", "summary": "The video walks through an experiment in “de-lock-in-ifying” a small Convex app: starting with the basic TanStack Start template, the author recreates Convex queries, mutations and actions as TanStack Start server functions; swaps Convex’s reactive data layer for React Query (with manual cache invalidation); and replaces Convex’s built-in cloud database with a self-hosted Postgres instance accessed via Drizzle ORM—eventually wrapping Drizzle in a Convex-style API so most original code can be copy-pasted. They also bolt on transactions, discuss substitutes for other Convex features (file storage, realtime, auth, scheduling, search, etc.), and note that exporting Convex data is straightforward. The upshot: you can migrate off Convex without huge code changes, but you trade Convex’s “batteries-included” simplicity for extra infrastructure to manage—so the easiest escape hatch is still running Convex in self-hosted mode.", "date_modified": "2025-08-04T03:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/lessons-from-building-an-ai-app-builder", "content_html": "Over the past few months, we have built and grown Chef into the only AI app builder that knows backend. But, this process didn’t start with Chef. It started with building the Convex, the database that Chef is built on top of.", "url": "https://stack.convex.dev/lessons-from-building-an-ai-app-builder", "title": "Lessons from Building an AI App Builder on Convex", "summary": "Over the past few months, we have built and grown Chef into the only AI app builder that knows backend. But, this process didn’t start with Chef. It started with building the Convex, the database that Chef is built on top of.", "date_modified": "2025-07-31T17:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "AI", "Chef", "Perspectives" ] }, { "id": "https://stack.convex.dev/why-doesn-t-convex-have-select-or-count", "content_html": "Why DOESNT Convex provide a “SELECT” or a “COUNT”? Ill walk you thtough it..", "url": "https://stack.convex.dev/why-doesn-t-convex-have-select-or-count", "title": "Why doesn't Convex have SELECT or COUNT?", "summary": "Why DOESNT Convex provide a “SELECT” or a “COUNT”? Ill walk you thtough it..", "date_modified": "2025-07-29T02:01:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Database" ] }, { "id": "https://stack.convex.dev/vibe-coding-to-production", "content_html": "Using tools like Lovable, Bolt, and Chef to start your product journey is straightforward. Moving them to production is less straightforward. I discuss the six things I wish I knew before moving my vibe-coded app to prod.", "url": "https://stack.convex.dev/vibe-coding-to-production", "title": "6 Steps Before Taking your Vibe-coded App to Production", "summary": "Using tools like Lovable, Bolt, and Chef to start your product journey is straightforward. Moving them to production is less straightforward. I discuss the six things I wish I knew before moving my vibe-coded app to prod.", "date_modified": "2025-07-25T16:31:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Chef", "Fundamentals" ] }, { "id": "https://stack.convex.dev/convex-resend", "content_html": "Integrate Resend into your Convex apps and participate in our Convex X Resend hackathon.", "url": "https://stack.convex.dev/convex-resend", "title": "Add Resend to your Convex App", "summary": "Integrate Resend into your Convex apps and participate in our Convex X Resend hackathon.", "date_modified": "2025-07-19T17:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack" ] }, { "id": "https://stack.convex.dev/vibe-coding-a-full-stack-ai-video-generation-app-with-chef", "content_html": "Learn how a developer used Convex Chef to vibe code a completely functional, full-stack AI video generation platform called Cinemartie. The project cost around $150 and took just hours to build, delivering 4x the efficiency compared to traditional manual development.", "url": "https://stack.convex.dev/vibe-coding-a-full-stack-ai-video-generation-app-with-chef", "title": "How I Vibe-Coded a Real Service Using Convex Chef", "summary": "Learn how a developer used Convex Chef to vibe code a completely functional, full-stack AI video generation platform called Cinemartie. The project cost around $150 and took just hours to build, delivering 4x the efficiency compared to traditional manual development.", "date_modified": "2025-07-18T16:43:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Chef" ] }, { "id": "https://stack.convex.dev/migrate-data-postgres-to-convex", "content_html": "This guide will help you migrate data to Convex from Postgres on any provider (Supabase, Neon, RDS, etc).", "url": "https://stack.convex.dev/migrate-data-postgres-to-convex", "title": "Migrating data from Postgres to Convex", "summary": "This guide will help you migrate data to Convex from Postgres on any provider (Supabase, Neon, RDS, etc).", "date_modified": "2025-07-08T19:37:45.297Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "Database", "Schemas" ] }, { "id": "https://stack.convex.dev/ai-gents-humans-good-abstractions", "content_html": "Chef by Convex builds real full-stack apps in one prompt—Notion, Slack, and more.\nIt works because Convex’s abstractions are simple enough for both humans and AI to use.\nBuilt-in features and plug-and-play components let developers skip boilerplate and ship fast.", "url": "https://stack.convex.dev/ai-gents-humans-good-abstractions", "title": "AI Agents (and humans) do better with good abstractions", "summary": "Chef by Convex builds real full-stack apps in one prompt—Notion, Slack, and more.\nIt works because Convex’s abstractions are simple enough for both humans and AI to use.\nBuilt-in features and plug-and-play components let developers skip boilerplate and ship fast.", "date_modified": "2025-06-03T16:21:11.473Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "AI" ] }, { "id": "https://stack.convex.dev/streaming-vs-syncing-why-your-chat-app-is-burning-bandwidth", "content_html": "Building an AI chat app? Convex’s Persistent Text Streaming keeps conversations flowing—even across page reloads or tab switches—by storing and syncing chat data in real time. This video shows how to stream responses live, reduce bandwidth waste, and boost performance using Convex’s serverless backend. Say goodbye to broken chat experiences and hello to seamless, reliable interactions.", "url": "https://stack.convex.dev/streaming-vs-syncing-why-your-chat-app-is-burning-bandwidth", "title": "Streaming vs. Syncing: Why Your Chat App Is Burning Bandwidth", "summary": "Building an AI chat app? Convex’s Persistent Text Streaming keeps conversations flowing—even across page reloads or tab switches—by storing and syncing chat data in real time. This video shows how to stream responses live, reduce bandwidth waste, and boost performance using Convex’s serverless backend. Say goodbye to broken chat experiences and hello to seamless, reliable interactions.", "date_modified": "2025-05-23T21:22:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/why-choose-convex-database-for-backend", "content_html": "Building a language learning app meant I needed a backend that could handle realtime sync, multilingual support, and type-safe code. I didn’t start with Convex—I evaluated Firebase, PlanetScale, Supabase, Neon, and others first. Each had tradeoffs: Firebase felt disjointed and buggy; PlanetScale lacked international support; Supabase leaned too hard into SQL; and Neon made realtime too complicated.\n\nWhat made Convex different was how little backend glue I needed to write. Realtime sync just worked. TypeScript felt native. My frontend felt alive without hacks. It felt like hiring a backend team on day one. A year later, I’m still shipping fast—and glad I made the switch.\n\nThis post breaks down what I found, what failed, and why Convex ended up being the best database for a modern TypeScript app like LanguageHopper.", "url": "https://stack.convex.dev/why-choose-convex-database-for-backend", "title": "Why I picked Convex over Firebase, Supabase, and Neon for my app", "summary": "Building a language learning app meant I needed a backend that could handle realtime sync, multilingual support, and type-safe code. I didn’t start with Convex—I evaluated Firebase, PlanetScale, Supabase, Neon, and others first. Each had tradeoffs: Firebase felt disjointed and buggy; PlanetScale lacked international support; Supabase leaned too hard into SQL; and Neon made realtime too complicated.\n\nWhat made Convex different was how little backend glue I needed to write. Realtime sync just worked. TypeScript felt native. My frontend felt alive without hacks. It felt like hiring a backend team on day one. A year later, I’m still shipping fast—and glad I made the switch.\n\nThis post breaks down what I found, what failed, and why Convex ended up being the best database for a modern TypeScript app like LanguageHopper.", "date_modified": "2025-05-23T20:19:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/claude-4-is-here-but-is-is-good-at-convex", "content_html": "Claude 4 is here, and developers are putting it to the test. This video skips the benchmarks and dives into real-world builds—like an Instagram clone and a multiplayer Tic-Tac-Toe app—using Claude 4 with Convex and Chef. If you’re deciding between Claude 4 and 3.5 for agentic codegen, backend setup, or Convex-based workflows, this walkthrough shows the good, the bad, and the frustrating.\n\nFrom schema generation to real-time uploads and env var debugging, you’ll see where Claude 4 outperforms—and where Claude 3.5 still holds its ground. Ideal for devs building modern fullstack apps who want to see Claude in action, not just theory.", "url": "https://stack.convex.dev/claude-4-is-here-but-is-is-good-at-convex", "title": "Claude 4 is here but is is good at Convex?", "summary": "Claude 4 is here, and developers are putting it to the test. This video skips the benchmarks and dives into real-world builds—like an Instagram clone and a multiplayer Tic-Tac-Toe app—using Claude 4 with Convex and Chef. If you’re deciding between Claude 4 and 3.5 for agentic codegen, backend setup, or Convex-based workflows, this walkthrough shows the good, the bad, and the frustrating.\n\nFrom schema generation to real-time uploads and env var debugging, you’ll see where Claude 4 outperforms—and where Claude 3.5 still holds its ground. Ideal for devs building modern fullstack apps who want to see Claude in action, not just theory.", "date_modified": "2025-05-22T21:14:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "AI" ] }, { "id": "https://stack.convex.dev/convex-vs-firebase-a-developer-s-complete-guide", "content_html": "Choosing a backend? This video breaks down Firebase vs Convex with a clear developer lens. Whether you’re building your first app or optimizing for AI workflows, you’ll get a side-by-side view of how these two platforms really stack up.\n\nYou’ll see how Firebase’s flexible NoSQL setup compares to Convex’s structured, type-safe model—and why that matters for scaling, security, and speed. From real-time syncing and server-side queries to access control, authentication, and vendor lock-in, this video covers it all.\n\nIdeal for developers who want a modern, AI-ready backend without sacrificing performance or control.", "url": "https://stack.convex.dev/convex-vs-firebase-a-developer-s-complete-guide", "title": "Convex vs Firebase: A Developer's Complete Guide", "summary": "Choosing a backend? This video breaks down Firebase vs Convex with a clear developer lens. Whether you’re building your first app or optimizing for AI workflows, you’ll get a side-by-side view of how these two platforms really stack up.\n\nYou’ll see how Firebase’s flexible NoSQL setup compares to Convex’s structured, type-safe model—and why that matters for scaling, security, and speed. From real-time syncing and server-side queries to access control, authentication, and vendor lock-in, this video covers it all.\n\nIdeal for developers who want a modern, AI-ready backend without sacrificing performance or control.", "date_modified": "2025-05-13T21:20:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/what-is-convex-and-why-should-developers-care", "content_html": "Looking for a backend that feels built for how modern developers actually code? Convex is quickly becoming a go-to choice in 2025 for full-stack devs shipping real-time, collaborative apps without the backend overhead.\n\nThis video breaks down what Convex is and how it works—from schema design to reactivity. You’ll see how Convex blends TypeScript safety, live queries, serverless functions, and a schema-flexible database into one cohesive developer experience.\n\nWhether you’re building a multiplayer game, a live doc editor, or a chat app, this walkthrough helps you figure out if Convex is the right fit—and how it stacks up to Firebase, Supabase, or Lambda-based setups.", "url": "https://stack.convex.dev/what-is-convex-and-why-should-developers-care", "title": "What is Convex & Why Should Developers Care?", "summary": "Looking for a backend that feels built for how modern developers actually code? Convex is quickly becoming a go-to choice in 2025 for full-stack devs shipping real-time, collaborative apps without the backend overhead.\n\nThis video breaks down what Convex is and how it works—from schema design to reactivity. You’ll see how Convex blends TypeScript safety, live queries, serverless functions, and a schema-flexible database into one cohesive developer experience.\n\nWhether you’re building a multiplayer game, a live doc editor, or a chat app, this walkthrough helps you figure out if Convex is the right fit—and how it stacks up to Firebase, Supabase, or Lambda-based setups.", "date_modified": "2025-05-09T21:17:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/chef-cookbook-tips-working-with-ai-app-builders", "content_html": "Learn how to write better apps using AI app builders like Chef by Convex with these five expert tips from Jordan Hunt, prompt engineer at Convex. This guide covers how to build simple MVPs, keep prompts under 300 words, provide clear UI and design instructions, use AI tools like ChatGPT to refine your prompts, and recover quickly when things go off track. Includes real app examples like a habit tracker, to-do list, and finance tracker—all built with Chef. Perfect for developers building full-stack apps with AI.", "url": "https://stack.convex.dev/chef-cookbook-tips-working-with-ai-app-builders", "title": "Chef Cookbook: Tips For Working with AI App Builders", "summary": "Learn how to write better apps using AI app builders like Chef by Convex with these five expert tips from Jordan Hunt, prompt engineer at Convex. This guide covers how to build simple MVPs, keep prompts under 300 words, provide clear UI and design instructions, use AI tools like ChatGPT to refine your prompts, and recover quickly when things go off track. Includes real app examples like a habit tracker, to-do list, and finance tracker—all built with Chef. Perfect for developers building full-stack apps with AI.", "date_modified": "2025-05-05T20:31:36.164Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives", "AI", "Chef" ] }, { "id": "https://stack.convex.dev/argument-validation-without-repetition", "content_html": "A few more advanced techniques & helpers to further reduce duplication and accelerate your Convex workflow.", "url": "https://stack.convex.dev/argument-validation-without-repetition", "title": "Argument Validation without Repetition", "summary": "A few more advanced techniques & helpers to further reduce duplication and accelerate your Convex workflow.", "date_modified": "2025-05-05T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns", "TypeScript" ] }, { "id": "https://stack.convex.dev/chef-model-exploration", "content_html": "Convex compared Claude 3.5 Sonnet, GPT-4.1, and Gemini 2.5 Pro to see which LLM works best for building full-stack apps with Convex Chef, the new AI Agent app developer tool. Claude stood out for its precise backend coding and function calling, while Gemini made impressive UIs, and GPT offered solid speed and value.", "url": "https://stack.convex.dev/chef-model-exploration", "title": "Which LLM writes the best code? Convex Chef model comparison", "summary": "Convex compared Claude 3.5 Sonnet, GPT-4.1, and Gemini 2.5 Pro to see which LLM works best for building full-stack apps with Convex Chef, the new AI Agent app developer tool. Claude stood out for its precise backend coding and function calling, while Gemini made impressive UIs, and GPT offered solid speed and value.", "date_modified": "2025-04-28T21:59:01.104Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives", "AI", "Chef" ] }, { "id": "https://stack.convex.dev/bluefox-convex-developers-email-integration-guide", "content_html": "Learn how to integrate Bluefox—a modern developer-first email API built on AWS SES—with Convex, the reactive backend database. This guide covers everything from sending transactional and triggered emails to setting up real-time webhooks and preparing for production. You’ll walk away knowing how to configure your environment, build reusable email clients, handle errors safely, and manage multiple deployment environments with best practices for SES authentication, bounce handling, and email tracking.", "url": "https://stack.convex.dev/bluefox-convex-developers-email-integration-guide", "title": "Set Up Transactional Email in Convex with Bluefox and AWS SES", "summary": "Learn how to integrate Bluefox—a modern developer-first email API built on AWS SES—with Convex, the reactive backend database. This guide covers everything from sending transactional and triggered emails to setting up real-time webhooks and preparing for production. You’ll walk away knowing how to configure your environment, build reusable email clients, handle errors safely, and manage multiple deployment environments with best practices for SES authentication, bounce handling, and email tracking.", "date_modified": "2025-04-23T16:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/anonymous-development", "content_html": "You can now use Convex with a single command without needing to set up a Convex account. This means it’s even easier to persuade your friends to check out Convex and to share an app that others can download and run for themselves.", "url": "https://stack.convex.dev/anonymous-development", "title": "Trying out Convex with a single command", "summary": "You can now use Convex with a single command without needing to set up a Convex account. This means it’s even easier to persuade your friends to check out Convex and to share an app that others can download and run for themselves.", "date_modified": "2025-04-09T16:00:13.242Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/durable-workflows-and-strong-guarantees", "content_html": "Agents rely on long-lived workflows, but when happens when they fail midway through? Here are the tools you need to manage correctness and reliability: transactions, idempotency, retries, durable functions, journaling, and state machines. The missing abstraction layer for agentic is durable workflows, which bring them all together.", "url": "https://stack.convex.dev/durable-workflows-and-strong-guarantees", "title": "Agents Need Durable Workflows and Strong Guarantees", "summary": "Agents rely on long-lived workflows, but when happens when they fail midway through? Here are the tools you need to manage correctness and reliability: transactions, idempotency, retries, durable functions, journaling, and state machines. The missing abstraction layer for agentic is durable workflows, which bring them all together.", "date_modified": "2025-04-08T13:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives", "AI", "Production" ] }, { "id": "https://stack.convex.dev/ai-agents", "content_html": "With this new backend component, augment Agents to automatically save and search message history per-thread, providing realtime results across multiple tabs and users. Use it with the Workflow component to run reliably with retries and durability across server restarts.", "url": "https://stack.convex.dev/ai-agents", "title": "AI Agents with Built-in Memory ", "summary": "With this new backend component, augment Agents to automatically save and search message history per-thread, providing realtime results across multiple tabs and users. Use it with the Workflow component to run reliably with retries and durability across server restarts.", "date_modified": "2025-04-08T13:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "AI", "Patterns", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/mcp-ga", "content_html": "Convex MCP Server is now generally available, enabling AI agents to query your data, run functions, and automate complex tasks. Here are two crafty use cases we've already uncovered...", "url": "https://stack.convex.dev/mcp-ga", "title": "Crafty Hacks with Convex MCP", "summary": "Convex MCP Server is now generally available, enabling AI agents to query your data, run functions, and automate complex tasks. Here are two crafty use cases we've already uncovered...", "date_modified": "2025-04-07T13:18:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/beyond-sql-how-convex-simplifies-type-safety-sync-with-convex", "content_html": "Convex might look like just a database, but for modern app developers, it's a full backend-as-a-service platform that replaces the complexity of stitching together ORMs, caching, rate limiting, realtime sync, and CI/CD. In this post, a startup founder walks through how they used Convex to build ClarityText—an AI-powered chat knowledge base—and explains why Convex delivers faster MVPs, deeper type safety, and a seamless developer experience without third-party services like Prisma, Redis, or Firebase. Perfect for developers evaluating backend choices in 2024 and beyond.", "url": "https://stack.convex.dev/beyond-sql-how-convex-simplifies-type-safety-sync-with-convex", "title": "The Tech that Convex replaced for ClarityText", "summary": "Convex might look like just a database, but for modern app developers, it's a full backend-as-a-service platform that replaces the complexity of stitching together ORMs, caching, rate limiting, realtime sync, and CI/CD. In this post, a startup founder walks through how they used Convex to build ClarityText—an AI-powered chat knowledge base—and explains why Convex delivers faster MVPs, deeper type safety, and a seamless developer experience without third-party services like Prisma, Redis, or Firebase. Perfect for developers evaluating backend choices in 2024 and beyond.", "date_modified": "2025-04-03T19:58:06.523Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/building-a-typescript-quiz-app-with-convex-and-expo", "content_html": "Martie is a TypeScript quiz app built with Convex and Expo that helps users build general knowledge through daily trivia questions and review past quizzes, deployed to both app stores in just 1.5 months using Email OTP authentication, multilingual support, and real-time data syncing.", "url": "https://stack.convex.dev/building-a-typescript-quiz-app-with-convex-and-expo", "title": "Building a Real-World TypeScript App with Convex and Expo", "summary": "Martie is a TypeScript quiz app built with Convex and Expo that helps users build general knowledge through daily trivia questions and review past quizzes, deployed to both app stores in just 1.5 months using Email OTP authentication, multilingual support, and real-time data syncing.", "date_modified": "2025-03-30T14:44:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "Fullstack" ] }, { "id": "https://stack.convex.dev/reimplementing-mastra-regrets", "content_html": "I reimplemented Mastra’s agentic workflows with durable functions in Convex, and it was the wrong decision. Look at three common strategies (reimplementation, API wrapping, and “blessed” plugin paths), along with learnings along the way and reflections on what I’d do differently next time. TL;DR: Do less, do it smarter, and prototype faster.", "url": "https://stack.convex.dev/reimplementing-mastra-regrets", "title": "Reimplementing Mastra Workflows: Lessons Learned", "summary": "I reimplemented Mastra’s agentic workflows with durable functions in Convex, and it was the wrong decision. Look at three common strategies (reimplementation, API wrapping, and “blessed” plugin paths), along with learnings along the way and reflections on what I’d do differently next time. TL;DR: Do less, do it smarter, and prototype faster.", "date_modified": "2025-03-28T16:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives", "AI" ] }, { "id": "https://stack.convex.dev/merging-streams-of-convex-data", "content_html": "New convex-helpers are available now for fetching streams of documents, merging them together, filtering them them out, and paginating the results. With these helpers, you can replicate patterns you may know from SQL: UNION ALL, JOIN, DISTINCT, GROUP BY, and WHERE clauses where index fields are skipped.", "url": "https://stack.convex.dev/merging-streams-of-convex-data", "title": "Merging Streams of Convex data", "summary": "New convex-helpers are available now for fetching streams of documents, merging them together, filtering them them out, and paginating the results. With these helpers, you can replicate patterns you may know from SQL: UNION ALL, JOIN, DISTINCT, GROUP BY, and WHERE clauses where index fields are skipped.", "date_modified": "2025-03-21T23:42:58.792Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Database", "Patterns", "Advanced" ] }, { "id": "https://stack.convex.dev/convex-evals", "content_html": "AI coding is here: The most productive developers are leveraging AI to speed up their workflows. This ranges from asking models questions about system design to letting AI take the driver's seat with tools like Cursor Composer.", "url": "https://stack.convex.dev/convex-evals", "title": "Convex Evals: Behind the scenes of AI coding with Convex", "summary": "AI coding is here: The most productive developers are leveraging AI to speed up their workflows. This ranges from asking models questions about system design to letting AI take the driver's seat with tools like Cursor Composer.", "date_modified": "2025-03-19T20:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "AI", "Perspectives" ] }, { "id": "https://stack.convex.dev/translate-sql-into-convex-queries", "content_html": "Here’s a cheatsheet with examples of conversions between SQL queries and Convex queries. This article is geared towards developers (and LLMs) who have familiarity with SQL and want to translate those familiar patterns into Convex queries. You'll learn how to `UNION`, `JOIN`, `DISTINCT`, do `WHERE` clauses, and `SELECT` fields.", "url": "https://stack.convex.dev/translate-sql-into-convex-queries", "title": "Translate SQL into Convex Queries", "summary": "Here’s a cheatsheet with examples of conversions between SQL queries and Convex queries. This article is geared towards developers (and LLMs) who have familiarity with SQL and want to translate those familiar patterns into Convex queries. You'll learn how to `UNION`, `JOIN`, `DISTINCT`, do `WHERE` clauses, and `SELECT` fields.", "date_modified": "2025-03-19T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Database", "Patterns" ] }, { "id": "https://stack.convex.dev/convex-panel-bringing-the-convex-dashboard-dev-environment", "content_html": "Convex Panel simplifies development by integrating Convex’s powerful dashboard directly into the dev environment, eliminating the need to switch between browser tabs. Built as a React component, it provides real-time logs, table editing, and performance insights seamlessly within your workflow. This tool enhances productivity, streamlines debugging, and optimizes backend management for developers using Convex.", "url": "https://stack.convex.dev/convex-panel-bringing-the-convex-dashboard-dev-environment", "title": " How to Use convex-panel to Integrate a Custom Convex Dashboard Into Your Dev Environment", "summary": "Convex Panel simplifies development by integrating Convex’s powerful dashboard directly into the dev environment, eliminating the need to switch between browser tabs. Built as a React component, it provides real-time logs, table editing, and performance insights seamlessly within your workflow. This tool enhances productivity, streamlines debugging, and optimizes backend management for developers using Convex.", "date_modified": "2025-03-18T22:00:31.112Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/mongodb-to-convex-a-step-by-step-data-migration-script", "content_html": "Moving data between databases is never fun, but I needed to get 2 million MongoDB documents into Convex without losing my mind. This post walks through my migration script, covering everything from connecting databases to handling schema changes, batch processing, and error handling. If you’re thinking about moving from MongoDB to Convex, consider this your survival guide—coffee highly recommended! ", "url": "https://stack.convex.dev/mongodb-to-convex-a-step-by-step-data-migration-script", "title": "MongoDB to Convex: A Step-by-Step Data Migration Script", "summary": "Moving data between databases is never fun, but I needed to get 2 million MongoDB documents into Convex without losing my mind. This post walks through my migration script, covering everything from connecting databases to handling schema changes, batch processing, and error handling. If you’re thinking about moving from MongoDB to Convex, consider this your survival guide—coffee highly recommended! ", "date_modified": "2025-03-10T22:48:31.327Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Database", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/authentication-best-practices-convex-clerk-and-nextjs", "content_html": "Authentication issues in real-time applications can cause security risks, especially when client-side queries run before validation. Ensuring authentication at the server (Next.js middleware), client (useConvexAuth()), and database (Convex functions) helps prevent unauthorized access. Using middleware, enforcing authentication in Convex functions, and leveraging custom hooks improves security and performance.", "url": "https://stack.convex.dev/authentication-best-practices-convex-clerk-and-nextjs", "title": "Authentication Best Practices: Convex, Clerk and Next.js", "summary": "Authentication issues in real-time applications can cause security risks, especially when client-side queries run before validation. Ensuring authentication at the server (Next.js middleware), client (useConvexAuth()), and database (Convex functions) helps prevent unauthorized access. Using middleware, enforcing authentication in Convex functions, and leveraging custom hooks improves security and performance.", "date_modified": "2025-03-06T18:45:35.644Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/convex-mcp-server", "content_html": "Convex now supports a powerful MCP server that lets you introspect your deployment's state, run functions, and read and write data.", "url": "https://stack.convex.dev/convex-mcp-server", "title": "Convex MCP Server", "summary": "Convex now supports a powerful MCP server that lets you introspect your deployment's state, run functions, and read and write data.", "date_modified": "2025-03-04T13:40:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "AI" ] }, { "id": "https://stack.convex.dev/introducing-fullstack-bench", "content_html": "Coding agents can do more autonomously when they write code that has tight, automatic feedback loops; use systems that express everything in standard, procedural code; and have access to strong, foolproof abstractions.", "url": "https://stack.convex.dev/introducing-fullstack-bench", "title": "Introducing Fullstack-Bench", "summary": "Coding agents can do more autonomously when they write code that has tight, automatic feedback loops; use systems that express everything in standard, procedural code; and have access to strong, foolproof abstractions.", "date_modified": "2025-02-23T17:20:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives", "AI" ] }, { "id": "https://stack.convex.dev/matrix-building-a-real-time-rpg-game-with-convex", "content_html": "Matrix is a real-time RPG for language learning, using Convex for live updates and AI for translations. Players chat with nearby users on a shared map, leveraging a simple Convex backend for real-time interactions. ", "url": "https://stack.convex.dev/matrix-building-a-real-time-rpg-game-with-convex", "title": "Matrix: Building a real-time RPG game with Convex ", "summary": "Matrix is a real-time RPG for language learning, using Convex for live updates and AI for translations. Players chat with nearby users on a shared map, leveraging a simple Convex backend for real-time interactions. ", "date_modified": "2025-02-20T00:55:46.353Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/types-cookbook", "content_html": "It can be tough to wrangle types to behave how you want them to. Thankfully, Convex was designed to make the experience with types perfect. Learn why that's the case here.", "url": "https://stack.convex.dev/types-cookbook", "title": "Types and Validators: A Convex Cookbook", "summary": "It can be tough to wrangle types to behave how you want them to. Thankfully, Convex was designed to make the experience with types perfect. Learn why that's the case here.", "date_modified": "2025-02-15T01:53:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns", "TypeScript", "Fundamentals" ] }, { "id": "https://stack.convex.dev/self-hosted-develop-and-deploy", "content_html": "Learn how to self-host Convex, the reactive database and backend. This guide covers setup with Docker, Fly.io, and Neon.tech, plus pros and cons of self-hosting vs. cloud hosting.", "url": "https://stack.convex.dev/self-hosted-develop-and-deploy", "title": "Self-Hosting with Convex: Everything You Need to Know", "summary": "Learn how to self-host Convex, the reactive database and backend. This guide covers setup with Docker, Fly.io, and Neon.tech, plus pros and cons of self-hosting vs. cloud hosting.", "date_modified": "2025-02-13T15:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Advanced", "Open-Source", "Production" ] }, { "id": "https://stack.convex.dev/setting-up-cloudflare-pages-for-convex-deployments", "content_html": "ClarityText uses Cloudflare Pages for Convex deployments on Language Hopper, leveraging preview deployments, Git integration, and Node.js support. In this guide, Atul Raghuvanshi and Convex Champion Matt Luo walk through setup, including team onboarding, build scripts, Git configuration, and troubleshooting.", "url": "https://stack.convex.dev/setting-up-cloudflare-pages-for-convex-deployments", "title": "Setting Up Cloudflare Pages for Convex Preview Deployments: A Step-by-Step Guide", "summary": "ClarityText uses Cloudflare Pages for Convex deployments on Language Hopper, leveraging preview deployments, Git integration, and Node.js support. In this guide, Atul Raghuvanshi and Convex Champion Matt Luo walk through setup, including team onboarding, build scripts, Git configuration, and troubleshooting.", "date_modified": "2025-02-07T00:32:28.312Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "Integration" ] }, { "id": "https://stack.convex.dev/databased-webdevcody", "content_html": "WebDevCody drops into Databased to discuss content creation, AI, and sponsor relationships.", "url": "https://stack.convex.dev/databased-webdevcody", "title": " Databased: Why Most Content Doesn't Work ft. Web Dev Cody", "summary": "WebDevCody drops into Databased to discuss content creation, AI, and sponsor relationships.", "date_modified": "2025-01-29T20:04:00.583Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives" ] }, { "id": "https://stack.convex.dev/building-quip-trivia-game", "content_html": "Discover how the creation of QuiP, an online trivia league, led to a deeper understanding of domain-driven development using Convex. This blog explores the importance of building a shared language with your community to design applications, covering everything from backend modeling to crafting user-friendly interfaces. ", "url": "https://stack.convex.dev/building-quip-trivia-game", "title": "From Trivia to TypeScript: QuiP's Domain-Driven Development with Convex", "summary": "Discover how the creation of QuiP, an online trivia league, led to a deeper understanding of domain-driven development using Convex. This blog explores the importance of building a shared language with your community to design applications, covering everything from backend modeling to crafting user-friendly interfaces. ", "date_modified": "2025-01-29T00:49:16.307Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/why-convex-queries-are-the-ultimate-form-of-derived-state", "content_html": "After years of wrestling with state management, I've found myself excited by how Convex queries have simplified the way I think about derived state. Instead of juggling complex state libraries and websocket implementations, Convex offers a refreshingly straightforward approach: just declare what data you need, and it stays synchronized across all clients automatically. It's made me wonder if we've been overcomplicating things all along.", "url": "https://stack.convex.dev/why-convex-queries-are-the-ultimate-form-of-derived-state", "title": "Why Convex Queries are the Ultimate Form of Derived State", "summary": "After years of wrestling with state management, I've found myself excited by how Convex queries have simplified the way I think about derived state. Instead of juggling complex state libraries and websocket implementations, Convex offers a refreshingly straightforward approach: just declare what data you need, and it stays synchronized across all clients automatically. It's made me wonder if we've been overcomplicating things all along.", "date_modified": "2025-01-27T22:34:14.618Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives" ] }, { "id": "https://stack.convex.dev/high-throughput-mutations-via-precise-queries", "content_html": "Explore techniques to improve transaction throughput and concurrency in ACID databases by reducing conflicts and optimizing database reads. This guide covers patterns like Queue, Hot and Cold Tables, and Predicate Locking with clear examples using Convex, providing developers with tools to handle high-throughput workflows effectively.", "url": "https://stack.convex.dev/high-throughput-mutations-via-precise-queries", "title": "Optimize Transaction Throughput: 3 Patterns for Scaling with Convex and ACID Databases", "summary": "Explore techniques to improve transaction throughput and concurrency in ACID databases by reducing conflicts and optimizing database reads. This guide covers patterns like Queue, Hot and Cold Tables, and Predicate Locking with clear examples using Convex, providing developers with tools to handle high-throughput workflows effectively.", "date_modified": "2025-01-23T23:35:21.292Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Database", "Patterns" ] }, { "id": "https://stack.convex.dev/databased-12", "content_html": "On this episode of Convex's podcast, Databased, James interviews Andy Pavlo to get his thoughts on all of the big Database trends of 2024.", "url": "https://stack.convex.dev/databased-12", "title": "What You Missed in 2024 in the World of Databases, with Andy Pavlo", "summary": "On this episode of Convex's podcast, Databased, James interviews Andy Pavlo to get his thoughts on all of the big Database trends of 2024.", "date_modified": "2025-01-23T22:03:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Podcast" ] }, { "id": "https://stack.convex.dev/build-ai-agent-assistant-tools-nextjs15", "content_html": "Sonny Sangha’s YouTube video demonstrates how to build an AI agent using Next.js 15, Convex, LangChain, Clerk, and IBM wxflows. The tutorial covers creating a secure and interactive chat application with real-time updates, Tool integration, and optimized performance using Convex for backend data management. With features like user authentication via Clerk, dynamic data handling through wxflows, and prompt caching with Claude 3.5 Sonnet, the video provides a detailed guide for developers looking to implement cutting-edge AI capabilities in their projects.", "url": "https://stack.convex.dev/build-ai-agent-assistant-tools-nextjs15", "title": "Building an Advanced AI Agent with Next.js 15, Convex, and LangChain: A Step-by-Step Guide", "summary": "Sonny Sangha’s YouTube video demonstrates how to build an AI agent using Next.js 15, Convex, LangChain, Clerk, and IBM wxflows. The tutorial covers creating a secure and interactive chat application with real-time updates, Tool integration, and optimized performance using Convex for backend data management. With features like user authentication via Clerk, dynamic data handling through wxflows, and prompt caching with Claude 3.5 Sonnet, the video provides a detailed guide for developers looking to implement cutting-edge AI capabilities in their projects.", "date_modified": "2025-01-23T00:45:14.994Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/shop-talk-building-a-voice-controlled-shopping-list-app-with-daily-bots-and-convex", "content_html": "A step-by-step guild using daily bots open-source real-time voice and video AI cloud technology to build an AI real-time shopping list app—all controlled by voice. ", "url": "https://stack.convex.dev/shop-talk-building-a-voice-controlled-shopping-list-app-with-daily-bots-and-convex", "title": "Shop Talk: Building an AI-Powered Voice-Controlled Shopping Agent with Daily Bots and Convex", "summary": "A step-by-step guild using daily bots open-source real-time voice and video AI cloud technology to build an AI real-time shopping list app—all controlled by voice. ", "date_modified": "2025-01-10T00:48:46.312Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "AI" ] }, { "id": "https://stack.convex.dev/dynamic-query-builders", "content_html": "You can write a Convex query whose structure -- which index/order/filters to apply, if any -- depends on runtime factors. This article gives a recipe for building queries dynamically.", "url": "https://stack.convex.dev/dynamic-query-builders", "title": "Convex Cookbook: Dynamic Query Builders", "summary": "You can write a Convex query whose structure -- which index/order/filters to apply, if any -- depends on runtime factors. This article gives a recipe for building queries dynamically.", "date_modified": "2025-01-07T17:40:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns", "Database" ] }, { "id": "https://stack.convex.dev/6-tips-for-improving-your-cursor-composer-and-convex-workflow", "content_html": "After much experimentation I have found some good ways to improve the coding experience when using Cursor and Convex. In this article I share 6 tips to improve your workflow.", "url": "https://stack.convex.dev/6-tips-for-improving-your-cursor-composer-and-convex-workflow", "title": "6 Tips for improving your Cursor Composer and Convex Workflow", "summary": "After much experimentation I have found some good ways to improve the coding experience when using Cursor and Convex. In this article I share 6 tips to improve your workflow.", "date_modified": "2025-01-06T22:00:44.270Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "AI" ] }, { "id": "https://stack.convex.dev/how-to-schedule-ai-content-creation-using-convex", "content_html": "Imagine your app generating fresh content every minute—without you lifting a finger. That’s what Convex Cron makes possible. In this guide, you’ll set up a system to automate Q&A generation with ChatGPT.", "url": "https://stack.convex.dev/how-to-schedule-ai-content-creation-using-convex", "title": "How to Schedule AI Content Creation Using Convex", "summary": "Imagine your app generating fresh content every minute—without you lifting a finger. That’s what Convex Cron makes possible. In this guide, you’ll set up a system to automate Q&A generation with ChatGPT.", "date_modified": "2024-12-28T04:27:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/tanstack-real-time-github-npm-stat-counter", "content_html": "The tutorial \"How I added GitHub and npm stat counters to TanStack.com\" by Convex Champion Shawn Erquhart details how Convex automates the integration of live GitHub and npm statistics on the TanStack.com website. It showcases data fetching, database optimization, and real-time updates through APIs, web scraping, and scheduled jobs.", "url": "https://stack.convex.dev/tanstack-real-time-github-npm-stat-counter", "title": "Tutorial: How I added GitHub and npm stat counters to TanStack.com", "summary": "The tutorial \"How I added GitHub and npm stat counters to TanStack.com\" by Convex Champion Shawn Erquhart details how Convex automates the integration of live GitHub and npm statistics on the TanStack.com website. It showcases data fetching, database optimization, and real-time updates through APIs, web scraping, and scheduled jobs.", "date_modified": "2024-12-23T21:20:58.792Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/real-time-ai-chat-with-convex-and-chatgpt", "content_html": "Learn how to create real-time conversations between users and ChatGPT using Convex. You’ll design schemas, sync data automatically, and paginate chat history like a pro.", "url": "https://stack.convex.dev/real-time-ai-chat-with-convex-and-chatgpt", "title": "Building AI Chat with Convex and ChatGPT", "summary": "Learn how to create real-time conversations between users and ChatGPT using Convex. You’ll design schemas, sync data automatically, and paginate chat history like a pro.", "date_modified": "2024-12-21T04:12:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/add-a-collaborative-document-editor-to-your-app", "content_html": "Or how I learned to love BlockNote, Tiptap and ProseMirror OT sync.", "url": "https://stack.convex.dev/add-a-collaborative-document-editor-to-your-app", "title": "Add a collaborative document editor to your app", "summary": "Or how I learned to love BlockNote, Tiptap and ProseMirror OT sync.", "date_modified": "2024-12-19T17:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Integration", "Walkthroughs", "Local-First" ] }, { "id": "https://stack.convex.dev/keeping-real-time-users-in-sync-convex", "content_html": "Hamza Saleem shares how Convex simplifies building real-time data sync apps like Sticky by using the useQuery hook, where you can easily fetch and sync data, like sticky notes, with minimal setup. He explains how Convex handles challenges like syncing data, live updates, and user tracking.\n\n", "url": "https://stack.convex.dev/keeping-real-time-users-in-sync-convex", "title": "Keeping Users in Sync: Building Real-time Collaboration with Convex", "summary": "Hamza Saleem shares how Convex simplifies building real-time data sync apps like Sticky by using the useQuery hook, where you can easily fetch and sync data, like sticky notes, with minimal setup. He explains how Convex handles challenges like syncing data, live updates, and user tracking.\n\n", "date_modified": "2024-12-17T23:30:54.208Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/build-real-time-user-profiles-with-convex-and-clerk", "content_html": "Learn how to build real-time profiles using Convex and Clerk. From storing user data to uploading profile pictures, we’ll show you how to make changes reflect instantly in your app.", "url": "https://stack.convex.dev/build-real-time-user-profiles-with-convex-and-clerk", "title": "How to Create Real-Time User Profiles with Convex and Clerk", "summary": "Learn how to build real-time profiles using Convex and Clerk. From storing user data to uploading profile pictures, we’ll show you how to make changes reflect instantly in your app.", "date_modified": "2024-12-14T03:40:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/zero-downtime-migrations", "content_html": "Convex's migrations component makes it easy and safe to run complex database migrations without causing any interruption to live traffic.", "url": "https://stack.convex.dev/zero-downtime-migrations", "title": "Can your database do this? Ep 3: Zero-downtime, type-safe migrations", "summary": "Convex's migrations component makes it easy and safe to run complex database migrations without causing any interruption to live traffic.", "date_modified": "2024-12-11T16:03:56.828Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns" ] }, { "id": "https://stack.convex.dev/user-authentication-with-clerk-and-convex", "content_html": "Want to build secure user logins without the headache? This guide shows you how to connect Clerk with Convex for smooth authentication in your app.", "url": "https://stack.convex.dev/user-authentication-with-clerk-and-convex", "title": "User Authentication with Clerk and Convex", "summary": "Want to build secure user logins without the headache? This guide shows you how to connect Clerk with Convex for smooth authentication in your app.", "date_modified": "2024-12-07T03:33:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/code-spelunking-uncovering-convex-s-api-generation-secrets", "content_html": "As the newest member of the Convex team I am keen to find out how the magic works. Join me as I go spelunking through the codebase and uncover how the API generation actually works under the covers.", "url": "https://stack.convex.dev/code-spelunking-uncovering-convex-s-api-generation-secrets", "title": "Code Spelunking: Uncovering Convex's API Generation Secrets", "summary": "As the newest member of the Convex team I am keen to find out how the magic works. Join me as I go spelunking through the codebase and uncover how the API generation actually works under the covers.", "date_modified": "2024-12-06T18:57:40.268Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives" ] }, { "id": "https://stack.convex.dev/company-values", "content_html": "A good set of values can be critically important in establishing a team that stands for something. This post outlines why company values are important, what characteristics good and bad company values have, and how to run a process to determine your company values. This applies equally well to a company or team or any other organization.", "url": "https://stack.convex.dev/company-values", "title": "Company Values that Matter", "summary": "A good set of values can be critically important in establishing a team that stands for something. This post outlines why company values are important, what characteristics good and bad company values have, and how to run a process to determine your company values. This applies equally well to a company or team or any other organization.", "date_modified": "2024-12-04T16:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives" ] }, { "id": "https://stack.convex.dev/convex-the-database-that-made-me-switch-careers", "content_html": "Today is my first day working for Convex 🎉, so I thought I’d take the opportunity to share my thoughts on why I decided to join and what excites me about the technology. ", "url": "https://stack.convex.dev/convex-the-database-that-made-me-switch-careers", "title": "Convex: The Database that Made Me Switch Careers", "summary": "Today is my first day working for Convex 🎉, so I thought I’d take the opportunity to share my thoughts on why I decided to join and what excites me about the technology. ", "date_modified": "2024-12-02T01:41:12.626Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives" ] }, { "id": "https://stack.convex.dev/building-type-safe-rust-applications-with-convex", "content_html": "Building Type-Safe Rust Applications with Convex: Introducing convex-typegen from CodingWIthJamal - a tool that brings Convex's type safety and developer experience to the Rust ecosystem.", "url": "https://stack.convex.dev/building-type-safe-rust-applications-with-convex", "title": "Building Type-Safe Rust Applications with Convex: Introducing convex-typegen", "summary": "Building Type-Safe Rust Applications with Convex: Introducing convex-typegen from CodingWIthJamal - a tool that brings Convex's type safety and developer experience to the Rust ecosystem.", "date_modified": "2024-11-22T18:42:10.392Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/automerge-and-convex", "content_html": "Learn about Automerge CRDTs for collaborative editing, syncing changes using Convex.", "url": "https://stack.convex.dev/automerge-and-convex", "title": "Going local-first with Automerge and Convex", "summary": "Learn about Automerge CRDTs for collaborative editing, syncing changes using Convex.", "date_modified": "2024-11-19T20:00:33.780Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Advanced", "Patterns", "Integration", "Local-First" ] }, { "id": "https://stack.convex.dev/midpoints-a-word-game-powered-by-ai-embeddings-and-convex-components", "content_html": "Ever wondered what word sits perfectly between \"sporty\" and \"practical\"? Or perhaps \"sweet\" and \"crunchy\"? Midpoints is a new word game that gives you 10 chances to find the best match and scores you accordingly!", "url": "https://stack.convex.dev/midpoints-a-word-game-powered-by-ai-embeddings-and-convex-components", "title": "Midpoints: A Word Game Powered by AI Embeddings and Convex Components", "summary": "Ever wondered what word sits perfectly between \"sporty\" and \"practical\"? Or perhaps \"sweet\" and \"crunchy\"? Midpoints is a new word game that gives you 10 chances to find the best match and scores you accordingly!", "date_modified": "2024-11-19T16:11:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "AI", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/object-sync-engine", "content_html": "Object sync engines manage a rich object graph across multiple clients and a centralized server and are a great fit for building local-first apps.", "url": "https://stack.convex.dev/object-sync-engine", "title": "An Object Sync Engine for Local-first Apps", "summary": "Object sync engines manage a rich object graph across multiple clients and a centralized server and are a great fit for building local-first apps.", "date_modified": "2024-11-13T11:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives", "Local-First" ] }, { "id": "https://stack.convex.dev/building-a-second-brain-how-i-created-mike-ai-chat-bot-with-convex", "content_html": "Mike, a Senior Software Developer and Convex Champion, built “Mike Bot”—a virtual chatbot on his blog that captures his knowledge, experience, and personality—using Convex as the backend, along with OpenAI and a custom React UI.", "url": "https://stack.convex.dev/building-a-second-brain-how-i-created-mike-ai-chat-bot-with-convex", "title": "Building A Second Brain: How I Created Mike AI Chat Bot with Convex", "summary": "Mike, a Senior Software Developer and Convex Champion, built “Mike Bot”—a virtual chatbot on his blog that captures his knowledge, experience, and personality—using Convex as the backend, along with OpenAI and a custom React UI.", "date_modified": "2024-11-12T00:00:19.314Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/mobile-first", "content_html": "Indy, our Head of Product, led building Google Photos for Android. This is his story.", "url": "https://stack.convex.dev/mobile-first", "title": "Mobile-first: Building Google Photos", "summary": "Indy, our Head of Product, led building Google Photos for Android. This is his story.", "date_modified": "2024-11-07T20:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives", "Local-First" ] }, { "id": "https://stack.convex.dev/open-source-starter-kit-convex-v1-based-on-midday", "content_html": "Introducing v1, a SaaS starter inspired by Midday’s SaaS starter setup, featuring a boilerplate for mono repo management, subscription emails, and more—all tailored for Convex. This version includes built-in CRUD, theming, billing, and a streamlined CLI for setup; you can try it out at convex-v1.run and find the repo on GitHub.", "url": "https://stack.convex.dev/open-source-starter-kit-convex-v1-based-on-midday", "title": "New Open-source Starter Kit: Convex v1 based on Midday.", "summary": "Introducing v1, a SaaS starter inspired by Midday’s SaaS starter setup, featuring a boilerplate for mono repo management, subscription emails, and more—all tailored for Convex. This version includes built-in CRUD, theming, billing, and a streamlined CLI for setup; you can try it out at convex-v1.run and find the repo on GitHub.", "date_modified": "2024-11-06T21:27:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/a-map-of-sync", "content_html": "We can categorize sync platforms across nine dimensions: data size, data update rate, the structure of the data, input latency, offline support, number of concurrent clients, centralization, flexibility, and consistency.\n", "url": "https://stack.convex.dev/a-map-of-sync", "title": "A Map of Sync", "summary": "We can categorize sync platforms across nine dimensions: data size, data update rate, the structure of the data, input latency, offline support, number of concurrent clients, centralization, flexibility, and consistency.\n", "date_modified": "2024-10-31T13:55:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives", "Local-First" ] }, { "id": "https://stack.convex.dev/backend-components", "content_html": "Convex Components enable an ecosystem of powerful building blocks to reduce the amount of code you have to write and maintain yourself. Geospatial search, Expo push notifications, LaunchDarkly feature flags, durable function workflows, and more.", "url": "https://stack.convex.dev/backend-components", "title": "Components for your Backend", "summary": "Convex Components enable an ecosystem of powerful building blocks to reduce the amount of code you have to write and maintain yourself. Geospatial search, Expo push notifications, LaunchDarkly feature flags, durable function workflows, and more.", "date_modified": "2024-10-22T14:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "Integration", "Patterns" ] }, { "id": "https://stack.convex.dev/sync", "content_html": "Sync platforms like Convex simplify distributed state management, ensuring that developers can focus on building their applications rather than managing backend complexities.", "url": "https://stack.convex.dev/sync", "title": "What is Sync?", "summary": "Sync platforms like Convex simplify distributed state management, ensuring that developers can focus on building their applications rather than managing backend complexities.", "date_modified": "2024-10-11T14:04:24.068Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives", "Local-First" ] }, { "id": "https://stack.convex.dev/introducing-convex-for-swift", "content_html": "I’m excited to announce Convex Swift, which unlocks the ability to build iOS and MacOS clients for your Convex app.", "url": "https://stack.convex.dev/introducing-convex-for-swift", "title": "Introducing Convex for Swift", "summary": "I’m excited to announce Convex Swift, which unlocks the ability to build iOS and MacOS clients for your Convex app.", "date_modified": "2024-10-10T20:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Integration", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/triggers", "content_html": "Triggers automatically run code whenever data in a table changes. A library in the convex-helpers npm package allows you to attach trigger functions to your Convex database.", "url": "https://stack.convex.dev/triggers", "title": "Database Triggers", "summary": "Triggers automatically run code whenever data in a table changes. A library in the convex-helpers npm package allows you to attach trigger functions to your Convex database.", "date_modified": "2024-10-10T19:00:22.493Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns", "Advanced", "Database" ] }, { "id": "https://stack.convex.dev/usestate-less", "content_html": "The React Hook useState is probably used more than necessary. We'll go over how you can port those usages over to Convex with simple queries and mutations.", "url": "https://stack.convex.dev/usestate-less", "title": "Use real persistence, not useState ", "summary": "The React Hook useState is probably used more than necessary. We'll go over how you can port those usages over to Convex with simple queries and mutations.", "date_modified": "2024-10-01T22:46:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/using-cursor-claude-and-convex-to-build-a-social-media-scheduling-app", "content_html": "I was curious to see if I could prompt my way through developing an entire app with Cursor and Claude. It went pretty well - but there are some important caveats to keep in mind.", "url": "https://stack.convex.dev/using-cursor-claude-and-convex-to-build-a-social-media-scheduling-app", "title": "Using Cursor, Claude and Convex to Build a Social Media Scheduling App", "summary": "I was curious to see if I could prompt my way through developing an entire app with Cursor and Claude. It went pretty well - but there are some important caveats to keep in mind.", "date_modified": "2024-09-30T17:06:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "Integration", "AI", "TypeScript" ] }, { "id": "https://stack.convex.dev/hackathon-winners-fall-2024", "content_html": "We're excited to announce the winners of the Zero to One Hackathon V2! Thousands of developers and startup founders brought their A-game, building some impressive fullstack apps on Convex.", "url": "https://stack.convex.dev/hackathon-winners-fall-2024", "title": "Zero to One Hackathon V2 Winners", "summary": "We're excited to announce the winners of the Zero to One Hackathon V2! Thousands of developers and startup founders brought their A-game, building some impressive fullstack apps on Convex.", "date_modified": "2024-09-25T18:03:33.825Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Hackathon" ] }, { "id": "https://stack.convex.dev/multiple-repos", "content_html": "Turns out, you can organize your Convex project across multiple repositories! Check out this guide on how to implement this in your project.", "url": "https://stack.convex.dev/multiple-repos", "title": "Convex in Multiple Repositories", "summary": "Turns out, you can organize your Convex project across multiple repositories! Check out this guide on how to implement this in your project.", "date_modified": "2024-09-18T18:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fundamentals", "Patterns" ] }, { "id": "https://stack.convex.dev/crud-and-rest", "content_html": "The term CRUD, or CRUD API, is often tossed around when interacting with databases or building backend APIs. This article will examine what CRUD is, what it’s suitable for, and its shortcomings. Finally, we’ll explore how to quickly implement a CRUD API using a modern backend like Convex.", "url": "https://stack.convex.dev/crud-and-rest", "title": "CRUD APIs: Functional, but Inefficient", "summary": "The term CRUD, or CRUD API, is often tossed around when interacting with databases or building backend APIs. This article will examine what CRUD is, what it’s suitable for, and its shortcomings. Finally, we’ll explore how to quickly implement a CRUD API using a modern backend like Convex.", "date_modified": "2024-09-13T01:53:13.453Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fundamentals", "Patterns" ] }, { "id": "https://stack.convex.dev/introducing-convex-for-android", "content_html": "It was my goal to create an API that both feels natural to Android developers who have kept up with modern application architecture principles, as well something that feels like a natural fit in the Convex ecosystem.", "url": "https://stack.convex.dev/introducing-convex-for-android", "title": "Introducing Convex for Android", "summary": "It was my goal to create an API that both feels natural to Android developers who have kept up with modern application architecture principles, as well something that feels like a natural fit in the Convex ecosystem.", "date_modified": "2024-09-11T19:02:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Integration", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/a-developers-guide-to-cors", "content_html": "Cross-Origin Resource Sharing (CORS) is a crucial concept in modern web development, yet it's often misunderstood and can be a source of frustration for many developers. This article aims to demystify CORS, explain its importance, and provide practical guidance on its implementation. Whether you're a seasoned developer or just starting out, this guide will help you navigate the intricacies of CORS and use it effectively in your projects.", "url": "https://stack.convex.dev/a-developers-guide-to-cors", "title": "Understanding CORS: A Developer's Guide", "summary": "Cross-Origin Resource Sharing (CORS) is a crucial concept in modern web development, yet it's often misunderstood and can be a source of frustration for many developers. This article aims to demystify CORS, explain its importance, and provide practical guidance on its implementation. Whether you're a seasoned developer or just starting out, this guide will help you navigate the intricacies of CORS and use it effectively in your projects.", "date_modified": "2024-08-27T15:07:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Web", "Fundamentals", "Advanced" ] }, { "id": "https://stack.convex.dev/testing-authenticated-functions-from-the-dashboard", "content_html": "You can test functions that rely on a sign-in by decoding your JWT and using the fields with \"Act as a user\" on the dashboard.", "url": "https://stack.convex.dev/testing-authenticated-functions-from-the-dashboard", "title": "Testing authenticated functions from the dashboard", "summary": "You can test functions that rely on a sign-in by decoding your JWT and using the fields with \"Act as a user\" on the dashboard.", "date_modified": "2024-08-09T16:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Authentication", "Fundamentals", "Testing" ] }, { "id": "https://stack.convex.dev/cron-jobs", "content_html": "Even though Convex supports the creation of cron jobs out of the box, until now, we've only supported static jobs. With user space crons, we now support the programmatic definition of crons at runtime. ", "url": "https://stack.convex.dev/cron-jobs", "title": "Configure Cron Jobs at Runtime", "summary": "Even though Convex supports the creation of cron jobs out of the box, until now, we've only supported static jobs. With user space crons, we now support the programmatic definition of crons at runtime. ", "date_modified": "2024-07-17T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/pagination", "content_html": "Convex offers robust control over pagination with a powerful function, getPage, enabling complex edge cases. In this article, we go over how to use that function in your Convex app.", "url": "https://stack.convex.dev/pagination", "title": "Take Control of Pagination", "summary": "Convex offers robust control over pagination with a powerful function, getPage, enabling complex edge cases. In this article, we go over how to use that function in your Convex app.", "date_modified": "2024-07-11T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/convex-auth", "content_html": "Convex Auth is a library for implementing authentication natively in your Convex backend.", "url": "https://stack.convex.dev/convex-auth", "title": "Introducing Convex Auth", "summary": "Convex Auth is a library for implementing authentication natively in your Convex backend.", "date_modified": "2024-07-10T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Authentication" ] }, { "id": "https://stack.convex.dev/todoist-clone", "content_html": "In this 7 hour tutorial, you will learn how to create an end-to-end full stack Todoist clone, with AI features to help you organize and suggest missing items in your list with adding, deleting tasks, authentication, search using Zod, Next.js, Convex, React, Next.js Auth V5 i.e. Auth.js, Google Sign in, ShadCN UI library, React hook forms, TypeScript, OPenAI, TailwindCSS and more.", "url": "https://stack.convex.dev/todoist-clone", "title": "Build and Deploy a Full Stack AI Todoist Clone: Next.js, Convex & TypeScript", "summary": "In this 7 hour tutorial, you will learn how to create an end-to-end full stack Todoist clone, with AI features to help you organize and suggest missing items in your list with adding, deleting tasks, authentication, search using Zod, Next.js, Convex, React, Next.js Auth V5 i.e. Auth.js, Google Sign in, ShadCN UI library, React hook forms, TypeScript, OPenAI, TailwindCSS and more.", "date_modified": "2024-06-20T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "Fundamentals" ] }, { "id": "https://stack.convex.dev/magic-caching", "content_html": "With Convex's magic query cache, Convex's powerful subscriptions are cached, not merely values. So you get fast, jank-free renders with no cache consistency or invalidation headaches.", "url": "https://stack.convex.dev/magic-caching", "title": "Can your database do this? Ep. 1: Magic caching", "summary": "With Convex's magic query cache, Convex's powerful subscriptions are cached, not merely values. So you get fast, jank-free renders with no cache consistency or invalidation headaches.", "date_modified": "2024-06-18T17:19:49.521Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Reactivity", "Patterns" ] }, { "id": "https://stack.convex.dev/log-streams-common-uses", "content_html": "Log streams like Axiom and Datadog can be used to provide powerful querying and alerting on logs and errors from your Convex functions, helping with debugging issues when they come up and providing early insights to detect smaller issues before they become bigger.\n\nThis article covers how to do the several common things with either Axiom or Datadog hooked up as a Convex log stream including filtering to a request, logging structured metadata, and visualizing usage.", "url": "https://stack.convex.dev/log-streams-common-uses", "title": "Log Streams: Common uses", "summary": "Log streams like Axiom and Datadog can be used to provide powerful querying and alerting on logs and errors from your Convex functions, helping with debugging issues when they come up and providing early insights to detect smaller issues before they become bigger.\n\nThis article covers how to do the several common things with either Axiom or Datadog hooked up as a Convex log stream including filtering to a request, logging structured metadata, and visualizing usage.", "date_modified": "2024-06-17T15:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns", "Advanced", "Production" ] }, { "id": "https://stack.convex.dev/streaming-http-using-fetch", "content_html": "Learn the basics of HTTP streaming with Convex by re-implementing OpenAI's SDK using built-in fetch and async iterators. No npm dependencies needed.", "url": "https://stack.convex.dev/streaming-http-using-fetch", "title": "Streaming HTTP Responses using fetch", "summary": "Learn the basics of HTTP streaming with Convex by re-implementing OpenAI's SDK using built-in fetch and async iterators. No npm dependencies needed.", "date_modified": "2024-06-11T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "AI" ] }, { "id": "https://stack.convex.dev/full-stack-framework-fallacy", "content_html": "When people want a full-stack framework, what they really want is an opinionated backend that interoperates seamlessly with their frontends in a way that empowers full-stack developers to easily build apps that can scale.", "url": "https://stack.convex.dev/full-stack-framework-fallacy", "title": "The “full-stack framework” fallacy", "summary": "When people want a full-stack framework, what they really want is an opinionated backend that interoperates seamlessly with their frontends in a way that empowers full-stack developers to easily build apps that can scale.", "date_modified": "2024-06-06T16:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives" ] }, { "id": "https://stack.convex.dev/ai-chat-with-http-streaming", "content_html": "By leveraging HTTP actions with streaming, this chat app balances real-time responsiveness with efficient bandwidth usage. Users receive character-by-character updates to their own responses directly from ChatGPT, while other users see periodic updates, minimizing database bandwidth.", "url": "https://stack.convex.dev/ai-chat-with-http-streaming", "title": "AI Chat with HTTP Streaming", "summary": "By leveraging HTTP actions with streaming, this chat app balances real-time responsiveness with efficient bandwidth usage. Users receive character-by-character updates to their own responses directly from ChatGPT, while other users see periodic updates, minimizing database bandwidth.", "date_modified": "2024-06-06T15:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Advanced", "AI", "Patterns", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/select-distinct", "content_html": "You'll often want to retrieve unique records from your database. While SELECT DISTINCT is the traditional way to do this in SQL databases, we've improved on this pattern in Convex by making it more consistent.", "url": "https://stack.convex.dev/select-distinct", "title": "SELECT DISTINCT without SQL", "summary": "You'll often want to retrieve unique records from your database. While SELECT DISTINCT is the traditional way to do this in SQL databases, we've improved on this pattern in Convex by making it more consistent.", "date_modified": "2024-06-04T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Database", "Patterns" ] }, { "id": "https://stack.convex.dev/rate-limiting", "content_html": "Implementing application rate limiting when you have fast access to a database with strong ACID guarantees. Token bucket and fixed window, with fairness, burst accommodation and fire-and-forget support.", "url": "https://stack.convex.dev/rate-limiting", "title": "Rate Limiting at the Application Layer", "summary": "Implementing application rate limiting when you have fast access to a database with strong ACID guarantees. Token bucket and fixed window, with fairness, burst accommodation and fire-and-forget support.", "date_modified": "2024-05-21T19:00:26.018Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns" ] }, { "id": "https://stack.convex.dev/caching-in", "content_html": "A cache is a non-authoritative representation of data maintained for performance reasons. Find out what these words mean and when you should care about them here.", "url": "https://stack.convex.dev/caching-in", "title": "The Ultimate Caching Definition: Invalidation, Optimization, and Layers", "summary": "A cache is a non-authoritative representation of data maintained for performance reasons. Find out what these words mean and when you should care about them here.", "date_modified": "2024-05-14T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives", "Fundamentals" ] }, { "id": "https://stack.convex.dev/work-stealing", "content_html": "Compare push-based load balancing with pull-based work stealing as scalable strategies for distributing resource-intensive workloads, such as running LLM models for AI apps.", "url": "https://stack.convex.dev/work-stealing", "title": "Work Stealing: Load-balancing for compute-heavy tasks", "summary": "Compare push-based load balancing with pull-based work stealing as scalable strategies for distributing resource-intensive workloads, such as running LLM models for AI apps.", "date_modified": "2024-05-14T18:30:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Advanced", "Patterns", "Perspectives" ] }, { "id": "https://stack.convex.dev/implementing-work-stealing", "content_html": "Implementing \"work stealing\" - a workload distribution strategy - using Convex's reactive database.", "url": "https://stack.convex.dev/implementing-work-stealing", "title": "Implementing work stealing with a reactive database", "summary": "Implementing \"work stealing\" - a workload distribution strategy - using Convex's reactive database.", "date_modified": "2024-05-14T17:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns", "Advanced", "AI" ] }, { "id": "https://stack.convex.dev/nextauth", "content_html": "Learn how to use Auth.js with your Next.js server and Convex backend to build a full-featured authentication system.", "url": "https://stack.convex.dev/nextauth", "title": "Convex with Auth.js (NextAuth)", "summary": "Learn how to use Auth.js with your Next.js server and Convex backend to build a full-featured authentication system.", "date_modified": "2024-05-07T14:03:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Integration", "Walkthroughs", "Sessions", "Authentication" ] }, { "id": "https://stack.convex.dev/nextauth-adapter", "content_html": "Learn how to install and configure the Convex adapter for Auth.js as part of getting set up with Convex and Next.js.", "url": "https://stack.convex.dev/nextauth-adapter", "title": "Convex Adapter for Auth.js (NextAuth) Setup Guide", "summary": "Learn how to install and configure the Convex adapter for Auth.js as part of getting set up with Convex and Next.js.", "date_modified": "2024-05-07T11:47:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Integration", "Sessions", "Authentication" ] }, { "id": "https://stack.convex.dev/fiverr-clone", "content_html": "Check this video out for an in-depth 6 hour tutorial on building your own version of Fiverr using Convex.", "url": "https://stack.convex.dev/fiverr-clone", "title": "Full Stack Tutorial – Fiverr Clone with NextJS, React, Convex, Typescript, Tailwind CSS, ShadCN", "summary": "Check this video out for an in-depth 6 hour tutorial on building your own version of Fiverr using Convex.", "date_modified": "2024-05-01T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/launchpie-hackathon-winner", "content_html": "Earlier this year we ran a hackathon to find who could use Convex's features the best to build an application from scratch. From 2400 participants, Konrad Hylton pulled it off with Launchpie.", "url": "https://stack.convex.dev/launchpie-hackathon-winner", "title": "LaunchPie’s Experience Winning the Zero-to-One Hackathon", "summary": "Earlier this year we ran a hackathon to find who could use Convex's features the best to build an application from scratch. From 2400 participants, Konrad Hylton pulled it off with Launchpie.", "date_modified": "2024-04-26T17:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Hackathon" ] }, { "id": "https://stack.convex.dev/migrating-data-with-mutations", "content_html": "Online migrations in Convex using mutations, including a Convex Component to manage them.", "url": "https://stack.convex.dev/migrating-data-with-mutations", "title": "Stateful Online Migrations using Mutations", "summary": "Online migrations in Convex using mutations, including a Convex Component to manage them.", "date_modified": "2024-04-16T19:00:54.357Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns", "Database" ] }, { "id": "https://stack.convex.dev/databases-are-spreadsheets", "content_html": "I want to share my mental model of databases:\n\n- Databases are just big spreadsheets\n- An index is just a view of the spreadsheet sorted by one or more columns\n- Binary search over a sorted list is faster than a linear scan (for large lists)", "url": "https://stack.convex.dev/databases-are-spreadsheets", "title": "Databases are Spreadsheets", "summary": "I want to share my mental model of databases:\n\n- Databases are just big spreadsheets\n- An index is just a view of the spreadsheet sorted by one or more columns\n- Binary search over a sorted list is faster than a linear scan (for large lists)", "date_modified": "2024-04-16T16:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives" ] }, { "id": "https://stack.convex.dev/operational-maturity-for-production", "content_html": "This post will cover various aspects of operational maturity, and steps to take as your app grows up.", "url": "https://stack.convex.dev/operational-maturity-for-production", "title": "Operational maturity for production", "summary": "This post will cover various aspects of operational maturity, and steps to take as your app grows up.", "date_modified": "2024-04-10T21:00:04.734Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Deploy", "Production", "Fullstack", "Patterns" ] }, { "id": "https://stack.convex.dev/testing-patterns", "content_html": "Learn about best practices for testing your full-stack apps - running on Convex or elsewhere!", "url": "https://stack.convex.dev/testing-patterns", "title": "Testing patterns for peace of mind", "summary": "Learn about best practices for testing your full-stack apps - running on Convex or elsewhere!", "date_modified": "2024-04-10T16:39:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Deploy", "Production", "Testing", "Fullstack", "Patterns" ] }, { "id": "https://stack.convex.dev/as-a-programmer-ai-whats-app-clone", "content_html": "A tutorial on how to create a clone of WhatsApp with OpenAI built with React.js, TypeScript, TailwindCSS Convex, Clerk and ZegoCloud.", "url": "https://stack.convex.dev/as-a-programmer-ai-whats-app-clone", "title": "Build and Deploy a Full Stack WhatsApp Clone with AI | Video Calls, Screen Sharing | React.js, TypeScript", "summary": "A tutorial on how to create a clone of WhatsApp with OpenAI built with React.js, TypeScript, TailwindCSS Convex, Clerk and ZegoCloud.", "date_modified": "2024-04-07T02:35:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/horizontally-scaling-functions", "content_html": "We shipped a behind-the-scenes update that lets customers run 10x concurrent functions than they used to. Emma, who helped ship the update, provides the context, architecture, and impact. ", "url": "https://stack.convex.dev/horizontally-scaling-functions", "title": "How We Horizontally Scaled Function Execution", "summary": "We shipped a behind-the-scenes update that lets customers run 10x concurrent functions than they used to. Emma, who helped ship the update, provides the context, architecture, and impact. ", "date_modified": "2024-04-05T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives" ] }, { "id": "https://stack.convex.dev/how-convex-works", "content_html": "A deep dive on how Convex's reactive database works internally.", "url": "https://stack.convex.dev/how-convex-works", "title": "How Convex Works", "summary": "A deep dive on how Convex's reactive database works internally.", "date_modified": "2024-04-02T18:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives" ] }, { "id": "https://stack.convex.dev/building-the-oss-backend", "content_html": "Read this article to learn how you can build our open-source backend from source.", "url": "https://stack.convex.dev/building-the-oss-backend", "title": "Compiling the Convex Open-Source Backend", "summary": "Read this article to learn how you can build our open-source backend from source.", "date_modified": "2024-04-01T17:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives" ] }, { "id": "https://stack.convex.dev/developing-with-the-oss-backend", "content_html": "Read this article to learn how you can develop against our open-source backend using our packaged binaries.", "url": "https://stack.convex.dev/developing-with-the-oss-backend", "title": "Developing with the Open-Source backend", "summary": "Read this article to learn how you can develop against our open-source backend using our packaged binaries.", "date_modified": "2024-03-29T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/hacakthon-winners-winter-2024", "content_html": "Contestants have been hard at work with our Winter Hackathon that we ran with Devpost. In this post, we announce the winners and their prizes!", "url": "https://stack.convex.dev/hacakthon-winners-winter-2024", "title": "Zero to One Hackathon Winners", "summary": "Contestants have been hard at work with our Winter Hackathon that we ran with Devpost. In this post, we announce the winners and their prizes!", "date_modified": "2024-03-27T21:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Hackathon" ] }, { "id": "https://stack.convex.dev/observability-in-production", "content_html": "By setting up dedicated tools, you can get actionable data to help understanding errors, performance, user behavior and allow you respond quickly when things change.", "url": "https://stack.convex.dev/observability-in-production", "title": "Observing your app in production", "summary": "By setting up dedicated tools, you can get actionable data to help understanding errors, performance, user behavior and allow you respond quickly when things change.", "date_modified": "2024-03-21T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Deploy", "Production", "Patterns", "Fullstack" ] }, { "id": "https://stack.convex.dev/yolo-fast-mvp", "content_html": "Before you burden yourself with “best practices” for large-scale companies, focus on what will reduce your feedback cycles and help you ship early and often. Think about your use case, not your toolbox.", "url": "https://stack.convex.dev/yolo-fast-mvp", "title": "YOLO: Get to an MVP fast", "summary": "Before you burden yourself with “best practices” for large-scale companies, focus on what will reduce your feedback cycles and help you ship early and often. Think about your use case, not your toolbox.", "date_modified": "2024-03-20T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns" ] }, { "id": "https://stack.convex.dev/complex-filters-in-convex", "content_html": "There’s a new Convex helper to perform generic TypeScript filters, with the same performance as built-in Convex filters, and unlimited potential.", "url": "https://stack.convex.dev/complex-filters-in-convex", "title": "Using TypeScript to Write Complex Query Filters", "summary": "There’s a new Convex helper to perform generic TypeScript filters, with the same performance as built-in Convex filters, and unlimited potential.", "date_modified": "2024-03-13T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns" ] }, { "id": "https://stack.convex.dev/testing-with-local-oss-backend", "content_html": "Convex recently released an open source version of the backend. We can use this to unit test Convex functions by running them with a local backend. These tests will work by running a backend locally, pushing your code, and using the `ConvexClient` to execute queries and mutations from your favorite testing framework and asserting on the results.", "url": "https://stack.convex.dev/testing-with-local-oss-backend", "title": "Running tests using a local open-source backend", "summary": "Convex recently released an open source version of the backend. We can use this to unit test Convex functions by running them with a local backend. These tests will work by running a backend locally, pushing your code, and using the `ConvexClient` to execute queries and mutations from your favorite testing framework and asserting on the results.", "date_modified": "2024-03-12T17:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Testing" ] }, { "id": "https://stack.convex.dev/lightweight-zero-downtime-migrations", "content_html": "Patch all of your data in your database table with the bulk edit feature on the Convex dashboard, without writing migration code.", "url": "https://stack.convex.dev/lightweight-zero-downtime-migrations", "title": "Lightweight Migrations", "summary": "Patch all of your data in your database table with the bulk edit feature on the Convex dashboard, without writing migration code.", "date_modified": "2024-03-08T20:00:47.852Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fundamentals" ] }, { "id": "https://stack.convex.dev/backend-designed-for-product-develoeprs", "content_html": "Our CTO James gave a talk at Developer Week 2024 about how backends have been letting down product developers by not providing clean abstractions that empower development without introducing unnecessary complexity.\n\nJames outlines four major failures of the status quo:\n* Bad ideas in query models\n* Bad ideas in type systems\n* Bad ideas in caching and performance\n* Bad ideas in data sync\n\nHe explains why these exist, how they are holding back developers, and discusses recent innovations at Convex that address these four areas.", "url": "https://stack.convex.dev/backend-designed-for-product-develoeprs", "title": "Backends Should be Designed for Product Developers", "summary": "Our CTO James gave a talk at Developer Week 2024 about how backends have been letting down product developers by not providing clean abstractions that empower development without introducing unnecessary complexity.\n\nJames outlines four major failures of the status quo:\n* Bad ideas in query models\n* Bad ideas in type systems\n* Bad ideas in caching and performance\n* Bad ideas in data sync\n\nHe explains why these exist, how they are holding back developers, and discusses recent innovations at Convex that address these four areas.", "date_modified": "2024-03-06T01:54:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "Perspectives" ] }, { "id": "https://stack.convex.dev/build-a-file-storage-app-role-based-authorization", "content_html": "Web Dev Cody guides viewers in creating a comprehensive full stack file storage application on YouTube. The tutorial covers features like organizations, file upload, management, role-based authorization, authentication, cron deletes, favorites, trash functionality, and various UI components such as dialogs, modals, toasts, dropdowns, and more. ", "url": "https://stack.convex.dev/build-a-file-storage-app-role-based-authorization", "title": "Build a File Storage App with Role Based Authorization (Next.js, Shadcn, Typescript)", "summary": "Web Dev Cody guides viewers in creating a comprehensive full stack file storage application on YouTube. The tutorial covers features like organizations, file upload, management, role-based authorization, authentication, cron deletes, favorites, trash functionality, and various UI components such as dialogs, modals, toasts, dropdowns, and more. ", "date_modified": "2024-03-04T17:22:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "Fullstack", "TypeScript" ] }, { "id": "https://stack.convex.dev/eslint-setup", "content_html": "ESLint is a powerful tool that goes beyond simply type checking. We go over how to set it up and implement some basic workflows with the ", "url": "https://stack.convex.dev/eslint-setup", "title": "Set up ESLint for best practices", "summary": "ESLint is a powerful tool that goes beyond simply type checking. We go over how to set it up and implement some basic workflows with the ", "date_modified": "2024-03-01T20:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fundamentals" ] }, { "id": "https://stack.convex.dev/uploading-files-from-react-native-or-expo", "content_html": "Step by step guide to take a file URI provided by Expo media APIs and upload it to Convex in React Native.", "url": "https://stack.convex.dev/uploading-files-from-react-native-or-expo", "title": "Uploading files from React Native or Expo", "summary": "Step by step guide to take a file URI provided by Expo media APIs and upload it to Convex in React Native.", "date_modified": "2024-02-27T20:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fundamentals" ] }, { "id": "https://stack.convex.dev/tubeGuruji-eraser-clone", "content_html": "A tutorial on how to create a fully functional clone of Eraser.io with Convex using Next.js, React, TypeScript, and Tailwind CSS. ", "url": "https://stack.convex.dev/tubeGuruji-eraser-clone", "title": "Build and Deploy Eraser.io App Clone: Full Stack React App - Next.js, Typescript, Tailwind Css", "summary": "A tutorial on how to create a fully functional clone of Eraser.io with Convex using Next.js, React, TypeScript, and Tailwind CSS. ", "date_modified": "2024-02-26T23:30:09.147Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/the-software-defined-database", "content_html": "Which to choose, the expressive power of code, or the robustness of built-in database features? With Convex, you can have both. By eliminating the boundary between the application and the database, Convex provides a uniform and powerful way to model your entire backend data flow and security using plain ol' code.", "url": "https://stack.convex.dev/the-software-defined-database", "title": "Convex: The Software-Defined Database", "summary": "Which to choose, the expressive power of code, or the robustness of built-in database features? With Convex, you can have both. By eliminating the boundary between the application and the database, Convex provides a uniform and powerful way to model your entire backend data flow and security using plain ol' code.", "date_modified": "2024-02-21T21:43:02.324Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives" ] }, { "id": "https://stack.convex.dev/full-stack-ai-voice-note-taking-app", "content_html": "I recently built a full-stack app called notesGPT. It allows you to record a voice note, transcribes it, and extract action items and display them as action items. It’s fully open source and comes equipped with authentication, storage, vector search, action items, and is fully responsive on mobile for ease of use.\n\n", "url": "https://stack.convex.dev/full-stack-ai-voice-note-taking-app", "title": "How I built NotesGPT – a full-stack AI voice note taking app", "summary": "I recently built a full-stack app called notesGPT. It allows you to record a voice note, transcribes it, and extract action items and display them as action items. It’s fully open source and comes equipped with authentication, storage, vector search, action items, and is fully responsive on mobile for ease of use.\n\n", "date_modified": "2024-02-21T02:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "AI", "Fullstack" ] }, { "id": "https://stack.convex.dev/cody-convex-vs-supabase", "content_html": "An overview of Convex and Supabase, comparing the DX and capabilities of both products when building out the same application.", "url": "https://stack.convex.dev/cody-convex-vs-supabase", "title": "Why I use Convex over Supabase as my BaaS", "summary": "An overview of Convex and Supabase, comparing the DX and capabilities of both products when building out the same application.", "date_modified": "2024-02-16T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives", "Fullstack" ] }, { "id": "https://stack.convex.dev/queries-that-scale", "content_html": "As your app grows from tens to hundreds to thousands of users, there are some techniques that will keep your database queries snappy and efficient. I’ve put together a short list of the most common techniques used by teams scaling on Convex.", "url": "https://stack.convex.dev/queries-that-scale", "title": "Queries that scale", "summary": "As your app grows from tens to hundreds to thousands of users, there are some techniques that will keep your database queries snappy and efficient. I’ve put together a short list of the most common techniques used by teams scaling on Convex.", "date_modified": "2024-02-13T20:00:52.632Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns" ] }, { "id": "https://stack.convex.dev/retry-actions", "content_html": "Learn how to automatically retry actions in Convex while also learning a little about scheduling, system tables, and function references.", "url": "https://stack.convex.dev/retry-actions", "title": "Automatically Retry Actions", "summary": "Learn how to automatically retry actions in Convex while also learning a little about scheduling, system tables, and function references.", "date_modified": "2024-02-13T20:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns", "Fundamentals", "Scheduler" ] }, { "id": "https://stack.convex.dev/axiom-log-streaming", "content_html": "Check out the behind-the-scenes engineering efforts that went behind Axiom's integration into Convex.", "url": "https://stack.convex.dev/axiom-log-streaming", "title": "Dev Diary: Log Streaming ft. Axiom", "summary": "Check out the behind-the-scenes engineering efforts that went behind Axiom's integration into Convex.", "date_modified": "2024-02-01T20:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Integration" ] }, { "id": "https://stack.convex.dev/text-your-web-app", "content_html": "In this tutorial, learn how to use Convex HTTP actions to set up a webhook that handles incoming text messages and stores them for display in a React web app. On top of that, it manages user auth and permissions. This is a legitimately complex workflow that can be built in under an hour using a couple hundred lines of code.", "url": "https://stack.convex.dev/text-your-web-app", "title": "Texting your Web App to Create Posts", "summary": "In this tutorial, learn how to use Convex HTTP actions to set up a webhook that handles incoming text messages and stores them for display in a React web app. On top of that, it manages user auth and permissions. This is a legitimately complex workflow that can be built in under an hour using a couple hundred lines of code.", "date_modified": "2024-01-31T20:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/ents", "content_html": "Convex Ents is a library that provides: simpler ways to model and query related documents, ability to easily map and filter documents, enforcing unique field values, default field values, cascading deletes, soft deletion and more!", "url": "https://stack.convex.dev/ents", "title": "Convex Ents: Manage your document relationships", "summary": "Convex Ents is a library that provides: simpler ways to model and query related documents, ability to easily map and filter documents, enforcing unique field values, default field values, cascading deletes, soft deletion and more!", "date_modified": "2024-01-30T21:59:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns" ] }, { "id": "https://stack.convex.dev/miro-clone", "content_html": "In this 10 hour tutorial, you will learn how to create your very own Miro clone - A collaborative, real-time whiteboard. Notable features include a real-time database, whiteboard from scratch with ability to add shapes like Rectangles and Ellipses, Sticky notes and Pencil drawing.\n", "url": "https://stack.convex.dev/miro-clone", "title": "Build a Real-Time Miro Clone With Nextjs, React, Tailwind (2024)", "summary": "In this 10 hour tutorial, you will learn how to create your very own Miro clone - A collaborative, real-time whiteboard. Notable features include a real-time database, whiteboard from scratch with ability to add shapes like Rectangles and Ellipses, Sticky notes and Pencil drawing.\n", "date_modified": "2024-01-29T20:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack" ] }, { "id": "https://stack.convex.dev/building-a-subscription-based-saas", "content_html": "This is a full stack tutorial video includes subscriptions powered by Stripe with Convex as the backend, Clerk for authentication, and Next.js for the frontend. \n", "url": "https://stack.convex.dev/building-a-subscription-based-saas", "title": "Building a Subscription Based SaaS with Stripe", "summary": "This is a full stack tutorial video includes subscriptions powered by Stripe with Convex as the backend, Clerk for authentication, and Next.js for the frontend. \n", "date_modified": "2024-01-24T20:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "Integration" ] }, { "id": "https://stack.convex.dev/track-sessions-without-cookies", "content_html": "Advice and resources for session tracking per-tab or per-browser via localStorage / sessionStorage using React Context, hooks, and some utilities to make your life easier.", "url": "https://stack.convex.dev/track-sessions-without-cookies", "title": "Session Tracking Via Parameter Injection", "summary": "Advice and resources for session tracking per-tab or per-browser via localStorage / sessionStorage using React Context, hooks, and some utilities to make your life easier.", "date_modified": "2024-01-22T17:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Patterns", "React" ] }, { "id": "https://stack.convex.dev/using-branded-types-in-validators", "content_html": "If you have a more specific type than what you can express with Convex validators, you can still document that at the type level in Convex by casting once in your schema definition.", "url": "https://stack.convex.dev/using-branded-types-in-validators", "title": "Using branded types in validators", "summary": "If you have a more specific type than what you can express with Convex validators, you can still document that at the type level in Convex by casting once in your schema definition.", "date_modified": "2024-01-20T03:31:33.475Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns" ] }, { "id": "https://stack.convex.dev/functional-relationships-helpers", "content_html": "Traverse database relationships in a readable, predictable, and debuggable way. Support for one-to-one, one-to-many, and many-to-many via utility functions available in convex-helpers.", "url": "https://stack.convex.dev/functional-relationships-helpers", "title": "Database Relationship Helpers", "summary": "Traverse database relationships in a readable, predictable, and debuggable way. Support for one-to-one, one-to-many, and many-to-many via utility functions available in convex-helpers.", "date_modified": "2024-01-15T20:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns" ] }, { "id": "https://stack.convex.dev/aicamp-augmented-chat", "content_html": "At AICamp's end-of-year meetup for 2023, Michal goes over why you should build a custom AI-powered chat for your product, what options you have for building one, and which one you should ultimately choose.", "url": "https://stack.convex.dev/aicamp-augmented-chat", "title": "Building Context Augmented AI Chat in Practice: AICamp 2023 EOY Meetup", "summary": "At AICamp's end-of-year meetup for 2023, Michal goes over why you should build a custom AI-powered chat for your product, what options you have for building one, and which one you should ultimately choose.", "date_modified": "2024-01-09T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives" ] }, { "id": "https://stack.convex.dev/wdc-coding-challenge-with-jason", "content_html": "Tag along as WebDevCody participates in LearnWithJason's coding challenge where 4 developers use the same technologies to create the best project possible in 4 hours.", "url": "https://stack.convex.dev/wdc-coding-challenge-with-jason", "title": "The most exciting 4 hour coding challenge", "summary": "Tag along as WebDevCody participates in LearnWithJason's coding challenge where 4 developers use the same technologies to create the best project possible in 4 hours.", "date_modified": "2024-01-08T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "TypeScript", "Fullstack" ] }, { "id": "https://stack.convex.dev/lwj-4devs1app-dnd-challenge", "content_html": "Using Convex, 4 web devs built their own fullstack app based on this prompt:\n\n> Build a way to show real-time updates on the website for a Dungeons and Dragons-themed small business! \n\nSee what they built, learn how they did it, and watch their reactions to each other's work in this installment of the \"4 Web Devs, 1 App Idea\" video series.\n\n", "url": "https://stack.convex.dev/lwj-4devs1app-dnd-challenge", "title": "4 Devs, 1 Idea, 4 Apps in 4 Hours(!!) with Convex", "summary": "Using Convex, 4 web devs built their own fullstack app based on this prompt:\n\n> Build a way to show real-time updates on the website for a Dungeons and Dragons-themed small business! \n\nSee what they built, learn how they did it, and watch their reactions to each other's work in this installment of the \"4 Web Devs, 1 App Idea\" video series.\n\n", "date_modified": "2024-01-08T13:02:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Web", "Patterns", "Hackathon", "AI" ] }, { "id": "https://stack.convex.dev/typescript-zod-function-validation", "content_html": "Use Zod with TypeScript for argument validation on your server functions allows you to both protect against invalid data, and define TypeScript types that propagate to your client. This can now be used as an alternative to the built-in argument validation on Convex.", "url": "https://stack.convex.dev/typescript-zod-function-validation", "title": "Zod with TypeScript for Server-side Validation and End-to-End Types", "summary": "Use Zod with TypeScript for argument validation on your server functions allows you to both protect against invalid data, and define TypeScript types that propagate to your client. This can now be used as an alternative to the built-in argument validation on Convex.", "date_modified": "2023-12-15T03:00:02.990Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "TypeScript", "Patterns", "Integration" ] }, { "id": "https://stack.convex.dev/custom-functions", "content_html": "Re-use code and centralize request handler definitions with discoverability and type safety and without the indirection of middleware or nesting of wrappers. Use the new customFunction module in convex-helpers for your Convex TypeScript functions.", "url": "https://stack.convex.dev/custom-functions", "title": "Customizing serverless functions without middleware", "summary": "Re-use code and centralize request handler definitions with discoverability and type safety and without the indirection of middleware or nesting of wrappers. Use the new customFunction module in convex-helpers for your Convex TypeScript functions.", "date_modified": "2023-12-14T02:00:07.680Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns", "Fullstack" ] }, { "id": "https://stack.convex.dev/jotion-winners", "content_html": "We hosted a hackathon for building features on top of a Notion clone created by CodeWithAntonio. Here are the results.", "url": "https://stack.convex.dev/jotion-winners", "title": "We Hosted a Hackathon for a Notion Clone", "summary": "We hosted a hackathon for building features on top of a Notion clone created by CodeWithAntonio. Here are the results.", "date_modified": "2023-12-12T20:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Hackathon" ] }, { "id": "https://stack.convex.dev/waitlist", "content_html": "Does your app need to limit the amount of users that can use it at a time? You might need to add a waitlist, which you will learn to build in this post.", "url": "https://stack.convex.dev/waitlist", "title": "Wait a minute, won't you? (Add a waitlist to your product)", "summary": "Does your app need to limit the amount of users that can use it at a time? You might need to add a waitlist, which you will learn to build in this post.", "date_modified": "2023-11-30T20:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/pagerduty-slack-sync", "content_html": "Syncing your Pagerduty instance with Slack is a good way to stay on top of your on-call schedule. We cover syncing Pagerduty information with a Slack channel.", "url": "https://stack.convex.dev/pagerduty-slack-sync", "title": "Who's on Call? Learn to Sync Pagerduty with Slack", "summary": "Syncing your Pagerduty instance with Slack is a good way to stay on top of your on-call schedule. We cover syncing Pagerduty information with a Slack channel.", "date_modified": "2023-11-28T20:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "Integration" ] }, { "id": "https://stack.convex.dev/are-vector-databases-dead", "content_html": "This year vector databases have sprung up like mushrooms to enable applications to retrieve context based on semantic search. A large portion of these applications have used the retrieved context to augment the ability of large language models (LLMs) in a pattern known as RAG. On November 7th OpenAI released its Assistants API, enabling the implementation of AI chat interfaces with context retrieval without needing a separate message store or vector database. Does this new API make vector databases obsolete?", "url": "https://stack.convex.dev/are-vector-databases-dead", "title": "Are Vector Databases Dead?", "summary": "This year vector databases have sprung up like mushrooms to enable applications to retrieve context based on semantic search. A large portion of these applications have used the retrieved context to augment the ability of large language models (LLMs) in a pattern known as RAG. On November 7th OpenAI released its Assistants API, enabling the implementation of AI chat interfaces with context retrieval without needing a separate message store or vector database. Does this new API make vector databases obsolete?", "date_modified": "2023-11-21T18:10:39.459Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "AI", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/ai-chat-with-convex-vector-search", "content_html": "Convex is a full-stack development platform and cloud database, including built-in vector search. In this third post in our [series](https://stack.convex.dev/ai-chat-using-openai-assistants-api), we’ll build an AI-powered chat interface using Convex, with our own message storage and context retrieval.", "url": "https://stack.convex.dev/ai-chat-with-convex-vector-search", "title": "Build AI Chat with Convex Vector Search", "summary": "Convex is a full-stack development platform and cloud database, including built-in vector search. In this third post in our [series](https://stack.convex.dev/ai-chat-using-openai-assistants-api), we’ll build an AI-powered chat interface using Convex, with our own message storage and context retrieval.", "date_modified": "2023-11-21T18:10:26.891Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "AI", "Walkthroughs", "Search" ] }, { "id": "https://stack.convex.dev/ai-chat-using-langchain-and-convex", "content_html": "In this second post in our series, we’ll build an AI-powered chat interface using LangChain and its new Convex integration.", "url": "https://stack.convex.dev/ai-chat-using-langchain-and-convex", "title": "Build AI Chat with LangChain and Convex", "summary": "In this second post in our series, we’ll build an AI-powered chat interface using LangChain and its new Convex integration.", "date_modified": "2023-11-21T18:10:03.107Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "AI", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/ai-chat-using-openai-assistants-api", "content_html": "On November 7th OpenAI released its Assistants API, enabling chat bot with context retrieval implementations without needing a messages or vector database. In this post, we’ll cover how to leverage this API to build a fully functioning AI chat interface.", "url": "https://stack.convex.dev/ai-chat-using-openai-assistants-api", "title": "Build AI Chat with OpenAI's Assistants API", "summary": "On November 7th OpenAI released its Assistants API, enabling chat bot with context retrieval implementations without needing a messages or vector database. In this post, we’ll cover how to leverage this API to build a fully functioning AI chat interface.", "date_modified": "2023-11-21T18:09:45.752Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "AI", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/build-bounty-jotion", "content_html": "Learn how you can win cash prizes for building features on an open-source Notion clone.", "url": "https://stack.convex.dev/build-bounty-jotion", "title": "Convex Build Bounty: Build new Jotion features, win cash prizes!", "summary": "Learn how you can win cash prizes for building features on an open-source Notion clone.", "date_modified": "2023-11-16T20:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Hackathon" ] }, { "id": "https://stack.convex.dev/seeding-data-for-preview-deployments", "content_html": "Now that we've launched Preview Deployments on Convex, you can test out backend changes easier than ever. But you may want to seed your project with data first, so let's go over how to do that.", "url": "https://stack.convex.dev/seeding-data-for-preview-deployments", "title": "Seeding Data for Preview Deployments", "summary": "Now that we've launched Preview Deployments on Convex, you can test out backend changes easier than ever. But you may want to seed your project with data first, so let's go over how to do that.", "date_modified": "2023-11-08T22:35:43.094Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Testing", "Patterns" ] }, { "id": "https://stack.convex.dev/npm-create-convex", "content_html": "There’s a new fastest way to start building a new app on Convex. Use our new magical command, npm create convex, to spin up a new Convex app from a preexisting template.", "url": "https://stack.convex.dev/npm-create-convex", "title": "A New Command to Start Building Faster: npm create convex", "summary": "There’s a new fastest way to start building a new app on Convex. Use our new magical command, npm create convex, to spin up a new Convex app from a preexisting template.", "date_modified": "2023-11-06T10:22:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fundamentals" ] }, { "id": "https://stack.convex.dev/fivetran-alpha", "content_html": "Launching our official Convex Fivetran connector.", "url": "https://stack.convex.dev/fivetran-alpha", "title": "Adding Data Integration to Your Convex Application with Fivetran", "summary": "Launching our official Convex Fivetran connector.", "date_modified": "2023-11-02T15:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Integration", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/ai-town-v2", "content_html": "It's never been a better time to make your own town of AIs.", "url": "https://stack.convex.dev/ai-town-v2", "title": "AI Town v2", "summary": "It's never been a better time to make your own town of AIs.", "date_modified": "2023-10-31T16:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "AI" ] }, { "id": "https://stack.convex.dev/gpt-streaming-with-persistent-reactivity", "content_html": "Stream GPT responses without brittle browser-based HTTP streaming.\nMultiplayer reactivity, persistence, reactivity via Convex. Using OpenAI’s Node SDK server-side, and Convex's useQuery hook client-side.", "url": "https://stack.convex.dev/gpt-streaming-with-persistent-reactivity", "title": "GPT Streaming With Persistent Reactivity", "summary": "Stream GPT responses without brittle browser-based HTTP streaming.\nMultiplayer reactivity, persistence, reactivity via Convex. Using OpenAI’s Node SDK server-side, and Convex's useQuery hook client-side.", "date_modified": "2023-10-26T20:22:35.522Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Integration", "AI", "Fullstack", "React", "Reactivity", "Patterns" ] }, { "id": "https://stack.convex.dev/fullstack-notion-clone", "content_html": "Hi all 👋 In this 8 hour tutorial you will learn how to create an end-to-end fullstack notion clone, all with proper notion-style editor, cover images, nested documents, publishing documents to public, real-time database and more.", "url": "https://stack.convex.dev/fullstack-notion-clone", "title": "Fullstack Notion Clone: Next.js 13, React, Convex, Tailwind | Full Course 2023", "summary": "Hi all 👋 In this 8 hour tutorial you will learn how to create an end-to-end fullstack notion clone, all with proper notion-style editor, cover images, nested documents, publishing documents to public, real-time database and more.", "date_modified": "2023-10-11T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "Fullstack", "Integration" ] }, { "id": "https://stack.convex.dev/i-trained-my-own-ai-voice-model-to-teach-my-kid", "content_html": "Generating rhyming words via GPT-4, along with Dall-E cartoon images and ElevenLabs speaking with a specific voice to make a game to teach words.", "url": "https://stack.convex.dev/i-trained-my-own-ai-voice-model-to-teach-my-kid", "title": "I trained my own AI voice model to teach my kid", "summary": "Generating rhyming words via GPT-4, along with Dall-E cartoon images and ElevenLabs speaking with a specific voice to make a game to teach words.", "date_modified": "2023-09-18T16:00:44.437Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "AI", "Walkthroughs", "Fullstack" ] }, { "id": "https://stack.convex.dev/react-native-realtime-chat-expo", "content_html": "In this video, you will learn to build a powerful realtime chat with React Native and use Convex as the backend. From creating groups to uploading images and styling messages you will learn all the skills you need to build a React Native chat!", "url": "https://stack.convex.dev/react-native-realtime-chat-expo", "title": "React Native Realtime Chat (Expo, File Upload, Typescript)", "summary": "In this video, you will learn to build a powerful realtime chat with React Native and use Convex as the backend. From creating groups to uploading images and styling messages you will learn all the skills you need to build a React Native chat!", "date_modified": "2023-09-12T16:00:53.976Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "Clients" ] }, { "id": "https://stack.convex.dev/wdc-using-convex-with-next-js-quickstart", "content_html": "A quick start guide for using Convex with Next.js", "url": "https://stack.convex.dev/wdc-using-convex-with-next-js-quickstart", "title": "Using Convex with Next.js Quickstart", "summary": "A quick start guide for using Convex with Next.js", "date_modified": "2023-09-07T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/how-to-code-an-ai-powered-text-adventure-game", "content_html": "\nBuild a text adventure game with Next.js, Convex, OpenAI, and DALL-E. Full stack walkthrough.", "url": "https://stack.convex.dev/how-to-code-an-ai-powered-text-adventure-game", "title": "How to code an AI powered Text Adventure Game (Next.js, Convex, OpenAI, DALL-E)", "summary": "\nBuild a text adventure game with Next.js, Convex, OpenAI, and DALL-E. Full stack walkthrough.", "date_modified": "2023-09-06T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Walkthroughs", "AI" ] }, { "id": "https://stack.convex.dev/building-a-full-cloud-backend", "content_html": "Discussion of patterns, psychology, abstractions, managing complexity, and more on the Software Engineering Daily Podcast with James Cowling", "url": "https://stack.convex.dev/building-a-full-cloud-backend", "title": "Building a Full Cloud Backend - Software Engineering Daily Podcast", "summary": "Discussion of patterns, psychology, abstractions, managing complexity, and more on the Software Engineering Daily Podcast with James Cowling", "date_modified": "2023-08-29T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack" ] }, { "id": "https://stack.convex.dev/building-ai-town-character-ids", "content_html": "Learn more about how AI Town works and how to customize it. In this post, we'll dig into how character identities are represented: how to alter them, and how to add entirely new characters.", "url": "https://stack.convex.dev/building-ai-town-character-ids", "title": "Building AI Town's Backend: Character Identities", "summary": "Learn more about how AI Town works and how to customize it. In this post, we'll dig into how character identities are represented: how to alter them, and how to add entirely new characters.", "date_modified": "2023-08-24T23:27:33.212Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "AI", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/convex-with-lucia", "content_html": "Learn how to build a full stack app with authentication without any third-party auth providers, using Convex and the Lucia library.", "url": "https://stack.convex.dev/convex-with-lucia", "title": "Lucia Auth: Implement Custom Authentication", "summary": "Learn how to build a full stack app with authentication without any third-party auth providers, using Convex and the Lucia library.", "date_modified": "2023-08-09T23:34:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Integration", "Fullstack" ] }, { "id": "https://stack.convex.dev/the-next-level-firebase-for-modern-developers", "content_html": "Check out Convex, an incredibly well-designed Firebase alternative that provides a realtime database, object storage, server functions, http API hosting, cron jobs and more!", "url": "https://stack.convex.dev/the-next-level-firebase-for-modern-developers", "title": "The Next Level Firebase for Modern Developers", "summary": "Check out Convex, an incredibly well-designed Firebase alternative that provides a realtime database, object storage, server functions, http API hosting, cron jobs and more!", "date_modified": "2023-07-24T16:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Walkthroughs", "React" ] }, { "id": "https://stack.convex.dev/stripe-with-convex", "content_html": "If you’re building a full-stack app, chances are you’ll want some of your users to pay you for the service you provide. How to use Stripe with Convex to get it done.", "url": "https://stack.convex.dev/stripe-with-convex", "title": "Wake up, you need to make money! (Add Stripe to your product)", "summary": "If you’re building a full-stack app, chances are you’ll want some of your users to pay you for the service you provide. How to use Stripe with Convex to get it done.", "date_modified": "2023-07-19T17:00:56.887Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Integration", "Fullstack" ] }, { "id": "https://stack.convex.dev/generating-fake-data", "content_html": "Learn how to generate fake data for your dev deployments using the Faker library", "url": "https://stack.convex.dev/generating-fake-data", "title": "Testing Your App: How to Generate Fake Data", "summary": "Learn how to generate fake data for your dev deployments using the Faker library", "date_modified": "2023-07-05T20:40:50.313Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns", "Testing", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/pinecone-and-embeddings", "content_html": "Pinecone and Convex are a good match when you're looking to build an application that leverages embeddings and also has application data.", "url": "https://stack.convex.dev/pinecone-and-embeddings", "title": "Using Pinecone and Embeddings", "summary": "Pinecone and Convex are a good match when you're looking to build an application that leverages embeddings and also has application data.", "date_modified": "2023-06-28T19:00:11.476Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Integration", "Patterns" ] }, { "id": "https://stack.convex.dev/get-typeform-data-into-convex", "content_html": "Leverage Typeform while keeping the data in a powerful transactional application database.", "url": "https://stack.convex.dev/get-typeform-data-into-convex", "title": "Get Typeform Data Into Convex", "summary": "Leverage Typeform while keeping the data in a powerful transactional application database.", "date_modified": "2023-06-22T16:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Integration", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/how-to-generate-ai-images-from-scribbles-with-next-js", "content_html": "Building a full stack app to generate images based on a prompt and user-provided sketch", "url": "https://stack.convex.dev/how-to-generate-ai-images-from-scribbles-with-next-js", "title": "How to Generate AI Images from Scribbles with Next.js", "summary": "Building a full stack app to generate images based on a prompt and user-provided sketch", "date_modified": "2023-06-20T16:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "Fullstack", "Integration" ] }, { "id": "https://stack.convex.dev/the-magic-of-embeddings", "content_html": "Embeddings, why they’re useful, and how we can store and use them in Convex.", "url": "https://stack.convex.dev/the-magic-of-embeddings", "title": "The Magic of Embeddings", "summary": "Embeddings, why they’re useful, and how we can store and use them in Convex.", "date_modified": "2023-06-07T16:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fundamentals", "Patterns", "AI" ] }, { "id": "https://stack.convex.dev/ai-storybook-app", "content_html": "So you have a pretty good grasp on web development, but you want to learn more about building with generative AI? You're not alone. In this live-coding course, follow along as we build a full-stack generative AI app using LangChain.js, Replicate, and OpenAI.", "url": "https://stack.convex.dev/ai-storybook-app", "title": "Building a full-stack AI storybook app with LangChain, Replicate, and OpenAI", "summary": "So you have a pretty good grasp on web development, but you want to learn more about building with generative AI? You're not alone. In this live-coding course, follow along as we build a full-stack generative AI app using LangChain.js, Replicate, and OpenAI.", "date_modified": "2023-06-06T16:16:10.091Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "AI" ] }, { "id": "https://stack.convex.dev/airtable-to-convex", "content_html": "Is your project in Airtable ready for more code and less no-code? I’ve published some code to help you migrate your data into Convex.", "url": "https://stack.convex.dev/airtable-to-convex", "title": "Moving From Airtable -> Convex", "summary": "Is your project in Airtable ready for more code and less no-code? I’ve published some code to help you migrate your data into Convex.", "date_modified": "2023-05-23T19:00:40.063Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/get-rusty-with-santa", "content_html": "If you've been itching to write Convex programs in Rust, your time has come. We take the new Convex Rust crate for a spin by writing a distributed system simulation of Santa and his team working together at the North Pole. Yes, really.", "url": "https://stack.convex.dev/get-rusty-with-santa", "title": "Convex gets Rusty with Santa", "summary": "If you've been itching to write Convex programs in Rust, your time has come. We take the new Convex Rust crate for a spin by writing a distributed system simulation of Santa and his team working together at the North Pole. Yes, really.", "date_modified": "2023-05-17T13:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/row-level-security", "content_html": "Add row-level security to your database access by wrapping database reads and writes in your Convex serverless functions.", "url": "https://stack.convex.dev/row-level-security", "title": "Row Level Security", "summary": "Add row-level security to your database access by wrapping database reads and writes in your Convex serverless functions.", "date_modified": "2023-05-15T19:00:47.323Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns" ] }, { "id": "https://stack.convex.dev/relationship-structures-let-s-talk-about-schemas", "content_html": "In this post we’ll look at some patterns for structuring relationships in the Convex database.", "url": "https://stack.convex.dev/relationship-structures-let-s-talk-about-schemas", "title": "Relationship Structures: Let's Talk About Schemas", "summary": "In this post we’ll look at some patterns for structuring relationships in the Convex database.", "date_modified": "2023-05-09T17:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fundamentals" ] }, { "id": "https://stack.convex.dev/end-to-end-ts", "content_html": "Convex provides automatic type safety all the way from your database schema to your React app. How does it work? Hint: we use some wild TypeScript.", "url": "https://stack.convex.dev/end-to-end-ts", "title": "End-to-end TypeScript with Convex", "summary": "Convex provides automatic type safety all the way from your database schema to your React app. How does it work? Hint: we use some wild TypeScript.", "date_modified": "2023-05-08T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "TypeScript" ] }, { "id": "https://stack.convex.dev/intro-to-migrations", "content_html": "There are as many ways to migrate data as there are databases, but here’s some basic information to set the stage.", "url": "https://stack.convex.dev/intro-to-migrations", "title": "Intro to Migrations", "summary": "There are as many ways to migrate data as there are databases, but here’s some basic information to set the stage.", "date_modified": "2023-05-05T18:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fundamentals" ] }, { "id": "https://stack.convex.dev/everyone-can-be-a-full-stack-engineer", "content_html": "Alex Cole discusses dynamic web apps, how serverless solutions compare to in-house stacks, and how product development changes when individual engineers can own features end-to-end.\n", "url": "https://stack.convex.dev/everyone-can-be-a-full-stack-engineer", "title": "Everyone Can Be a Full-Stack Engineer", "summary": "Alex Cole discusses dynamic web apps, how serverless solutions compare to in-house stacks, and how product development changes when individual engineers can own features end-to-end.\n", "date_modified": "2023-04-12T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Fundamentals", "Perspectives" ] }, { "id": "https://stack.convex.dev/5-dashboard-tricks", "content_html": "Did you know you can use the Convex Dashboard to run functions, enter seed data, filter & delete data, upload files, and more?", "url": "https://stack.convex.dev/5-dashboard-tricks", "title": "5 Dashboard Tricks", "summary": "Did you know you can use the Convex Dashboard to run functions, enter seed data, filter & delete data, upload files, and more?", "date_modified": "2023-03-23T16:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fundamentals" ] }, { "id": "https://stack.convex.dev/searching-for-sanity", "content_html": "Your document is safely stored, but search is coming up empty? Inconsistent search systems can really confuse users! Don't worry–in Convex, transactional search indexing ensures that users always get what they expect and your apps just work.", "url": "https://stack.convex.dev/searching-for-sanity", "title": "Searching for Sanity", "summary": "Your document is safely stored, but search is coming up empty? Inconsistent search systems can really confuse users! Don't worry–in Convex, transactional search indexing ensures that users always get what they expect and your apps just work.", "date_modified": "2023-03-15T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns", "Perspectives", "Search" ] }, { "id": "https://stack.convex.dev/moderating-chatgpt-content-full-stack", "content_html": "In this post, we’ll look at how to use the moderation API to flag messages before sending them to Chat-GPT, and patterns for handling these errors in a full-stack React app.", "url": "https://stack.convex.dev/moderating-chatgpt-content-full-stack", "title": "Moderating ChatGPT Content: Full-Stack", "summary": "In this post, we’ll look at how to use the moderation API to flag messages before sending them to Chat-GPT, and patterns for handling these errors in a full-stack React app.", "date_modified": "2023-03-10T01:00:43.369Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Integration", "Walkthroughs", "Fullstack", "AI" ] }, { "id": "https://stack.convex.dev/adding-personality-to-chatgpt-3", "content_html": "How to store multiple personalities Convex and provide them to the chatGPT API, enabling changing personalities mid-conversation. This is a follow-up to Building a full-stack ChatGPT app. ", "url": "https://stack.convex.dev/adding-personality-to-chatgpt-3", "title": "Adding Personality to ChatGPT-3", "summary": "How to store multiple personalities Convex and provide them to the chatGPT API, enabling changing personalities mid-conversation. This is a follow-up to Building a full-stack ChatGPT app. ", "date_modified": "2023-03-07T01:00:52.112Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "Fullstack", "Integration", "AI" ] }, { "id": "https://stack.convex.dev/hono-with-convex", "content_html": "Adding advanced HTTP Endpoint functionality by extending Convex with Hono.", "url": "https://stack.convex.dev/hono-with-convex", "title": "Advanced HTTP Endpoints: Convex ❤️ Hono", "summary": "Adding advanced HTTP Endpoint functionality by extending Convex with Hono.", "date_modified": "2023-03-06T21:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Integration", "Patterns" ] }, { "id": "https://stack.convex.dev/full-stack-chatgpt-app", "content_html": "Let's build a full-stack chat app to talk to ChatGPT on its new API!", "url": "https://stack.convex.dev/full-stack-chatgpt-app", "title": "Building a Full-Stack ChatGPT app", "summary": "Let's build a full-stack chat app to talk to ChatGPT on its new API!", "date_modified": "2023-03-04T01:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "Fullstack", "Integration", "AI" ] }, { "id": "https://stack.convex.dev/type-safe-data-driven-apps-even-if-databases-freak-you-out", "content_html": "You can build a database-powered app with end-to-end type safety and real-time updates without needing to learn how to manage databases. This tutorial will show you how.\n", "url": "https://stack.convex.dev/type-safe-data-driven-apps-even-if-databases-freak-you-out", "title": "Type-safe, data-driven apps, even if databases freak you out", "summary": "You can build a database-powered app with end-to-end type safety and real-time updates without needing to learn how to manage databases. This tutorial will show you how.\n", "date_modified": "2023-02-28T17:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/help-my-app-is-overreacting", "content_html": "Reactive backends like Convex make building live-updating apps a cinch, but default behavior might be too reactive for some use cases. Not to worry! Let’s fine-tune the reactive dataflow of a Convex + React app to deliver a better UX.", "url": "https://stack.convex.dev/help-my-app-is-overreacting", "title": "Help, my app is overreacting!", "summary": "Reactive backends like Convex make building live-updating apps a cinch, but default behavior might be too reactive for some use cases. Not to worry! Let’s fine-tune the reactive dataflow of a Convex + React app to deliver a better UX.", "date_modified": "2023-02-21T18:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "React", "Reactivity", "Patterns", "Fullstack" ] }, { "id": "https://stack.convex.dev/webhooks-with-convex", "content_html": "Convex provides client libraries for storing and interacting with data, but sometimes we want a third-party app like Discord to interact with data in Convex. In this post, we use webhooks to build a simple Discord bot powered by Convex.", "url": "https://stack.convex.dev/webhooks-with-convex", "title": "Discord Bot Webhooks with Convex", "summary": "Convex provides client libraries for storing and interacting with data, but sometimes we want a third-party app like Discord to interact with data in Convex. In this post, we use webhooks to build a simple Discord bot powered by Convex.", "date_modified": "2023-02-14T23:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/testing-react-components-with-convex", "content_html": "Oftentimes during testing we want to mock out our backend so we can unit test our UI components without talking to our actual server code.\n\nIn this article, we’ll explore options for testing React components that call Convex React hooks using mocking and dependency injection. To do this, I’ve written a sample TypeScript React app using the Vitest testing framework. The patterns presented in this post are also applicable to other JavaScript apps and frameworks.", "url": "https://stack.convex.dev/testing-react-components-with-convex", "title": "Testing React Components with Convex", "summary": "Oftentimes during testing we want to mock out our backend so we can unit test our UI components without talking to our actual server code.\n\nIn this article, we’ll explore options for testing React components that call Convex React hooks using mocking and dependency injection. To do this, I’ve written a sample TypeScript React app using the Vitest testing framework. The patterns presented in this post are also applicable to other JavaScript apps and frameworks.", "date_modified": "2023-02-10T18:30:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Walkthroughs", "React", "Testing" ] }, { "id": "https://stack.convex.dev/background-job-management", "content_html": "Implement asynchronous job patterns using a table to track progress. Fire-and-forget, cancelation, timeouts, and more.", "url": "https://stack.convex.dev/background-job-management", "title": "Background Job Management", "summary": "Implement asynchronous job patterns using a table to track progress. Fire-and-forget, cancelation, timeouts, and more.", "date_modified": "2023-02-08T00:00:33.286Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Patterns" ] }, { "id": "https://stack.convex.dev/end-to-end-encryption-with-convex", "content_html": "Implementing end-to-end encryption on top of Convex to build a secret-sharing app.", "url": "https://stack.convex.dev/end-to-end-encryption-with-convex", "title": "End-to-End Encryption with Convex", "summary": "Implementing end-to-end encryption on top of Convex to build a secret-sharing app.", "date_modified": "2023-02-03T17:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/anonymous-users-via-sessions", "content_html": "Getting users to sign up for a new service before seeing any benefits is challenging. In this post, we looked at a couple of strategies for managing user information without requiring a login.", "url": "https://stack.convex.dev/anonymous-users-via-sessions", "title": "Anonymous Users via Sessions", "summary": "Getting users to sign up for a new service before seeing any benefits is challenging. In this post, we looked at a couple of strategies for managing user information without requiring a login.", "date_modified": "2023-02-02T20:00:01.825Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns", "Fullstack" ] }, { "id": "https://stack.convex.dev/using-dall-e-from-convex", "content_html": "Use Convex to fetch an image from OpenAI’s image generation service based on a user-provided prompt.", "url": "https://stack.convex.dev/using-dall-e-from-convex", "title": "Using Dall-E from Convex", "summary": "Use Convex to fetch an image from OpenAI’s image generation service based on a user-provided prompt.", "date_modified": "2023-01-31T20:00:11.376Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "Integration", "AI" ] }, { "id": "https://stack.convex.dev/building-a-multiplayer-game", "content_html": "Building multiplayer games requires a lot of synchronization logic and event systems. However, using Convex, we get a lot of this for free! Follow along here as we build a complex multiplayer game on Convex, leveraging its reactive-by-default queries, transactional mutations, backend storage, and scheduled functions.", "url": "https://stack.convex.dev/building-a-multiplayer-game", "title": "Building a Multiplayer Game", "summary": "Building multiplayer games requires a lot of synchronization logic and event systems. However, using Convex, we get a lot of this for free! Follow along here as we build a complex multiplayer game on Convex, leveraging its reactive-by-default queries, transactional mutations, backend storage, and scheduled functions.", "date_modified": "2023-01-31T19:00:59.764Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs" ] }, { "id": "https://stack.convex.dev/not-sql", "content_html": "SQL has been a part of computing for a very long time, and SQL-based database systems underly most of the world's applications. But recently, developers have been clamoring for something better, and it's time to move on.", "url": "https://stack.convex.dev/not-sql", "title": "It's not you, it's SQL", "summary": "SQL has been a part of computing for a very long time, and SQL-based database systems underly most of the world's applications. But recently, developers have been clamoring for something better, and it's time to move on.", "date_modified": "2023-01-29T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives" ] }, { "id": "https://stack.convex.dev/sessions-wrappers-as-middleware", "content_html": "An approach to server-persisted session data with Convex, wrapping your server functions and storing a session ID on the client.", "url": "https://stack.convex.dev/sessions-wrappers-as-middleware", "title": "Sessions: Wrappers as \"Middleware\"", "summary": "An approach to server-persisted session data with Convex, wrapping your server functions and storing a session ID on the client.", "date_modified": "2023-01-27T20:00:01.090Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns", "Fullstack", "Sessions" ] }, { "id": "https://stack.convex.dev/wrappers-as-middleware-zod-validation", "content_html": "Function validation is important for a production app because you can’t always control which clients are talking to your server. See how to use zod to validate your Convex functions, using our withZod wrapper.", "url": "https://stack.convex.dev/wrappers-as-middleware-zod-validation", "title": "Zod Validation: Wrappers as “Middleware”", "summary": "Function validation is important for a production app because you can’t always control which clients are talking to your server. See how to use zod to validate your Convex functions, using our withZod wrapper.", "date_modified": "2023-01-24T23:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns", "Fullstack" ] }, { "id": "https://stack.convex.dev/wrappers-middleware-e2b", "content_html": "Convex middleware serves many purposes. Sometimes authentication, sometimes i18n. This time? Making sense (or nonsense) of emerging technology industry trends.", "url": "https://stack.convex.dev/wrappers-middleware-e2b", "title": "Edge to Butt: Wrappers as \"Middleware\"", "summary": "Convex middleware serves many purposes. Sometimes authentication, sometimes i18n. This time? Making sense (or nonsense) of emerging technology industry trends.", "date_modified": "2023-01-21T00:03:42.236Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns" ] }, { "id": "https://stack.convex.dev/wrappers-as-middleware-authentication", "content_html": "Using wrapper functions like withUser can help you organize your code into middleware-like blocks that you can compose to keep your function logic concise.", "url": "https://stack.convex.dev/wrappers-as-middleware-authentication", "title": "Authentication: Wrappers as “Middleware”", "summary": "Using wrapper functions like withUser can help you organize your code into middleware-like blocks that you can compose to keep your function logic concise.", "date_modified": "2023-01-20T20:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns" ] }, { "id": "https://stack.convex.dev/upvoting-4-ways-on-convex", "content_html": "Implementing an \"upvote\" feature 4 ways with Convex.", "url": "https://stack.convex.dev/upvoting-4-ways-on-convex", "title": "Implementing Upvoting 4 Ways on Convex", "summary": "Implementing an \"upvote\" feature 4 ways with Convex.", "date_modified": "2023-01-11T17:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Walkthroughs", "Web" ] }, { "id": "https://stack.convex.dev/presence-with-convex", "content_html": "Some patterns for incorporating presence into a web app leveraging Convex, and sharing some tips & utilities I built along the way.", "url": "https://stack.convex.dev/presence-with-convex", "title": "Implementing Presence with Convex", "summary": "Some patterns for incorporating presence into a web app leveraging Convex, and sharing some tips & utilities I built along the way.", "date_modified": "2023-01-10T00:00:44.964Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Patterns", "Web", "Walkthroughs", "Reactivity" ] }, { "id": "https://stack.convex.dev/dont-drop-acid", "content_html": "When your database supports ACID semantics, you're free to write code the intuitive way and ignore the complexities of concurrency and failure.", "url": "https://stack.convex.dev/dont-drop-acid", "title": "Don't Drop ACID", "summary": "When your database supports ACID semantics, you're free to write code the intuitive way and ignore the complexities of concurrency and failure.", "date_modified": "2022-12-15T17:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Fundamentals" ] }, { "id": "https://stack.convex.dev/building-an-application-portal", "content_html": "Working with Convex has made our development workflow so much more streamlined—we no longer have to worry about the complexities of traditional frontend-backend communication, enabling us to build out the core of our new application portal at a blazing-fast speed.", "url": "https://stack.convex.dev/building-an-application-portal", "title": "Building an Application Portal on Convex", "summary": "Working with Convex has made our development workflow so much more streamlined—we no longer have to worry about the complexities of traditional frontend-backend communication, enabling us to build out the core of our new application portal at a blazing-fast speed.", "date_modified": "2022-12-14T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "Fullstack", "React" ] }, { "id": "https://stack.convex.dev/fully-reactive-pagination", "content_html": "Paginating over large datasets is tricky when the data is changing. Naive approaches result in missing or duplicated data. The trick is to rewrite limit queries (fetch 5 items) into range queries (fetch between cursors). Convex handles this automatically!", "url": "https://stack.convex.dev/fully-reactive-pagination", "title": "Fully Reactive Pagination", "summary": "Paginating over large datasets is tricky when the data is changing. Naive approaches result in missing or duplicated data. The trick is to rewrite limit queries (fetch 5 items) into range queries (fetch between cursors). Convex handles this automatically!", "date_modified": "2022-12-07T19:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fundamentals", "Reactivity", "React" ] }, { "id": "https://stack.convex.dev/throttling-requests-by-single-flighting", "content_html": "For write-heavy applications, use single flighting to dynamically throttle requests. See how we implement this with React hooks for Convex.", "url": "https://stack.convex.dev/throttling-requests-by-single-flighting", "title": "Throttling Requests by Single-Flighting", "summary": "For write-heavy applications, use single flighting to dynamically throttle requests. See how we implement this with React hooks for Convex.", "date_modified": "2022-11-30T17:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Patterns", "React" ] }, { "id": "https://stack.convex.dev/ready-for-actions", "content_html": "Convex 0.5.0 introduces built-in support for actions — arbitrary lambda functions that run in a Node.js environment on the Convex cloud. We use the term action to differentiate these functions from Convex mutation and query functions, which enable transactional writes and dynamic subscriptions that update whenever data changes.", "url": "https://stack.convex.dev/ready-for-actions", "title": "Ready for Actions", "summary": "Convex 0.5.0 introduces built-in support for actions — arbitrary lambda functions that run in a Node.js environment on the Convex cloud. We use the term action to differentiate these functions from Convex mutation and query functions, which enable transactional writes and dynamic subscriptions that update whenever data changes.", "date_modified": "2022-11-28T17:00:16.020Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Perspectives" ] }, { "id": "https://stack.convex.dev/jamstack-conf-2022-panel-the-future-of-databases", "content_html": "Today, a new wave of innovation is making databases approachable for developers without requiring a specialized skillset, opening the door to a whole new category of ambitious web experiences. In this panel, you’ll hear from the people pushing the boundaries of database technology and learn what’s possible — and what’s coming.", "url": "https://stack.convex.dev/jamstack-conf-2022-panel-the-future-of-databases", "title": "Jamstack Conf 2022 Panel: The Future of Databases", "summary": "Today, a new wave of innovation is making databases approachable for developers without requiring a specialized skillset, opening the door to a whole new category of ambitious web experiences. In this panel, you’ll hear from the people pushing the boundaries of database technology and learn what’s possible — and what’s coming.", "date_modified": "2022-11-23T20:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives", "Fullstack", "Comparisons" ] }, { "id": "https://stack.convex.dev/feature-gating", "content_html": "Today we’re going to talk about how to flip features on and off remotely using a clever use of the reactive nature of Convex queries. ", "url": "https://stack.convex.dev/feature-gating", "title": "Launching Features Right on Time: Feature Gating", "summary": "Today we’re going to talk about how to flip features on and off remotely using a clever use of the reactive nature of Convex queries. ", "date_modified": "2022-11-21T16:39:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Patterns", "React", "Reactivity" ] }, { "id": "https://stack.convex.dev/serverless-revolution", "content_html": "The serverless movement has eliminated so many problems but it has left application developers with the hardest one of all: managing distributed state.", "url": "https://stack.convex.dev/serverless-revolution", "title": "The serverless revolution deserves more than just a serverless database", "summary": "The serverless movement has eliminated so many problems but it has left application developers with the hardest one of all: managing distributed state.", "date_modified": "2022-11-18T14:17:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Perspectives", "Reactivity" ] }, { "id": "https://stack.convex.dev/future-of-databases", "content_html": "The future of databases is Convex. This video originally aired at Jamstack 2022, highlighting the next evolution of modern web development architecture.", "url": "https://stack.convex.dev/future-of-databases", "title": "The future of databases is not just a database", "summary": "The future of databases is Convex. This video originally aired at Jamstack 2022, highlighting the next evolution of modern web development architecture.", "date_modified": "2022-11-11T13:20:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives", "Fullstack", "Reactivity" ] }, { "id": "https://stack.convex.dev/infra-roundtable", "content_html": "Hosted by Ian & Alex, with Alana (Readyset), Hojjat (Deltastream), Jamie (Convex).", "url": "https://stack.convex.dev/infra-roundtable", "title": "Convex and the future of streaming infrastructure", "summary": "Hosted by Ian & Alex, with Alana (Readyset), Hojjat (Deltastream), Jamie (Convex).", "date_modified": "2022-11-09T13:26:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Comparisons", "Reactivity" ] }, { "id": "https://stack.convex.dev/reactive-backend", "content_html": "Convex is a JS-powered database and backend for web apps that’s reactive — you can use it to create endpoints and queries that update automatically when data changes. Tom Ballinger will teach us how.", "url": "https://stack.convex.dev/reactive-backend", "title": "Build a Reactive Backend for a Web App", "summary": "Convex is a JS-powered database and backend for web apps that’s reactive — you can use it to create endpoints and queries that update automatically when data changes. Tom Ballinger will teach us how.", "date_modified": "2022-10-05T12:27:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Walkthroughs", "React", "Reactivity" ] }, { "id": "https://stack.convex.dev/coping-with-the-web-s-looming-global-reactivity-crisis", "content_html": "Reactivity has taken a dominant position today within web app development. Our components and app state are all reactive, and the world has adapted–most would argue, for the better.\n\nBut has Convex gone too far? 😉\n\nA new generation of serverless backends like Convex is recklessly spreading reactivity across our databases, server-side functions, and protocols, making global reactivity a new phenomenon. Shared global data is becoming reactive by default. Is this good for the world?\n\nIn this video, Jamie Turner explores one circumstance where this pervasive reactivity poses a challenge, and he builds one useful abstraction for taming over-reactivity and turning it back into a strength.", "url": "https://stack.convex.dev/coping-with-the-web-s-looming-global-reactivity-crisis", "title": "Managing Reactivity with useBufferedState", "summary": "Reactivity has taken a dominant position today within web app development. Our components and app state are all reactive, and the world has adapted–most would argue, for the better.\n\nBut has Convex gone too far? 😉\n\nA new generation of serverless backends like Convex is recklessly spreading reactivity across our databases, server-side functions, and protocols, making global reactivity a new phenomenon. Shared global data is becoming reactive by default. Is this good for the world?\n\nIn this video, Jamie Turner explores one circumstance where this pervasive reactivity poses a challenge, and he builds one useful abstraction for taming over-reactivity and turning it back into a strength.", "date_modified": "2022-08-18T21:03:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Patterns", "Reactivity", "Web", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/convex-query-performance", "content_html": "How do I ensure my Convex database queries are fast and efficient? When should I define an index? What is an index?\n\nThis document explains how you should think about query performance in Convex by describing a simplified model of how queries and indexes function.", "url": "https://stack.convex.dev/convex-query-performance", "title": "Intro to Convex Query Performance", "summary": "How do I ensure my Convex database queries are fast and efficient? When should I define an index? What is an index?\n\nThis document explains how you should think about query performance in Convex by describing a simplified model of how queries and indexes function.", "date_modified": "2022-07-15T16:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fundamentals", "Fullstack", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/backend-matters-fast5", "content_html": "Why does anything really need to run on the server anymore? And even if it does, do I, the developer, need to be so involved?\n\nYes! Even in a serverless world, the backend computing context being a real, discrete environment that you have control and influence over is not only necessary but hugely beneficial.", "url": "https://stack.convex.dev/backend-matters-fast5", "title": "Backend Matters (Making Fast5 #2)", "summary": "Why does anything really need to run on the server anymore? And even if it does, do I, the developer, need to be so involved?\n\nYes! Even in a serverless world, the backend computing context being a real, discrete environment that you have control and influence over is not only necessary but hugely beneficial.", "date_modified": "2022-07-15T16:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "Fullstack", "Fundamentals" ] }, { "id": "https://stack.convex.dev/platform-you-need", "content_html": "You don’t have to worry about the platform locking you into a decision that seems convenient at first but is a headache to deal with later.", "url": "https://stack.convex.dev/platform-you-need", "title": "The platform you need, when you need it", "summary": "You don’t have to worry about the platform locking you into a decision that seems convenient at first but is a headache to deal with later.", "date_modified": "2022-05-31T16:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Perspectives" ] }, { "id": "https://stack.convex.dev/local-remote-state-fast5", "content_html": "While making Fast5, Convex's wordle-style multiplayer racing game, we ran into several interesting challenges. This week, let's dig into managing the combination of local and global state.", "url": "https://stack.convex.dev/local-remote-state-fast5", "title": "Local and Remote State (Making Fast5 #1)", "summary": "While making Fast5, Convex's wordle-style multiplayer racing game, we ran into several interesting challenges. This week, let's dig into managing the combination of local and global state.", "date_modified": "2022-05-25T16:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "React", "Reactivity", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/introducing-fast5", "content_html": "At Convex, we're creating a platform for managing global state for web developers. Unsurprisingly, we've found one of the best ways to improve our platform is to actually build stuff with it!", "url": "https://stack.convex.dev/introducing-fast5", "title": "Introducing Fast5", "summary": "At Convex, we're creating a platform for managing global state for web developers. Unsurprisingly, we've found one of the best ways to improve our platform is to actually build stuff with it!", "date_modified": "2022-05-13T16:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "React", "Fullstack", "Walkthroughs" ] }, { "id": "https://stack.convex.dev/data-interactivity-in-the-serverless-future", "content_html": "Dynamic application developers need global state management, not a database.\n\nJames (@jamesacowling) presents his talk from the HYTRADBOI 2022 database conference on how Convex is rethinking how app developers manage global state.", "url": "https://stack.convex.dev/data-interactivity-in-the-serverless-future", "title": "Data Interactivity in the Serverless Future (HYTRADBOI 2022)", "summary": "Dynamic application developers need global state management, not a database.\n\nJames (@jamesacowling) presents his talk from the HYTRADBOI 2022 database conference on how Convex is rethinking how app developers manage global state.", "date_modified": "2022-05-02T12:27:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Fullstack", "Reactivity", "React", "Perspectives" ] }, { "id": "https://stack.convex.dev/convex-vs-relational-databases", "content_html": "Relational databases are powerful tools for persisting data, but using them to build interactive web apps requires a lot of work. A web app architecture built on a relational database is an entire cluster of databases, backends, caching nodes, and Pub/Sub servers. And even after you invest in all of that infrastructure you'll still need to explicitly define your database schema upfront and write cumbersome SQL queries.\n\nAt Convex we believe that web developers shouldn't have to worry about any of this. We can handle the servers, caching, and reactivity and you can focus on your product.", "url": "https://stack.convex.dev/convex-vs-relational-databases", "title": "Convex vs. Relational Databases", "summary": "Relational databases are powerful tools for persisting data, but using them to build interactive web apps requires a lot of work. A web app architecture built on a relational database is an entire cluster of databases, backends, caching nodes, and Pub/Sub servers. And even after you invest in all of that infrastructure you'll still need to explicitly define your database schema upfront and write cumbersome SQL queries.\n\nAt Convex we believe that web developers shouldn't have to worry about any of this. We can handle the servers, caching, and reactivity and you can focus on your product.", "date_modified": "2022-04-27T00:35:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Reactivity", "Fullstack", "Comparisons", "Fundamentals" ] }, { "id": "https://stack.convex.dev/convex-vs-firebase", "content_html": "On Cloud Firestore, you'll have to do some acrobatics to integrate with React and listen for realtime updates. Down the road, you'll find your app full of slow loading experiences from request waterfalls and your database full of half-committed mutations.", "url": "https://stack.convex.dev/convex-vs-firebase", "title": "Convex vs. Firebase", "summary": "On Cloud Firestore, you'll have to do some acrobatics to integrate with React and listen for realtime updates. Down the road, you'll find your app full of slow loading experiences from request waterfalls and your database full of half-committed mutations.", "date_modified": "2022-04-21T16:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Comparisons", "React", "Fullstack" ] }, { "id": "https://stack.convex.dev/building-reactive-web-apps", "content_html": "Sujay (@sujayakar314) walks through how easy it is to build a dynamic web app with global state on Convex. Join the Convex beta at https://convex.dev.", "url": "https://stack.convex.dev/building-reactive-web-apps", "title": "Building reactive web apps on Convex", "summary": "Sujay (@sujayakar314) walks through how easy it is to build a dynamic web app with global state on Convex. Join the Convex beta at https://convex.dev.", "date_modified": "2022-04-19T12:29:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Walkthroughs", "React", "Fullstack", "Reactivity" ] }, { "id": "https://stack.convex.dev/functional-ideals", "content_html": "Ideas around immutability, purity, and dataflow programming are quietly saturating our technologies like Bitcoin and React. And while these early inroads are enabling exciting new ways to build large and dependable applications, there is still much to do to realize the full potential of this revolution.", "url": "https://stack.convex.dev/functional-ideals", "title": "The unfulfilled promise of functional ideals on the web", "summary": "Ideas around immutability, purity, and dataflow programming are quietly saturating our technologies like Bitcoin and React. And while these early inroads are enabling exciting new ways to build large and dependable applications, there is still much to do to realize the full potential of this revolution.", "date_modified": "2022-02-15T17:00:00.000Z", "author": { "name": "Stack", "url": "https://stack.convex.dev/" }, "tags": [ "Perspectives", "Fullstack", "Reactivity" ] } ] }