An open API service indexing awesome lists of open source software.

https://github.com/phash/musikersuche

Musicians Networking Platform - Find musicians, bands, and gigs in your area
https://github.com/phash/musikersuche

Last synced: 4 months ago
JSON representation

Musicians Networking Platform - Find musicians, bands, and gigs in your area

Awesome Lists containing this project

README

          

# Musikersuche

A musician networking platform where musicians create profiles, search by genre, instrument and location, and connect with each other. Built with a microservices architecture.

## Tech Stack

**Backend:** Java 21, Spring Boot 3.4, Netflix DGS (GraphQL), PostgreSQL 16 + PostGIS, Redis, RabbitMQ, Flyway
**Frontend:** Vue 3 (Composition API), TypeScript, Vite 7, Tailwind CSS, Apollo Client, Pinia
**Mobile:** Capacitor 8 (Android hybrid app), PWA with Workbox
**Infrastructure:** Docker, Nginx, Prometheus + Grafana, GitHub Actions CI

## Architecture

```
┌──────────┐
│ Nginx │
│ (Reverse │
│ Proxy) │
└────┬─────┘

┌────────────┼────────────┐
│ │ │
┌────▼───┐ ┌─────▼────┐ ┌───▼────┐
│Frontend│ │API Gateway│ │ Chat │
│ (Vue) │ │ (GraphQL) │ │Service │
└────────┘ │ :8080 │ │ :8084 │
└─────┬─────┘ └───┬────┘
│ │
┌────────────────────┼────────────┼──────────────────┐
│ │ │ │
┌───▼───┐ ┌──────┐ ┌────▼──┐ ┌──────▼┐ ┌──────┐ ┌──────┐
│ Auth │ │Profile│ │Search │ │ Media │ │Event │ │Admin │
│:8081 │ │:8082 │ │:8083 │ │:8085 │ │:8086 │ │:8088 │
└───┬───┘ └──┬───┘ └───┬───┘ └───┬───┘ └──┬───┘ └──┬───┘
│ │ │ │ │ │
│ ┌────▼──┐ ┌────▼──┐ │ ┌────▼──┐ │
│ │Payment│ │ Area │ │ │ │ │
│ │:8087 │ │:8089 │ │ │ │ │
│ └───┬───┘ └───┬───┘ │ │ │ │
│ │ │ │ │ │ │
┌───▼───────▼─────────▼─────────▼───▼───────▼─────▼───┐
│ PostgreSQL + Redis + RabbitMQ │
└──────────────────────────────────────────────────────┘
```

### Services

| Service | Port | Description |
|---------|------|-------------|
| api-gateway | 8080 | GraphQL API, JWT authentication, rate limiting |
| auth-service | 8081 | Registration, login, OAuth2, password reset |
| profile-service | 8082 | Musician & band profiles, search |
| search-service | 8083 | Favorites, matching algorithm, notifications |
| chat-service | 8084 | WebSocket messaging, conversations |
| media-service | 8085 | File uploads (images, audio) |
| event-service | 8086 | Gigs, events, promotions |
| payment-service | 8087 | PayPal subscriptions, invoices |
| admin-service | 8088 | Genres, instruments, admin functions |
| area-service | 8089 | Communities, memberships, forum |

## Features

- **Musician & Band Profiles** - Create detailed profiles with instruments, genres, experience, location (PostGIS), profile picture
- **Search & Discovery** - Filter musicians and bands by genre, instrument, location radius, experience level
- **Smart Matching** - Weighted scoring algorithm (instruments 40%, genres 40%, location 20%) with daily recalculation
- **Real-time Chat** - WebSocket messaging with band inbox support, rate-limited for free tier
- **Gigs & Events** - Post and browse gigs with inquiry system
- **Job Board** - Post job openings and search requests, applications with status tracking
- **Communities (Areas)** - Create themed communities with forums, events, and membership management
- **Guestbook** - Leave messages on profiles (rate-limited)
- **Notifications** - In-app notifications for matches, messages, job matches
- **Premium Subscriptions** - PayPal integration with Free/Pro tiers
- **Admin Dashboard** - User management, abuse reports, audit logs, system configuration
- **OAuth2** - Google and Facebook login
- **Referral System** - Invite codes with premium rewards
- **PWA** - Installable progressive web app with offline support
- **Android App** - Capacitor hybrid app with native camera, geolocation, push notifications
- **i18n** - German and English with language switcher
- **Dark Mode** - System-aware with manual toggle
- **GDPR Compliance** - Data export, cookie consent, privacy controls
- **Monitoring** - Prometheus metrics, Grafana dashboards, alerting

