Skip to content

A feature-rich music streaming platform

License

Notifications You must be signed in to change notification settings

mrcatlait/neko-music

Repository files navigation

Neko Music

GitHub Actions Workflow Status License: MIT

Neko Music is a full-featured music streaming platform designed to offer a smooth experience for discovering, playing, and curating music. This monorepo hosts two main applications: a sleek Angular web interface and a powerful NestJS backend, both managed with Moonrepo for streamlined development and orchestration.

Technologies

Web Application (Frontend)

  • Framework: Angular
  • Design: Custom UI based on Material 3 guidelines
  • Testing: Vitest (unit), Cypress (E2E), PactJS (contract)
  • Code Quality: ESLint, Prettier, Stylelint

Server Application (Backend)

  • Framework: Elysia (Bun runtime)
  • Database: PostgreSQL with raw SQL
  • Testing: Vitest (unit & integration), PactJS (contract)
  • Code Quality: ESLint, Prettier

Moonrepo

  • Build orchestration and task caching for faster development

Project Structure

/neko-music
├── /apps
│   ├── /web                  # Angular-based web application
│   └── /server               # Elysia-based backend application
├── /contracts                # Pact contracts for API communication testing
└── /packages                 # Shared libraries and configurations
    ├── /eslint-config       # Shared ESLint configuration
    ├── /stylelint-config    # Shared Stylelint configuration
    ├── /vitest              # Shared Vitest configuration
    ├── /permissions         # Shared permissions library
    └── /web-test-utils      # Shared testing utilities

For more detailed information about specific components:

Getting Started

To get started, you'll need Moonrepo installed globally. Moonrepo will automatically install all required dependencies.

Prerequisites

Before setting up the project, you'll need Moonrepo installed. You have several options to install it:

Using proto (recommended):

proto plugin add moon "https://raw.githubusercontent.com/moonrepo/moon/master/proto-plugin.toml" --to global
proto install moon

Using npm:

npm install --save-dev @moonrepo/cli

On Linux, macOS, or WSL:

curl -fsSL https://moonrepo.dev/install/moon.sh | bash

Then add to your PATH:

export PATH="$HOME/.moon/bin:$PATH"

On Windows (PowerShell):

irm https://moonrepo.dev/install/moon.ps1 | iex

For more detailed information about Moonrepo installation and usage, refer to the official Moonrepo Documentation.

Running the Applications

Once Moonrepo is installed, you can easily manage the frontend and backend applications using the following commands:

  • Web Application:

    moon web:start       # Starts the web application locally
    moon web:test        # Runs unit and integration tests
    moon web:build       # Builds the web application for production
  • Server Application:

    moon server:start    # Starts the server locally
    moon server:test     # Runs unit, integration, and contract tests
    moon server:build    # Builds the server for production

License

This project is licensed under the MIT License. See the LICENSE file for more information.

Roadmap

Phase 1: Foundation and Core Functionality ✓

  • Set up project structure (Angular frontend, Elysia backend)
  • Implement basic user authentication
  • Create basic music player with standard controls
  • Implement basic playlist management
  • Set up CI/CD pipeline

Phase 2: Core Music Features

  • Implement MPEG DASH streaming
  • Add support for various audio formats
  • Implement basic audio controls (equalizer, volume normalization)
  • Add queue management and shuffle play
  • Implement continuous playback

Phase 3: Library Management

  • Enhanced search functionality
  • Advanced playlist management
  • Basic metadata management
  • Recently played tracks
  • Favorite tracks system

Phase 4: User Experience

  • Responsive web design
  • Create Progressive Web App (PWA)
  • Implement offline mode for saved tracks
  • Add keyboard shortcuts
  • Implement drag-and-drop playlist management

Phase 5: Social Features

  • Basic user profiles
  • Playlist sharing
  • Follow/unfollow users
  • Activity feed for followed users
  • Social playlist collaboration

Phase 6: Cross-Platform Support

  • Develop responsive web design for mobile browsers
  • Create Progressive Web App (PWA) version

Phase 6: Advanced Features

  • Smart playlists based on listening history
  • Basic recommendation system
  • Last.fm integration
  • Lyrics display
  • Basic audio visualization

Ongoing

  • Security improvements
  • Performance optimizations
  • Accessibility enhancements
  • Documentation updates