From d028aab23dde76fb6d50087f7133b62ff005eee6 Mon Sep 17 00:00:00 2001 From: sohey Date: Fri, 3 Apr 2026 18:07:21 +0200 Subject: [PATCH 1/5] updated notifications names --- docs/docs.json | 6 + .../technical-guides/base-notifications.mdx | 278 ++++++++++++++++++ 2 files changed, 284 insertions(+) create mode 100644 docs/mini-apps/technical-guides/base-notifications.mdx diff --git a/docs/docs.json b/docs/docs.json index 4d5eb4b48..803c49cdd 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -581,6 +581,12 @@ "pages": [ "mini-apps/growth/rewards" ] + }, + { + "group": "Notifications", + "pages": [ + "mini-apps/technical-guides/base-notifications" + ] } ] }, diff --git a/docs/mini-apps/technical-guides/base-notifications.mdx b/docs/mini-apps/technical-guides/base-notifications.mdx new file mode 100644 index 000000000..c8c84ac6a --- /dev/null +++ b/docs/mini-apps/technical-guides/base-notifications.mdx @@ -0,0 +1,278 @@ +--- +title: "Notifications" +description: "Send notifications to your mini app users by wallet address using the Base.dev REST API." +--- + +Send notifications to users who have installed your app in the Base App using the Base.dev REST API. No webhooks, no database, no token management. + + + Notifications are scoped to your app. Your API key only returns users who opted into your app and can only send to those users. + + +## Quickstart + + + + Go to your project on [Base.dev](https://base.dev), open **Settings > API Key**, and generate a new key. Add it to your environment: + + ```bash .env + BASE_DEV_API_KEY=bdev_your_api_key_here + ``` + + + Never commit API keys to version control. + + + + + + ```bash cURL + curl "https://www.base.dev/v1/notifications/app/users?app_url=https://your-app.com¬ification_enabled=true" \ + -H "x-api-key: $BASE_DEV_API_KEY" + ``` + + + + ```json Response + { + "success": true, + "users": [ + { "address": "0xc0c3132DFc4929bb6F68FA76B8fB379fF8c5bE74", "notificationsEnabled": true }, + { "address": "0x4e2bC8463190fBa0C5bF5921a98552f4728E3e9f", "notificationsEnabled": true } + ] + } + ``` + + + + + + ```bash cURL + curl -X POST "https://www.base.dev/v1/notifications/send" \ + -H "x-api-key: $BASE_DEV_API_KEY" \ + -H "Content-Type: application/json" \ + -d '{ + "app_url": "https://your-app.com", + "wallet_addresses": ["0xc0c3132DFc4929bb6F68FA76B8fB379fF8c5bE74"], + "title": "Hey from your app!", + "message": "You have a new reward waiting.", + "target_path": "/rewards" + }' + ``` + + + + ```json Response + { + "success": true, + "results": [ + { "walletAddress": "0xc0c3132DFc4929bb6F68FA76B8fB379fF8c5bE74", "sent": true } + ], + "sentCount": 1, + "failedCount": 0 + } + ``` + + + + +## Send from code + +```typescript app/api/notify/route.ts +import { NextResponse } from "next/server"; + +const API_KEY = process.env.BASE_DEV_API_KEY!; +const APP_URL = process.env.NEXT_PUBLIC_URL!; + +export async function POST(req: Request) { + const { title, message, targetPath } = await req.json(); + + const usersRes = await fetch( + `https://www.base.dev/v1/notifications/app/users?app_url=${APP_URL}¬ification_enabled=true`, + { headers: { "x-api-key": API_KEY } } + ); + const { users } = await usersRes.json(); + const addresses = users.map((u: { address: string }) => u.address); + + const sendRes = await fetch("https://www.base.dev/v1/notifications/send", { + method: "POST", + headers: { "x-api-key": API_KEY, "Content-Type": "application/json" }, + body: JSON.stringify({ app_url: APP_URL, wallet_addresses: addresses, title, message, target_path: targetPath }), + }); + + return NextResponse.json(await sendRes.json()); +} +``` + +## Scheduled notifications + +Use [Vercel Cron Jobs](https://vercel.com/docs/cron-jobs) to send notifications on a recurring schedule. + +```typescript app/api/cron/notify/route.ts +import { NextResponse } from "next/server"; + +const API_KEY = process.env.BASE_DEV_API_KEY!; +const APP_URL = process.env.NEXT_PUBLIC_URL!; + +export async function GET(req: Request) { + if (req.headers.get("Authorization") !== `Bearer ${process.env.CRON_SECRET}`) { + return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); + } + + const usersRes = await fetch( + `https://www.base.dev/v1/notifications/app/users?app_url=${APP_URL}¬ification_enabled=true`, + { headers: { "x-api-key": API_KEY } } + ); + const { users } = await usersRes.json(); + const addresses = users.map((u: { address: string }) => u.address); + + const sendRes = await fetch("https://www.base.dev/v1/notifications/send", { + method: "POST", + headers: { "x-api-key": API_KEY, "Content-Type": "application/json" }, + body: JSON.stringify({ + app_url: APP_URL, + wallet_addresses: addresses, + title: "Daily reminder", + message: "Check in today to keep your streak alive.", + target_path: "/streak", + }), + }); + + return NextResponse.json(await sendRes.json()); +} +``` + +Register the schedule in `vercel.json`: + +```json vercel.json +{ + "crons": [{ "path": "/api/cron/notify", "schedule": "0 9 * * *" }] +} +``` + +## API reference + +Both endpoints require your API key in the `x-api-key` header. + +### GET /v1/notifications/app/users + +``` +GET https://www.base.dev/v1/notifications/app/users +``` + +**Query parameters** + + + Your mini app URL as registered on Base.dev. + + + + Set to `true` to return only users who have enabled notifications. + + +**Response** + + + Whether the request succeeded. + + + + List of user objects. + + + + The user's wallet address. + + + Whether the user has enabled notifications for your app. + + + + +### POST /v1/notifications/send + +``` +POST https://www.base.dev/v1/notifications/send +``` + +**Request body** + + + Your mini app URL as registered on Base.dev. + + + + Wallet addresses to notify. Maximum 1,000 per request. + + + + Notification title. + + + + Notification body text. + + + + Relative path to open when the user taps the notification (for example, `/leaderboard`). Omit to open your app at its root. + + +**Response** + + + Whether the request completed. + + + + Per-address delivery status. + + + + The wallet address targeted. + + + Whether delivery succeeded for this address. + + + + + + Total notifications sent. + + + + Total notifications failed. + + +**Errors** + +| Error | Cause | +|-------|-------| +| `InvalidArgument` | More than 1,000 wallet addresses in a single request. | + +## Batching + +Each request accepts up to 1,000 addresses. For larger audiences, split into chunks. + +```typescript +const BATCH_SIZE = 1000; + +async function notifyAllUsers(allAddresses: string[], title: string, message: string, targetPath: string) { + for (let i = 0; i < allAddresses.length; i += BATCH_SIZE) { + const batch = allAddresses.slice(i, i + BATCH_SIZE); + await fetch("https://www.base.dev/v1/notifications/send", { + method: "POST", + headers: { "x-api-key": process.env.BASE_DEV_API_KEY!, "Content-Type": "application/json" }, + body: JSON.stringify({ app_url: "https://your-app.com", wallet_addresses: batch, title, message, target_path: targetPath }), + }); + } +} +``` + +## Rate limits + +| Constraint | Limit | +|------------|-------| +| Requests per minute (per API key) | 10 | +| Wallet addresses per request | 1,000 | +| Max users notifiable per minute | 10,000 | From cc2de1935f9b8239e67a2bf50259bf0ff749e1ae Mon Sep 17 00:00:00 2001 From: sohey Date: Fri, 3 Apr 2026 18:08:14 +0200 Subject: [PATCH 2/5] updated notifications names --- docs/agents.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/agents.md b/docs/agents.md index c2037ceae..b9db59728 100644 --- a/docs/agents.md +++ b/docs/agents.md @@ -3,14 +3,13 @@ IMPORTANT: Prefer retrieval-led reasoning. Read relevant docs before generating Base is an Ethereum L2 by Coinbase. Docs for: Base Chain, Smart Wallet, OnchainKit, MiniKit. [Docs]|root:./docs |ai-agents:index -|ai-agents/guides:agent-builder-codes |ai-agents/payments:accepting-payments,pay-for-services-with-x402 |ai-agents/quickstart:payments,trading -|ai-agents/setup:agent-registration,wallet-setup +|ai-agents/setup:agent-builder-codes,agent-registration,wallet-setup |ai-agents/skills:index -|ai-agents/skills/base-account:building-with-base-account -|ai-agents/skills/base-chain:adding-builder-codes,connecting-to-base-network,deploying-contracts,running-a-base-node -|ai-agents/skills/migrations:convert-farcaster-miniapp-to-app,converting-minikit-to-farcaster,migrating-an-onchainkit-app +|ai-agents/skills/payments:cdp-payment-skills,sponge-x402 +|ai-agents/skills/trading:alchemy-agentic-gateway,coingecko,swap-execution +|ai-agents/skills/wallets:bankr,cdp-agentic-wallet,sponge-wallet |ai-agents/trading:data-fetching,trade-execution |base-account/basenames:basename-transfer,basenames-faq,basenames-wagmi-tutorial |base-account/contribute:contribute-to-base-account-docs,security-and-bug-bounty @@ -37,7 +36,7 @@ Base is an Ethereum L2 by Coinbase. Docs for: Base Chain, Smart Wallet, OnchainK |base-chain/api-reference/debug-api:debug_traceBlockByHash,debug_traceBlockByNumber,debug_traceTransaction |base-chain/api-reference/ethereum-json-rpc-api:eth_blockNumber,eth_call,eth_chainId,eth_estimateGas,eth_feeHistory,eth_gasPrice,eth_getBalance,eth_getBlockByHash,eth_getBlockByNumber,eth_getBlockReceipts,eth_getBlockTransactionCountByHash,eth_getBlockTransactionCountByNumber,eth_getCode,eth_getLogs,eth_getStorageAt,eth_getTransactionByBlockHashAndIndex,eth_getTransactionByBlockNumberAndIndex,eth_getTransactionByHash,eth_getTransactionCount,eth_getTransactionReceipt,eth_maxPriorityFeePerGas,eth_sendRawTransaction,eth_subscribe,eth_syncing,eth_unsubscribe,net_version,web3_clientVersion |base-chain/api-reference/flashblocks-api:base_transactionStatus,eth_simulateV1,flashblocks-api-overview,newFlashblockTransactions,newFlashblocks,pendingLogs -|base-chain/builder-codes:app-developers,builder-codes,wallet-developers +|base-chain/builder-codes:agent-developers,app-developers,builder-codes,wallet-developers |base-chain/flashblocks:app-integration,architecture,faq,overview,run-a-flashblocks-node |base-chain/network-information:base-contracts,block-building,bridges,configuration-changelog,diffs-ethereum-base,ecosystem-contracts,network-faucets,network-fees,transaction-finality,troubleshooting-transactions |base-chain/node-operators:node-providers,performance-tuning,run-a-base-node,snapshots,troubleshooting @@ -47,6 +46,6 @@ Base is an Ethereum L2 by Coinbase. Docs for: Base Chain, Smart Wallet, OnchainK |mini-apps/growth:rewards |mini-apps/quality-and-publishing:overview,quality-bar,submission-guidelines |mini-apps/quickstart:build-checklist,building-for-the-base-app,create-new-miniapp,migrate-existing-apps,migrate-to-standard-web-app,template -|mini-apps/technical-guides:accept-payments,building-chat-agents,neynar-notifications,sharing-and-social-graph,sign-manifest +|mini-apps/technical-guides:accept-payments,base-notifications,building-chat-agents,neynar-notifications,sharing-and-social-graph,sign-manifest |onchainkit:migrate-from-onchainkit |root:agents,cookie-policy,privacy-policy,terms-of-service,tone_of_voice From 1b333ba474a921885f824ddb1ff8ca5d7c74ec8e Mon Sep 17 00:00:00 2001 From: Dan Cortes <3639170+dgca@users.noreply.github.com> Date: Tue, 7 Apr 2026 17:14:57 -0600 Subject: [PATCH 3/5] docs: Flesh out notifications docs (#1279) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * docs: rewrite notifications page with accurate API surface and cleaner copy * docs: use Alice and Bob vanity addresses in examples * docs: apply feedback — rebrand to Base Dashboard, angle bracket placeholders, expanded errors, rate limits --- .../technical-guides/base-notifications.mdx | 319 +++++++----------- 1 file changed, 120 insertions(+), 199 deletions(-) diff --git a/docs/mini-apps/technical-guides/base-notifications.mdx b/docs/mini-apps/technical-guides/base-notifications.mdx index c8c84ac6a..1c699e501 100644 --- a/docs/mini-apps/technical-guides/base-notifications.mdx +++ b/docs/mini-apps/technical-guides/base-notifications.mdx @@ -1,278 +1,199 @@ --- title: "Notifications" -description: "Send notifications to your mini app users by wallet address using the Base.dev REST API." +description: "Send in-app notifications to your app's users through the Base Dashboard REST API." --- -Send notifications to users who have installed your app in the Base App using the Base.dev REST API. No webhooks, no database, no token management. - - Notifications are scoped to your app. Your API key only returns users who opted into your app and can only send to those users. + Notifications are delivered through the **Base App** only. Users who interact with your app on other platforms will not receive notifications through this API. -## Quickstart - - - - Go to your project on [Base.dev](https://base.dev), open **Settings > API Key**, and generate a new key. Add it to your environment: - - ```bash .env - BASE_DEV_API_KEY=bdev_your_api_key_here - ``` - - - Never commit API keys to version control. - - - - - - ```bash cURL - curl "https://www.base.dev/v1/notifications/app/users?app_url=https://your-app.com¬ification_enabled=true" \ - -H "x-api-key: $BASE_DEV_API_KEY" - ``` - - - - ```json Response - { - "success": true, - "users": [ - { "address": "0xc0c3132DFc4929bb6F68FA76B8fB379fF8c5bE74", "notificationsEnabled": true }, - { "address": "0x4e2bC8463190fBa0C5bF5921a98552f4728E3e9f", "notificationsEnabled": true } - ] - } - ``` - - - - - - ```bash cURL - curl -X POST "https://www.base.dev/v1/notifications/send" \ - -H "x-api-key: $BASE_DEV_API_KEY" \ - -H "Content-Type: application/json" \ - -d '{ - "app_url": "https://your-app.com", - "wallet_addresses": ["0xc0c3132DFc4929bb6F68FA76B8fB379fF8c5bE74"], - "title": "Hey from your app!", - "message": "You have a new reward waiting.", - "target_path": "/rewards" - }' - ``` - - - - ```json Response - { - "success": true, - "results": [ - { "walletAddress": "0xc0c3132DFc4929bb6F68FA76B8fB379fF8c5bE74", "sent": true } - ], - "sentCount": 1, - "failedCount": 0 - } - ``` - - - - -## Send from code - -```typescript app/api/notify/route.ts -import { NextResponse } from "next/server"; - -const API_KEY = process.env.BASE_DEV_API_KEY!; -const APP_URL = process.env.NEXT_PUBLIC_URL!; - -export async function POST(req: Request) { - const { title, message, targetPath } = await req.json(); - - const usersRes = await fetch( - `https://www.base.dev/v1/notifications/app/users?app_url=${APP_URL}¬ification_enabled=true`, - { headers: { "x-api-key": API_KEY } } - ); - const { users } = await usersRes.json(); - const addresses = users.map((u: { address: string }) => u.address); - - const sendRes = await fetch("https://www.base.dev/v1/notifications/send", { - method: "POST", - headers: { "x-api-key": API_KEY, "Content-Type": "application/json" }, - body: JSON.stringify({ app_url: APP_URL, wallet_addresses: addresses, title, message, target_path: targetPath }), - }); - - return NextResponse.json(await sendRes.json()); -} +The Notifications API lets you send in-app notifications to users who have pinned your app and opted in to notifications. Two REST endpoints handle the full workflow: fetch your audience's wallet addresses, then send targeted or broadcast messages. + +## Prerequisites + +- A project on [Base Dashboard](https://dashboard.base.org) with your app URL registered +- An API key generated from **Settings > API Key** in your Base Dashboard project + +## Quick start + +Both endpoints require your API key in the `x-api-key` header. + + + The notification endpoints share a rate limit of **10 requests per minute per IP**. Requests to either endpoint count toward the same limit. Exceeding it returns a `429 Too Many Requests` response. + + +Fetch the wallet addresses of users who have opted in to notifications for your app: + +```bash title="Get users with notifications enabled" +curl "https://dashboard.base.org/api/v1/notifications/app/users?app_url=¬ification_enabled=true" \ + -H "x-api-key: " ``` -## Scheduled notifications - -Use [Vercel Cron Jobs](https://vercel.com/docs/cron-jobs) to send notifications on a recurring schedule. - -```typescript app/api/cron/notify/route.ts -import { NextResponse } from "next/server"; - -const API_KEY = process.env.BASE_DEV_API_KEY!; -const APP_URL = process.env.NEXT_PUBLIC_URL!; - -export async function GET(req: Request) { - if (req.headers.get("Authorization") !== `Bearer ${process.env.CRON_SECRET}`) { - return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); - } - - const usersRes = await fetch( - `https://www.base.dev/v1/notifications/app/users?app_url=${APP_URL}¬ification_enabled=true`, - { headers: { "x-api-key": API_KEY } } - ); - const { users } = await usersRes.json(); - const addresses = users.map((u: { address: string }) => u.address); - - const sendRes = await fetch("https://www.base.dev/v1/notifications/send", { - method: "POST", - headers: { "x-api-key": API_KEY, "Content-Type": "application/json" }, - body: JSON.stringify({ - app_url: APP_URL, - wallet_addresses: addresses, - title: "Daily reminder", - message: "Check in today to keep your streak alive.", - target_path: "/streak", - }), - }); - - return NextResponse.json(await sendRes.json()); +```json title="Response" +{ + "success": true, + "users": [ + { "address": "0xA11ce00000000000000000000000000000000000", "notificationsEnabled": true }, + { "address": "0xB0B0000000000000000000000000000000000000", "notificationsEnabled": true } + ] } ``` -Register the schedule in `vercel.json`: +Send a notification to one or more of those addresses. The `target_path` sets the route within your app that opens when the user taps the notification: + +```bash title="Send a notification" +curl -X POST "https://dashboard.base.org/api/v1/notifications/send" \ + -H "x-api-key: " \ + -H "Content-Type: application/json" \ + -d '{ + "app_url": "", + "wallet_addresses": [""], + "title": "", + "message": "<message>", + "target_path": "<target-path>" + }' +``` -```json vercel.json +```json title="Response" { - "crons": [{ "path": "/api/cron/notify", "schedule": "0 9 * * *" }] + "success": true, + "results": [ + { "walletAddress": "0xA11ce00000000000000000000000000000000000", "sent": true } + ], + "sentCount": 1, + "failedCount": 0 } ``` ## API reference -Both endpoints require your API key in the `x-api-key` header. - ### GET /v1/notifications/app/users -``` -GET https://www.base.dev/v1/notifications/app/users +Returns users who have pinned your app, with optional filtering by notification opt-in status. Results are paginated. + +```http +GET https://dashboard.base.org/api/v1/notifications/app/users ``` -**Query parameters** +#### Query parameters <ParamField query="app_url" type="string" required> - Your mini app URL as registered on Base.dev. + Your app URL as registered on the Base Dashboard. </ParamField> <ParamField query="notification_enabled" type="boolean"> - Set to `true` to return only users who have enabled notifications. + Set to `true` to return only users who have enabled notifications for your app. +</ParamField> + +<ParamField query="cursor" type="string"> + Pagination cursor returned from a previous response. Omit for the first page. +</ParamField> + +<ParamField query="limit" type="integer"> + Maximum users per page. Capped at 100. </ParamField> -**Response** +#### Response <ResponseField name="success" type="boolean"> Whether the request succeeded. </ResponseField> <ResponseField name="users" type="array"> - List of user objects. - - <Expandable title="User properties"> - <ResponseField name="address" type="string"> - The user's wallet address. - </ResponseField> - <ResponseField name="notificationsEnabled" type="boolean"> - Whether the user has enabled notifications for your app. - </ResponseField> - </Expandable> + Users who have pinned your app. </ResponseField> +<ResponseField name="users[].address" type="string"> + The user's wallet address. +</ResponseField> + +<ResponseField name="users[].notificationsEnabled" type="boolean"> + Whether the user has enabled notifications for your app. +</ResponseField> + +<ResponseField name="nextCursor" type="string"> + Cursor for the next page. Absent when no more results exist. +</ResponseField> + + + +--- + ### POST /v1/notifications/send -``` -POST https://www.base.dev/v1/notifications/send +Sends an in-app notification to one or more wallet addresses. + +```http +POST https://dashboard.base.org/api/v1/notifications/send ``` -**Request body** +#### Request body <ParamField body="app_url" type="string" required> - Your mini app URL as registered on Base.dev. + Your app URL as registered on the Base Dashboard. </ParamField> <ParamField body="wallet_addresses" type="string[]" required> - Wallet addresses to notify. Maximum 1,000 per request. + Wallet addresses to notify. Minimum 1, maximum 1,000 per request. </ParamField> <ParamField body="title" type="string" required> - Notification title. + Notification title. Maximum 30 characters. </ParamField> <ParamField body="message" type="string" required> - Notification body text. + Notification body text. Maximum 200 characters. </ParamField> <ParamField body="target_path" type="string"> - Relative path to open when the user taps the notification (for example, `/leaderboard`). Omit to open your app at its root. + Path to open when the user taps the notification, such as `/rewards`. Must start with `/` if provided. Maximum 500 characters. Omit to open your app at its root URL. </ParamField> -**Response** +#### Response <ResponseField name="success" type="boolean"> - Whether the request completed. + `true` only when every address in the request delivered successfully. </ResponseField> <ResponseField name="results" type="array"> Per-address delivery status. +</ResponseField> + +<ResponseField name="results[].walletAddress" type="string"> + The targeted wallet address. +</ResponseField> - <Expandable title="Result properties"> - <ResponseField name="walletAddress" type="string"> - The wallet address targeted. - </ResponseField> - <ResponseField name="sent" type="boolean"> - Whether delivery succeeded for this address. - </ResponseField> - </Expandable> +<ResponseField name="results[].sent" type="boolean"> + Whether delivery succeeded for this address. +</ResponseField> + +<ResponseField name="results[].failureReason" type="string"> + Present when `sent` is `false`. Possible values: `user has not saved this app`, `user has notifications disabled`. </ResponseField> <ResponseField name="sentCount" type="number"> - Total notifications sent. + Total notifications delivered successfully. </ResponseField> <ResponseField name="failedCount" type="number"> - Total notifications failed. + Total notifications that failed to deliver. </ResponseField> -**Errors** - -| Error | Cause | -|-------|-------| -| `InvalidArgument` | More than 1,000 wallet addresses in a single request. | -## Batching +## Errors -Each request accepts up to 1,000 addresses. For larger audiences, split into chunks. +Both endpoints return the following errors: -```typescript -const BATCH_SIZE = 1000; +| Status | Code | Cause | +|--------|------|-------| +| 400 | `Bad Request` | Possible causes:<ul><li>`app_url` is missing</li><li>`title` is missing or exceeds 30 characters</li><li>`message` is missing or exceeds 200 characters</li><li>`wallet_addresses` is missing or exceeds 1,000 addresses</li><li>`target_path` exceeds 500 characters or does not start with `/`</li></ul> | +| 401 | `Unauthorized` | Missing or invalid API key. | +| 403 | `Forbidden` | The `app_url` does not belong to your project, or your project is not whitelisted for notifications. | +| 404 | `Not Found` | The project associated with your API key does not exist. | +| 503 | `Service Unavailable` | The notification service is temporarily unavailable. Retry the request. Send endpoint only. | -async function notifyAllUsers(allAddresses: string[], title: string, message: string, targetPath: string) { - for (let i = 0; i < allAddresses.length; i += BATCH_SIZE) { - const batch = allAddresses.slice(i, i + BATCH_SIZE); - await fetch("https://www.base.dev/v1/notifications/send", { - method: "POST", - headers: { "x-api-key": process.env.BASE_DEV_API_KEY!, "Content-Type": "application/json" }, - body: JSON.stringify({ app_url: "https://your-app.com", wallet_addresses: batch, title, message, target_path: targetPath }), - }); - } -} -``` +## Batching and deduplication -## Rate limits +Each request accepts up to 1,000 addresses. For larger audiences, split your address list across multiple requests. -| Constraint | Limit | -|------------|-------| -| Requests per minute (per API key) | 10 | -| Wallet addresses per request | 1,000 | -| Max users notifiable per minute | 10,000 | +Duplicate addresses within a single request are deduplicated automatically. Identical notifications — same app URL, wallet address, title, message, and target path — sent within a 24-hour window are also deduplicated and return a success response without sending a duplicate push. From 5c3f32d297425e6f3d3242425362c242416ed844 Mon Sep 17 00:00:00 2001 From: sohey <soheimam@gmail.com> Date: Wed, 8 Apr 2026 20:27:30 +0200 Subject: [PATCH 4/5] updated links --- docs/{mini-apps => apps}/core-concepts/authentication.mdx | 0 docs/{mini-apps => apps}/core-concepts/base-account.mdx | 0 docs/{mini-apps => apps}/core-concepts/context.mdx | 0 docs/{mini-apps => apps}/core-concepts/embeds-and-previews.mdx | 0 docs/{mini-apps => apps}/core-concepts/manifest.mdx | 0 docs/{mini-apps => apps}/core-concepts/navigation.mdx | 0 docs/{mini-apps => apps}/core-concepts/notifications.mdx | 0 .../{mini-apps => apps}/featured-guidelines/design-guidelines.mdx | 0 .../featured-guidelines/notification-guidelines.mdx | 0 docs/{mini-apps => apps}/featured-guidelines/overview.mdx | 0 .../featured-guidelines/product-guidelines.mdx | 0 .../featured-guidelines/technical-guidelines.mdx | 0 .../growth/build-viral-apps.mdx} | 0 docs/{mini-apps => apps}/growth/optimize-onboarding.mdx | 0 docs/{mini-apps => apps}/growth/rewards.mdx | 0 docs/{mini-apps => apps}/introduction/overview.mdx | 0 docs/{mini-apps => apps}/llms-full.txt | 0 docs/{mini-apps => apps}/llms.txt | 0 docs/{mini-apps => apps}/quality-and-publishing/overview.mdx | 0 docs/{mini-apps => apps}/quality-and-publishing/quality-bar.mdx | 0 .../quality-and-publishing/submission-guidelines.mdx | 0 docs/{mini-apps => apps}/quickstart/build-checklist.mdx | 0 docs/{mini-apps => apps}/quickstart/building-for-the-base-app.mdx | 0 .../create-new-miniapp.mdx => apps/quickstart/create-new-app.mdx} | 0 docs/{mini-apps => apps}/quickstart/migrate-existing-apps.mdx | 0 .../quickstart/migrate-to-standard-web-app.mdx | 0 docs/{mini-apps => apps}/quickstart/template.mdx | 0 docs/{mini-apps => apps}/resources/design-resources.mdx | 0 docs/{mini-apps => apps}/resources/templates.mdx | 0 docs/{mini-apps => apps}/technical-guides/accept-payments.mdx | 0 docs/{mini-apps => apps}/technical-guides/base-notifications.mdx | 0 .../{mini-apps => apps}/technical-guides/building-chat-agents.mdx | 0 .../{mini-apps => apps}/technical-guides/neynar-notifications.mdx | 0 .../technical-guides/sharing-and-social-graph.mdx | 0 docs/{mini-apps => apps}/technical-guides/sign-manifest.mdx | 0 .../troubleshooting/base-app-compatibility.mdx | 0 docs/{mini-apps => apps}/troubleshooting/common-issues.mdx | 0 docs/{mini-apps => apps}/troubleshooting/error-handling.mdx | 0 docs/{mini-apps => apps}/troubleshooting/how-search-works.mdx | 0 docs/{mini-apps => apps}/troubleshooting/testing.mdx | 0 40 files changed, 0 insertions(+), 0 deletions(-) rename docs/{mini-apps => apps}/core-concepts/authentication.mdx (100%) rename docs/{mini-apps => apps}/core-concepts/base-account.mdx (100%) rename docs/{mini-apps => apps}/core-concepts/context.mdx (100%) rename docs/{mini-apps => apps}/core-concepts/embeds-and-previews.mdx (100%) rename docs/{mini-apps => apps}/core-concepts/manifest.mdx (100%) rename docs/{mini-apps => apps}/core-concepts/navigation.mdx (100%) rename docs/{mini-apps => apps}/core-concepts/notifications.mdx (100%) rename docs/{mini-apps => apps}/featured-guidelines/design-guidelines.mdx (100%) rename docs/{mini-apps => apps}/featured-guidelines/notification-guidelines.mdx (100%) rename docs/{mini-apps => apps}/featured-guidelines/overview.mdx (100%) rename docs/{mini-apps => apps}/featured-guidelines/product-guidelines.mdx (100%) rename docs/{mini-apps => apps}/featured-guidelines/technical-guidelines.mdx (100%) rename docs/{mini-apps/growth/build-viral-mini-apps.mdx => apps/growth/build-viral-apps.mdx} (100%) rename docs/{mini-apps => apps}/growth/optimize-onboarding.mdx (100%) rename docs/{mini-apps => apps}/growth/rewards.mdx (100%) rename docs/{mini-apps => apps}/introduction/overview.mdx (100%) rename docs/{mini-apps => apps}/llms-full.txt (100%) rename docs/{mini-apps => apps}/llms.txt (100%) rename docs/{mini-apps => apps}/quality-and-publishing/overview.mdx (100%) rename docs/{mini-apps => apps}/quality-and-publishing/quality-bar.mdx (100%) rename docs/{mini-apps => apps}/quality-and-publishing/submission-guidelines.mdx (100%) rename docs/{mini-apps => apps}/quickstart/build-checklist.mdx (100%) rename docs/{mini-apps => apps}/quickstart/building-for-the-base-app.mdx (100%) rename docs/{mini-apps/quickstart/create-new-miniapp.mdx => apps/quickstart/create-new-app.mdx} (100%) rename docs/{mini-apps => apps}/quickstart/migrate-existing-apps.mdx (100%) rename docs/{mini-apps => apps}/quickstart/migrate-to-standard-web-app.mdx (100%) rename docs/{mini-apps => apps}/quickstart/template.mdx (100%) rename docs/{mini-apps => apps}/resources/design-resources.mdx (100%) rename docs/{mini-apps => apps}/resources/templates.mdx (100%) rename docs/{mini-apps => apps}/technical-guides/accept-payments.mdx (100%) rename docs/{mini-apps => apps}/technical-guides/base-notifications.mdx (100%) rename docs/{mini-apps => apps}/technical-guides/building-chat-agents.mdx (100%) rename docs/{mini-apps => apps}/technical-guides/neynar-notifications.mdx (100%) rename docs/{mini-apps => apps}/technical-guides/sharing-and-social-graph.mdx (100%) rename docs/{mini-apps => apps}/technical-guides/sign-manifest.mdx (100%) rename docs/{mini-apps => apps}/troubleshooting/base-app-compatibility.mdx (100%) rename docs/{mini-apps => apps}/troubleshooting/common-issues.mdx (100%) rename docs/{mini-apps => apps}/troubleshooting/error-handling.mdx (100%) rename docs/{mini-apps => apps}/troubleshooting/how-search-works.mdx (100%) rename docs/{mini-apps => apps}/troubleshooting/testing.mdx (100%) diff --git a/docs/mini-apps/core-concepts/authentication.mdx b/docs/apps/core-concepts/authentication.mdx similarity index 100% rename from docs/mini-apps/core-concepts/authentication.mdx rename to docs/apps/core-concepts/authentication.mdx diff --git a/docs/mini-apps/core-concepts/base-account.mdx b/docs/apps/core-concepts/base-account.mdx similarity index 100% rename from docs/mini-apps/core-concepts/base-account.mdx rename to docs/apps/core-concepts/base-account.mdx diff --git a/docs/mini-apps/core-concepts/context.mdx b/docs/apps/core-concepts/context.mdx similarity index 100% rename from docs/mini-apps/core-concepts/context.mdx rename to docs/apps/core-concepts/context.mdx diff --git a/docs/mini-apps/core-concepts/embeds-and-previews.mdx b/docs/apps/core-concepts/embeds-and-previews.mdx similarity index 100% rename from docs/mini-apps/core-concepts/embeds-and-previews.mdx rename to docs/apps/core-concepts/embeds-and-previews.mdx diff --git a/docs/mini-apps/core-concepts/manifest.mdx b/docs/apps/core-concepts/manifest.mdx similarity index 100% rename from docs/mini-apps/core-concepts/manifest.mdx rename to docs/apps/core-concepts/manifest.mdx diff --git a/docs/mini-apps/core-concepts/navigation.mdx b/docs/apps/core-concepts/navigation.mdx similarity index 100% rename from docs/mini-apps/core-concepts/navigation.mdx rename to docs/apps/core-concepts/navigation.mdx diff --git a/docs/mini-apps/core-concepts/notifications.mdx b/docs/apps/core-concepts/notifications.mdx similarity index 100% rename from docs/mini-apps/core-concepts/notifications.mdx rename to docs/apps/core-concepts/notifications.mdx diff --git a/docs/mini-apps/featured-guidelines/design-guidelines.mdx b/docs/apps/featured-guidelines/design-guidelines.mdx similarity index 100% rename from docs/mini-apps/featured-guidelines/design-guidelines.mdx rename to docs/apps/featured-guidelines/design-guidelines.mdx diff --git a/docs/mini-apps/featured-guidelines/notification-guidelines.mdx b/docs/apps/featured-guidelines/notification-guidelines.mdx similarity index 100% rename from docs/mini-apps/featured-guidelines/notification-guidelines.mdx rename to docs/apps/featured-guidelines/notification-guidelines.mdx diff --git a/docs/mini-apps/featured-guidelines/overview.mdx b/docs/apps/featured-guidelines/overview.mdx similarity index 100% rename from docs/mini-apps/featured-guidelines/overview.mdx rename to docs/apps/featured-guidelines/overview.mdx diff --git a/docs/mini-apps/featured-guidelines/product-guidelines.mdx b/docs/apps/featured-guidelines/product-guidelines.mdx similarity index 100% rename from docs/mini-apps/featured-guidelines/product-guidelines.mdx rename to docs/apps/featured-guidelines/product-guidelines.mdx diff --git a/docs/mini-apps/featured-guidelines/technical-guidelines.mdx b/docs/apps/featured-guidelines/technical-guidelines.mdx similarity index 100% rename from docs/mini-apps/featured-guidelines/technical-guidelines.mdx rename to docs/apps/featured-guidelines/technical-guidelines.mdx diff --git a/docs/mini-apps/growth/build-viral-mini-apps.mdx b/docs/apps/growth/build-viral-apps.mdx similarity index 100% rename from docs/mini-apps/growth/build-viral-mini-apps.mdx rename to docs/apps/growth/build-viral-apps.mdx diff --git a/docs/mini-apps/growth/optimize-onboarding.mdx b/docs/apps/growth/optimize-onboarding.mdx similarity index 100% rename from docs/mini-apps/growth/optimize-onboarding.mdx rename to docs/apps/growth/optimize-onboarding.mdx diff --git a/docs/mini-apps/growth/rewards.mdx b/docs/apps/growth/rewards.mdx similarity index 100% rename from docs/mini-apps/growth/rewards.mdx rename to docs/apps/growth/rewards.mdx diff --git a/docs/mini-apps/introduction/overview.mdx b/docs/apps/introduction/overview.mdx similarity index 100% rename from docs/mini-apps/introduction/overview.mdx rename to docs/apps/introduction/overview.mdx diff --git a/docs/mini-apps/llms-full.txt b/docs/apps/llms-full.txt similarity index 100% rename from docs/mini-apps/llms-full.txt rename to docs/apps/llms-full.txt diff --git a/docs/mini-apps/llms.txt b/docs/apps/llms.txt similarity index 100% rename from docs/mini-apps/llms.txt rename to docs/apps/llms.txt diff --git a/docs/mini-apps/quality-and-publishing/overview.mdx b/docs/apps/quality-and-publishing/overview.mdx similarity index 100% rename from docs/mini-apps/quality-and-publishing/overview.mdx rename to docs/apps/quality-and-publishing/overview.mdx diff --git a/docs/mini-apps/quality-and-publishing/quality-bar.mdx b/docs/apps/quality-and-publishing/quality-bar.mdx similarity index 100% rename from docs/mini-apps/quality-and-publishing/quality-bar.mdx rename to docs/apps/quality-and-publishing/quality-bar.mdx diff --git a/docs/mini-apps/quality-and-publishing/submission-guidelines.mdx b/docs/apps/quality-and-publishing/submission-guidelines.mdx similarity index 100% rename from docs/mini-apps/quality-and-publishing/submission-guidelines.mdx rename to docs/apps/quality-and-publishing/submission-guidelines.mdx diff --git a/docs/mini-apps/quickstart/build-checklist.mdx b/docs/apps/quickstart/build-checklist.mdx similarity index 100% rename from docs/mini-apps/quickstart/build-checklist.mdx rename to docs/apps/quickstart/build-checklist.mdx diff --git a/docs/mini-apps/quickstart/building-for-the-base-app.mdx b/docs/apps/quickstart/building-for-the-base-app.mdx similarity index 100% rename from docs/mini-apps/quickstart/building-for-the-base-app.mdx rename to docs/apps/quickstart/building-for-the-base-app.mdx diff --git a/docs/mini-apps/quickstart/create-new-miniapp.mdx b/docs/apps/quickstart/create-new-app.mdx similarity index 100% rename from docs/mini-apps/quickstart/create-new-miniapp.mdx rename to docs/apps/quickstart/create-new-app.mdx diff --git a/docs/mini-apps/quickstart/migrate-existing-apps.mdx b/docs/apps/quickstart/migrate-existing-apps.mdx similarity index 100% rename from docs/mini-apps/quickstart/migrate-existing-apps.mdx rename to docs/apps/quickstart/migrate-existing-apps.mdx diff --git a/docs/mini-apps/quickstart/migrate-to-standard-web-app.mdx b/docs/apps/quickstart/migrate-to-standard-web-app.mdx similarity index 100% rename from docs/mini-apps/quickstart/migrate-to-standard-web-app.mdx rename to docs/apps/quickstart/migrate-to-standard-web-app.mdx diff --git a/docs/mini-apps/quickstart/template.mdx b/docs/apps/quickstart/template.mdx similarity index 100% rename from docs/mini-apps/quickstart/template.mdx rename to docs/apps/quickstart/template.mdx diff --git a/docs/mini-apps/resources/design-resources.mdx b/docs/apps/resources/design-resources.mdx similarity index 100% rename from docs/mini-apps/resources/design-resources.mdx rename to docs/apps/resources/design-resources.mdx diff --git a/docs/mini-apps/resources/templates.mdx b/docs/apps/resources/templates.mdx similarity index 100% rename from docs/mini-apps/resources/templates.mdx rename to docs/apps/resources/templates.mdx diff --git a/docs/mini-apps/technical-guides/accept-payments.mdx b/docs/apps/technical-guides/accept-payments.mdx similarity index 100% rename from docs/mini-apps/technical-guides/accept-payments.mdx rename to docs/apps/technical-guides/accept-payments.mdx diff --git a/docs/mini-apps/technical-guides/base-notifications.mdx b/docs/apps/technical-guides/base-notifications.mdx similarity index 100% rename from docs/mini-apps/technical-guides/base-notifications.mdx rename to docs/apps/technical-guides/base-notifications.mdx diff --git a/docs/mini-apps/technical-guides/building-chat-agents.mdx b/docs/apps/technical-guides/building-chat-agents.mdx similarity index 100% rename from docs/mini-apps/technical-guides/building-chat-agents.mdx rename to docs/apps/technical-guides/building-chat-agents.mdx diff --git a/docs/mini-apps/technical-guides/neynar-notifications.mdx b/docs/apps/technical-guides/neynar-notifications.mdx similarity index 100% rename from docs/mini-apps/technical-guides/neynar-notifications.mdx rename to docs/apps/technical-guides/neynar-notifications.mdx diff --git a/docs/mini-apps/technical-guides/sharing-and-social-graph.mdx b/docs/apps/technical-guides/sharing-and-social-graph.mdx similarity index 100% rename from docs/mini-apps/technical-guides/sharing-and-social-graph.mdx rename to docs/apps/technical-guides/sharing-and-social-graph.mdx diff --git a/docs/mini-apps/technical-guides/sign-manifest.mdx b/docs/apps/technical-guides/sign-manifest.mdx similarity index 100% rename from docs/mini-apps/technical-guides/sign-manifest.mdx rename to docs/apps/technical-guides/sign-manifest.mdx diff --git a/docs/mini-apps/troubleshooting/base-app-compatibility.mdx b/docs/apps/troubleshooting/base-app-compatibility.mdx similarity index 100% rename from docs/mini-apps/troubleshooting/base-app-compatibility.mdx rename to docs/apps/troubleshooting/base-app-compatibility.mdx diff --git a/docs/mini-apps/troubleshooting/common-issues.mdx b/docs/apps/troubleshooting/common-issues.mdx similarity index 100% rename from docs/mini-apps/troubleshooting/common-issues.mdx rename to docs/apps/troubleshooting/common-issues.mdx diff --git a/docs/mini-apps/troubleshooting/error-handling.mdx b/docs/apps/troubleshooting/error-handling.mdx similarity index 100% rename from docs/mini-apps/troubleshooting/error-handling.mdx rename to docs/apps/troubleshooting/error-handling.mdx diff --git a/docs/mini-apps/troubleshooting/how-search-works.mdx b/docs/apps/troubleshooting/how-search-works.mdx similarity index 100% rename from docs/mini-apps/troubleshooting/how-search-works.mdx rename to docs/apps/troubleshooting/how-search-works.mdx diff --git a/docs/mini-apps/troubleshooting/testing.mdx b/docs/apps/troubleshooting/testing.mdx similarity index 100% rename from docs/mini-apps/troubleshooting/testing.mdx rename to docs/apps/troubleshooting/testing.mdx From 4db64e40648f6458a717bb6611ee0071f8e3c522 Mon Sep 17 00:00:00 2001 From: sohey <soheimam@gmail.com> Date: Wed, 8 Apr 2026 20:29:37 +0200 Subject: [PATCH 5/5] updated wording --- claude.md | 2 +- docs/.mintignore | 16 +- docs/agents.md | 10 +- docs/apps/growth/rewards.mdx | 8 +- docs/apps/llms-full.txt | 16 +- docs/apps/llms.txt | 8 +- .../migrate-to-standard-web-app.mdx | 10 +- .../guides/verify-social-accounts.mdx | 32 +-- .../improve-ux/spend-permissions.mdx | 2 +- .../builder-codes/app-developers.mdx | 2 +- docs/changes.md | 46 ++++ docs/docs.json | 248 +++++++++--------- docs/get-started/learning-resources.mdx | 2 +- docs/llms-full.txt | 6 +- docs/llms.txt | 6 +- scripts/generate-agents-md.js | 4 +- 16 files changed, 235 insertions(+), 183 deletions(-) create mode 100644 docs/changes.md diff --git a/claude.md b/claude.md index 3d2584d0b..f835e3f1f 100644 --- a/claude.md +++ b/claude.md @@ -19,7 +19,7 @@ docs/ ├── base-chain/ # Network, nodes, tools ├── base-account/ # Smart Wallet SDK ├── ai-agents/ # Agent development -├── mini-apps/ # MiniKit guides +├── apps/ # Apps on Base (MiniKit, guides) ├── onchainkit/ # React components (versioned) ├── images/ # Assets by topic ├── snippets/ # Reusable MDX components diff --git a/docs/.mintignore b/docs/.mintignore index 8e3662ddd..665b1c221 100644 --- a/docs/.mintignore +++ b/docs/.mintignore @@ -1,11 +1,11 @@ # Exclude specific files writing.md -# Hidden mini-apps sections (redirected to migrate-to-standard-web-app) -/mini-apps/core-concepts/* -/mini-apps/resources/* -/mini-apps/featured-guidelines/* -/mini-apps/troubleshooting/* -/mini-apps/introduction/* -/mini-apps/growth/build-viral-mini-apps -/mini-apps/growth/optimize-onboarding +# Hidden apps sections (redirected to migrate-to-standard-web-app) +/apps/core-concepts/* +/apps/resources/* +/apps/featured-guidelines/* +/apps/troubleshooting/* +/apps/introduction/* +/apps/growth/build-viral-apps +/apps/growth/optimize-onboarding diff --git a/docs/agents.md b/docs/agents.md index b9db59728..4de882baa 100644 --- a/docs/agents.md +++ b/docs/agents.md @@ -11,6 +11,10 @@ Base is an Ethereum L2 by Coinbase. Docs for: Base Chain, Smart Wallet, OnchainK |ai-agents/skills/trading:alchemy-agentic-gateway,coingecko,swap-execution |ai-agents/skills/wallets:bankr,cdp-agentic-wallet,sponge-wallet |ai-agents/trading:data-fetching,trade-execution +|apps/growth:rewards +|apps/quality-and-publishing:overview,quality-bar,submission-guidelines +|apps/quickstart:build-checklist,building-for-the-base-app,create-new-app,migrate-existing-apps,migrate-to-standard-web-app,template +|apps/technical-guides:accept-payments,base-notifications,building-chat-agents,neynar-notifications,sharing-and-social-graph,sign-manifest |base-account/basenames:basename-transfer,basenames-faq,basenames-wagmi-tutorial |base-account/contribute:contribute-to-base-account-docs,security-and-bug-bounty |base-account/framework-integrations:cdp,rainbowkit,reown,thirdweb @@ -43,9 +47,5 @@ Base is an Ethereum L2 by Coinbase. Docs for: Base Chain, Smart Wallet, OnchainK |base-chain/quickstart:base-solana-bridge,connecting-to-base,deploy-on-base,why-base |base-chain/security:avoid-malicious-flags,bug-bounty,report-vulnerability,security-council |get-started:base-mentorship-program,base-services-hub,base,block-explorers,build-app,concepts,country-leads-and-ambassadors,data-indexers,deploy-smart-contracts,docs-llms,docs-mcp,get-funded,launch-token,learning-resources,mistakes,prompt-library,resources-for-ai-agents -|mini-apps/growth:rewards -|mini-apps/quality-and-publishing:overview,quality-bar,submission-guidelines -|mini-apps/quickstart:build-checklist,building-for-the-base-app,create-new-miniapp,migrate-existing-apps,migrate-to-standard-web-app,template -|mini-apps/technical-guides:accept-payments,base-notifications,building-chat-agents,neynar-notifications,sharing-and-social-graph,sign-manifest |onchainkit:migrate-from-onchainkit -|root:agents,cookie-policy,privacy-policy,terms-of-service,tone_of_voice +|root:agents,changes,cookie-policy,privacy-policy,terms-of-service,tone_of_voice diff --git a/docs/apps/growth/rewards.mdx b/docs/apps/growth/rewards.mdx index e3d031581..ab08ab298 100644 --- a/docs/apps/growth/rewards.mdx +++ b/docs/apps/growth/rewards.mdx @@ -9,8 +9,8 @@ description: Earn financial incentives for building high-quality Apps that driv ## How Rewards Work <Steps> -<Step title="Verify your Mini App"> - Submit your Mini App to be verified on [Base.dev](https://www.base.dev/). This process validates your ownership of the mini app by adding Base builder address in the manifest. +<Step title="Verify your App"> + Submit your App to be verified on [Base.dev](https://www.base.dev/). This process validates your ownership of the app by adding Base builder address. </Step> @@ -20,8 +20,6 @@ description: Earn financial incentives for building high-quality Apps that driv </Step> </Steps> -<Card title="Submit for Verification" href="/mini-apps/featured-guidelines/overview"> - Learn how to prepare and submit your Mini App for the verification process. -</Card> + diff --git a/docs/apps/llms-full.txt b/docs/apps/llms-full.txt index a522587b8..1a9f7b432 100644 --- a/docs/apps/llms-full.txt +++ b/docs/apps/llms-full.txt @@ -1,11 +1,11 @@ -# https://docs.base.org/mini-apps/llms-full.txt +# https://docs.base.org/apps/llms-full.txt -## Mini Apps — Deep Guide for LLMs +## Apps — deep guide for LLMs > The Base App now treats all apps as standard web apps. Migrate from Farcaster-specific SDKs to wagmi + SIWE, register on Base.dev, and earn rewards for driving onchain activity. ### What you can do here -- Migrate an existing Farcaster mini app to a standard web app compatible with the Base App +- Migrate an existing Farcaster-embedded app to a standard web app compatible with the Base App - Register your app on Base.dev for search, discovery, and rewards eligibility - Replace deprecated Farcaster SDK methods with standard web equivalents (wagmi, viem, SIWE) - Earn financial rewards for building apps that drive user engagement and onchain transactions @@ -13,15 +13,15 @@ ## Navigation (with brief descriptions) ### Quickstart -- [Migrate to a Standard Web App](https://docs.base.org/mini-apps/quickstart/migrate-to-standard-web-app.md) — Step-by-step migration guide: replace Farcaster SDK, update auth and wallet logic, register on Base.dev +- [Migrate to a Standard Web App](https://docs.base.org/apps/quickstart/migrate-to-standard-web-app.md) — Step-by-step migration guide: replace Farcaster SDK, update auth and wallet logic, register on Base.dev ### Growth -- [Rewards](https://docs.base.org/mini-apps/growth/rewards.md) — Verification programs, competitions, and partner opportunities for earning rewards +- [Rewards](https://docs.base.org/apps/growth/rewards.md) — Verification programs, competitions, and partner opportunities for earning rewards ## Key Concepts (excerpts) -Source: `https://docs.base.org/mini-apps/quickstart/migrate-to-standard-web-app.md` +Source: `https://docs.base.org/apps/quickstart/migrate-to-standard-web-app.md` After April 9, 2026, the Base App treats all apps as standard web apps regardless of Farcaster manifests. Key changes: @@ -34,10 +34,10 @@ After April 9, 2026, the Base App treats all apps as standard web apps regardles | Search and discovery via Farcaster | Base.dev app metadata + builder codes | Migration options: -- **AI agent migration** — Install the Migration Skill: `npx skills add base/skills`, then ask your agent to migrate your Farcaster mini app to a standard web app +- **AI agent migration** — Install the Migration Skill: `npx skills add base/skills`, then ask your agent to migrate your Farcaster-embedded app to a standard web app - **Manual migration** — Follow the step-by-step guide to replace SDK methods, update auth, and register on Base.dev -Source: `https://docs.base.org/mini-apps/growth/rewards.md` +Source: `https://docs.base.org/apps/growth/rewards.md` Base.dev rewards developers who build apps that deliver real value and drive meaningful onchain activity: 1. Submit your app for verification on Base.dev — validates ownership by adding a Base builder address in the manifest diff --git a/docs/apps/llms.txt b/docs/apps/llms.txt index f80e964ad..53c10eba2 100644 --- a/docs/apps/llms.txt +++ b/docs/apps/llms.txt @@ -1,11 +1,11 @@ -# https://docs.base.org/mini-apps/llms.txt +# https://docs.base.org/apps/llms.txt -## Mini Apps Documentation +## Apps documentation > Build apps that run in the Base App as standard web apps — no Farcaster SDK required. Register on Base.dev, use wagmi + SIWE for auth, and earn rewards for driving onchain activity. ## Quickstart -- [Migrate to a Standard Web App](https://docs.base.org/mini-apps/quickstart/migrate-to-standard-web-app.md) — Replace deprecated Farcaster SDK methods and register your app on Base.dev +- [Migrate to a Standard Web App](https://docs.base.org/apps/quickstart/migrate-to-standard-web-app.md) — Replace deprecated Farcaster SDK methods and register your app on Base.dev ## Growth -- [Rewards](https://docs.base.org/mini-apps/growth/rewards.md) — Earn financial incentives for building apps that drive user engagement and onchain transactions +- [Rewards](https://docs.base.org/apps/growth/rewards.md) — Earn financial incentives for building apps that drive user engagement and onchain transactions diff --git a/docs/apps/quickstart/migrate-to-standard-web-app.mdx b/docs/apps/quickstart/migrate-to-standard-web-app.mdx index 0c8e5ca68..f5e49fc5f 100644 --- a/docs/apps/quickstart/migrate-to-standard-web-app.mdx +++ b/docs/apps/quickstart/migrate-to-standard-web-app.mdx @@ -1,6 +1,6 @@ --- title: "Migrate to a Standard Web App" -description: "Migrate your Farcaster mini app to work in the Base App. Covers replacing deprecated SDK methods, and registering on Base.dev." +description: "Migrate your Farcaster mini-app to work in the Base App. Covers replacing deprecated SDK methods, and registering on Base.dev." tag: "NEW" --- @@ -9,7 +9,7 @@ After April 9, 2026, the Base App treats all apps as standard web apps regardles </Warning> <Tip> -**Using an AI coding agent?** Install the [Migration Skill](https://github.com/base/skills) to let your agent handle this migration automatically. Run `npx skills add base/skills` and ask your agent to migrate your Farcaster mini app to a standard web app. +**Using an AI coding agent?** Install the [Migration Skill](https://github.com/base/skills) to let your agent handle this migration automatically. Run `npx skills add base/skills` and ask your agent to migrate your Farcaster app to a standard web app. </Tip> ## What's changing @@ -29,9 +29,9 @@ The Base App is moving from the Farcaster mini-app spec to a single model: **sta ## Choose your migration path <Tabs> -<Tab title="I'm converting a mini app"> +<Tab title="I'm converting an app"> <Tip> -**Let your agent handle this.** Install the [Migration Skill](https://github.com/base/skills) with `npx skills add base/skills` and ask your agent to migrate your Farcaster mini app to a standard web app. The skill maps deprecated SDK methods, replaces auth and wallet logic, and wires up the Base App path automatically. +**Let your agent handle this.** Install the [Migration Skill](https://github.com/base/skills) with `npx skills add base/skills` and ask your agent to migrate your Farcaster app to a standard web app. The skill maps deprecated SDK methods, replaces auth and wallet logic, and wires up the Base App path automatically. </Tip> Your app uses the Farcaster SDK. The migration replaces Farcaster-specific auth, identity, and actions with standard web equivalents. @@ -228,7 +228,7 @@ The following Farcaster mini-app SDK methods are not invoked by the Base App aft | `swapToken` | Construct swap transactions with wagmi, viem, or your preferred onchain library. | | `requestCameraAndMicrophoneAccess` | No replacement | | `close` | No replacement | -| `addMiniApp` | the Base App handles mini app installation automatically. No SDK needed. | +| `addMiniApp` | the Base App handles app installation automatically. No SDK needed. | | `viewCast` | Not needed in the Base App | | `composeCast` | Not needed in the Base App | | `ready` | Not needed. Your app is ready to display when it loads. | diff --git a/docs/base-account/guides/verify-social-accounts.mdx b/docs/base-account/guides/verify-social-accounts.mdx index f435ed670..861a1eb46 100644 --- a/docs/base-account/guides/verify-social-accounts.mdx +++ b/docs/base-account/guides/verify-social-accounts.mdx @@ -160,7 +160,7 @@ async function claimAirdrop(verificationToken: string, walletAddress: string) { ┌─────────────┐ │ │ 1. User connects wallet │ Your │ - │ Mini App │ + │ App │ │ (Frontend) │ └──────┬──────┘ │ @@ -176,7 +176,7 @@ async function claimAirdrop(verificationToken: string, walletAddress: string) { │ ▼ ┌──────────────┐ - │ Mini App │ • Validates trait requirements + │ App │ • Validates trait requirements │ Backend │ • Verifies signature with Base Verify API │ (Your API) │ └──────┬───────┘ @@ -192,12 +192,12 @@ async function claimAirdrop(verificationToken: string, walletAddress: string) { │ 404 Not Found ▼ - 5. Redirect to Base Verify Mini App + 5. Redirect to Base Verify App │ ▼ ┌──────────────────────┐ │ Base Verify │ 6. User completes OAuth - │ Mini App │ (X, Coinbase, Instagram, TikTok) + │ App │ (X, Coinbase, Instagram, TikTok) │ verify.base.dev │ 7. Base Verify stores verification └──────────┬───────────┘ │ @@ -205,7 +205,7 @@ async function claimAirdrop(verificationToken: string, walletAddress: string) { ▼ ┌─────────────┐ │ Your │ 9. Check again (step 4) - │ Mini App │ → Now returns 200 or 400 + │ App │ → Now returns 200 or 400 └─────────────┘ ``` @@ -213,7 +213,7 @@ async function claimAirdrop(verificationToken: string, walletAddress: string) { - Generate SIWE messages with trait requirements - Handle user wallet connection -- Redirect to the Base Verify Mini App when verification is not found +- Redirect to the Base Verify App when verification is not found - Store the returned verification token to prevent reuse - Keep your secret key secure on the backend @@ -230,7 +230,7 @@ async function claimAirdrop(verificationToken: string, walletAddress: string) { | Code | Meaning | Action | | :--- | :--- | :--- | | **200 OK** | Wallet has verified the provider account AND meets all trait requirements. Returns a unique token. | Grant access, store the token. | -| **404 Not Found** | Wallet has never verified this provider. | Redirect user to the Base Verify Mini App. | +| **404 Not Found** | Wallet has never verified this provider. | Redirect user to the Base Verify App. | | **400 Bad Request** (`verification_traits_not_satisfied`) | Wallet has verified the provider, but doesn't meet the trait requirements. | Show user they don't meet requirements. Do **not** redirect. | --- @@ -247,7 +247,7 @@ async function claimAirdrop(verificationToken: string, walletAddress: string) { Provide the Base Verify team: -1. Your **Mini App domain** +1. Your **App domain** 2. Your **redirect URI** — where users return after verification (e.g., `https://yourapp.com`) <Warning> @@ -416,9 +416,9 @@ Your backend **must** validate that the trait requirements in the SIWE message m <Step title="Redirect to Base Verify (frontend)"> -If you receive a 404 response, redirect the user to the Base Verify Mini App to complete OAuth: +If you receive a 404 response, redirect the user to the Base Verify App to complete OAuth: -```typescript Open the Base Verify Mini App highlight={3-6,9} +```typescript Open the Base Verify App highlight={3-6,9} function redirectToVerifyMiniApp(provider: string) { const params = new URLSearchParams({ redirect_uri: config.appUrl, @@ -432,7 +432,7 @@ function redirectToVerifyMiniApp(provider: string) { } ``` -After verification, the user returns to your `redirect_uri` with `?success=true`. Run the check again (step 3) and it now returns 200 with a token. If you're building for the Base app, see the [Mini apps overview](/mini-apps/introduction/overview) for broader app structure and lifecycle guidance. +After verification, the user returns to your `redirect_uri` with `?success=true`. Run the check again (step 3) and it now returns 200 with a token. If you're building for the Base app, see the [Apps overview](/apps/introduction/overview) for broader app structure and lifecycle guidance. </Step> </Steps> @@ -441,7 +441,7 @@ After verification, the user returns to your `redirect_uri` with `?success=true` | Response | What to do | | :--- | :--- | -| **404** | User hasn't verified. Redirect to the Base Verify Mini App. | +| **404** | User hasn't verified. Redirect to the Base Verify App. | | **400** (`verification_traits_not_satisfied`) | User has account but doesn't meet requirements. Show a message — don't redirect and don't retry. | | **200** | Store the token and grant access. | @@ -512,7 +512,7 @@ curl -X POST https://verify.base.dev/v1/base_verify_token \ } ``` -Redirect the user to the Base Verify Mini App to complete verification. +Redirect the user to the Base Verify App to complete verification. **400 Bad Request — traits not satisfied:** @@ -536,7 +536,7 @@ The user has the provider account but doesn't meet trait requirements. Do not re Check that your secret key is correct and included in the Authorization header. -### Mini App redirect +### App redirect To redirect users to Base Verify for verification: @@ -836,14 +836,14 @@ if (!validation.valid) { Base Verify validates provider accounts through [OAuth](https://oauth.net/2/): -1. User initiates OAuth in the Base Verify Mini App +1. User initiates OAuth in the Base Verify App 2. Provider (X, Instagram, etc.) authenticates the user 3. Provider returns an OAuth token to Base Verify 4. Base Verify fetches account data using the OAuth token 5. Base Verify stores the verification linked to the user's wallet 6. OAuth token is encrypted and stored securely -Your app never handles OAuth tokens or redirects — this is all handled within the Base Verify Mini App. +Your app never handles OAuth tokens or redirects — this is all handled within the Base Verify App. ### Data storage diff --git a/docs/base-account/improve-ux/spend-permissions.mdx b/docs/base-account/improve-ux/spend-permissions.mdx index 26044cc4c..5afa7a69c 100644 --- a/docs/base-account/improve-ux/spend-permissions.mdx +++ b/docs/base-account/improve-ux/spend-permissions.mdx @@ -12,7 +12,7 @@ After the user signs the permission, the `spender` can initiate transfers within Read more about the Spend Permission Manager contract and supported chains on [GitHub](https://github.com/coinbase/spend-permissions). <Callout type="info"> - Spend Permissions for Base App Mini Apps are coming soon and will be supported in a future update. + Spend Permissions for Base App Apps are coming soon and will be supported in a future update. </Callout> <Note> diff --git a/docs/base-chain/builder-codes/app-developers.mdx b/docs/base-chain/builder-codes/app-developers.mdx index 2d5b55d24..d75206b5a 100644 --- a/docs/base-chain/builder-codes/app-developers.mdx +++ b/docs/base-chain/builder-codes/app-developers.mdx @@ -6,7 +6,7 @@ description: "Integrate Builder Codes into your app using Wagmi or Viem to attri ## Automatic Attribution on Base -Once your app is registered on [base.dev](http://base.dev/), the Base App will auto-append your Builder Code to transactions its users make in your app (e.g. via your mini app, or the Base App's browser). This powers your onchain analytics in [base.dev](http://base.dev/) and qualifies you for potential future rewards. +Once your app is registered on [base.dev](http://base.dev/), the Base App will auto-append your Builder Code to transactions its users make in your app (e.g. via your app, or the Base App's browser). This powers your onchain analytics in [base.dev](http://base.dev/) and qualifies you for potential future rewards. ## Integrating Outside the Base App diff --git a/docs/changes.md b/docs/changes.md new file mode 100644 index 000000000..b9b9970e8 --- /dev/null +++ b/docs/changes.md @@ -0,0 +1,46 @@ +# Changes: Mini Apps → Apps (docs) + +## Summary + +- **Mintlify tab**: `"Mini Apps"` → `"Apps"` in [`docs.json`](docs.json). +- **Content path**: `docs/mini-apps/` → `docs/apps/`; published URLs are now `/apps/...`. +- **Slugs renamed**: + - `quickstart/create-new-miniapp` → `quickstart/create-new-app` + - `growth/build-viral-mini-apps` → `growth/build-viral-apps` +- **Redirects**: + - All redirect **destinations** updated to `/apps/...` (and new slugs). + - All redirect **sources** that pointed at the old docs tree use the **`/mini-apps/...`** prefix again (legacy inbound URLs). + - **Wildcard** (last in the `redirects` array): `/mini-apps/:slug*` → `/apps/:slug*`. + - **Explicit** (before wildcard): `/mini-apps/quickstart/create-new-miniapp` → `/apps/quickstart/create-new-app`, `/mini-apps/growth/build-viral-mini-apps` → `/apps/growth/build-viral-apps`. +- **Copy (non-hidden pages only)**: Pages **without** `hidden: true` keep refreshed wording and links. **`hidden: true` MDX** was **restored from `HEAD`** (`docs/mini-apps/...` at last commit) so we do not maintain editorial or link updates there; [`docs.json`](docs.json) redirects still map `/mini-apps/...` → `/apps/...` for visitors. +- **Preserved in non-hidden edits where applicable**: `fc:miniapp`, `miniapps.farcaster.xyz`, `addMiniApp`, `useMiniKit`, API values like `open_miniapp`, and **GitHub** paths under `base/demos` that still use a `mini-apps/` directory segment. + +## Follow-up fixes (redirects & public pages) + +These are **config and visible docs only** (not hidden MDX): + +| Issue | Resolution | +|--------|------------| +| Destinations pointed at **`/apps/overview`** (no page) | Now **`/apps/quickstart/create-new-app`** (matches prior `/mini-apps/overview` behavior). | +| **`/mini-apps/features/links`** → missing `technical-guides/links` | Destination is **`/apps/core-concepts/navigation`**. | +| **`/mini-apps/growth/data-driven-growth`** → missing `technical-guides/data-driven-growth` | Destination is **`https://base.dev`** (same as the `technical-guides/data-driven-growth` redirect). | +| **`/apps/features/manifest`** (base-app minikit redirects) | **`/apps/core-concepts/manifest`**. | +| **`/mini-apps/quickstart/new-apps/features`** → missing `features/overview` | **`/apps/featured-guidelines/overview`**. | + +Cross-links updated in **non-hidden** docs only, e.g. [`get-started/learning-resources.mdx`](get-started/learning-resources.mdx), [`base-account/guides/verify-social-accounts.mdx`](base-account/guides/verify-social-accounts.mdx), [`base-chain/builder-codes/app-developers.mdx`](base-chain/builder-codes/app-developers.mdx), [`base-account/improve-ux/spend-permissions.mdx`](base-account/improve-ux/spend-permissions.mdx). + +## Files touched + +- [`docs/docs.json`](docs.json) — navigation, redirects, wildcard. +- [`docs/.mintignore`](.mintignore) — paths under `/apps/...`. +- [`docs/apps/**`](apps/) — **Visible** pages (e.g. `quickstart/migrate-to-standard-web-app`, `growth/rewards`, `technical-guides/base-notifications`) plus `llms.txt` / `llms-full.txt`. +- [`docs/llms.txt`](llms.txt), [`docs/llms-full.txt`](llms-full.txt). +- [`claude.md`](../claude.md) — repo structure diagram. +- [`scripts/generate-agents-md.js`](../scripts/generate-agents-md.js) — comments. +- [`docs/agents.md`](agents.md) — regenerated. + +## Verification + +1. **`node scripts/lint-mdx.js`** — Run after edits. +2. **Spot-check**: `/apps/quickstart/migrate-to-standard-web-app`, `/apps/quickstart/create-new-app`, `/apps/growth/rewards`. +3. **Legacy URLs**: `/mini-apps/...` → `/apps/...` via redirects; hidden pages may still contain `/mini-apps/` in **source** links (unchanged); those URLs redirect when hit. diff --git a/docs/docs.json b/docs/docs.json index 803c49cdd..d15a69403 100644 --- a/docs/docs.json +++ b/docs/docs.json @@ -567,25 +567,25 @@ ] }, { - "tab": "Mini Apps", + "tab": "Apps", "groups": [ { "group": "Quickstart", "pages": [ - "mini-apps/quickstart/migrate-to-standard-web-app", + "apps/quickstart/migrate-to-standard-web-app", "get-started/build-app" ] }, { "group": "Growth", "pages": [ - "mini-apps/growth/rewards" + "apps/growth/rewards" ] }, { "group": "Notifications", "pages": [ - "mini-apps/technical-guides/base-notifications" + "apps/technical-guides/base-notifications" ] } ] @@ -712,31 +712,27 @@ }, { "source": "/mini-apps/core-concepts/*", - "destination": "/mini-apps/quickstart/migrate-to-standard-web-app" + "destination": "/apps/quickstart/migrate-to-standard-web-app" }, { "source": "/mini-apps/resources/*", - "destination": "/mini-apps/quickstart/migrate-to-standard-web-app" + "destination": "/apps/quickstart/migrate-to-standard-web-app" }, { "source": "/mini-apps/featured-guidelines/*", - "destination": "/mini-apps/quickstart/migrate-to-standard-web-app" + "destination": "/apps/quickstart/migrate-to-standard-web-app" }, { "source": "/mini-apps/troubleshooting/*", - "destination": "/mini-apps/quickstart/migrate-to-standard-web-app" + "destination": "/apps/quickstart/migrate-to-standard-web-app" }, { "source": "/mini-apps/introduction/*", - "destination": "/mini-apps/quickstart/migrate-to-standard-web-app" - }, - { - "source": "/mini-apps/growth/build-viral-mini-apps", - "destination": "/mini-apps/quickstart/migrate-to-standard-web-app" + "destination": "/apps/quickstart/migrate-to-standard-web-app" }, { "source": "/mini-apps/growth/optimize-onboarding", - "destination": "/mini-apps/quickstart/migrate-to-standard-web-app" + "destination": "/apps/quickstart/migrate-to-standard-web-app" }, { "source": "/mini-apps/technical-guides/dynamic-embeds", @@ -912,51 +908,51 @@ }, { "source": "/onchainkit/latest/components/minikit/overview", - "destination": "/mini-apps/introduction/overview" + "destination": "/apps/introduction/overview" }, { "source": "/onchainkit/latest/components/minikit/provider-and-initialization", - "destination": "/mini-apps/introduction/overview" + "destination": "/apps/introduction/overview" }, { "source": "/onchainkit/latest/components/minikit/hooks/useMiniKit", - "destination": "/mini-apps/introduction/overview" + "destination": "/apps/introduction/overview" }, { "source": "/onchainkit/latest/components/minikit/hooks/useOpenUrl", - "destination": "/mini-apps/introduction/overview" + "destination": "/apps/introduction/overview" }, { "source": "/onchainkit/latest/components/minikit/hooks/useClose", - "destination": "/mini-apps/introduction/overview" + "destination": "/apps/introduction/overview" }, { "source": "/onchainkit/latest/components/minikit/hooks/usePrimaryButton", - "destination": "/mini-apps/introduction/overview" + "destination": "/apps/introduction/overview" }, { "source": "/onchainkit/latest/components/minikit/hooks/useViewProfile", - "destination": "/mini-apps/introduction/overview" + "destination": "/apps/introduction/overview" }, { "source": "/onchainkit/latest/components/minikit/hooks/useComposeCast", - "destination": "/mini-apps/introduction/overview" + "destination": "/apps/introduction/overview" }, { "source": "/onchainkit/latest/components/minikit/hooks/useViewCast", - "destination": "/mini-apps/introduction/overview" + "destination": "/apps/introduction/overview" }, { "source": "/onchainkit/latest/components/minikit/hooks/useAuthenticate", - "destination": "/mini-apps/introduction/overview" + "destination": "/apps/introduction/overview" }, { "source": "/onchainkit/latest/components/minikit/hooks/useAddFrame", - "destination": "/mini-apps/introduction/overview" + "destination": "/apps/introduction/overview" }, { "source": "/onchainkit/latest/components/minikit/hooks/useNotification", - "destination": "/mini-apps/introduction/overview" + "destination": "/apps/introduction/overview" }, { "source": "/onchainkit/identity/identity", @@ -1108,15 +1104,15 @@ }, { "source": "/onchainkit/checkout/checkout", - "destination": "/mini-apps/technical-guides/accept-payments" + "destination": "/apps/technical-guides/accept-payments" }, { "source": "/onchainkit/checkout/types", - "destination": "/mini-apps/technical-guides/accept-payments" + "destination": "/apps/technical-guides/accept-payments" }, { "source": "/onchainkit/latest/components/checkout/checkout", - "destination": "/mini-apps/technical-guides/accept-payments" + "destination": "/apps/technical-guides/accept-payments" }, { "source": "/onchainkit/wallet/wallet", @@ -1600,55 +1596,55 @@ }, { "source": "/base-app/agents/chat-agents", - "destination": "/mini-apps/technical-guides/building-chat-agents" + "destination": "/apps/technical-guides/building-chat-agents" }, { "source": "/base-app/agents/getting-started", - "destination": "/mini-apps/technical-guides/building-chat-agents#getting-started" + "destination": "/apps/technical-guides/building-chat-agents#getting-started" }, { "source": "/base-app/agents/building-quality-agents", - "destination": "/mini-apps/technical-guides/building-chat-agents#best-practices" + "destination": "/apps/technical-guides/building-chat-agents#best-practices" }, { "source": "/base-app/agents/getting-featured", - "destination": "/mini-apps/technical-guides/building-chat-agents#best-practices" + "destination": "/apps/technical-guides/building-chat-agents#best-practices" }, { "source": "/base-app/agents/quick-actions", - "destination": "/mini-apps/technical-guides/building-chat-agents#quick-actions" + "destination": "/apps/technical-guides/building-chat-agents#quick-actions" }, { "source": "/base-app/agents/transaction-trays", - "destination": "/mini-apps/technical-guides/building-chat-agents#transaction-trays" + "destination": "/apps/technical-guides/building-chat-agents#transaction-trays" }, { "source": "/base-app/agents/deeplinks", - "destination": "/mini-apps/technical-guides/building-chat-agents#deeplinks" + "destination": "/apps/technical-guides/building-chat-agents#deeplinks" }, { "source": "/base-app/agents/x402-agents", - "destination": "/mini-apps/technical-guides/building-chat-agents#payment-agents-x402" + "destination": "/apps/technical-guides/building-chat-agents#payment-agents-x402" }, { "source": "/base-app/agents/mini-apps-and-agents", - "destination": "/mini-apps/technical-guides/building-chat-agents#mini-app-integration" + "destination": "/apps/technical-guides/building-chat-agents#app-integration" }, { "source": "/mini-apps/technical-guides/search-discovery", - "destination": "/mini-apps/troubleshooting/how-search-works" + "destination": "/apps/troubleshooting/how-search-works" }, { "source": "/mini-apps/overview", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/mini-apps/features/wallet", - "destination": "/mini-apps/core-concepts/base-account" + "destination": "/apps/core-concepts/base-account" }, { "source": "/mini-apps/growth/data-driven-growth", - "destination": "/mini-apps/technical-guides/data-driven-growth" + "destination": "https://base.dev" }, { "source": "/mini-apps/technical-guides/data-driven-growth", @@ -1656,43 +1652,43 @@ }, { "source": "/mini-apps/features/links", - "destination": "/mini-apps/technical-guides/links" + "destination": "/apps/core-concepts/navigation" }, { "source": "/mini-apps/technical-guides/links", - "destination": "/mini-apps/core-concepts/navigation" + "destination": "/apps/core-concepts/navigation" }, { "source": "/mini-apps/features/search-and-discovery", - "destination": "/mini-apps/troubleshooting/how-search-works" + "destination": "/apps/troubleshooting/how-search-works" }, { "source": "/mini-apps/features/sharing-and-social-graph", - "destination": "/mini-apps/technical-guides/sharing-and-social-graph" + "destination": "/apps/technical-guides/sharing-and-social-graph" }, { "source": "/mini-apps/features/sign-manifest", - "destination": "/mini-apps/technical-guides/sign-manifest" + "destination": "/apps/technical-guides/sign-manifest" }, { "source": "/mini-apps/features/manifest", - "destination": "/mini-apps/core-concepts/manifest" + "destination": "/apps/core-concepts/manifest" }, { "source": "/mini-apps/features/authentication", - "destination": "/mini-apps/core-concepts/authentication" + "destination": "/apps/core-concepts/authentication" }, { "source": "/mini-apps/features/context", - "destination": "/mini-apps/core-concepts/context" + "destination": "/apps/core-concepts/context" }, { "source": "/mini-apps/features/notifications", - "destination": "/mini-apps/core-concepts/notifications" + "destination": "/apps/core-concepts/notifications" }, { "source": "/mini-apps/features/embeds-and-previews", - "destination": "/mini-apps/core-concepts/embeds-and-previews" + "destination": "/apps/core-concepts/embeds-and-previews" }, { "source": "/privacy-policy-2025", @@ -2004,27 +2000,27 @@ }, { "source": "/cookbook/growth/cast-actions", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/growth/deploy-to-vercel", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/growth/email-campaigns", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/growth/gating-and-redirects", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/growth/hyperframes", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/growth/retaining-users", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/payments/build-ecommerce-app", @@ -2036,19 +2032,19 @@ }, { "source": "/cookbook/social/convert-farcaster-frame", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/social/farcaster-nft-minting-guide", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/social/farcaster-no-code-nft-minting", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/use-case-guides/cast-actions", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/use-case-guides/commerce/build-an-ecommerce-app", @@ -2056,35 +2052,35 @@ }, { "source": "/cookbook/use-case-guides/create-email-campaigns", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/use-case-guides/creator/convert-farcaster-frame-to-open-frame", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/use-case-guides/deploy-to-vercel", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/use-case-guides/gating-and-redirects", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/use-case-guides/hyperframes", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/use-case-guides/nft-minting", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/use-case-guides/no-code-minting", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/use-case-guides/retaining-users", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/use-case-guides/transactions", @@ -2488,7 +2484,7 @@ }, { "source": "/use-cases/decentralize-social-app", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/use-cases/defi-your-app", @@ -2516,7 +2512,7 @@ }, { "source": "/wallet-app/mini-apps", - "destination": "/base-app/introduction/mini-apps" + "destination": "/get-started/build-app" }, { "source": "/wallet-app/chat-agents", @@ -2536,11 +2532,11 @@ }, { "source": "/base-app/introduction/what-are-mini-apps", - "destination": "/mini-apps/overview" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/base-app/introduction/why-mini-apps", - "destination": "/mini-apps/overview" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/base-app/miniapps/overview", @@ -2552,119 +2548,119 @@ }, { "source": "/base-app/miniapps/existing-app-integration", - "destination": "/mini-apps/quickstart/migrate-to-standard-web-app" + "destination": "/apps/quickstart/migrate-to-standard-web-app" }, { "source": "/base-app/build-with-minikit/existing-app-integration", - "destination": "/mini-apps/quickstart/migrate-to-standard-web-app" + "destination": "/apps/quickstart/migrate-to-standard-web-app" }, { "source": "/base-app/miniapps/quickstart", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/base-app/build-with-minikit/quickstart", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/mini-apps/quickstart/existing-apps/:slug*", - "destination": "/mini-apps/quickstart/migrate-to-standard-web-app" + "destination": "/apps/quickstart/migrate-to-standard-web-app" }, { "source": "/mini-apps/quickstart/migrate-existing-apps", - "destination": "/mini-apps/quickstart/migrate-to-standard-web-app" + "destination": "/apps/quickstart/migrate-to-standard-web-app" }, { "source": "/mini-apps/quickstart/new-apps/:slug*", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/base-app/miniapps/mini-apps", - "destination": "/mini-apps/overview" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/base-app/build-with-minikit/mini-apps", - "destination": "/mini-apps/overview" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/base-app/miniapps/search-and-discovery", - "destination": "/mini-apps/troubleshooting/how-search-works" + "destination": "/apps/troubleshooting/how-search-works" }, { "source": "/base-app/build-with-minikit/search-and-discovery", - "destination": "/mini-apps/troubleshooting/how-search-works" + "destination": "/apps/troubleshooting/how-search-works" }, { "source": "/base-app/miniapps/sharing-your-miniapp", - "destination": "/mini-apps/technical-guides/sharing-and-social-graph" + "destination": "/apps/technical-guides/sharing-and-social-graph" }, { "source": "/base-app/build-with-minikit/sharing-your-miniapp", - "destination": "/mini-apps/technical-guides/sharing-and-social-graph" + "destination": "/apps/technical-guides/sharing-and-social-graph" }, { "source": "/base-app/miniapps/how-manifest-work", - "destination": "/mini-apps/features/manifest" + "destination": "/apps/core-concepts/manifest" }, { "source": "/base-app/build-with-minikit/how-manifest-work", - "destination": "/mini-apps/features/manifest" + "destination": "/apps/core-concepts/manifest" }, { "source": "/base-app/miniapps/thinking-social", - "destination": "/mini-apps/growth/build-viral-mini-apps" + "destination": "/apps/growth/build-viral-apps" }, { "source": "/base-app/build-with-minikit/thinking-social", - "destination": "/mini-apps/growth/build-viral-mini-apps" + "destination": "/apps/growth/build-viral-apps" }, { "source": "/base-app/miniapps/debugging", - "destination": "/mini-apps/troubleshooting/common-issues" + "destination": "/apps/troubleshooting/common-issues" }, { "source": "/base-app/build-with-minikit/debugging", - "destination": "/mini-apps/troubleshooting/common-issues" + "destination": "/apps/troubleshooting/common-issues" }, { "source": "/mini-apps/design-ux/best-practices", - "destination": "/mini-apps/featured-guidelines/design-guidelines" + "destination": "/apps/featured-guidelines/design-guidelines" }, { "source": "/mini-apps/design-ux/design-patterns", - "destination": "/mini-apps/featured-guidelines/design-guidelines" + "destination": "/apps/featured-guidelines/design-guidelines" }, { "source": "/mini-apps/design-ux/onchainkit", - "destination": "/mini-apps/featured-guidelines/design-guidelines" + "destination": "/apps/featured-guidelines/design-guidelines" }, { "source": "/mini-apps/quickstart/new-apps/features", - "destination": "/mini-apps/features/overview" + "destination": "/apps/featured-guidelines/overview" }, { "source": "/mini-apps/quickstart/new-apps/install", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/mini-apps/quickstart/new-apps/deploy", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/mini-apps/quickstart/new-apps/create-manifest", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/mini-apps/design-ux/:slug*", - "destination": "/mini-apps/featured-guidelines/design-guidelines" + "destination": "/apps/featured-guidelines/design-guidelines" }, { "source": "/mini-apps/get-featured/requirements", - "destination": "/mini-apps/featured-guidelines/overview" + "destination": "/apps/featured-guidelines/overview" }, { "source": "/mini-apps/quickstart/launch-checklist", - "destination": "/mini-apps/quickstart/build-checklist" + "destination": "/apps/quickstart/build-checklist" }, { "source": "/mini-apps/technical-reference/minikit/overview", @@ -2748,7 +2744,7 @@ }, { "source": "/cookbook/onchain-social", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/defi-your-app", @@ -2760,7 +2756,7 @@ }, { "source": "/cookbook/base-app-coins", - "destination": "/mini-apps/introduction/overview" + "destination": "/apps/introduction/overview" }, { "source": "/cookbook/testing-onchain-apps", @@ -2776,11 +2772,11 @@ }, { "source": "/cookbook/introduction-to-mini-apps", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/ai-powered-development-fundamentals", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/mastering-ai-prompt-engineering", @@ -2788,7 +2784,7 @@ }, { "source": "/cookbook/essential-documentation-resources", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/ai-assisted-documentation-reading", @@ -2796,51 +2792,51 @@ }, { "source": "/cookbook/successful-miniapps-in-tba", - "destination": "/mini-apps/featured-guidelines/overview" + "destination": "/apps/featured-guidelines/overview" }, { "source": "/cookbook/minikit/build-your-mini-app-with-prompt", - "destination": "/mini-apps/quickstart/create-new-miniapp" + "destination": "/apps/quickstart/create-new-app" }, { "source": "/cookbook/converting-customizing-mini-apps", - "destination": "/mini-apps/quickstart/migrate-to-standard-web-app" + "destination": "/apps/quickstart/migrate-to-standard-web-app" }, { "source": "/cookbook/minikit/fork-and-customize", - "destination": "/mini-apps/quickstart/migrate-to-standard-web-app" + "destination": "/apps/quickstart/migrate-to-standard-web-app" }, { "source": "/cookbook/minikit/install", - "destination": "/mini-apps/quickstart/migrate-to-standard-web-app" + "destination": "/apps/quickstart/migrate-to-standard-web-app" }, { "source": "/cookbook/minikit/add-minikit", - "destination": "/mini-apps/quickstart/migrate-to-standard-web-app" + "destination": "/apps/quickstart/migrate-to-standard-web-app" }, { "source": "/cookbook/minikit/configure-environment", - "destination": "/mini-apps/quickstart/migrate-to-standard-web-app" + "destination": "/apps/quickstart/migrate-to-standard-web-app" }, { "source": "/cookbook/minikit/manifest-cli", - "destination": "/mini-apps/technical-guides/sign-manifest" + "destination": "/apps/technical-guides/sign-manifest" }, { "source": "/cookbook/minikit/create-manifest", - "destination": "/mini-apps/core-concepts/manifest" + "destination": "/apps/core-concepts/manifest" }, { "source": "/cookbook/minikit/add-frame-metadata", - "destination": "/mini-apps/core-concepts/manifest" + "destination": "/apps/core-concepts/manifest" }, { "source": "/cookbook/minikit/test-and-deploy", - "destination": "/mini-apps/quickstart/build-checklist" + "destination": "/apps/quickstart/build-checklist" }, { "source": "/mini-apps/mini-apps/quickstart/migrate-to-standard-web-app", - "destination": "/mini-apps/quickstart/migrate-to-standard-web-app" + "destination": "/apps/quickstart/migrate-to-standard-web-app" }, { "source": "/ai-agents/core-concepts/agent-frameworks", @@ -2901,6 +2897,18 @@ { "source": "/ai-agents/guides/identity-siwa", "destination": "/ai-agents/setup/agent-registration" + }, + { + "source": "/mini-apps/quickstart/create-new-miniapp", + "destination": "/apps/quickstart/create-new-app" + }, + { + "source": "/mini-apps/growth/build-viral-mini-apps", + "destination": "/apps/growth/build-viral-apps" + }, + { + "source": "/mini-apps/:slug*", + "destination": "/apps/:slug*" } ], "integrations": { diff --git a/docs/get-started/learning-resources.mdx b/docs/get-started/learning-resources.mdx index c621dad89..e2d014f01 100644 --- a/docs/get-started/learning-resources.mdx +++ b/docs/get-started/learning-resources.mdx @@ -18,6 +18,6 @@ We will be adding more learning resources to help you build on Base. Stay tuned - New educational content In the meantime, check out the following resources: -- [Base Account](/base-account/overview/what-is-base-account), [Mini Apps](/mini-apps/quickstart/create-new-miniapp), and [Base Chain](/base-chain/quickstart/why-base) for building on Base. +- [Base Account](/base-account/overview/what-is-base-account), [Apps](/apps/quickstart/create-new-app), and [Base Chain](/base-chain/quickstart/why-base) for building on Base. - [CryptoZombies](https://cryptozombies.io/) and [Solidity by Example](https://solidity-by-example.org/) for learning Solidity. - [Base Prompt Library](/get-started/prompt-library) for building with AI. \ No newline at end of file diff --git a/docs/llms-full.txt b/docs/llms-full.txt index 50e19ea69..177cb2354 100644 --- a/docs/llms-full.txt +++ b/docs/llms-full.txt @@ -6,7 +6,7 @@ ## How the docs are organized - Products have two files each: `/<product>/llms.txt` (index) and `/<product>/llms-full.txt` (expanded) -- Main sections: Get Started, Base Chain, Base Account, AI Agents, Mini Apps +- Main sections: Get Started, Base Chain, Base Account, AI Agents, Apps ## Cross-site concepts @@ -23,7 +23,7 @@ Sources: - `https://docs.base.org/base-account/guides/authenticate-users.md` - `https://docs.base.org/base-account/guides/verify-social-accounts.md` -> Auth patterns vary by product. Use SIWE (ERC‑6492 compatible) for user sign-in where smart wallets may not yet exist. In Mini Apps, defer auth until needed; prefer scoped, revocable permissions and transaction trays for intent. Supply API keys via environment variables, rotate regularly, and verify server-side signatures or webhooks. Never store user passkeys or raw private keys server-side. +> Auth patterns vary by product. Use SIWE (ERC‑6492 compatible) for user sign-in where smart wallets may not yet exist. In Apps, defer auth until needed; prefer scoped, revocable permissions and transaction trays for intent. Supply API keys via environment variables, rotate regularly, and verify server-side signatures or webhooks. Never store user passkeys or raw private keys server-side. ### Identity verification and Sybil resistance Sources: @@ -78,7 +78,7 @@ const client = createPublicClient({ chain: base, transport: http() }) - Base Account — `./base-account/llms-full.txt` - AI Agents — `./ai-agents/llms-full.txt` - Base Chain — `./base-chain/llms-full.txt` -- Mini Apps — `./mini-apps/llms-full.txt` +- Apps — `./apps/llms-full.txt` ## Related indexes - Root index: `./llms.txt` diff --git a/docs/llms.txt b/docs/llms.txt index 0c06b7a14..23f90b7c0 100644 --- a/docs/llms.txt +++ b/docs/llms.txt @@ -8,7 +8,7 @@ - [Base Chain](./base-chain/llms.txt) — Deploy/connect, network info, tools, node ops, security - [Base Account](./base-account/llms.txt) — Passkey smart wallet, payments, social verification, spend permissions, sponsored gas, sub‑accounts - [AI Agents](./ai-agents/llms.txt) — Build onchain AI agents: wallets, payments, identity, trading, and installable skills -- [Mini Apps](./mini-apps/llms.txt) — Migrate to standard web apps on Base, register on Base.dev, earn rewards +- [Apps](./apps/llms.txt) — Migrate to standard web apps on Base, register on Base.dev, earn rewards ## Tools available for AI assistants @@ -94,8 +94,8 @@ Base is an Ethereum L2 by Coinbase. Docs for: Base Chain, Smart Wallet, OnchainK |base-chain/quickstart:base-solana-bridge,connecting-to-base,deploy-on-base,why-base |base-chain/security:avoid-malicious-flags,bug-bounty,report-vulnerability,security-council |get-started:base-mentorship-program,base-services-hub,base,block-explorers,build-app,concepts,country-leads-and-ambassadors,data-indexers,deploy-smart-contracts,docs-llms,docs-mcp,get-funded,launch-token,learning-resources,prompt-library,resources-for-ai-agents -|mini-apps/quickstart:migrate-to-standard-web-app -|mini-apps/growth:rewards +|apps/quickstart:migrate-to-standard-web-app +|apps/growth:rewards |onchainkit:migrate-from-onchainkit |root:agents,cookie-policy,privacy-policy,terms-of-service,tone_of_voice ``` diff --git a/scripts/generate-agents-md.js b/scripts/generate-agents-md.js index 4b7ec0464..3e5b9c9a2 100755 --- a/scripts/generate-agents-md.js +++ b/scripts/generate-agents-md.js @@ -40,10 +40,10 @@ function loadMintIgnore(mintignorePath) { if (!trimmed || trimmed.startsWith('#')) continue; if (trimmed.endsWith('/*')) { - // /mini-apps/core-concepts/* → skip all files in that dir + // /apps/core-concepts/* → skip all files in that dir ignored.dirs.add(trimmed.slice(1, -2)); } else if (trimmed.startsWith('/')) { - // /mini-apps/growth/build-viral-mini-apps → skip specific file + // /apps/growth/build-viral-apps → skip specific file ignored.files.add(trimmed.slice(1)); } else { // writing.md → skip by bare filename anywhere