Skip to content

mbianchidev/every-music

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

69 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Every.music

Find your band. Build your musical network. Connect with musicians worldwide.


🎡 What is Every.music?

Every.music is a platform that revolutionizes how musicians connect:

  • Find Band Members: Browse announcements from musicians looking for collaborators
  • Build Your Profile: Showcase your skills, instruments, and musical journey
  • Global Community: Join musicians worldwide sharing the same passion

Think of it as:

  • 🎸 LinkedIn for musicians
  • 🎀 Craigslist for bands, but better
  • 🎹 Instagram meets musical collaboration

πŸ—οΈ Architecture & Technology Stack

Complete Re-implementation (2024)

This project has been completely rebuilt from the ground up with modern technologies:

Backend API

  • Fastify - High-performance Node.js framework
  • PostgreSQL - Robust relational database
  • Custom architecture with unique naming conventions
  • RESTful API with JWT authentication
  • Located in: ./backend/

Frontend Web App

  • React 18 - Modern UI framework
  • Vite - Lightning-fast build tool
  • Neo-Brutalist design with music festival aesthetics
  • Single-file architecture for simplicity
  • Located in: ./frontend/

Desktop App

  • Tauri v2 - Cross-platform desktop wrapper
  • Wraps the React frontend for Windows, macOS, Linux
  • Native performance with web technologies
  • Located in: ./frontend/src-tauri/

Mobile Apps

  • Tauri v2 - Cross-platform mobile via the same codebase
  • Android (SDK 24+ / Android 7.0+) and iOS support
  • Edge-to-edge rendering with safe area insets
  • Mobile-optimized touch targets and responsive layout
  • Guide: ./frontend/MOBILE.md

Database

  • PostgreSQL 16 - Production-grade database
  • Complete schema for MVP features
  • Seeded with instruments and genres data
  • Schema in: ./backend/src/realm/schema.sql

Containerization

  • Docker support for all components
  • docker-compose for full-stack orchestration
  • Production-ready container configurations

πŸš€ Quick Start

Prerequisites

  • Node.js 20+
  • PostgreSQL 16+ (or use Docker)
  • Rust (for Tauri desktop builds)

Running with Docker (Recommended)

# Start the entire stack
docker-compose up

# Access the application
# Frontend: http://localhost
# Backend API: http://localhost:8080
# Database: localhost:5432

Running Locally

1. Start the Database

# Using Docker
docker run -d \
  --name everymusic-db \
  -e POSTGRES_USER=everymusician \
  -e POSTGRES_PASSWORD=everyband2024 \
  -e POSTGRES_DB=everymusic_realm \
  -p 5432:5432 \
  postgres:16-alpine

# Initialize schema
psql -h localhost -U everymusician -d everymusic_realm -f backend/src/realm/schema.sql

2. Start the Backend

cd backend
npm install
cp .env.template .env  # Edit with your settings
npm start
# API running on http://localhost:8080

3. Start the Frontend

cd frontend
npm install
npm run begin
# Web app running on http://localhost:3000

4. Build Desktop App (Optional)

cd frontend
npm run desktop        # Development mode
npm run desktop:build  # Production build

5. Build Mobile Apps (Optional)

cd frontend

# Android (requires Android Studio + NDK)
npm run android        # Run on device/emulator
npm run android:build  # Production APK/AAB

# iOS (requires macOS + Xcode)
npm run ios            # Run on simulator
npm run ios:build      # Production IPA

See frontend/MOBILE.md for detailed mobile setup instructions.


πŸ“– MVP Features (v1.0.0)

βœ… Authentication

  • Email + password registration with verification
  • Google OAuth integration
  • JWT-based session management
  • Secure password hashing

βœ… User Profiles

  • Create and edit profiles
  • Add instruments with experience levels
  • List musical projects and genres
  • Upload profile pictures
  • Search profiles with filters

βœ… Announcements/Ads

  • Create announcements looking for musicians
  • Browse feed of all announcements
  • Filter by location, instrument, genre
  • Save favorite announcements
  • Like/dislike system
  • Set expiration dates

πŸ“‚ Project Structure

every-music/
β”œβ”€β”€ backend/                  # Fastify API server
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ nexus.js         # Main server (unique naming)
β”‚   β”‚   β”œβ”€β”€ realm/           # Database layer
β”‚   β”‚   β”œβ”€β”€ orchestrators/   # Routes
β”‚   β”‚   β”œβ”€β”€ conductors/      # Business logic
β”‚   β”‚   β”œβ”€β”€ guards/          # Authentication
β”‚   β”‚   └── engines/         # Utilities
β”‚   β”œβ”€β”€ Dockerfile
β”‚   └── package.json
β”‚
β”œβ”€β”€ frontend/                 # React + Vite web app
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   └── main.jsx         # Single-file app architecture
β”‚   β”œβ”€β”€ src-tauri/           # Tauri desktop integration
β”‚   β”œβ”€β”€ Dockerfile
β”‚   └── package.json
β”‚
β”œβ”€β”€ docs/
β”‚   └── main.md              # Original requirements & vision
β”‚
β”œβ”€β”€ docker-compose.yml        # Full-stack orchestration
└── README.md                # This file