## Prerequisites

- Docker & Docker Compose
- Java 21 (for local backend development)
- Node.js 20+ (for frontend development)

## Quick Start

### 1. Clone and configure

```bash
git clone https://github.com/your-org/musikersuche.git
cd musikersuche
cp .env.example .env
# Edit .env with your configuration
```

### 2. Start infrastructure

```bash
docker compose up -d postgres redis rabbitmq
```

### 3. Start backend services

Each service has its own Maven wrapper:

```bash
cd services/auth-service && cmd /c "mvnw.cmd spring-boot:run"
# Repeat for each service, or use docker compose:
docker compose up -d
```

### 4. Start frontend

```bash
cd frontend
npm install
npm run dev
```

The app will be available at `http://localhost:5173` (dev) or `http://localhost:3000` (Docker).

## Development

### Build

```bash
# Single backend service
cd services/ && cmd /c "mvnw.cmd compile -DskipTests -q"

# Frontend
cd frontend && npx vite build

# Android (Capacitor)
cd frontend && npm run build:capacitor && npx cap sync android
```

### Test

```bash
# Backend unit tests (per service)
cd services/ && cmd /c "mvnw.cmd test"

# Frontend unit tests (322 tests)
cd frontend && npm run test:run

# E2E tests (369 tests, some require running backend)
cd frontend && npm run test:e2e
```

### Project Structure

```
musikersuche/
├── services/
│ ├── api-gateway/ # GraphQL gateway
│ ├── auth-service/ # Authentication
│ ├── profile-service/ # Profiles & search
│ ├── search-service/ # Matching & favorites
│ ├── chat-service/ # Messaging
│ ├── media-service/ # File uploads
│ ├── event-service/ # Gigs & events
│ ├── payment-service/ # Payments
│ ├── admin-service/ # Administration
│ └── area-service/ # Communities
├── frontend/ # Vue.js SPA
│ ├── src/
│ │ ├── components/ # Reusable components
│ │ ├── views/ # Page views
│ │ ├── stores/ # Pinia stores
│ │ ├── composables/ # Vue composables
│ │ └── i18n/ # Translations (de/en)
│ └── e2e/ # Playwright tests
├── shared/ # Shared Java library
├── docker/ # Docker configurations
├── nginx/ # Nginx config
├── monitoring/ # Prometheus & Grafana
├── docs/ # Documentation
├── docker-compose.yml # Local development
└── docker-compose.prod.yml # Production
```

## Production Deployment

```bash
# On the VPS
cd /opt/musikersuche
git pull origin master

# Rebuild and restart affected services
docker compose -f docker-compose.prod.yml build --no-cache
docker compose -f docker-compose.prod.yml up -d

# After frontend changes, reload nginx
docker compose -f docker-compose.prod.yml exec nginx nginx -s reload
```

See [VPS Deployment Guide](docs/VPS_DEPLOYMENT_GUIDE.md) and [Production Checklist](PRODUCTION_CHECKLIST.md) for details.

## Documentation

| Document | Description |
|----------|-------------|
| [CLAUDE.md](CLAUDE.md) | Full technical reference |
| [Styleguide](docs/STYLEGUIDE.md) | Design system & brand guidelines |
| [VPS Deployment](docs/VPS_DEPLOYMENT_GUIDE.md) | Production deployment guide |
| [PWA Guide](frontend/PWA_GUIDE.md) | Progressive Web App documentation |
| [Android Integration](frontend/ANDROID_INTEGRATION.md) | Capacitor mobile app setup |
| [CI/CD Strategy](docs/CI_CD_STRATEGY.md) | GitHub Actions pipeline |
| [Roadmap](docs/ROADMAP.md) | Development roadmap & progress |

## Environment Variables

Copy `.env.example` to `.env`. Key variables:

| Variable | Description |
|----------|-------------|
| `POSTGRES_PASSWORD` | Database password |
| `JWT_SECRET` | JWT signing key (min 256 bits) |
| `CORS_ALLOWED_ORIGINS` | Allowed frontend origins |
| `MAIL_HOST` / `MAIL_PASSWORD` | SMTP configuration |
| `PAYPAL_CLIENT_ID` / `PAYPAL_CLIENT_SECRET` | PayPal integration |
| `GOOGLE_CLIENT_ID` / `FACEBOOK_CLIENT_ID` | OAuth2 providers |
| `FIREBASE_ENABLED` | Push notifications (optional) |

See [.env.example](.env.example) for the full list.

## License

All rights reserved.