Skip to content

Fretsome - Music Practice Tool

Fretsome

A decidedly nerdy tool to help study music - This project serves dual purposes: creating a powerful music practice application and providing a learning platform for modern Rust development.

Overview

Fretsome is a multi-platform music practice tool that combines structured learning with modern web technologies. It’s designed to help musicians practice more effectively through data-driven insights and structured exercises.

Architecture

The project is built as a modular suite with multiple interfaces:

fretsome-cli

Command-line interface using Ratatui for rich terminal interactions

fretsome-tui

Text-based user interface for detailed practice sessions

fretsome-web

Web interface built with Axum and Leptos

fretsome-mobile

Mobile/desktop apps using Tauri

fretsome-api

REST API backend for data management

fretsome-core

Core business logic and data models

Technology Stack

Frameworks & Libraries

  • Tauri - Cross-platform desktop/mobile applications
  • Ratatui - Rich terminal user interfaces
  • Leptos - Modern Rust web framework
  • Axum - High-performance web framework
  • SQLite - Embedded database for practice data
  • ABC Notation - Standard for music notation storage

Development Tools

  • Just - Modern command runner (build system)
  • mdBook - Documentation generation
  • Cargo - Rust package manager and build tool

Getting Started

Prerequisites

  • Rust 1.70+
  • Node.js (for web components)
  • SQLite3

Quick Start

Terminal window
# Clone the repository
git clone https://codeberg.org/RyanParsley/fretsome.git
cd fretsome
# Build all components
just build
# Run the CLI version
just run-cli
# Start the web interface
just run-web

Available Commands

Terminal window
just build # Build all components
just test # Run test suite
just lint # Code quality checks
just docs # Generate documentation
just run-cli # Start CLI interface
just run-web # Start web server
just run-tui # Start terminal UI

Project Structure

fretsome/
├── fretsome-core/ # Core business logic
├── fretsome-api/ # REST API backend
├── fretsome-cli/ # Command-line interface
├── fretsome-tui/ # Terminal user interface
├── fretsome-web/ # Web application
├── fretsome-mobile/ # Mobile/desktop apps
├── data/ # Sample music data
├── music/ # Music notation files
├── docs/ # Documentation
├── book.toml # mdBook configuration
└── justfile # Build recipes

Key Features

Music Practice Tools

  • Structured Exercises - Guided practice sessions with specific goals
  • Progress Tracking - Data-driven insights into practice habits
  • ABC Notation Support - Standard music notation format
  • Multiple Interfaces - Choose your preferred interaction method

Learning Outcomes

  • Rust Ecosystem - Deep dive into modern Rust frameworks
  • Cross-Platform Development - Building for web, desktop, mobile, and CLI
  • Architecture Patterns - Modular design with clear separation of concerns
  • Database Design - SQLite integration for data persistence

Development Philosophy

Fretsome embodies the principle that learning should be practical and enjoyable. By building a real application with multiple interfaces, it provides hands-on experience with:

  • Modern Rust development practices
  • Cross-platform application architecture
  • User experience design across different platforms
  • Database design and data modeling
  • API design and documentation

Future Plans

  • Practice Analytics - Advanced statistics and insights
  • Social Features - Share progress and exercises with others
  • Integration APIs - Connect with music hardware and software
  • Mobile Apps - Native iOS and Android applications

Contributing

This project welcomes contributions! Whether you’re interested in:

  • Music theory and practice methods
  • Rust development and framework expertise
  • UI/UX design for different platforms
  • Documentation and educational content

View on Codeberg | Repository Structure