Modern multi-chain treasury management system. This sample application uses Next.js, Supabase, and Circle Developer Controlled Wallets, Circle Gateway and Circle Bridge Kit with Forwarding Service to demonstrate a multi-chain treasury management system with bridge capabilities.
- Node.js v22+ — Install via nvm
- Supabase CLI — Install via
npm install -g supabaseor see Supabase CLI docs - Docker Desktop (only if using the local Supabase path) — Install Docker Desktop
- Circle Developer Controlled Wallets API key and Entity Secret
-
Clone the repository and install dependencies:
git clone git@github.com:akelani-circle/fintech-starter.git cd fintech-starter npm install -
Set up environment variables:
cp .env.example .env.local
Replace
your-ngrok-urlwith your actual ngrok forwarding URL from step 4.Then edit
.env.localand fill in all required values (see Environment Variables section below). -
Set up the database — Choose one of the two paths below:
Path 1: Local Supabase (Docker)
Requires Docker Desktop installed and running.
npx supabase start npx supabase migration up
The output of
npx supabase startwill display the Supabase URL and API keys needed for your.env.local.Path 2: Remote Supabase (Cloud)
Requires a Supabase account and project.
npx supabase link --project-ref <your-project-ref> npx supabase db push
Retrieve your project URL and API keys from the Supabase dashboard under Settings → API.
-
Start the development server:
npm run dev
The app will be available at
http://localhost:3000.
- Built with Next.js App Router and Supabase
- Uses Circle Developer Controlled Wallets for managing multi-chain transactions
- Utilizes
@circle-fin/bridge-kitfor bridging assets across supported chains - Real-time UI updates powered by Supabase Realtime subscriptions
- Styled with Tailwind CSS and components from shadcn/ui
Copy .env.example to .env.local and fill in the required values:
# Supabase
NEXT_PUBLIC_SUPABASE_URL=your-project-url
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=your-publishable-or-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
# Circle
CIRCLE_API_KEY=your-circle-api-key
CIRCLE_ENTITY_SECRET=your-circle-entity-secret| Variable | Scope | Purpose |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL |
Public | Supabase project URL. |
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY |
Public | Supabase anonymous/publishable key. |
SUPABASE_SERVICE_ROLE_KEY |
Server-side | Supabase service role key for admin operations. |
CIRCLE_API_KEY |
Server-side | Circle API key for wallet operations. |
CIRCLE_ENTITY_SECRET |
Server-side | Circle entity secret for signing transactions. |
On first visit, sign up with any email and password.
This sample application:
- Assumes testnet usage only
- Handles secrets via environment variables
- Is not intended for production use without modification