οΏ½οΏ½ Unique Architecture Decisions

Custom Naming Conventions

We use unique names throughout to make the codebase memorable:

  • Nexus - Main server entry point (not "app" or "server")
  • Realm - Database layer (not "db")
  • Conductors - Business logic handlers (not "controllers")
  • Orchestrators - Route definitions (not "routes")
  • Guards - Authentication middleware (not "auth middleware")
  • Engines - Utility functions (not "utils")
  • Nucleus - Frontend state manager (not "store")
  • Conduit - HTTP client (not "api" or "fetch")

Single-File Frontend

The entire React frontend is in one main.jsx file (900+ lines):

  • Reduces complexity
  • Easy to understand flow
  • No excessive file navigation
  • Perfect for MVP scope

Custom JWT Implementation

We implemented JWT from scratch without libraries:

  • Better understanding of authentication
  • No dependency vulnerabilities
  • Custom claims and validation
  • Educational value

🐳 Docker Support

Individual Containers

# Backend only
cd backend && docker build -t everymusic-api .
docker run -p 8080:8080 everymusic-api

# Frontend only
cd frontend && docker build -t everymusic-web .
docker run -p 80:80 everymusic-web

Full Stack

# Everything together
docker-compose up --build

# Run in background
docker-compose up -d

# View logs
docker-compose logs -f

# Stop everything
docker-compose down

πŸ”§ Development

Backend Development

cd backend
npm install
npm run begin     # Start development server
npm run verify    # Validate code

Frontend Development

cd frontend
npm install
npm run begin     # Start dev server (port 3000)
npm run compile   # Build for production
npm run serve     # Preview production build

Desktop Development

cd frontend
npm run desktop          # Run Tauri in dev mode
npm run desktop:build    # Build desktop app

Mobile Development

cd frontend
npm run android          # Run on Android device/emulator
npm run android:build    # Build Android APK/AAB
npm run ios              # Run on iOS simulator (macOS only)
npm run ios:build        # Build iOS IPA (macOS only)

For full mobile setup details, see frontend/MOBILE.md.


🌍 Environment Variables

Create .env files from templates:

Backend (backend/.env)

NEXUS_PORT=8080
REALM_HOST=localhost
REALM_PORT=5432
REALM_NAME=everymusic_realm
REALM_USER=everymusician
REALM_SECRET=everyband2024
AUTH_TOKEN_KEY=your-secret-key-here
GOOGLE_OAUTH_ID=your-google-client-id
GOOGLE_OAUTH_SECRET=your-google-client-secret

Frontend (uses backend API URL)

  • Configured in src/main.jsx
  • Default: http://localhost:8080

πŸ“š Documentation

  • API Documentation: backend/API.md
  • Development Guide: backend/DEVELOPMENT.md
  • Frontend Guide: frontend/GUIDE.md
  • Original Vision: docs/main.md
  • Implementation Details: backend/IMPLEMENTATION.md

πŸ›£οΈ Roadmap

See docs/main.md for the complete feature roadmap:

  • v1.0.0 - MVP (Current)
  • v2.0.0 - Community features, in-app messaging
  • v3.0.0 - Band profiles, group features
  • v4.0.0 - Events and concerts
  • v5.0.0 - Marketplace and services

οΏ½οΏ½ Contributing

This project welcomes contributions!

  1. Read the development guides in backend/DEVELOPMENT.md and frontend/GUIDE.md
  2. Follow the unique naming conventions
  3. Keep the codebase simple and maintainable
  4. Test your changes thoroughly

πŸ“ License

ISC License - See repository for details


🎸 Tech Philosophy

Why these choices?

  • Tauri over Electron: Smaller bundle size, better performance
  • Fastify over Express: Better performance, modern API
  • PostgreSQL: Reliability and feature-richness for MVP
  • React: Large community, mature ecosystem
  • Vite: Fast builds, great DX
  • Docker: Consistency across environments

Principles:

  • ✨ Unique and memorable (custom naming)
  • πŸš€ Performance matters (Fastify, Tauri, Vite)
  • πŸ“¦ Container-first (Docker everywhere)
  • 🎯 MVP-focused (build what's needed)
  • πŸ”’ Security-conscious (custom JWT, validation)

🎡 Join the Revolution

Every.music is more than an app - it's a movement to connect musicians globally and make collaboration effortless.

Star this repo if you believe in the vision!

Questions? Open an issue or check the docs.

Let's make music together. 🎸🎹🎀🎧

About

every.music

Resources

License

Security policy

Stars

Watchers

Forks

Releases

No releases published

Sponsor this project

Packages

 
 
 

Contributors