diff --git a/build-on-celo/build-on-minipay/code-library.mdx b/build-on-celo/build-on-minipay/code-library.mdx
deleted file mode 100644
index ffc595ab89..0000000000
--- a/build-on-celo/build-on-minipay/code-library.mdx
+++ /dev/null
@@ -1,412 +0,0 @@
----
-title: MiniPay Code Library
-description: Snippets of code that can be used to implement flows inside MiniPay
-sidebarTitle: "Code Library"
----
-
-
- Make sure you are using Typescript v5 or above and Viem v2 or above.
-
-
-## Get the connected user's address without any Library
-
-```js
-// The code must run in a browser environment and not in node environment
-if (window && window.ethereum) {
- // User has a injected wallet
-
- if (window.ethereum.isMiniPay) {
- // User is using Minipay
-
- // Requesting account addresses
- let accounts = await window.ethereum.request({
- method: "eth_requestAccounts",
- params: [],
- });
-
- // Injected wallets inject all available addresses,
- // to comply with API Minipay injects one address but in the form of array
- console.log(accounts[0]);
- }
-
- // User is not using MiniPay
-}
-
-// User does not have a injected wallet
-```
-
-To use the code snippets below, install the following packages:
-
-{/* prettier-ignore-start */}
-
-
- ```bash yarn
- yarn add @celo/abis @celo/identity viem@2
- ```
-
-
- ```bash npm
- npm install @celo/abis @celo/identity viem@2
- ```
-
-
-
-## Check USDm Balance of an address
-
-```js
-import { getContract, formatEther, createPublicClient, http } from "viem";
-import { celo } from "viem/chains";
-import { stableTokenABI } from "@celo/abis";
-
-// USDm address on Celo mainnet
-const STABLE_TOKEN_ADDRESS = "0x765DE816845861e75A25fCA122bb6898B8B1282a";
-
-async function checkUSDmBalance(publicClient, address) {
- const StableTokenContract = getContract({
- abi: stableTokenABI,
- address: STABLE_TOKEN_ADDRESS,
- client: publicClient,
- });
-
- const balanceInBigNumber = await StableTokenContract.read.balanceOf([
- address,
- ]);
-
- const balanceInWei = balanceInBigNumber.toString();
- const balanceInEthers = formatEther(balanceInWei);
-
- return balanceInEthers;
-}
-
-const publicClient = createPublicClient({
- chain: celo,
- transport: http(),
-}); // Mainnet
-
-const balance = await checkUSDmBalance(publicClient, address); // In Ether unit
-```
-
-
-
-## Check If a transaction succeeded
-
-```js
-import { createPublicClient, http } from "viem";
-import { celo } from "viem/chains";
-
-async function checkIfTransactionSucceeded(publicClient, transactionHash) {
- const receipt = await publicClient.getTransactionReceipt({
- hash: transactionHash,
- });
-
- return receipt.status === "success";
-}
-
-const publicClient = createPublicClient({
- chain: celo,
- transport: http(),
-}); // Mainnet
-
-const transactionStatus = await checkIfTransactionSucceeded(
- publicClient,
- transactionHash
-);
-```
-
-
-## Estimate Gas for a transaction (in Celo)
-
-```js
-import { createPublicClient, http } from "viem";
-import { celo } from "viem/chains";
-
-async function estimateGas(publicClient, transaction, feeCurrency = "") {
- return await publicClient.estimateGas({
- ...transaction,
- feeCurrency: feeCurrency ? feeCurrency : "",
- });
-}
-
-const publicClient = createPublicClient({
- chain: celo,
- transport: http(),
-});
-
-const gasLimit = await estimateGas(publicClient, {
- account: "0x8eb02597d85abc268bc4769e06a0d4cc603ab05f",
- to: "0x4f93fa058b03953c851efaa2e4fc5c34afdfab84",
- value: "0x1",
- data: "0x",
-});
-```
-
-
-
-
-
-## Estimate Gas for a transaction (in USDm)
-
-```js
-import { createPublicClient, http } from "viem";
-import { celo } from "viem/chains";
-
-async function estimateGas(publicClient, transaction, feeCurrency = "") {
- return await publicClient.estimateGas({
- ...transaction,
- feeCurrency: feeCurrency ? feeCurrency : "",
- });
-}
-
-const publicClient = createPublicClient({
- chain: celo,
- transport: http(),
-});
-
-const STABLE_TOKEN_ADDRESS = "0x765DE816845861e75A25fCA122bb6898B8B1282a";
-
-const gasLimit = await estimateGas(
- publicClient,
- {
- account: "0x8eb02597d85abc268bc4769e06a0d4cc603ab05f",
- to: "0x4f93fa058b03953c851efaa2e4fc5c34afdfab84",
- value: "0x1",
- data: "0x",
- },
- STABLE_TOKEN_ADDRESS
-);
-```
-
-
-
-## Estimate Gas Price for a transaction (in Celo)
-
-```js
-import { createPublicClient, http } from "viem";
-import { celo } from "viem/chains";
-
-async function estimateGasPrice(publicClient, feeCurrency = "") {
- return await publicClient.request({
- method: "eth_gasPrice",
- params: feeCurrency ? [feeCurrency] : [],
- });
-}
-
-const publicClient = createPublicClient({
- chain: celo,
- transport: http(),
-});
-
-const gasPrice = await estimateGasPrice(publicClient);
-```
-
-## Estimate Gas Price for a transaction (in USDm)
-
-```js
-import { createPublicClient, http } from "viem";
-import { celo } from "viem/chains";
-
-async function estimateGasPrice(publicClient, feeCurrency = "") {
- return await publicClient.request({
- method: "eth_gasPrice",
- params: feeCurrency ? [feeCurrency] : [],
- });
-}
-
-const publicClient = createPublicClient({
- chain: celo,
- transport: http(),
-});
-
-const STABLE_TOKEN_ADDRESS = "0x765DE816845861e75A25fCA122bb6898B8B1282a";
-
-const gasPrice = await estimateGasPrice(publicClient, STABLE_TOKEN_ADDRESS);
-```
-
-
-## Calculate USDm to be spent for transaction fees
-
-```js
-import { createPublicClient, http, formatEther, fromHex } from "viem";
-import { celo } from "viem/chains";
-
-const publicClient = createPublicClient({
- chain: celo,
- transport: http(),
-});
-
-const STABLE_TOKEN_ADDRESS = "0x765DE816845861e75A25fCA122bb6898B8B1282a";
-
-// `estimateGas` implemented above
-const gasLimit = await estimateGas(
- publicClient,
- {
- account: "0x8eb02597d85abc268bc4769e06a0d4cc603ab05f",
- to: "0x4f93fa058b03953c851efaa2e4fc5c34afdfab84",
- value: "0x1",
- data: "0x",
- },
- STABLE_TOKEN_ADDRESS
-);
-
-// `estimateGasPrice` implemented above
-const gasPrice = await estimateGasPrice(publicClient, STABLE_TOKEN_ADDRESS);
-
-// Convert hex gas price to BigInt and calculate fees
-const gasPriceBigInt = fromHex(gasPrice, "bigint");
-const transactionFeesInUSDm = formatEther(gasLimit * gasPriceBigInt);
-```
-
-
-
-## Resolve Minipay phone numbers to Addresses
-
-Install the `@celo/identity` package:
-
-```bash
-npm install @celo/identity
-```
-
-### Step 1: Set up your issuer
-
-The issuer is the account registering attestations. When a user requests attestation registration, verify they own the identifier (e.g., SMS verification for phone numbers).
-
-```js
-import { createWalletClient, http } from "viem";
-import { celoSepolia } from "viem/chains";
-import { privateKeyToAccount } from "viem/accounts";
-
-// The issuer is the account that is registering the attestation
-const ISSUER_PRIVATE_KEY = "YOUR_ISSUER_PRIVATE_KEY";
-
-// Create Celo Sepolia viem client with the issuer private key
-const viemClient = createWalletClient({
- account: privateKeyToAccount(ISSUER_PRIVATE_KEY),
- transport: http(),
- chain: celoSepolia,
-});
-
-// Information provided by user, issuer should confirm they own the identifier
-const userPlaintextIdentifier = "+12345678910";
-const userAccountAddress = "0x000000000000000000000000000000000000user";
-
-// Time at which issuer verified the user owns their identifier
-const attestationVerifiedTime = Date.now();
-```
-
-### Step 2: Check and top up ODIS quota
-
-```js
-import { OdisUtils } from "@celo/identity";
-import { AuthSigner } from "@celo/identity/lib/odis/query";
-import { OdisContextName } from "@celo/identity/lib/odis/query";
-
-// authSigner provides information needed to authenticate with ODIS
-const authSigner: AuthSigner = {
- authenticationMethod: OdisUtils.Query.AuthenticationMethod.WALLET_KEY,
- sign191: ({ message, account }) => viemClient.signMessage({ message, account }),
-};
-
-// serviceContext provides the ODIS endpoint and public key
-const serviceContext = OdisUtils.Query.getServiceContext(
- OdisContextName.CELO_SEPOLIA
-);
-
-// Check existing quota on issuer account
-const issuerAddress = viemClient.account.address;
-const { remainingQuota } = await OdisUtils.Quota.getPnpQuotaStatus(
- issuerAddress,
- authSigner,
- serviceContext
-);
-
-// If needed, approve and send payment to OdisPayments to get quota for ODIS
-// Note: This example uses viem. For contract interactions, use getContract from viem
-if (remainingQuota < 1) {
- // Use viem's getContract to interact with stable token and ODIS payments contracts
- // Implementation depends on your specific contract setup
-}
-```
-
-### Step 3: Derive the obfuscated identifier
-
-Get the obfuscated identifier from the plaintext identifier by querying ODIS:
-
-```js
-const { obfuscatedIdentifier } = await OdisUtils.Identifier.getObfuscatedIdentifier(
- userPlaintextIdentifier,
- OdisUtils.Identifier.IdentifierPrefix.PHONE_NUMBER,
- issuerAddress,
- authSigner,
- serviceContext
-);
-```
-
-### Step 4: Look up account addresses
-
-Query the FederatedAttestations contract to look up account addresses owned by an identifier:
-
-```js
-const attestations = await federatedAttestationsContract.lookupAttestations(
- obfuscatedIdentifier,
- [issuerAddress] // Trusted issuers
-);
-
-console.log(attestations.accounts);
-```
-
-## Request an ERC20 token transfer
-
-
- USDT and USDC on Celo use **6 decimals**, not 18. Pass `tokenDecimals` as `6` when
- transferring either token. Using `18` will send 1,000,000,000,000× more than intended.
- USDm uses 18 decimals.
-
-
-```js
-import { createWalletClient, createPublicClient, custom, http, encodeFunctionData, parseUnits } from "viem";
-import { celo, celoSepolia } from "viem/chains";
-import { stableTokenABI } from "@celo/abis";
-
-const walletClient = createWalletClient({
- chain: celoSepolia, // For testnet
- // chain: celo, // For mainnet
- transport: custom(window.ethereum!),
-});
-
-const publicClient = createPublicClient({
- chain: celoSepolia, // For testnet
- // chain: celo, // For mainnet
- transport: http(),
-});
-
-async function requestTransfer(tokenAddress, transferValue, tokenDecimals, receiverAddress) {
- const hash = await walletClient.sendTransaction({
- to: tokenAddress,
- // Mainnet token addresses and their decimals:
- // USDm: '0x765DE816845861e75A25fCA122bb6898B8B1282a' (18 decimals)
- // USDC: '0xcebA9300f2b948710d2653dD7B07f33A8B32118C' (6 decimals)
- // USDT: '0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e' (6 decimals)
- data: encodeFunctionData({
- abi: stableTokenABI, // Token ABI from @celo/abis
- functionName: "transfer",
- args: [
- receiverAddress,
- // USDm uses 18 decimals; USDC and USDT use 6 decimals
- parseUnits(`${Number(transferValue)}`, tokenDecimals),
- ],
- }),
- });
-
- const transaction = await publicClient.waitForTransactionReceipt({
- hash, // Transaction hash that can be used to search transaction on the explorer.
- });
-
- if (transaction.status === "success") {
- // Do something after transaction is successful.
- } else {
- // Do something after transaction has failed.
- }
-}
-```
-
-{/* prettier-ignore-end */}
diff --git a/build-on-celo/build-on-minipay/deeplinks.mdx b/build-on-celo/build-on-minipay/deeplinks.mdx
deleted file mode 100644
index 67f3150d1c..0000000000
--- a/build-on-celo/build-on-minipay/deeplinks.mdx
+++ /dev/null
@@ -1,35 +0,0 @@
----
-title: MiniPay Deeplinks
-description: Special links that open a relevant MiniPay screen based on intent
----
-
-Deeplinks let your Mini App interact with MiniPay's native features without manual navigation. They use the host `link.minipay.xyz` and can be triggered from external apps or from within MiniPay itself.
-
-
- The user must have MiniPay installed and be logged in. Users without the app
- are shown an install prompt.
-
-
-## Available deeplinks
-
-| Action | Deeplink | Description |
-| --- | --- | --- |
-| Add cash | `https://link.minipay.xyz/add_cash` | Launches the add cash flow. Optionally scope the tokens with `?tokens=USDM,USDT` (supported: `USDM`, `USDT`, `USDC`). |
-| Open Mini App | `https://link.minipay.xyz/browse?url=xxx` | Opens an approved Mini App at the given URL. |
-| Discover tab | `https://link.minipay.xyz/discover` | Opens the Mini Apps discovery page. |
-| Transaction receipt | `https://link.minipay.xyz/receipt?tx=xxx` | Shows the receipt for a transaction hash. Append `&celebrate` for a celebration animation. |
-| QR code | `https://link.minipay.xyz/qr` | Shows the user's QR code. |
-| Invite friends | `https://link.minipay.xyz/invite_friends` | Opens the invite friends screen. |
-| Pockets | `https://link.minipay.xyz/balance` | Opens the balance (pockets) view. |
-
-## Trigger the add cash screen
-
-To trigger or redirect a MiniPay user to the add cash screen inside MiniPay, use the following link:
-
-[https://link.minipay.xyz/add_cash](https://link.minipay.xyz/add_cash)
-
-To pre-select which tokens the user can add, pass the `tokens` query parameter, for example [https://link.minipay.xyz/add_cash?tokens=USDM,USDT](https://link.minipay.xyz/add_cash?tokens=USDM,USDT).
-
-
-
-
diff --git a/build-on-celo/build-on-minipay/overview.mdx b/build-on-celo/build-on-minipay/overview.mdx
index 17d828d7e6..58804f6357 100644
--- a/build-on-celo/build-on-minipay/overview.mdx
+++ b/build-on-celo/build-on-minipay/overview.mdx
@@ -1,34 +1,221 @@
---
-title: Build on MiniPay
-description: A guide for building on MiniPay and Celo.
-sidebarTitle: "Overview"
+title: Build for MiniPay
+sidebarTitle: "MiniPay"
+description: What is Celo-specific about building a MiniPay Mini App — stablecoins, gas paid in stablecoins, detecting MiniPay, phone-number lookup — plus the index of the MiniPay developer docs for everything else
---
-## Create a Mini App for the MiniPay Stablecoin Wallet
+This page is for developers building a Mini App for [MiniPay](https://www.opera.com/products/minipay), the stablecoin wallet from Opera. It covers only what is specific to Celo. The build, test and submit lifecycle is documented by the MiniPay team at [docs.minipay.xyz](https://docs.minipay.xyz/); the index at the end of this page lists every page there so you — or your coding agent — can see what is available without leaving this site.
----
+MiniPay runs only on Celo (mainnet) and Celo Sepolia (testnet). It has more than 10M activations, a built-in Mini App discovery page, and ships inside the Opera Mini Android browser and as a standalone app for [Android](https://play.google.com/store/apps/details?id=com.opera.minipay) and [iOS](https://apps.apple.com/de/app/minipay-easy-global-wallet/id6504087257?l=en-GB). Balances are shown in the user's local currency, the wallet is 2 MB, and phone numbers can stand in for addresses.
+
+## Prerequisites
+
+- A web app (any framework) reachable over HTTPS; for local development use `ngrok http 3000` to expose `localhost`
+- [viem](/tooling/libraries-sdks/viem/index) or [wagmi](https://wagmi.sh/) — both support Celo's fee-currency transactions natively
+- Testnet funds: CELO from the [Celo Sepolia faucet](https://faucet.celo.org/celo-sepolia), swapped to a stablecoin in the [Mento app](https://app.mento.org/)
+- To scaffold: `npx @celo/celo-composer@latest create -t minipay` (the [MiniPay template](https://github.com/celo-org/minipay-template)), or follow the [MiniPay quick start](https://docs.minipay.xyz/getting-started/quick-start.html)
+
+## What is Celo-specific
+
+### Stablecoins are the only assets
+
+MiniPay holds USDm, USDC and USDT — no CELO balance is shown to the user. Price and settle in one of these.
+
+| Token | Celo mainnet (42220) | Decimals |
+|---|---|---|
+| USDm | [`0x765DE816845861e75A25fCA122bb6898B8B1282a`](https://celoscan.io/address/0x765DE816845861e75A25fCA122bb6898B8B1282a) | 18 |
+| USDC | [`0xcebA9300f2b948710d2653dD7B07f33A8B32118C`](https://celoscan.io/address/0xcebA9300f2b948710d2653dD7B07f33A8B32118C) | 6 |
+| USDT | [`0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e`](https://celoscan.io/address/0x48065fbBE25f71C9282ddf5e1cD6D6A887483D5e) | 6 |
+
+
+USDC and USDT use **6 decimals**; USDm uses 18. `parseUnits(amount, 18)` on a USDC transfer sends 10¹² times the intended amount. Pass the token's decimals explicitly.
+
+
+```ts
+import { erc20Abi, parseUnits, encodeFunctionData } from "viem";
+
+// USDC on Celo mainnet (42220): 6 decimals
+const USDC = "0xcebA9300f2b948710d2653dD7B07f33A8B32118C";
+const hash = await walletClient.sendTransaction({
+ to: USDC,
+ data: encodeFunctionData({
+ abi: erc20Abi,
+ functionName: "transfer",
+ args: [receiver, parseUnits("1.50", 6)], // 1.50 USDC
+ }),
+});
+```
+
+Testnet addresses are on [Fee currency contracts](/tooling/contracts/fee-currencies).
+
+### Gas is paid in the user's stablecoin
+
+MiniPay uses [fee abstraction](/build-on-celo/fee-abstraction/overview): the user never holds CELO, and the wallet pays gas in the stablecoin the user holds the most of. You may set `feeCurrency` on `eth_sendTransaction`, but MiniPay can override it. Do not build flows that assume a CELO balance, and do not show a "buy CELO for gas" step.
+
+To show a fee estimate in the user's currency, estimate gas and gas price in that token. The JSON-RPC methods accept the fee currency directly:
+
+```ts
+// Celo mainnet (42220); USDm has 18 decimals. For USDC/USDT use the *adapter* address, see fee abstraction.
+const USDM = "0x765DE816845861e75A25fCA122bb6898B8B1282a";
+
+const gasLimit = await publicClient.request({
+ method: "eth_estimateGas",
+ params: [{ from: account, to, value: "0x0", data: "0x", feeCurrency: USDM }],
+});
+const gasPrice = await publicClient.request({
+ method: "eth_gasPrice",
+ params: [USDM],
+});
+const feeInUsdm = formatUnits(BigInt(gasLimit) * BigInt(gasPrice), 18);
+```
+
+In the UI, label this "network fee", not "gas" — see the MiniPay [design standards](https://docs.minipay.xyz/design-standards/).
+
+### Detect MiniPay and skip the connect button
+
+Inside MiniPay the wallet is already connected through the injected provider, and `window.ethereum.isMiniPay` is `true`. Hide your connect-wallet UI and connect the injected connector on load:
+
+```tsx
+import { useEffect, useState } from "react";
+import { useConnect } from "wagmi";
+import { injected } from "wagmi/connectors";
+
+export function useMiniPay() {
+ const [isMiniPay, setIsMiniPay] = useState(false);
+ const { connect } = useConnect();
+
+ useEffect(() => {
+ if (window.ethereum?.isMiniPay) {
+ setIsMiniPay(true);
+ connect({ connector: injected({ target: "metaMask" }) });
+ }
+ }, [connect]);
+
+ return isMiniPay; // render only when false
+}
+```
+
+Check for `window.ethereum` before initialising any web3 library; the provider is injected by the host. Wallet-connection details and error handling: [Wallet connection](https://docs.minipay.xyz/getting-started/wallet-connection.html).
+
+### Resolve MiniPay phone numbers to addresses
+
+MiniPay maps phone numbers to addresses through [SocialConnect](/build-on-celo/build-on-socialconnect) and ODIS. To look a number up you act as an *issuer*: an account that has verified the user owns the number (for example by SMS), has a [data encryption key (DEK)](https://github.com/celo-org/social-connect) registered on the Accounts contract, and holds ODIS quota.
+
+```bash
+npm install @celo/identity @celo/abis viem
+```
+
+```ts
+import { createPublicClient, http } from "viem";
+import { celo } from "viem/chains";
+import { federatedAttestationsABI } from "@celo/abis";
+import { OdisUtils } from "@celo/identity";
+import type { AuthSigner } from "@celo/identity/lib/odis/query";
+
+// Celo mainnet (42220). @celo/identity ships ODIS contexts for mainnet only — no Celo Sepolia.
+const FEDERATED_ATTESTATIONS = "0x0aD5b1d0C25ecF6266Dd951403723B2687d6aff2";
+const issuerAddress = "0xYourIssuerAddress";
+
+// 1. Authenticate with ODIS using the issuer's DEK private key
+const authSigner: AuthSigner = {
+ authenticationMethod: OdisUtils.Query.AuthenticationMethod.ENCRYPTION_KEY,
+ rawKey: process.env.ISSUER_DEK_PRIVATE_KEY!,
+};
+const serviceContext = OdisUtils.Query.getServiceContext(OdisUtils.Query.OdisContextName.MAINNET);
+
+// 2. Check quota; top up by paying OdisPayments (0xAE6B29f31B96e61DdDc792f45fDa4e4F0356D0CB) if it is 0
+const { remainingQuota } = await OdisUtils.Quota.getPnpQuotaStatus(issuerAddress, authSigner, serviceContext);
+
+// 3. Derive the obfuscated identifier for the phone number (one quota unit per call)
+const { obfuscatedIdentifier } = await OdisUtils.Identifier.getObfuscatedIdentifier(
+ "+12345678910",
+ OdisUtils.Identifier.IdentifierPrefix.PHONE_NUMBER,
+ issuerAddress,
+ authSigner,
+ serviceContext,
+);
+
+// 4. Read the accounts attested for it by the issuers you trust
+const publicClient = createPublicClient({ chain: celo, transport: http() });
+const [, accounts] = await publicClient.readContract({
+ address: FEDERATED_ATTESTATIONS,
+ abi: federatedAttestationsABI,
+ functionName: "lookupAttestations",
+ args: [obfuscatedIdentifier as `0x${string}`, [issuerAddress]],
+});
+console.log(accounts);
+```
+
+Contract addresses are from the on-chain registry (`FederatedAttestations`, `OdisPayments`) and listed on [Core contracts](/tooling/contracts/core-contracts). The MiniPay reference for this is [Phone number lookup](https://docs.minipay.xyz/technical-references/phone-number-lookup.html).
+
+### Deeplinks
+
+Deeplinks open a MiniPay screen from your Mini App or from outside (WhatsApp, a web page). The host is `link.minipay.xyz`; users without the app get an install prompt.
+
+| Action | Deeplink |
+|---|---|
+| Add cash, optionally scoped to tokens | `https://link.minipay.xyz/add_cash?tokens=USDM,USDT,USDC` |
+| Open an approved Mini App | `https://link.minipay.xyz/browse?url=https://your-app.example` |
+| Discovery page | `https://link.minipay.xyz/discover` |
+| Transaction receipt (append `&celebrate` for an animation) | `https://link.minipay.xyz/receipt?tx=0x…` |
+| User's QR code | `https://link.minipay.xyz/qr` |
+| Invite friends | `https://link.minipay.xyz/invite_friends` |
+| Balance (pockets) | `https://link.minipay.xyz/balance` |
+
+Reference: [Deeplinks](https://docs.minipay.xyz/technical-references/deeplinks.html).
+
+## Test inside MiniPay
+
+You cannot test in an Android emulator; use a phone.
+
+1. In the MiniPay app open **Settings → About** and tap the **Version** number until developer mode is confirmed.
+2. Back in **Settings → Developer Settings**, enable **Developer Mode** and, for Celo Sepolia, **Use Testnet**.
+3. Tap **Load Test Page**, enter your app's HTTPS URL (the `ngrok` URL for local development), and tap **Go**.
+
+Step-by-step with screenshots: [Test your Mini App inside MiniPay](https://docs.minipay.xyz/getting-started/test-in-minipay.html).
-[MiniPay](https://www.opera.com/products/minipay) is a stablecoin wallet with a built-in Mini App discovery page, integrated directly within the popular Opera Mini Android browser and also available as a standalone application on Android and iOS.
+## The MiniPay developer docs
-Since launching, MiniPay is the fastest growing non-custodial wallet in the Global South with more than 10M+ activations.
+Everything below lives at docs.minipay.xyz and is maintained by the MiniPay team.
-
-Install the new MiniPay standalone app for [Android](https://play.google.com/store/apps/details?id=com.opera.minipay) or [iOS](https://apps.apple.com/de/app/minipay-easy-global-wallet/id6504087257?l=en-GB) now! 🎉 📥
-
+**Getting started**
+- [What are Mini Apps?](https://docs.minipay.xyz/getting-started/overview.html)
+- [Quick start](https://docs.minipay.xyz/getting-started/quick-start.html) — scaffold a Mini App with the Celo agent skills
+- [Test your Mini App inside MiniPay](https://docs.minipay.xyz/getting-started/test-in-minipay.html)
+- [Project setup](https://docs.minipay.xyz/getting-started/project-setup.html) and [Setting up a React app](https://docs.minipay.xyz/getting-started/setup-react.html)
+- [FAQ](https://docs.minipay.xyz/faq.html)
-## Why Build on MiniPay?
+**Guides**
+- [Wallet connection](https://docs.minipay.xyz/getting-started/wallet-connection.html) — injected provider, auto-connect, connection state, errors
+- [UI and container integration](https://docs.minipay.xyz/getting-started/ui-and-container.html)
+- [Interacting with smart contracts](https://docs.minipay.xyz/getting-started/smart-contracts.html)
+- [Best practices](https://docs.minipay.xyz/getting-started/best-practices.html)
+- [Deployment](https://docs.minipay.xyz/getting-started/deployment.html)
+- [Submit your Mini App](https://docs.minipay.xyz/getting-started/submit-your-miniapp.html) to the discovery page
+- [Building for MiniPay](https://docs.minipay.xyz/getting-started/why-minipay.html) and [Availability](https://docs.minipay.xyz/getting-started/availability.html)
+- [Design standards](https://docs.minipay.xyz/design-standards/) — including user-facing terminology
+- [Examples](https://docs.minipay.xyz/getting-started/examples.html)
-- **Useful Applications:** MiniPay focuses on practical uses in everyday life, especially in emerging markets, where most of their users are located.
-- **Integrated App Discovery:** MiniPay includes a built-in app discovery page, allowing users to interact with selected Mini Apps directly within their wallet, without needing to switch to other platforms.
-- **Access to Opera’s Large User Base** Developers can tap into MiniPay’s growing user base (10 Million activated addresses) and Opera browser distribution.
+**Technical reference**
+- [Retrieve balance](https://docs.minipay.xyz/technical-references/retrieve-balance.html)
+- [Send a transaction](https://docs.minipay.xyz/technical-references/send-transaction.html) — USDC, USDT, USDm with wagmi
+- [Gas estimation](https://docs.minipay.xyz/technical-references/gas-estimation.html)
+- [Transaction status](https://docs.minipay.xyz/technical-references/transaction-status.html)
+- [Phone number lookup](https://docs.minipay.xyz/technical-references/phone-number-lookup.html)
+- [Chain switching](https://docs.minipay.xyz/technical-references/chain-switching.html)
+- [Deeplinks](https://docs.minipay.xyz/technical-references/deeplinks.html)
+- Custom methods: [overview](https://docs.minipay.xyz/technical-references/custom-methods/custom-methods.html), [getExchangeRate](https://docs.minipay.xyz/technical-references/custom-methods/get-exchange-rate.html), [scanQrCode](https://docs.minipay.xyz/technical-references/custom-methods/scan-qr-code.html), [requestContact](https://docs.minipay.xyz/technical-references/custom-methods/request-contact.html)
-## Key Features of MiniPay
+## Funding and programs
-- **Phone Number mapping:** Uses mobile phone numbers as wallet addresses.
-- **Fast, Low-Cost Transactions:** Offers fast P2P stablecoin transactions with sub-cent fees.
-- **Lightweight Design:** At just 2MB, users can use the wallet with limited data.
+- Building in public? Register for Build With Celo programs at [celopg.eco](https://www.celopg.eco/).
+- Raising? Send a deck or product demo to team@verda.ventures.
+- Grants and accelerators: [Fund your project](/build-on-celo/fund-your-project).
-## Opportunities for MiniPay Builders
+## Related
-- **Raising Funding?** Reach out to team@verda.ventures with a deck and/or product demo.
-- **Still Building?** Register your project for [Build With Celo: Proof-of-Ship](https://www.celopg.eco/programs/proof-of-ship-s1) for monthly rewards.
+- [Fee abstraction](/build-on-celo/fee-abstraction/overview) - How gas in stablecoins works and the adapter addresses for USDC and USDT
+- [Fee currency contracts](/tooling/contracts/fee-currencies) - Token and adapter addresses per network
+- [Build with local stablecoins](/build-on-celo/build-with-local-stablecoin) - Mento stablecoins beyond USDm
+- [SocialConnect](/build-on-celo/build-on-socialconnect) - Phone-number to address mapping
+- [Celo Composer](/build-on-celo/quickstart) - Scaffold a MiniPay-ready app
diff --git a/build-on-celo/build-on-minipay/prerequisites/ngrok-setup.mdx b/build-on-celo/build-on-minipay/prerequisites/ngrok-setup.mdx
deleted file mode 100644
index c3fe955b3e..0000000000
--- a/build-on-celo/build-on-minipay/prerequisites/ngrok-setup.mdx
+++ /dev/null
@@ -1,42 +0,0 @@
----
-title: Ngrok Setup
-description: Ngrok Setup to share localhost project with MiniPay app
----
-
-When builidng dApps for MiniPay locally, you want to test the dApp inside MiniPay wallet on your phone.
-
-But since the dApp is running locally, you cannot simply visit localhost on your phone to open the dApp on your phone.
-
-To solve this, we use `ngrok`.
-
-`ngrok` allows us to share our localhost by providing us with a temporary web url that can be used on any device!
-
-## Installing Ngrok
-
-1. Visit [ngrok.com](https://ngrok.com)
-
-
-
-2. Sign up
-
-
- 
-
-
-3. The dashboard will have instructions based on your OS on how to install and use ngrok!
-
-
-
-4. Once installed you can use the following command to share your localhost port.
-
-```bash
-> ngrok http [PORT]
-```
-
-The output looks something like this.
-
-
- 
-
-
-You can use the highlighted url to launch the localhost dApp on the [MiniPay's Site Tester](/build-on-celo/build-on-minipay/quickstart#test-your-mini-app-inside-minipay).
diff --git a/build-on-celo/build-on-minipay/quickstart.mdx b/build-on-celo/build-on-minipay/quickstart.mdx
deleted file mode 100644
index 8fc8bc2d42..0000000000
--- a/build-on-celo/build-on-minipay/quickstart.mdx
+++ /dev/null
@@ -1,279 +0,0 @@
----
-title: Get Started Building on MiniPay
-description: A quickstart guide for building on MiniPay and Celo.
-sidebarTitle: "Getting Started"
----
-
-A step-by-step guide to setting up, building, and testing your MiniPay Mini App.
-
----
-
-## 1. Installing MiniPay
-
-MiniPay is designed for mainstream adoption, making digital payments simple and easy to use.
-
-#### Key Features:
-
-- **Currency Display**: Balances appear in your local currency.
-- **Stablecoin Support**: Only stablecoins (USDm, USDC, and USDT) are supported.
-- **Simple Swaps**: The pocket swap feature allows for easy swaps between stablecoins by dragging one pocket into another.
-
-
- MiniPay is only available on Celo and Celo Sepolia Testnet. Other blockchain
- networks are not supported.
-
-
-#### How to Access MiniPay:
-
-- [**Opera Mini Browser**](https://www.opera.com/pl/products/minipay) (Android)
-- [**Standalone App Android**](https://play.google.com/store/apps/details?id=com.opera.minipay)
-- [**Standalone App iOS**](https://apps.apple.com/de/app/minipay-easy-global-wallet/id6504087257?l=en-GB)
-
-#### Set Up MiniPay:
-
-- **Install the MiniPay Standalone App:** Download for [Android](https://play.google.com/store/apps/details?id=com.opera.minipay) and [iOS](https://apps.apple.com/de/app/minipay-easy-global-wallet/id6504087257?l=en-GB)
-- **Create an Account:** Sign up using your Google account and phone number.
-
-## 2. Build Your MiniPay Mini App
-
-#### For creating a new app:
-
-- Use the [Celo Composer MiniPay Template](https://github.com/celo-org/minipay-template) to start building.
-
-```bash
-npx @celo/celo-composer@latest create -t minipay
-```
-
-- Follow the [Quickstart Guide](/build-on-celo/quickstart) for a step-by-step tutorial.
-
-#### For integrating an existing app:
-
-- Follow the [Helpful Tips Guide](#helpful-tips-to-make-your-mini-app-minipay-compatible) to ensure your app is MiniPay compatible.
-
-## 3. Get Testnet Tokens
-
-Request CELO testnet tokens from the Celo [faucet](https://faucet.celo.org/celo-sepolia/) to test your Mini App. After you got the CELO tokens, you can exchange them for stablecoins like USDm, USDT and USDC in the [mento app](https://app.mento.org/).
-
-## 4. Test your Mini App inside MiniPay
-
-
- You cannot test MiniPay using the Android Studio Emulator. Use an Android or
- iOS mobile device.
-
-
-### Enable Developer Mode:
-
-1. Open the MiniPay app on your phone and navigate to settings.
-
-
-
-
-
-2. In the **About** section, tap the **Version** number repeatedly until the confirmation message appears.
-
-
-
-
-
-3. Return to **Settings**, then select **Developer Settings**.
-
-
-
-
-
-4. Enable **Developer Mode** and toggle **Use Testnet** to connect to Sepolia L2 testnet.
-
-
-
-
-
-### Load Your Mini App:
-
-1. In **Developer Settings,** tap **Load Test Page.**
-2. Enter your **Mini App URL.**
- - If testing a local deployment, use [ngrok](#testing-local-development-with-minipay) to expose your localhost.
-
-
-
-
-
-6. Click **Go** to launch and test your Mini App.
-
-
-
-
-
----
-
-## Helpful Tips to Make Your Mini App MiniPay Compatible
-
-
- MiniPay uses Custom [Fee Abstraction](/build-on-celo/fee-abstraction/overview) based
- transactions. We recommend using viem or wagmi as they provide native support
- for fee currency.
-
-
-#### 1. Using Viem
-
-```js
-import { createWalletClient, custom } from "viem";
-import { celo, celoSepolia } from "viem/chains";
-
-const client = createWalletClient({
- chain: celo,
- // chain: celoSepolia, // For Celo Sepolia Testnet
- transport: custom(window.ethereum),
-});
-
-const [address] = await client.getAddresses();
-```
-
-#### 2. Using Wagmi
-
-
- These snippets use **wagmi v2** (the current major version). In v2, connectors
- are functions (e.g. `injected()`) rather than the classes used in v1
- (`new InjectedConnector()`), `WagmiConfig` is now `WagmiProvider`, and the
- config is built with `createConfig`.
-
-
-First, create your wagmi config and wrap your app in `WagmiProvider` (wagmi v2 also requires a TanStack Query provider):
-
-```tsx
-// providers.tsx
-"use client";
-
-import { WagmiProvider, createConfig, http } from "wagmi";
-import { celo } from "wagmi/chains";
-import { injected } from "wagmi/connectors";
-import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
-
-export const config = createConfig({
- chains: [celo],
- connectors: [injected({ target: "metaMask" })],
- transports: {
- [celo.id]: http(),
- },
-});
-
-const queryClient = new QueryClient();
-
-export function Providers({ children }: { children: React.ReactNode }) {
- return (
-
- {children}
-
- );
-}
-```
-
-Then auto-connect on load using the connector from your config:
-
-```tsx
-import { useEffect } from "react";
-import { useConnect } from "wagmi";
-
-const { connect, connectors } = useConnect();
-
-useEffect(() => {
- // `connectors[0]` is the `injected()` connector registered in `createConfig`
- connect({ connector: connectors[0] });
-}, [connect, connectors]);
-```
-
-This sets up the `injected` connector in `createConfig` and then uses the `connect` method from the `useConnect` hook. The `useEffect` ensures that the connection is established when the page loads.
-
-In the Viem example, we're creating a wallet client that specifies the chain and a custom transport using `window.ethereum`. The `getAddresses` method then retrieves the connected addresses.
-
-### Important Notes
-
-Ensure the "Connect Wallet" button is hidden when your DApp is loaded inside the MiniPay app, as the wallet connection is implicit.
-
-_Code Example to hide Connect Wallet button if the user is using MiniPay wallet_
-
-```tsx
-import { useEffect, useState } from "react";
-import { useConnect } from "wagmi";
-import { injected } from "wagmi/connectors";
-
-export default function Header() {
- // State variable that determines whether to hide the button or not.
- const [hideConnectBtn, setHideConnectBtn] = useState(false);
- const { connect } = useConnect();
-
- useEffect(() => {
- if (window.ethereum && window.ethereum.isMiniPay) {
- // User is using MiniPay so hide connect wallet button.
- setHideConnectBtn(true);
-
- connect({ connector: injected({ target: "metaMask" }) });
- }
- }, [connect]);
-
- return (
-
- {/* Conditional rendering of Connect Wallet button */}
- {!hideConnectBtn && (
-
- )}
-
- );
-}
-```
-
-- Always verify the existence of `window.provider` before initializing your web3 library to ensure seamless compatibility with the MiniPay wallet.
-- When using `ngrok`, remember that the tunneling URL is temporary. You'll get a new URL every time you restart ngrok.
-- Be cautious about exposing sensitive information or functionality when using public tunneling services like ngrok. Always use them in a controlled environment.
-- MiniPay manages gas fees for you. You can set the `feeCurrency` property when running `eth_sendTransaction`, but MiniPay may ignore it and pay gas in the stablecoin the user holds the most of. Supported gas tokens include `USDT`, `USDC`, and `USDm` (as well as other Mento stablecoins).
-- Use viem or wagmi to build and send transactions, as they provide native support for Celo's fee-currency transactions.
-
-## Testing Local Development with MiniPay
-
-If you're developing your MiniApp locally (e.g., on `localhost:3000`), use `ngrok` to tunnel traffic over HTTP, for real-time testing.
-
-#### Set Up ngrok
-
-- **Install ngrok:** If you haven't already, install ngrok. You can find instructions on their [official website](https://ngrok.com/download).
-- **Start Your Local Server:** Ensure your local development server is running. For instance, if you're using Next.js, you might run `npm run dev` to start your server at `localhost:3000`.
-- **Tunnel Traffic with ngrok:** In your terminal, run the following command to start an ngrok tunnel:
-
-```bash
-ngrok http 3000
-```
-
-This will provide you with a public URL that tunnels to your localhost.
-
-For a more in depth guide, check out the official [ngrok setup](/build-on-celo/build-on-minipay/prerequisites/ngrok-setup).
-
-- **Test in MiniPay:** Copy the provided ngrok URL and use it inside the MiniPay app to test your DApp.
diff --git a/build-on-celo/quickstart.mdx b/build-on-celo/quickstart.mdx
index 33c05ed702..d51c46f8d5 100644
--- a/build-on-celo/quickstart.mdx
+++ b/build-on-celo/quickstart.mdx
@@ -89,7 +89,7 @@ Optimized for building dApps that integrate with the MiniPay mobile wallet, with
npx @celo/celo-composer@latest create --template minipay
```
-Checkout [minipay docs](/build/build-on-minipay/overview) to learn more about it.
+Checkout [minipay docs](/build-on-celo/build-on-minipay/overview) to learn more about it.
### AI Chat App
diff --git a/docs.json b/docs.json
index ab42e0d96b..ef7f071059 100644
--- a/docs.json
+++ b/docs.json
@@ -153,21 +153,7 @@
{
"group": "Use Cases",
"pages": [
- {
- "group": "Build for MiniPay",
- "pages": [
- "build-on-celo/build-on-minipay/overview",
- "build-on-celo/build-on-minipay/quickstart",
- {
- "group": "Prerequisites",
- "pages": [
- "build-on-celo/build-on-minipay/prerequisites/ngrok-setup"
- ]
- },
- "build-on-celo/build-on-minipay/code-library",
- "build-on-celo/build-on-minipay/deeplinks"
- ]
- },
+ "build-on-celo/build-on-minipay/overview",
"build-on-celo/build-with-farcaster",
"build-on-celo/build-with-self",
"build-on-celo/build-with-local-stablecoin",
@@ -1792,27 +1778,67 @@
},
{
"source": "/developer/build-on-minipay",
- "destination": "/build/build-on-minipay"
+ "destination": "/build-on-celo/build-on-minipay/overview"
},
{
"source": "/developer/build-on-minipay/code-library",
- "destination": "/build/build-on-minipay/code-library"
+ "destination": "/build-on-celo/build-on-minipay/overview"
},
{
"source": "/developer/build-on-minipay/deeplinks",
- "destination": "/build/build-on-minipay/deeplinks"
+ "destination": "/build-on-celo/build-on-minipay/overview"
},
{
"source": "/developer/build-on-minipay/overview",
- "destination": "/build/build-on-minipay/overview"
+ "destination": "/build-on-celo/build-on-minipay/overview"
},
{
"source": "/developer/build-on-minipay/prerequisites/ngrok-setup",
- "destination": "/build/build-on-minipay/prerequisites/ngrok-setup"
+ "destination": "/build-on-celo/build-on-minipay/overview"
},
{
"source": "/developer/build-on-minipay/quickstart",
- "destination": "/build/build-on-minipay/quickstart"
+ "destination": "/build-on-celo/build-on-minipay/overview"
+ },
+ {
+ "source": "/build-on-celo/build-on-minipay/quickstart",
+ "destination": "/build-on-celo/build-on-minipay/overview"
+ },
+ {
+ "source": "/build-on-celo/build-on-minipay/code-library",
+ "destination": "/build-on-celo/build-on-minipay/overview"
+ },
+ {
+ "source": "/build-on-celo/build-on-minipay/deeplinks",
+ "destination": "/build-on-celo/build-on-minipay/overview"
+ },
+ {
+ "source": "/build-on-celo/build-on-minipay/prerequisites/ngrok-setup",
+ "destination": "/build-on-celo/build-on-minipay/overview"
+ },
+ {
+ "source": "/build/build-on-minipay",
+ "destination": "/build-on-celo/build-on-minipay/overview"
+ },
+ {
+ "source": "/build/build-on-minipay/quickstart",
+ "destination": "/build-on-celo/build-on-minipay/overview"
+ },
+ {
+ "source": "/build/build-on-minipay/code-library",
+ "destination": "/build-on-celo/build-on-minipay/overview"
+ },
+ {
+ "source": "/build/build-on-minipay/deeplinks",
+ "destination": "/build-on-celo/build-on-minipay/overview"
+ },
+ {
+ "source": "/build/build-on-minipay/prerequisites/ngrok-setup",
+ "destination": "/build-on-celo/build-on-minipay/overview"
+ },
+ {
+ "source": "/build/build-on-minipay/overview",
+ "destination": "/build-on-celo/build-on-minipay/overview"
},
{
"source": "/developer/build-with-ai/overview",
diff --git a/img/developer/build-on-minipay/android-studio-setup/1.png b/img/developer/build-on-minipay/android-studio-setup/1.png
deleted file mode 100644
index 7c7916b502..0000000000
Binary files a/img/developer/build-on-minipay/android-studio-setup/1.png and /dev/null differ
diff --git a/img/developer/build-on-minipay/android-studio-setup/10.png b/img/developer/build-on-minipay/android-studio-setup/10.png
deleted file mode 100644
index e65a235276..0000000000
Binary files a/img/developer/build-on-minipay/android-studio-setup/10.png and /dev/null differ
diff --git a/img/developer/build-on-minipay/android-studio-setup/11.png b/img/developer/build-on-minipay/android-studio-setup/11.png
deleted file mode 100644
index db18efd0ca..0000000000
Binary files a/img/developer/build-on-minipay/android-studio-setup/11.png and /dev/null differ
diff --git a/img/developer/build-on-minipay/android-studio-setup/2.png b/img/developer/build-on-minipay/android-studio-setup/2.png
deleted file mode 100644
index c54611b84f..0000000000
Binary files a/img/developer/build-on-minipay/android-studio-setup/2.png and /dev/null differ
diff --git a/img/developer/build-on-minipay/android-studio-setup/3.png b/img/developer/build-on-minipay/android-studio-setup/3.png
deleted file mode 100644
index f31ca9ac1d..0000000000
Binary files a/img/developer/build-on-minipay/android-studio-setup/3.png and /dev/null differ
diff --git a/img/developer/build-on-minipay/android-studio-setup/4.png b/img/developer/build-on-minipay/android-studio-setup/4.png
deleted file mode 100644
index c449f708af..0000000000
Binary files a/img/developer/build-on-minipay/android-studio-setup/4.png and /dev/null differ
diff --git a/img/developer/build-on-minipay/android-studio-setup/5.png b/img/developer/build-on-minipay/android-studio-setup/5.png
deleted file mode 100644
index 026c889085..0000000000
Binary files a/img/developer/build-on-minipay/android-studio-setup/5.png and /dev/null differ
diff --git a/img/developer/build-on-minipay/android-studio-setup/6.png b/img/developer/build-on-minipay/android-studio-setup/6.png
deleted file mode 100644
index 923fccefb5..0000000000
Binary files a/img/developer/build-on-minipay/android-studio-setup/6.png and /dev/null differ
diff --git a/img/developer/build-on-minipay/android-studio-setup/7.png b/img/developer/build-on-minipay/android-studio-setup/7.png
deleted file mode 100644
index 493791bb08..0000000000
Binary files a/img/developer/build-on-minipay/android-studio-setup/7.png and /dev/null differ
diff --git a/img/developer/build-on-minipay/android-studio-setup/8.png b/img/developer/build-on-minipay/android-studio-setup/8.png
deleted file mode 100644
index cba4f32649..0000000000
Binary files a/img/developer/build-on-minipay/android-studio-setup/8.png and /dev/null differ
diff --git a/img/developer/build-on-minipay/android-studio-setup/9.png b/img/developer/build-on-minipay/android-studio-setup/9.png
deleted file mode 100644
index 1cba95d3f3..0000000000
Binary files a/img/developer/build-on-minipay/android-studio-setup/9.png and /dev/null differ
diff --git a/img/developer/build-on-minipay/deeplinks/add-cash-deeplink.gif b/img/developer/build-on-minipay/deeplinks/add-cash-deeplink.gif
deleted file mode 100644
index 11b8bc5a88..0000000000
Binary files a/img/developer/build-on-minipay/deeplinks/add-cash-deeplink.gif and /dev/null differ
diff --git a/img/developer/build-on-minipay/ngrok-setup/1.png b/img/developer/build-on-minipay/ngrok-setup/1.png
deleted file mode 100644
index 4e81305d5c..0000000000
Binary files a/img/developer/build-on-minipay/ngrok-setup/1.png and /dev/null differ
diff --git a/img/developer/build-on-minipay/ngrok-setup/2.png b/img/developer/build-on-minipay/ngrok-setup/2.png
deleted file mode 100644
index 1a358f270c..0000000000
Binary files a/img/developer/build-on-minipay/ngrok-setup/2.png and /dev/null differ
diff --git a/img/developer/build-on-minipay/ngrok-setup/3.png b/img/developer/build-on-minipay/ngrok-setup/3.png
deleted file mode 100644
index 72fcca5510..0000000000
Binary files a/img/developer/build-on-minipay/ngrok-setup/3.png and /dev/null differ
diff --git a/img/developer/build-on-minipay/ngrok-setup/4.png b/img/developer/build-on-minipay/ngrok-setup/4.png
deleted file mode 100644
index 53f136db25..0000000000
Binary files a/img/developer/build-on-minipay/ngrok-setup/4.png and /dev/null differ
diff --git a/img/doc-images/minipay/build-on-minipay/activate-developer-mode.jpg b/img/doc-images/minipay/build-on-minipay/activate-developer-mode.jpg
deleted file mode 100644
index 9a0df41c4d..0000000000
Binary files a/img/doc-images/minipay/build-on-minipay/activate-developer-mode.jpg and /dev/null differ
diff --git a/img/doc-images/minipay/build-on-minipay/choose-developer-settings.jpg b/img/doc-images/minipay/build-on-minipay/choose-developer-settings.jpg
deleted file mode 100644
index e0899cc2ac..0000000000
Binary files a/img/doc-images/minipay/build-on-minipay/choose-developer-settings.jpg and /dev/null differ
diff --git a/img/doc-images/minipay/build-on-minipay/choose-settings.jpg b/img/doc-images/minipay/build-on-minipay/choose-settings.jpg
deleted file mode 100644
index 4f436ac62d..0000000000
Binary files a/img/doc-images/minipay/build-on-minipay/choose-settings.jpg and /dev/null differ
diff --git a/img/doc-images/minipay/build-on-minipay/choose-testnet.jpg b/img/doc-images/minipay/build-on-minipay/choose-testnet.jpg
deleted file mode 100644
index fbeef0c5d9..0000000000
Binary files a/img/doc-images/minipay/build-on-minipay/choose-testnet.jpg and /dev/null differ
diff --git a/img/doc-images/minipay/build-on-minipay/enter-url.jpg b/img/doc-images/minipay/build-on-minipay/enter-url.jpg
deleted file mode 100644
index 758e0aad25..0000000000
Binary files a/img/doc-images/minipay/build-on-minipay/enter-url.jpg and /dev/null differ
diff --git a/img/doc-images/minipay/build-on-minipay/minipay-1.png b/img/doc-images/minipay/build-on-minipay/minipay-1.png
deleted file mode 100644
index b0baddf83c..0000000000
Binary files a/img/doc-images/minipay/build-on-minipay/minipay-1.png and /dev/null differ
diff --git a/img/doc-images/minipay/build-on-minipay/minipay-2.png b/img/doc-images/minipay/build-on-minipay/minipay-2.png
deleted file mode 100644
index 71ee858b9f..0000000000
Binary files a/img/doc-images/minipay/build-on-minipay/minipay-2.png and /dev/null differ
diff --git a/img/doc-images/minipay/build-on-minipay/minipay-3.png b/img/doc-images/minipay/build-on-minipay/minipay-3.png
deleted file mode 100644
index b542b3e870..0000000000
Binary files a/img/doc-images/minipay/build-on-minipay/minipay-3.png and /dev/null differ
diff --git a/img/doc-images/minipay/build-on-minipay/site-tester-opening.jpg b/img/doc-images/minipay/build-on-minipay/site-tester-opening.jpg
deleted file mode 100644
index 9b53598670..0000000000
Binary files a/img/doc-images/minipay/build-on-minipay/site-tester-opening.jpg and /dev/null differ
diff --git a/img/doc-images/minipay/build-on-minipay/turn-on-developer-mode.jpg b/img/doc-images/minipay/build-on-minipay/turn-on-developer-mode.jpg
deleted file mode 100644
index 5b80297e50..0000000000
Binary files a/img/doc-images/minipay/build-on-minipay/turn-on-developer-mode.jpg and /dev/null differ
diff --git a/tooling/libraries-sdks/composer-kit.mdx b/tooling/libraries-sdks/composer-kit.mdx
index 943abc60f2..155b0d9821 100644
--- a/tooling/libraries-sdks/composer-kit.mdx
+++ b/tooling/libraries-sdks/composer-kit.mdx
@@ -217,5 +217,5 @@ For comprehensive examples and detailed API documentation for each component:
## Next Steps
- Get started with [Celopedia](/build-on-celo/build-with-ai/celopedia) to build on Celo with your AI coding assistant
-- Explore [building on MiniPay](/build/build-on-minipay/overview) for mobile-first experiences
+- Explore [building on MiniPay](/build-on-celo/build-on-minipay/overview) for mobile-first experiences
- Learn about [DeFi integration](/build/build-with-defi) for financial applications
diff --git a/tooling/wallets/index.mdx b/tooling/wallets/index.mdx
index 7bd136e200..a0cabbd2cb 100644
--- a/tooling/wallets/index.mdx
+++ b/tooling/wallets/index.mdx
@@ -27,7 +27,7 @@ MiniPay is a non-custodial lightweight mobile wallet that allows users to send a
- Maintainers: Opera
- Ledger support: No
- Supported tokens: USDm, USDT, and USDC
-- [Start building](/build/build-on-minipay/quickstart)
+- [Start building](/build-on-celo/build-on-minipay/overview)
---