Sprout Point-of-Sale

Sprout turns a Raspberry Pi with a mini TFT display into a physical payment terminal. A merchant uses two hardware buttons to set a price, the device generates a Solana Pay QR code, and the customer scans it with any Solana wallet to pay in USDC. The moment the payment confirms on-chain, IT plays a chime and updates in real time!

Raspberry Pi 5
+-----------+     writes JSON     +-----------+     SSE / REST     +-----------+
|  main.py  | ----------------->  | server.py | ----------------->  | Dashboard |
|  (POS)    |                     | (Flask)   |                     | (React)   |
+-----------+                     +-----------+                     +-----------+
      |                                 |                                 |
      v                                 v                                 v
  TFT Display                    Solana Devnet RPC                  Mac Browser
  GPIO Buttons                   USDC Balance Check                 Payment Chime

Features

  • Hardware POS terminal with physical button controls and TFT display
  • Dynamic QR codes with unique reference keys per transaction for reliable payment matching
  • On-chain verification polling Solana RPC for confirmed USDC transfers
  • Real-time dashboard with revenue charts, transaction histogram, stats cards, and device status
  • Instant payment notifications via SSE with a synthesized audio chime
  • Transaction persistence -- local JSON logs merged with on-chain data so history survives restarts
  • Wallet management -- auto-generates and stores a Solana keypair on first run, private key recoverable
  • Device heartbeat -- dashboard shows live online/offline status of the POS terminal
  • Balance tracking -- live SOL and USDC balance display from devnet

Setup

pip install flask flask-cors pillow qrcode numpy requests solders gpiozero
python3 server.py
python3 main.py

Built With

Share this project:

Updates