Seamless Payment Interoperability for Nigerian SMEs
ScanAza is a Nigerian-based financial solution that enables small and medium enterprises to accept payments across all major Nigerian banks through a single QR code. No hardware required, no complexityβjust scan and pay.
- π― Single QR Code - One code works across all supported Nigerian banks
- β‘ Instant Setup - Get your QR code immediately after signup
- π Secure Payments - Bank-grade security with direct bank app integration
- π± Mobile-First - Optimized for mobile devices and banking apps
- π Dark Mode - Beautiful monochromatic design with theme support
- π¦ Multi-Bank Support - OPay, Moniepoint, Access Bank, Zenith, GTBank, UBA, Kuda, Palmpay, and more
- Node.js 18.17 or later
- npm or yarn
- PostgreSQL database (Neon recommended)
- Clone the repository
git clone https://github.com/yourusername/scanaza.git
cd scanaza- Install dependencies
npm install- Set up environment variables
Create a .env.local file in the root directory:
DATABASE_URL=postgresql://username:password@your-neon-host/scanaza?sslmode=require
JWT_SECRET=your-super-secret-jwt-key-here
NEXT_PUBLIC_APP_URL=http://localhost:3000Generate a secure JWT secret:
openssl rand -base64 32- Set up the database
# Generate migration files
npm run db:generate
# Push schema to database
npm run db:push- Run the development server
npm run devOpen http://localhost:3000 in your browser.
- Create a free account at neon.tech
- Create a new project named "scanaza"
- Copy your connection string
- Add it to
.env.localasDATABASE_URL
The application uses two main tables:
- businesses - Stores business information, credentials, and QR codes
- transactions - Stores payment transaction history (future feature)
scanaza/
βββ src/
β βββ app/
β β βββ api/ # API routes
β β β βββ auth/ # Authentication endpoints
β β β βββ business/ # Business endpoints
β β βββ dashboard/ # Business dashboard
β β βββ login/ # Login page
β β βββ scan/ # QR code scan page
β β βββ layout.tsx # Root layout
β β βββ page.tsx # Landing page
β β βββ globals.css # Global styles
β βββ components/ # React components
β β βββ Header.tsx
β β βββ Hero.tsx
β β βββ SignupForm.tsx
β β βββ Features.tsx
β β βββ Footer.tsx
β βββ lib/
β β βββ db.ts # Database connection
β β βββ schema.ts # Drizzle schema
β β βββ utils.ts # Utility functions
β βββ middleware.ts # Next.js middleware
βββ drizzle/ # Migration files
βββ .env.local # Environment variables (not in git)
βββ drizzle.config.ts # Drizzle configuration
βββ next.config.js # Next.js configuration
βββ tailwind.config.ts # Tailwind configuration
βββ tsconfig.json # TypeScript configuration
| Variable | Description | Example |
|---|---|---|
DATABASE_URL |
PostgreSQL connection string | postgresql://user:pass@host/db |
JWT_SECRET |
Secret key for JWT tokens | your-secret-key |
NEXT_PUBLIC_APP_URL |
Your application URL | http://localhost:3000 |
Important: Never commit .env.local to version control. It's already included in .gitignore.
| Command | Description |
|---|---|
npm run dev |
Start development server |
npm run build |
Build for production |
npm run start |
Start production server |
npm run lint |
Run ESLint |
npm run db:push |
Push schema to database |
npm run db:studio |
Open Drizzle Studio |
npm run db:generate |
Generate migration files |
- Push your code to GitHub
- Import your repository in Vercel
- Add environment variables in Vercel dashboard:
DATABASE_URLJWT_SECRETNEXT_PUBLIC_APP_URL(your Vercel URL)
- Deploy!
# Install Vercel CLI
npm i -g vercel
# Deploy
vercel --prod- Sign up with your business details and bank account
- Download your unique QR code
- Display the QR code at your business location
- Receive instant payments from customers
- Scan the business QR code with your phone camera
- Enter payment amount and product description
- Select your bank app (OPay, Moniepoint, Access, etc.)
- Complete payment in your banking app with pre-filled details
- Access Bank
- Zenith Bank
- GTBank
- First Bank
- UBA
- OPay
- Moniepoint
- Kuda Bank
- Palmpay
- Wema Bank
More banks coming soon!
ScanAza features a clean, monochromatic design inspired by modern financial platforms:
- Minimalist black and white color scheme
- Smooth animations and transitions
- Glass-morphism effects
- Full dark mode support
- Mobile-responsive layout
- Password Security: Passwords hashed with bcrypt (12 rounds)
- Authentication: JWT tokens with 7-day expiration
- Cookies: HttpOnly, secure, SameSite cookies
- SQL Injection: Protected by Drizzle ORM parameterized queries
- XSS Protection: React's built-in escaping
- Start the development server
- Navigate to
http://localhost:3000 - Create a test account
- Download the QR code
- Scan with your phone to test the payment flow
- Deploy to Vercel
- Use a real mobile device
- Ensure banking apps are installed
- Test deep link functionality
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Follow TypeScript best practices
- Use meaningful commit messages
- Test your changes thoroughly
- Update documentation as needed
This project is licensed under the MIT License - see the LICENSE file for details.
- Design inspired by Terra Industries
- Built with Next.js
- Database powered by Neon
- Icons by Lucide
For support, email support@scanaza.com or open an issue on GitHub.
- Transaction history dashboard
- Real-time payment notifications
- Multiple QR codes per business
- Payment analytics and insights
- SMS/Email notifications
- Webhook integration
- Mobile app (iOS/Android)
- API for third-party integrations
Q: Is this free to use?
A: Yes, ScanAza is completely free for businesses.
Q: Do I need special hardware?
A: No, just a printer to print your QR code or a device to display it.
Q: Which banks are supported?
A: All major Nigerian banks including OPay, Moniepoint, Access, Zenith, GTBank, UBA, Kuda, and Palmpay.
Q: Is my money safe?
A: Yes, payments go directly to your registered bank account. ScanAza never holds your money.
Q: How quickly do I receive payments?
A: Payments are instant and go directly to your bank account.
- Framework: Next.js 14 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- Database: PostgreSQL (Neon)
- ORM: Drizzle ORM
- Authentication: JWT + bcrypt
- QR Codes: qrcode library
- Icons: Lucide React
- Deployment: Vercel