Next.jsReactStarter

furlpay-solana-actions-template — Next.js Starter Template

By FurlPay

A Next.js-based Solana Actions and Blinks payment checkout template that provides shareable payment links which expand into signable payment components in X or Discord.

Explore the design

Compare the page layouts and mobile experience. Open any screenshot for a closer look.

3 previews
Desktop homepage1 / 3
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 3

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-14View source

What stands out

A quick read of the recorded project description.

01

A Next.js-based Solana Actions and Blinks checkout template using TypeScript, React, and Solana

02

GET metadata uses type: "action" and includes headers such as ACTIONS_CORS_HEADERS, X-Action-Version, and X-Blockchain-Ids

03

Amounts are denominated in USD; the SOL payment path converts via the SOL/USD price rather than pricing directly by SOL quantity

04

Merchant ATA creation is idempotent, so the first payment to a new token account will not fail

05

Uses transferChecked to validate the mint and decimals on-chain, rather than transfer

06

When serializing the unsigned transaction it uses a placeholder blockhash, so serialization completes without a live RPC

Template Details

This template is FurlPay's open-source Solana Actions & Blinks checkout template, built with TypeScript, Next.js, React, and Solana. The README states it uses the same code as the shareable payment links on furlpay.com. It provides a Blink metadata endpoint and an endpoint that returns an unsigned transaction, and handles CORS preflight, Action version, and blockchain identifier headers. The README emphasizes the template's handling of specification details: GET metadata uses type: "action" and includes the full ACTIONS_CORS_HEADERS, X-Action-Version, and X-Blockchain-Ids (sRFC 31); amounts are denominated in USD, and the SOL path converts via the SOL/USD price; merchant ATA creation is idempotent; it uses transferChecked to validate the mint and decimals; and when serializing the unsigned transaction it uses a placeholder blockhash, requiring no live RPC. The template provides routes including /actions.json, GET /api/actions/pay/[orderId], POST /api/actions/pay/[orderId]?asset=USDC|SOL, and OPTIONS preflight. The README does not describe specific deployment methods beyond local running and pre-launch replacements, nor does it provide performance or production-environment validation information.

Next.jsStarter

Is it right for your project?

Use Cases

  • Share a payment link in X or Discord so the link expands into a signable payment component
  • Set up a USD-denominated checkout flow that accepts USDC or SOL
  • Use as a reference template for implementing the Solana Actions and Blinks specification
  • Render and test the Blink payment flow locally via dial.to

Suitable For

  • Developers who need a Solana Actions and Blinks payment checkout template
  • Merchant integration scenarios that want USD-denominated pricing with USDC or SOL payment support
  • Solana developers who need a reference for sRFC 31 headers and CORS handling

Getting started & customization

Use these recorded setup notes alongside the repository instructions for your chosen version.

  1. 1

    Run npm install to install dependencies, then run npm run dev to start the development server

  2. 2

    Use http://localhost:3000/api/actions/pay/demo_order in dial.to to render the Blink

  3. 3

    Before launch, set MERCHANT_SOLANA_WALLET to your receiving wallet; see .env.example

  4. 4

    Replace getOrder() in lib/solana.ts with real order lookup logic

  5. 5

    Replace SOLANA_SOL_USD_PRICE with a live price source (such as Pyth), and register the deployed URL in the Dialect registry

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This listing covers the free version in the public repository under the MIT license; the free scope is the code of that version and does not mean external services or third-party assets are free.

Must comply with when using

  • Permits free use, modification, commercial use, and distribution of that version's code.
  • When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
  • The code is provided as-is; warranties and limitations of liability are governed by the original license and applicable law.

Additional costs & items to verify

  • Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be judged solely by the code's MIT license.
  • External services such as domains, hosting, databases, payments, or AI may incur separate charges.
  • Before launch, the MERCHANT_SOLANA_WALLET environment variable must be set to your own receiving wallet address, otherwise payments cannot be received correctly.
  • getOrder() in lib/solana.ts must be replaced with real order lookup logic; the template's default implementation cannot be used directly for production orders.
  • SOL USD pricing depends on SOLANA_SOL_USD_PRICE; before launch it must be replaced with a live price source (such as Pyth), otherwise prices may be inaccurate.
  • The deployed URL must be registered in the Dialect registry so wallets render the Blink as a trusted source.
  • Local Blink testing requires rendering via the third-party service dial.to, depending on an external platform.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

