# Add a custom domain Source: https://docs.replit.com/build/add-custom-domain Move Velocity from velocity.replit.app to velocityrentals.com. By the end, Velocity will live at `velocityrentals.com` instead of `velocity.replit.app`. You've added sign-in, a database, payments, and a calendar integration to Velocity. Now give it a URL that looks like a real rental brand. This guide moves Velocity to `velocityrentals.com` — swap in whatever domain you own. ## Confirm Velocity works on the Replit URL first Don't change anything until the public `velocity.replit.app` URL is solid. Open it in a new browser tab and check: * The fleet page loads. * A customer can sign in, reserve a car, and see the reservation after refresh. * Stripe deposit checkout opens and the test card confirms the reservation. * The Google Calendar event lands on the booking customer's calendar. If any of those break, fix them before touching DNS. See [Troubleshoot publishing](/build/troubleshooting). ## Connect velocityrentals.com in Replit Open Velocity's Publishing settings and add `velocityrentals.com` as a custom domain. Replit will show you two DNS records — copy them exactly as shown. The Replit custom-domain dialog inside Velocity's Publishing settings with velocityrentals.com entered and the two DNS records (an A record and a TXT verification record) ready to copy Then open the dashboard at your domain provider (Namecheap, Cloudflare, Google Domains, GoDaddy, etc.) and add those exact records. If you'd like Agent to walk you through the steps for your specific provider: I'm moving Velocity from velocity.replit.app to velocityrentals.com. My domain is registered at \[name your domain provider].
Walk me through exactly which DNS records to add, in the order I should add them.
Use the values shown in Replit — don't make up record values.
Tell me how to check that the domain is connected before I expect it to work.
DNS changes can take a few minutes to a few hours to apply. Replit will show "Verified" next to `velocityrentals.com` once it sees the records. ## Test Velocity on velocityrentals.com Once Replit shows the domain as verified: 1. Open `https://velocityrentals.com` in a new browser tab. The green padlock should appear — HTTPS is automatic. 2. Sign in as a customer. Sign-in should still work (Replit Auth handles the new domain automatically). 3. Reserve a car, refresh, and confirm the booking persists. 4. Open Stripe deposit checkout. The page should now show `velocityrentals.com` as the merchant URL. 5. Confirm the booking and check that the Google Calendar event still lands on the customer's calendar. If sign-in, checkout, or the calendar integration misbehaves only on `velocityrentals.com`, tell Agent the exact symptom: Velocity works at velocity.replit.app but \[describe what's broken] on velocityrentals.com.
Tell me whether the fix is in DNS, in Replit's settings, or in a third-party provider's settings (like Stripe or Google).
Give me the safest next check.
Velocity now lives at a real rental-brand URL. Share `velocityrentals.com` with customers — they won't see "replit.app" anywhere. ## Improve it next Fix issues when the public URL doesn't work. Buy velocityrentals.com through Replit if you haven't already. ## Need further help? * **`velocityrentals.com` doesn't load right away:** DNS changes can take a few hours. Wait and check again before changing more settings. * **The Replit URL works but the custom domain doesn't:** double-check the DNS records match what Replit shows exactly — common mistakes are a trailing dot, an extra subdomain, or a stale record. * **Stripe checkout still says `velocity.replit.app`:** ask Agent to update the Stripe redirect URLs to use `velocityrentals.com`. * **You don't own a domain yet:** buy one through Replit — see [Domain purchasing](/build/domain-purchasing). ## Related * [Custom domains](/features/publishing/custom-domains) * [Domain purchasing](/build/domain-purchasing) # Add a database Source: https://docs.replit.com/build/add-database Make Velocity's cars, availability, and reservations stick around after refresh, restart, and publish. By the end, every Velocity car, availability slot, and reservation will still be there tomorrow. Velocity after refresh showing the signed-in customer's My bookings list with two saved reservations and the fleet page with cars in the same order, both unchanged from before the refresh You added sign-in to Velocity in [Add login](/build/add-login). But the cars in the fleet and the reservations customers make still disappear when the page refreshes — they only live in the browser. Add a database so everything persists. ## Tell Agent to save the data For Velocity, use Neon — Replit's managed Postgres database. Neon handles concurrent bookings cleanly, scales with real customer traffic, and Agent provisions it automatically with separate Development and Production environments. There's no Neon dashboard signup and no keys to paste. Save Velocity's data to a database so cars, availability, and reservations don't disappear on refresh.
Use Neon (Postgres).
Save: each car (make, model, year, daily rate, photo, location), each car's availability calendar, and each reservation (pickup date, return date, car, customer).
Attach every reservation to the signed-in customer so each person only sees their own.
Prevent the same car from being booked on overlapping dates.
Tell me what to test after the change.
Agent will provision a Neon database, move the fleet and reservations from in-memory data into it, and add the overlap check so the same Lamborghini can't get double-booked. Agent chat after the Neon migration showing the verification checklist — overlap-prevention, signed-out blocking, user-scoped bookings, invalid date rejection, bad-car rejection — and a Checkpoint made just now indicator, alongside the Velocity preview rendering with the persisted fleet ## Test that everything sticks 1. Sign in to Velocity in Preview and reserve a car for next Saturday. 2. Refresh the page. The reservation should still be there in "My bookings." 3. Restart the app from the Agent chat. The fleet and the reservation should both still be there. 4. Try to reserve the same car on the same Saturday with a second account. Velocity should say the car isn't available and offer a different date or car. 5. Sign out and sign back in. Your reservation should still be there. If a reservation disappears at any step, paste the exact symptom back to Agent: I reserved a car in Velocity, but the reservation disappears after refresh.
Check whether the reservation is being saved to the database or only stored in the page.
Fix the smallest issue and tell me how to verify it.
You can also ask Agent for a simple admin view to see what's in the database: Show me a simple admin page in Velocity that lists every car and every reservation in the database, grouped by car.
Only show it to me as the project owner.
## Publish and confirm on the public URL Agent's Neon setup gives Velocity separate Development and Production environments out of the box. Publish Velocity again from the Agent chat or the Publishing tile, then open the public URL in a new tab. Replit wires the Production Neon credentials into the published deployment automatically — make a reservation on the public URL, refresh, and confirm it's still there. Velocity now remembers every car, every available date, and every reservation. The next refresh won't lose a single booking. ## Improve it next Take a refundable deposit when a customer reserves a car. Send each booking to the customer's calendar. Turn the saved reservations into utilization charts. ## Need further help? * **Reservations save in Preview but not on the public URL:** ask Agent to confirm the Production Neon credentials are wired into the published deployment. * **Data is hard to inspect:** ask Agent to add a simple admin view that lists everything in the database. * **You want to seed the fleet:** ask Agent to add a one-time script that loads your real cars into the database. * **You want a zero-setup database for a quick prototype:** use [Replit Database](/features/data-and-storage/sql-database) instead — it's built into every Repl with no separate provisioning. ## Related * [Production databases](/features/data-and-storage/development-and-production) * [Replit Database](/features/data-and-storage/sql-database) # Add integrations Source: https://docs.replit.com/build/add-integrations Send every Velocity booking to the customer's Google Calendar. By the end, every Velocity reservation will land on the customer's Google Calendar with the pickup and return times already filled in. Integrations let Velocity talk to other tools. You could send each booking to the customer's calendar, email a coordinator when a high-value rental is reserved, or pull weather into the trip-planning page. Pick one for now — Google Calendar gives every customer a clear, verifiable artifact ("the rental is on my calendar"), and you can check it on your own calendar during testing. ## Tell Agent to add the calendar integration Replit ships a built-in **Google Workspace connector** that covers Google Calendar. Agent signs in to Google with a single click — there are no API projects to create, no OAuth credentials to copy, and no secrets to paste. After a Velocity customer confirms a reservation, add the rental to their Google Calendar.
Use Replit's Google Workspace connector for Google Calendar — don't ask me for any OAuth credentials.
The event title should be "Velocity rental: \[car make and model]".
The event should span pickup time to return time and include the pickup address and the reservation reference in the description.
Update the calendar event automatically if the customer changes the dates or cancels the reservation.
Add a clear message in Velocity if the calendar add fails, so the reservation still confirms.
Agent will provision the Google Workspace connector, open a single Connect dialog in the workspace, and after you sign in with the Google account that owns the calendar, wire Velocity to add an event every time a reservation is confirmed. Connectors are a Core, Pro, or Enterprise feature. On the free plan, ask Agent to use a Google OAuth project instead — you'll need to create a Google Cloud project, enable the Calendar API, and paste the resulting credentials into your app's Secrets pane. ## Test it end-to-end 1. Open your own Google Calendar in a new tab. 2. Sign in to Velocity in Preview. 3. Reserve a car for next Saturday-Sunday and confirm the booking. 4. Switch to your Google Calendar tab. A new "Velocity rental: \[car]" event should appear on Saturday-Sunday with the pickup address in the description. 5. Change the reservation in Velocity to Sunday-Monday. The calendar event should move automatically. 6. Cancel the reservation. The calendar event should disappear. 7. As a second test, open **Integrations** in the workspace and disconnect Google Workspace, then try to book. Velocity should still confirm the reservation and show a clear message like "Couldn't add to your calendar — your reservation is confirmed." Reconnect the connector once the test passes. If the reservation confirms but no event appears, paste the exact error back to Agent: The integration failed with this error: \[paste the error from Velocity or the Replit logs].
Tell me the likely cause and fix the smallest issue.
Make sure reserving a car still works in Velocity even if Google Calendar is unreachable.
## Publish and try it from the public URL Once the calendar integration works in Preview: 1. Publish Velocity again from the Agent chat. 2. Open the public URL and book a car from a real customer's perspective. 3. Confirm the event appears on the calendar of the account that booked. 4. Update and cancel a booking from the public URL and confirm the calendar event follows. Customers now leave Velocity with the rental already on their calendar. The reservation isn't just a confirmation email — it's an event they can't forget. ## Improve it next Move Velocity to a branded URL customers can share. Take a refundable deposit at booking. ## Need further help? * **No event appears in Google Calendar:** open **Integrations** in the workspace, confirm the Google Workspace connector shows Connected, and that the Calendar scope is granted. * **The connector shows Connected but events still don't land:** ask Agent to log the calendar payload it sends, then fix the field mapping. * **Date or address fields land in the wrong place on the event:** ask Agent to log the event shape it sends, then fix the field mapping. * **You want a different integration:** swap "Google Calendar" for any other connector — Slack notifications for the team, HubSpot to log customers as CRM contacts, Airtable to track bookings in a shared base. Agent handles each the same way through the Integrations pane. ## Related * [Integrations](/features/integrations/overview) * [Replit AI integrations](/features/integrations/replit-ai-integrations) # Add login Source: https://docs.replit.com/build/add-login Let each Velocity customer sign in to see their own bookings and saved cars. By the end, each Velocity customer will sign in and see only their own bookings and saved cars. Velocity home screen after sign-in showing the customer name in the top-right header, the My bookings section with one upcoming reservation, and the saved-cars row underneath You saw Velocity on [Welcome to Replit](/build/welcome) — a premium supercar rental app. Right now anyone visiting the public URL can see every reservation. No one books a Lamborghini anonymously. Add sign-in and each customer gets their own bookings and saved cars. ## Tell Agent to add sign-in For Velocity, use Clerk. Replit's Clerk integration gives your app its own branded sign-in screen, customer accounts that exist inside Velocity (not Replit accounts), and full control over the look and feel — fitting for a premium rental brand. Agent provisions everything automatically, so there is no Clerk dashboard signup and no keys to paste. Add sign-in to Velocity so each customer has their own bookings and saved cars.
Use Clerk Auth.
Keep the car-browsing pages public so visitors can still explore the fleet without an account.
Require sign-in before someone can reserve a car or save one to their favorites.
After sign-in, show the customer's name in the header and a "My bookings" section with only their reservations.
Add a sign-out button.
Give me a test checklist using two different customers.
Agent will provision a Clerk tenant for Velocity, add the sign-in components, gate the booking flow behind it, attach each reservation to the signed-in customer, and add sign-out. Watch the build in the Agent chat. ## Test it with two customers One account isn't enough — you need two so you can prove bookings stay separate. 1. Open Velocity in Preview and browse cars without signing in. The fleet should still be visible. 2. Click Reserve on a car. You should land on the Clerk sign-in screen. 3. Sign up with your own email and complete a reservation (e.g. a weekend booking on a 911). 4. Sign out. The "My bookings" section should disappear and the booking flow should ask for sign-in again. 5. Open Preview in an incognito window and sign up with a different email. Reserve a different car. 6. Switch back to your first window, sign in, and confirm you still see your own reservation — not the second customer's. If both customers see the same reservations, the bookings aren't yet attached to the signed-in person. Tell Agent the exact symptom: Both customers can see each other's reservations in Velocity.
Attach each booking and each saved car to the signed-in customer so each person only sees their own.
Show me how to verify it with two test accounts.
## Publish and sign in on the public URL Publish Velocity again from the Agent chat or the Publishing tile, then open the public URL in a new tab and sign in. Clerk is provisioned with separate Development and Production environments — Agent wires the Production credentials into the published app automatically, so sign-in works on the public URL out of the box. Velocity now has real customers. Each one signs in to a personal garage of bookings — nobody else sees them. ## Improve it next Make cars, availability, and reservations persist between sessions. Take a refundable deposit when a customer reserves a car. ## Need further help? * **The whole app is hidden:** ask Agent to keep car browsing public and protect only the booking and account pages. * **Customers see each other's reservations:** ask Agent to attach each booking and saved car to the signed-in customer. * **Sign-in works in Preview but not after publishing:** open the public URL in a new tab and tell Agent the exact error you see. Make sure Agent provisioned the Production Clerk environment. * **You want a faster zero-config sign-in for prototypes:** Replit Auth uses your customers' Replit accounts with no Clerk tenant to manage — see [Replit Auth](/features/auth-and-identity/authentication). ## Related * [Clerk Auth](/features/auth-and-identity/clerk-auth) * [Replit Auth](/features/auth-and-identity/authentication) # Add payments Source: https://docs.replit.com/build/add-payments Take a refundable deposit when a customer reserves a Velocity car, then charge the balance on pickup. By the end, a Velocity customer will pay a refundable deposit to reserve a car and pay the balance at pickup. You added sign-in and a database to Velocity. Now turn it into a real booking business: hold each car with a refundable **deposit at booking**, then **charge the balance on pickup**. Replit handles payments through Stripe — you don't write any Stripe code yourself. ## Decide the deposit and balance amounts Before asking Agent to build, pick the math: * **Deposit at booking:** a flat amount or a percentage of the total? A flat \$500 is simpler to communicate; 20% scales with the car. * **Balance at pickup:** the rest of the rental cost, charged when the customer collects the keys. * **Refund window:** how late can someone cancel and still get their deposit back? 48 hours is a common default. For this guide, Velocity holds a flat \$500 refundable deposit at booking, charges the balance at pickup, and refunds in full if a customer cancels more than 48 hours out. Adjust to whatever fits your real business. ## Tell Agent to add Stripe checkout Add deposit-and-balance payments to Velocity using Stripe in test mode.
At booking, take a \$500 refundable deposit and save the customer's payment method on file.
At pickup, charge the remaining balance to the saved payment method.
If the customer cancels more than 48 hours before pickup, refund the deposit in full. Inside 48 hours, keep it.
Save the deposit status and the saved-card reference in the database so a customer can see both on their booking.
Tell me exactly which secret keys I need to paste from Stripe and where to paste them.
Give me a test checklist for the deposit success, deposit cancel, balance charge, and cancellation refund cases.
Agent will set up Stripe under the hood, add the deposit and balance flows, and tell you which secret keys to grab from Stripe. Paste them into your app's settings when Agent asks — your test keys live there, never in the code. Replit Secrets pane showing the Stripe API keys (STRIPE_SECRET_KEY, STRIPE_PUBLISHABLE_KEY, STRIPE_WEBHOOK_SECRET) that Agent told the builder to paste ## Test the full flow in test mode Stripe gives you a special test card so you can run real-feeling payments without spending real money: `4242 4242 4242 4242`, any future expiry, any 3-digit CVC. 1. Sign in to Velocity in Preview and reserve a car for next Saturday-Sunday. 2. At checkout, you should see "Deposit today: $500" and "Balance at pickup: $1,900" (or whatever your math produces). 3. Pay the deposit with the `4242` test card. You should return to a confirmation page showing the deposit paid and a payment method saved for the balance. 4. Open the booking from "My bookings" and use the admin or pickup action to charge the balance. Confirm the balance shows as paid. 5. Make a second reservation, then cancel it more than 48 hours out. The deposit should refund to the test card (you can verify in your Stripe test-mode dashboard). 6. Make a third reservation and cancel inside 48 hours. The deposit should be kept and clearly explained to the customer. 7. Try checkout with Stripe's decline test card (`4000 0000 0000 0002`). The reservation should not be confirmed and the customer should see a clear failure message. If the deposit succeeds but the reservation doesn't get confirmed, tell Agent: The Stripe test deposit for Velocity succeeded but the reservation isn't showing as confirmed.
Connect the deposit-success event to the reservation status in the database.
Show me how to verify it with another test booking.
## Switch to live payments when you're ready Test mode is for you. Live mode is for real customers handing over real money. When Velocity is ready: 1. In Stripe, switch from test mode to live mode and copy the **live** secret keys. 2. In your app's settings, replace the test keys with the live ones. 3. Publish Velocity again from the Agent chat. 4. Open the public URL, book a low-cost test car with your own real card, and confirm both the deposit and the balance flow work end-to-end. Run that real-card test once before sharing the public URL widely. Velocity now takes real bookings with real money. ## Improve it next Send each booking to the customer's calendar. Move Velocity to a branded URL before charging customers. ## Need further help? * **Deposit succeeds but the reservation isn't confirmed:** ask Agent to connect the Stripe success event to the reservation status in the database. * **Test mode works, live mode doesn't:** make sure you replaced the test keys with the live ones in your app's settings. * **You want one upfront payment instead of deposit + balance:** tell Agent to switch Velocity to a single full payment at booking. * **You want recurring subscription pricing (monthly access to the fleet):** Replit also supports RevenueCat — ask Agent to use it instead of Stripe. ## Related * [Stripe payments](/features/monetization/stripe-payments) * [RevenueCat subscriptions](/features/monetization/revenuecat-subscriptions) # Build an Agent Source: https://docs.replit.com/build/build-an-agent Build and publish autonomous AI agents using the Claude Agent SDK and Replit, with a step-by-step Todoist automation example. The [Claude Agent SDK](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/sdk) is Claude Code as a library. It lets you programmatically create the same agents that power Claude Code, then execute them as code. Turn repetitive tasks into automated workflows and publish them on Replit. In this tutorial, you build an agent that organizes a Todoist inbox—fetching tasks, applying labels, and sorting them into projects—then publish it to run on a schedule. ## What you'll learn * How the Claude Agent SDK works and when to use it * Core primitives: agents, tools, MCP servers, skills, and permissions * How to build a task automation agent on Replit using [Integrations](/features/integrations/overview) * How to publish your agent on a schedule with [Scheduled Deployments](/features/publishing/deployment-types#scheduled) ## Prerequisites * A [Replit](https://replit.com) account (Core or Pro plan recommended for Deployments) * An [Anthropic API key](https://console.anthropic.com/) * A [Todoist](https://todoist.com) account (or another service you want to automate) ## How the Claude Agent SDK works An agent is a loop: you send a prompt, the agent picks tools to execute, observes the results, and repeats until the task is complete. You provide the prompt. The SDK handles the loop. But the SDK goes further. It lets you build **multi-agent architectures** where an orchestrator agent delegates tasks to specialized sub-agents, each with their own tools and context windows. Multi-agent architectures keep each agent focused. Sub-agents get only the tools and context they need, which prevents context bloat and improves performance. ### Core primitives | Primitive | What it does | | --------------- | --------------------------------------------------------------------------------------------------- | | **Query loop** | The foundation: prompt, pick tools, execute, observe, repeat | | **Agents** | Specialized configurations with their own tools and instructions | | **Tools** | Actions agents can take—run commands, call APIs, edit files | | **MCP servers** | External processes that expose collections of tools (context-heavy, loaded upfront) | | **Skills** | Markdown instruction files that teach agents how to do things (context-efficient, loaded on demand) | | **Permissions** | Granular controls over what each agent can access and execute | ### Skills vs. MCP servers These are the two main ways to extend your agents: **Skills** are markdown files with instructions your agent follows. Only a brief description loads until invoked, keeping the context window lean. Use skills for: * Workflows and conventions ("how to deploy," "code review checklist") * Reference materials (API patterns, style guides) * Reusable prompts triggered by name **MCP servers** are processes that expose tools. All tool descriptions load upfront, making them context-heavy. Use MCP servers for: * Connecting to external services (Notion, Linear, databases) * Actions that need API access (create tasks, query data) * Tools that *do* things, not just instruct Skills define *how* your agent should work. MCP servers define *what* your agent can access. Both work for coding agents (like Replit Agent) and agents you build with the SDK. ### When to use the SDK vs. the API | Use case | Choose | | --------------------------- | ---------------- | | Automating multi-step tasks | Claude Agent SDK | | Multi-agent workflows | Claude Agent SDK | | Simple chat apps | Anthropic API | | Single-turn tasks | Anthropic API | ## Build a Todoist organizer agent This walkthrough uses a Replit template that scaffolds a Claude Agent SDK project with the right structure—agents, tools, MCP servers, skills, and permissions directories already in place. ### Step 1: Remix the template Open the [Claude Agent SDK template](https://replit.com/@matt/Claude-Agent-SDK) on Replit and select **Remix** to create your own copy. Give it a descriptive name (e.g., "My Todoist Agent") and select **Use Template**. Once the environment loads, open the file sidebar. Toggle **Show Hidden Files** if needed to see the full structure: * `.agents/skills/` — Skills that teach Replit Agent how to build Claude Agent SDK apps * `src/agents/` — Agent definitions * `src/mcpServers/` — MCP server configurations * `src/permissions/` — Permission definitions * `src/skills/` — Skills for your agents (markdown files) * `src/tools/` — Custom tool definitions The template includes a skill that teaches Replit Agent how to build Claude Agent SDK apps. This means Agent already understands the framework when you prompt it. ### Step 2: Connect Todoist via Replit Integrations Before prompting Agent, connect the service your agent needs to interact with. 1. Go to **replit.com/integrations** in your Replit account. 2. Find **Todoist** and connect your account. 3. Authorize Replit to access your Todoist data. Replit Integrations handle OAuth and authentication for you. Your agent can access the Todoist API without managing tokens directly. This is simpler than configuring a separate MCP server that requires its own OAuth flow. ### Step 3: Prompt Agent to build your agent Switch Replit Agent into **Plan Mode** for best results—it reviews the plan before building, giving you a chance to verify the approach. Use the Claude Agent SDK skill. Build an agent that looks at my Todoist inbox and organizes my tasks by applying relevant labels or supporting information. You should create tools that allow the agent to interact with Todoist using the SDK. The result should be an agent that, when triggered, loads all tasks and available projects, polishes them, then organizes them appropriately. Be sure to use the Replit Todoist integration for all authentication. Use custom tools with the Todoist REST API rather than the Todoist MCP server, since the MCP server requires OAuth which doesn't work in this context. The agent should also fetch a list of projects and assign a relevant project to each item in my inbox, clearing the inbox completely. The final two paragraphs of this prompt were added after debugging. Being specific about *how* to authenticate (Replit Integrations, not MCP OAuth) and *what* the end state should look like (inbox completely cleared) saves iteration time. ### Step 4: Review the plan and build When Agent presents its plan, verify it includes: 1. **Custom tools** for the Todoist API (not the Todoist MCP server) 2. **An organizer agent** that fetches tasks, labels, and projects 3. **Proper permissions** scoped to the tools your agent needs 4. **An entry point** that triggers the workflow Once satisfied, approve the plan, set Agent to **high autonomy**, and let it build. ### Step 5: Add your Anthropic API key The Claude Agent SDK requires an Anthropic API key to call Claude. 1. Open the **Secrets** pane in the Project Editor. 2. Add a secret named `ANTHROPIC_API_KEY` with your API key value. If you've saved your Anthropic API key in your [Replit vault in Settings](https://replit.com/settings), it's automatically available across all your projects. ### Step 6: Test and debug Run the agent and verify it processes your Todoist inbox correctly. Common issues to watch for: * **"Inbox is empty" when it's not** — The API response format for detecting inbox tasks may need adjustment. Check that the agent filters tasks by the inbox project, not a different property. * **Tasks get labels but don't move to projects** — Be explicit in your prompt that the agent should fetch available projects and assign each task to one. * **Authentication errors** — Verify the Todoist integration is connected in Replit Integrations and that your agent code uses it (not a separate OAuth flow). Debugging is part of building with AI. When something doesn't work, look at the output, identify *what* the agent did differently than expected, and provide a more specific prompt. Each correction teaches you what to include upfront next time. ## Publish your agent Once your agent works correctly, publish it to run automatically. In the Project Editor, select the **Publish** tab. Select **Scheduled Deployment** for time-based automation. Enter your desired schedule (e.g., "Every day at 5pm PST"). Confirm the run command points to your main entry point file and that your `ANTHROPIC_API_KEY` secret is included in the deployment secrets. Select **Publish**. Your agent is now live and runs on schedule. For agents that need to respond to events (webhooks, incoming messages), use a [Reserved VM Deployment](/features/publishing/deployment-types#reserved-vm) instead. ## Extend your agent Once the basics work, you can build more sophisticated agents on Replit: * **Add persistent memory** — Use [Replit Database](/features/data-and-storage/sql-database) to store state between runs * **Store files** — Use [App Storage](/features/data-and-storage/object-storage) for file-based data * **Connect more services** — Add more [Integrations](/features/integrations/overview) (Slack, Linear, GitHub, Notion) for multi-service workflows * **Use skills** — Add markdown skill files to give your agents specialized knowledge and instructions ## Next steps * Explore the [Claude Agent SDK documentation](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/sdk) for the full API reference * Learn about [Agents & Automations](/features/agent/automations) for building chatbots and event-driven workflows on Replit * Read about [Scheduled Deployments](/features/publishing/deployment-types#scheduled) and [Reserved VM Deployments](/features/publishing/deployment-types#reserved-vm) for deployment options * Check out the [Claude Agent SDK template](https://replit.com/@matt/Claude-Agent-SDK) to start building # Connect via MCP Source: https://docs.replit.com/build/connect-via-mcp Connect Replit Agent to external tools, data sources, and APIs through the Model Context Protocol (MCP) — sign in to a pre-listed server or add a custom one. Replit Agent can connect to hundreds of external tools and data sources through the [Model Context Protocol (MCP)](https://modelcontextprotocol.io) — an open standard for AI tool integrations. Sign in to a pre-listed server or add any custom MCP server you trust. ## Connect a pre-listed MCP server Replit ships with a curated list of MCP servers for popular services like Stripe, Linear, Notion, Sentry, and more. Connecting is a single sign-in click. MCP Servers for Replit Agent settings pane listing pre-listed servers including Stripe, Linear, Notion, Sentry, Atlassian, Miro, PostHog, Amplitude, Mixpanel, Granola, and Razorpay — each with a Sign in button Go to [replit.com/integrations](https://replit.com/integrations) and scroll to **MCP Servers for Replit Agent**. Find the service you want to connect — Stripe, Linear, Notion, Sentry, Atlassian, Miro, PostHog, Amplitude, Mixpanel, Granola, Razorpay, and others. Click **Sign in** next to the server. You'll be guided through the OAuth flow with that service. Once connected, the server's connection status updates and Agent can use its tools. For the full catalog, see the [MCP Servers reference](/features/mcp/overview). ## Add a custom MCP server If the server you want isn't in the pre-listed catalog, add it by URL. Connect an MCP server dialog showing Display name field, MCP Server URL field, and Advanced settings expandable section On the MCP Servers settings pane, click **+ Add MCP server**. Provide a recognizable name — Agent uses it to reference the server in chat logs. Paste the MCP server's HTTPS endpoint. Open **Advanced settings** to add custom headers (e.g. `X-API-Key`) if the server needs authentication. Click **Test & save**. Replit attempts to connect and walks you through any OAuth flow the server requires. Once saved, the connection appears under MCP Servers with its status. Only connect to MCP servers you trust. A connected server can provide tools and data to Agent — review the source before adding any unfamiliar endpoint. ## Use MCP tools in Agent After a server is connected, Agent automatically fetches its tool list and makes the capabilities available across all your projects. To use a server, just mention it in chat: > Use the Notion MCP server to find the most recent meeting notes. Agent calling a custom MCP server's tools in chat Agent picks the right tools from the server based on your request. If a tool requires confirmation, you'll see a prompt before it runs. ## Share an install link Install links let anyone add your MCP server to Replit with a single click — useful for documentation, READMEs, or anywhere you want to promote your integration. Use the form below to generate an install link and a clickable badge for your server: For the link format and badge customization options, see the [Install Links reference](/features/mcp/install-links). ## Next steps Understand what MCP is, how it works, and the capabilities it unlocks for AI. Browse the curated list of MCP servers with one-click install badges. Connect Agent to Figma designs via MCP. # Create a team workspace Source: https://docs.replit.com/build/create-a-team-workspace Create a Team Workspace on Replit, invite members during setup, and manage who has access to your team's projects. By the end, you'll have a team workspace with members who can collaborate across every project inside it. A **team workspace** lets a regular group — a startup team, a class, or a client project — work across multiple projects together. Members get access to all projects in the workspace, so you don't invite them one by one. The admin manages billing and settings centrally. If you're not sure whether a team workspace is the right fit, see [Personal & Team Workspaces](/features/collaboration/team-workspaces) for the difference between the two, when to use each, and plan availability. ## Create a team workspace In the home page, click your workspace name in the top-left corner. Select **Create workspace** and choose a name for your team workspace. Enter one or more email addresses (comma-separated) in the invite field. Invitees receive an invitation and gain access to all projects in the workspace once they accept. ## Manage members If you didn't invite members during setup, or need to add more later, go to **Settings** in your team workspace and invite members by email or Replit username. From the **Settings** page you can also: * **Remove members** to revoke their access to all workspace projects. * **Transfer apps** from personal workspaces into the team workspace — see [Transfer app to teams](/teams/identity-and-access-management/transfer-app-to-teams). For advanced identity management, role-based access, and group permissions, see [Pro and Enterprise](/category/teams). ## Next steps Invite people to a specific project and build together with Agent. Understand the difference, choose the right type, and review plan availability. Enterprise features: SSO/SAML, groups, permissions, and audit logs. # Create a dashboard from data Source: https://docs.replit.com/build/dashboard Turn a public CSV, spreadsheet, database, warehouse connector, or API into a dashboard that answers a clear question. A dashboard helps someone make a decision from data. You will build a **Global Progress Explorer** from a public CSV: country-level data with year, population, continent, life expectancy, and GDP per capita. ## What you'll achieve By the end of this guide, you will have: * A Global Progress Explorer dashboard built from a realistic public CSV. * Summary metrics for countries, population, life expectancy, and GDP per capita. * Charts and filters that show how progress changed over time. * A way to verify that the dashboard numbers match the source data. * A shareable or publishable dashboard for stakeholders. ## What you'll learn You will learn how to: * Start with a decision, not a chart type. * Ask Agent to build a dashboard from a public CSV. * Check calculations against the underlying data. * Add filters and an insights summary. * Decide when a dashboard needs login, refresh, exports, or connected data. ## Who this is for Use this guide if you have customer, sales, product, operations, research, or public data and need a dashboard people can understand. This is useful for analysts, operators, founders, PMs, educators, and teams who need to turn raw data into decisions. ## Define the decision Before building, write down the decision the dashboard should support. For the global progress dataset: * **Question**: Where did life expectancy and GDP per capita improve over time? * **Audience**: education, research, strategy, or nonprofit teams. * **Useful metrics**: country count, year range, latest median life expectancy, total population represented, and median GDP per capita. * **Useful filters**: continent, country, and year range. If you cannot state the decision, the dashboard will become a collection of charts instead of a useful tool. ## Build from a public CSV Use a positive public dataset with meaningful fields and enough rows to explore. Dataset: [Gapminder global progress CSV](https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv) Ask Agent to build the dashboard from that CSV: Build a Global Progress Explorer dashboard from this public CSV:
[https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv](https://raw.githubusercontent.com/plotly/datasets/master/gapminderDataFiveYear.csv)
The dashboard should help an education or research team understand how life expectancy, population, and GDP per capita changed across countries and continents from 1952 to 2007.
Include summary cards for total countries, year range, latest median life expectancy, total population represented, and latest median GDP per capita.
Add a line chart for life expectancy over time by continent.
Add a bubble chart where GDP per capita is on the x-axis, life expectancy is on the y-axis, bubble size represents population, and color represents continent.
Add a bar chart showing the countries with the largest life expectancy gains between their first and latest year in the dataset.
Add filters for continent, country, and year range.
Include a short insights summary that explains the biggest patterns and which regions or countries improved most.
Show how key metrics are calculated so I can verify the numbers.
Make the dashboard polished, responsive, and easy to read on desktop and mobile.
## Check your work Open Preview and verify the dashboard before sharing it. Check that: * Total countries matches the number of unique countries in the CSV. * The year range shows 1952 to 2007. * Latest median life expectancy uses the latest year in the dataset. * Population totals use the filtered countries and years. * Filters update the summary cards and charts. * The bubble chart uses GDP per capita, life expectancy, population, and continent correctly. * The insights summary matches what the charts show. * The dashboard works on a phone-sized screen. If a number looks different than expected, ask Agent to show the calculation. The latest median life expectancy looks different than I expected.
Show me how you calculated it from the CSV.
Check that you used only rows from the latest year in the filtered data.
Update the calculation if needed and tell me how to verify it.
## Add filters and exports After the first dashboard works, ask Agent for the interaction that helps the audience explore the data. Add an exploration panel for the global progress dashboard.
Let me filter by continent, country, and year range.
Add a button to export the filtered chart data to CSV.
Keep the summary cards and insights summary in sync with the filters.
Dashboards can also support PDF export, chart CSV export, refresh, auto-refresh, light/dark mode, and analysis summaries. See [Data Visualization](/features/artifact-types/data-apps) for the concept overview. ## Use connected data when needed Use a public CSV when you are learning or prototyping. Use a connected data source when the dashboard should stay up to date. You can connect dashboards to: * A Replit app database. * A warehouse connector like BigQuery, Databricks, or Snowflake. * Analytics tools like Segment, Amplitude, or Hex. * External APIs. For warehouse data, ask Agent to explain the fields and queries it uses. Create a growth dashboard using our warehouse connector.
Identify the customer, product usage, billing, and retention fields needed.
Build charts for active customers over time, account growth by segment, and expansion revenue by plan.
Explain the fields and calculations you used so I can verify the dashboard.
For setup and availability details, see [Data Connectors](/connectors/warehouses/overview). ## Share the dashboard Share the dashboard when the numbers are trustworthy. If the dashboard uses private customer or business data, add access control before sharing widely. For public or sample data, you can publish and share the URL directly. Ask reviewers: > Review the global progress dashboard and tell me which region or country story you would highlight first, and why. ## You're done when * The dashboard loads the public CSV. * Summary cards and charts answer the progress question. * You verified at least one key metric manually. * Filters update the dashboard correctly. * The insights summary matches the data. * You know whether the dashboard should stay public, require login, or connect to live data. ## Next steps Put the dashboard behind authentication so only the right people see it. Save data so it persists and refreshes between sessions. Pull in another data source or push insights to existing tools. Connect a live warehouse so the dashboard reflects up-to-date data. Ask Agent to create a stakeholder presentation from the dashboard's findings. ## Need further help? * **Numbers look different than expected:** ask Agent to show the query, formula, or transformation. * **The CSV is unavailable:** check the URL, network access, and CSV headers. * **Filters do not update charts:** ask Agent to connect filters to both summary cards and chart data. * **The dashboard is slow:** ask Agent to summarize data, add filters, or reduce rows loaded on startup. * **The dashboard uses private data:** add login before sharing broadly. ## Related * [Data Visualization](/features/artifact-types/data-apps) * [Data Connectors](/connectors/warehouses/overview) * [Add login](/build/add-login) * [Add integrations](/build/add-integrations) # Purchase a domain Source: https://docs.replit.com/build/domain-purchasing Learn how to purchase a domain and connect it to your published app directly from Replit. Turn your apps into live, professional websites with custom domain names. Domain Purchasing lets you search, buy, and connect domains for your Replit published apps—all from within the platform. Go from published app to professional web presence in minutes. That means you can buy a site, like `my-app.com`, and have it automatically point to your app. Domain search interface showing available domains with extensions like .com and .ai We're eager to hear your feedback on how we can improve Domain Purchasing! ## Features Domain Purchasing streamlines the process of giving your apps professional web addresses. Instead of juggling multiple services, you can complete your entire web presence setup within Replit. Domain management interface showing purchased domains and their connection status Key capabilities include: * **Domain search and availability**: Check domain availability across popular extensions like `.com`, `.ai`, and more * **One-click purchasing**: Buy domains directly through Replit using your account's default payment method * **Automatic configuration**: Your domain instantly points to your Replit app without manual DNS setup * **WHOIS privacy protection**: Your personal information stays private in public domain records—included by default with every domain purchase * **Custom DNS records**: Add custom A, TXT, and MX records to configure email providers and other services * **Instant publishing**: Your app becomes accessible at your custom domain immediately after purchase * **Automatic renewals**: Domains renew automatically so your apps stay published without interruption ## Usage ### Purchasing domains 1. Publish your app and navigate to the Publish icon **Publishing** tab 2. Select the **Domains** tab 3. Choose **Buy a domain** to start the search process 4. Enter your desired domain name in the search bar 5. Review available options across different extensions 6. Select your preferred domain and complete the purchase When you purchase a domain, it automatically configures to point to your Replit app. Your app becomes accessible at the custom domain instantly, with no additional setup required. You will be billed for the domain purchase through your Replit account, deducted from your account balance then applied to your usage. ### Managing purchased domains Your domains integrate seamlessly with your published apps: * **Automatic renewals**: Domains renew automatically to keep your apps published * **Integrated billing**: Domain costs appear on your Replit billing alongside other services * **Transfer support**: Move domains between Replit accounts or to external registrars when needed ### Custom DNS records For domains purchased through Replit, you can add custom DNS records to configure additional services like email providers. The following DNS record types are supported: * **A records**: Point your domain or subdomain to a specific IP address * **TXT records**: Add text-based verification records for services like email authentication (SPF, DKIM, DMARC) * **MX records**: MX (Mail Exchange) records tell email servers where to deliver email for your domain. Setting up MX records allows you to use your custom domain for email addresses like `hello@yourdomain.com`. To manage DNS records for your purchased domain: 1. Navigate to the **Domains** tab in your Publishing Publish icon 2. Find the domain you want to configure 3. Select the **Edit** pencil icon icon 4. Choose **Add DNS Record** 5. Enter the record type, name, value, and TTL as required by your service provider This short video walks through finding the management page for your domain DNS records: