streaming african music
# Sekele
A music streaming web application for discovering and supporting African artists. Built with Next.js 15, React 19, Prisma, and PostgreSQL.
## Features
- **Auth** — Email/password sign-up with role selection (Artist/Listener), optional Google OAuth, password reset
- **Free tier** — 3 lifetime song unlocks per listener (stream or download counts once)
- **Premium** — Stripe Checkout subscriptions with regional pricing (USD/XAF), Mobile Money placeholder
- **Music player** — Persistent bottom bar with play/pause, progress, volume
- **Artist dashboard** — Profile, upload, track management, analytics, revenue share placeholders
- **Listener dashboard** — Library, free tier indicator, subscription management
- **Admin panel** — User/content management, platform metrics
- **Storage** — S3 presigned URLs with local filesystem fallback
## Project Structure
```
sekele/
├── apps/web/ # Next.js app (frontend + API routes)
├── packages/shared/ # Shared types and constants
├── .env.example # Environment variable template
└── README.md
```
## Prerequisites
- Node.js 20+
- PostgreSQL database
- npm
## Quick Start
### 1. Clone and install
```bash
cd ~/Projects/sekele
npm install
```
### 2. Configure environment
Copy the example env file and set your database URL:
```bash
cp .env.example apps/web/.env.local
# Edit apps/web/.env.local — at minimum set DATABASE_URL and NEXTAUTH_SECRET
```
Generate a secret for NextAuth:
```bash
openssl rand -base64 32
```
### 3. Set up the database
```bash
npm run db:migrate
npm run db:seed
```
### 4. Start development server
```bash
npm run dev
```
Open
localhost.
## Test Accounts
After seeding, use these accounts (password: `password123`):
| Role | Email |
|----------|--------------------|
| Admin | admin@sekele.app |
| Artist | artist@sekele.app |
| Listener | listener@sekele.app|
## Environment Variables
See `.env.example` for the full list. Key variables:
| Va …