1. Set `MERCHANT_SOLANA_WALLET` to your treasury (see `.env.example`)

Original README

2. Replace `getOrder()` in `lib/solana.ts` with your real order lookup

Original README

3. Replace `SOLANA_SOL_USD_PRICE` with a live oracle (e.g. Pyth)

Original README

4. Register your deployed URL with the [Dialect registry](https://dial.to/register)

Original README

Then render your Blink at [dial.to](https://dial.to) with

Original README
https://github.com/FurlPay/furlpay-solana-actions-template/blob/main/LICENSEhttps://github.com/FurlPay/furlpay-solana-actions-template/blob/main/README.md

Compiled by DeepSeek based on repository license and README ·2026-10-14. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.

Project checks & description sources

Template Information

Source platforms
GitHub
Documentation and maintenance reference score
More documented · 80 / 100
Technologies
Next.js · React
Website type
Starter
How this score is calculated

Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.

What to verify for this project

Repository update recorded
2026-09-13
Screenshot last checked
2026-10-14

A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.

The catalog identifies Next.js as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.

Use a selection guide →

How this description was prepared

AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.

Review declaration: codex-user-requested-batch-review-20261015 · 2026-10-15

Inspect the recorded source material

SHA-256: 74e07fd50c6a30376bbb0205e97984d24529aa7b0f655dfbca6b2aa9a7b93b94

2026-10-14T22:26:36.040Z

Source file / repository
# Furlpay Solana Actions Template

![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=flat-square&logo=typescript&logoColor=white)
![Next.js](https://img.shields.io/badge/Next.js-000000?style=flat-square&logo=nextdotjs&logoColor=white)
![React](https://img.shields.io/badge/React-61DAFB?style=flat-square&logo=react&logoColor=black)
![Solana](https://img.shields.io/badge/Solana-9945FF?style=flat-square&logo=solana&logoColor=white)

[![license](https://img.shields.io/badge/license-MIT-green)](./LICENSE)

A production-ready **Solana Actions & Blinks** checkout template built on
Next.js — the same code that powers [furlpay.com](https://furlpay.com)'s
shareable payment links. Post a link on X or Discord and it unfurls into a
signable payment widget.

## What's spec-correct here (and often wrong elsewhere)

- ✅ `type: "action"` on GET metadata, `OPTIONS` preflight, and the full
  `ACTIONS_CORS_HEADERS` + `X-Action-Version` + `X-Blockchain-Ids` header set (sRFC 31)
- ✅ **Dollar-denominated amounts** — the SOL path converts via a SOL/USD price
  instead of charging "25 SOL" for a $25 order
- ✅ **Idempotent merchant ATA creation** — first payment to a fresh token
  account doesn't fail
- ✅ `transferChecked` (validates mint + decimals on-chain) instead of `transfer`
- ✅ No live RPC needed to serialize: unsigned transactions use a placeholder
  blockhash that Blink clients replace per spec

## Run it

```bash
npm install
npm run dev
```

Then render your Blink at [dial.to](https://dial.to) with
`http://localhost:3000/api/actions/pay/demo_order`.

## Endpoints

| Route | Purpose |
|---|---|
| `GET /actions.json` | Maps site paths to Action API endpoints |
| `GET /api/actions/pay/[orderId]` | Blink metadata: icon, title, pay buttons |
| `POST /api/actions/pay/[orderId]?asset=USDC\|SOL` | Returns the base64 transaction to sign |
| `OPTIONS ...` | CORS preflight for Blink clients |

## Going to production

1. Set `MERCHANT_SOLANA_WALLET` to your treasury (see `.env.example`)
2. Replace `getOrder()` in `lib/solana.ts` with your real order lookup
3. Replace `SOLANA_SOL_USD_PRICE` with a live oracle (e.g. Pyth)
4. Register your deployed URL with the [Dialect registry](https://dial.to/register)
   so wallets render your Blinks as trusted

## License

MIT
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.