Skip to content

zendvolabs/zendvo

Repository files navigation

Zendvo

Next.js 15 TS 5 Drizzle Stellar

Zendvo is an expense, savings, and gifting platform that transforms digital money transfers into memorable experiences. It enables users to send cash gifts that remain completely hidden and locked until a predetermined date and time, save toward a specific item or goal, and track daily expenses accurately.

Features

  • Time-Locked Gifting: Funds are locked in Soroban smart contracts and only released after a specified date and time, enforced entirely on-chain.
  • Stablecoin Preservation: Uses USDC on Stellar to keep gift value stable from creation to reveal, eliminating volatility risk.
  • Yield on Savings: Idle savings earn yield through Stellar's AMM liquidity pools or Blend Protocol lending, so balances grow while waiting.
  • Bank Integration: Seamless on/off-ramps connecting stablecoin liquidity to local bank accounts, with Paystack powering Nigerian NGN payouts.
  • Surprise Experience: UI/UX built around anticipation, revealing gifts only at the exact unlock moment.
  • Low-Cost Global Transfers: Stellar's 3–5 second finality and near-zero fees make cross-border gifting practical at any amount.
  • Expense Tracking: Accurate daily expense calculation with categorization and spending summaries.

Stack

Frontend (web/)

Backend (backend/)

  • Server Framework: Node.js with Express.js
  • Database: PostgreSQL with Drizzle ORM
  • Language: TypeScript 5
  • Task Scheduling: Integrated background cleanup cron jobs
  • Integrations: Stripe (Payments), Paystack (NGN bank payouts), Nodemailer (Emails)

Blockchain

  • Smart Contracts: Stellar Soroban (Rust)
  • SDKs: Stellar SDK, Soroban SDK

Stellar Integration

Zendvo uses the Stellar ecosystem for its core financial primitives:

Feature Stellar Primitive
Time-locked gifts Soroban smart contracts with time_lock logic
Stable transfers USDC (Circle) on Stellar
Savings yield Stellar AMM pools / Blend Protocol
Low-fee settlement Stellar Consensus Protocol (SCP)
On/off-ramp Anchor-compatible deposit/withdrawal

Note

Stellar does not have native proof-of-stake staking. Yield on savings is earned through liquidity provision in Stellar's built-in AMM or via the Blend Protocol lending market — both non-custodial and on-chain.


Quick Start

This project is set up as an NPM Workspaces Monorepo. Dependencies are hoisted and both servers can be run concurrently.

  1. Clone and prepare:

    git clone https://github.com/codeze-us/zendvo.git
    cd zendvo
    # Copy and configure environment variables in the backend folder
    cp backend/.env.example backend/.env
  2. Install dependencies (installs and hoists packages for both workspaces):

    npm install
  3. Database setup (runs Drizzle Kit from the backend workspace):

    npm run db:push
  4. Run in development (starts Next.js on port 3000 and Express on port 5000 concurrently):

    npm run dev

Project Structure

web/                      # Frontend Workspace (Next.js client)
├── src/
│   ├── app/              # UI Pages and layouts (pure client routes)
│   ├── components/       # Modular UI React components
│   ├── context/          # Client state & Auth contexts
│   ├── hooks/            # Client React hooks
│   ├── services/         # api.ts fetch client configuration
│   └── lib/              # Client-only utility functions
│
backend/                  # Backend Workspace (Express, DB, Jobs)
├── src/
│   ├── api/              # API endpoints (migrated Next route handlers)
│   ├── server/           # Business services, cron jobs & audit logging
│   ├── lib/              # Drizzle DB setup, validations, token signing
│   ├── adapter.ts        # Express-to-Next standard Request/Response adapter
│   ├── routes.ts         # Express routes mapping
│   └── server.ts         # Express server entry point
├── migrations/           # Raw SQL database migrations
├── drizzle/              # Drizzle Kit schema metadata
└── __tests__/            # Centralized test suites (Jest/ts-jest)

Documentation

Use Cases

Surprise Birthdays

Send a cash gift weeks in advance that only unlocks at exactly 12:00 AM on the recipient's birthday.

Graduation Gifts

Lock funds until a graduation date, ensuring the gift lands at the right moment.

Cross-Border Gifting

Send USDC from anywhere in the world to Nigerian recipients with local bank payout and time-locked reveal logic.

Goal Savings

Set a savings target for an item or date, earn yield while saving, and withdraw when ready.

Contributing

We welcome contributions. See CONTRIBUTING.md for guidelines.

License

MIT — see LICENSE.

Support

Maintainers

Emrys02

Emrys02

GitHub
codeZe-us

codeZe-us

GitHub

Decentralizing the art of surprise on Stellar


About

Stablecoin gifting platform built on Stellar

Resources

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Contributors