diff --git a/CHANGELOG.md b/CHANGELOG.md index 49508b3..be25231 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.2.0] - 2026-01-28 + +### Added + +- Settings and Dashboard links on the WordPress Plugins page for quick access +- Comprehensive user guide (`USERGUIDE.md`) covering installation, configuration, and all features + ## [0.1.1] - 2026-01-28 ### Fixed @@ -146,6 +153,7 @@ Initial release of WP FediStream - a WordPress plugin for streaming music over A --- -[Unreleased]: https://src.bundespruefstelle.ch/magdev/wp-fedistream/compare/v0.1.1...HEAD +[Unreleased]: https://src.bundespruefstelle.ch/magdev/wp-fedistream/compare/v0.2.0...HEAD +[0.2.0]: https://src.bundespruefstelle.ch/magdev/wp-fedistream/compare/v0.1.1...v0.2.0 [0.1.1]: https://src.bundespruefstelle.ch/magdev/wp-fedistream/compare/v0.1.0...v0.1.1 [0.1.0]: https://src.bundespruefstelle.ch/magdev/wp-fedistream/releases/tag/v0.1.0 diff --git a/CLAUDE.md b/CLAUDE.md index 015f152..9bd44af 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -24,12 +24,9 @@ This project is proudly **"vibe-coded"** using Claude.AI - the entire codebase w **Note for AI Assistants:** Clean this section after the specific features are done or new releases are made. Effective changes are tracked in `CHANGELOG.md`. Do not add completed versions here - document them in the Session History section at the end of this file. -### Version 0.1.2 (Bugfix) +### Version 0.2.1 (Bugfix) -### Version 0.2.0 (Minor) - -- Add a link to the settings page to the plugin overview page. -- Write a comprehensive user-guide on how to install, configure and get the plugin with all available features up and running +### Version 0.3.0 (Minor) ## Technical Stack diff --git a/README.md b/README.md index 123566e..c75f5eb 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Stream music over ActivityPub - Build your own music streaming platform for Musicians and Labels. -[![Version](https://img.shields.io/badge/version-0.1.1-blue.svg)](CHANGELOG.md) +[![Version](https://img.shields.io/badge/version-0.2.0-blue.svg)](CHANGELOG.md) [![PHP](https://img.shields.io/badge/PHP-%3E%3D8.3-purple.svg)](https://php.net) [![WordPress](https://img.shields.io/badge/WordPress-%3E%3D6.4-blue.svg)](https://wordpress.org) [![License](https://img.shields.io/badge/license-GPL--2.0%2B-green.svg)](https://www.gnu.org/licenses/gpl-2.0.html) diff --git a/USERGUIDE.md b/USERGUIDE.md new file mode 100644 index 0000000..6d22305 --- /dev/null +++ b/USERGUIDE.md @@ -0,0 +1,550 @@ +# WP FediStream User Guide + +A comprehensive guide to setting up and using WP FediStream, the WordPress plugin for streaming music over ActivityPub. + +## Table of Contents + +1. [Installation](#installation) +2. [Initial Configuration](#initial-configuration) +3. [Managing Artists](#managing-artists) +4. [Creating Albums](#creating-albums) +5. [Adding Tracks](#adding-tracks) +6. [Building Playlists](#building-playlists) +7. [Using Shortcodes](#using-shortcodes) +8. [Widgets](#widgets) +9. [ActivityPub Integration](#activitypub-integration) +10. [WooCommerce Integration](#woocommerce-integration) +11. [User Library Features](#user-library-features) +12. [Troubleshooting](#troubleshooting) + +--- + +## Installation + +### Requirements + +- PHP 8.3 or higher +- WordPress 6.4 or higher +- Composer (for installation from source) + +### Optional Requirements + +- [ActivityPub Plugin](https://wordpress.org/plugins/activitypub/) - For Fediverse integration +- [WooCommerce](https://woocommerce.com/) 10.0+ - For selling music + +### From Source + +1. Navigate to your WordPress plugins directory: + + ```bash + cd wp-content/plugins/ + ``` + +2. Clone or download the repository: + + ```bash + git clone https://src.bundespruefstelle.ch/magdev/wp-fedistream.git + ``` + +3. Install Composer dependencies: + + ```bash + cd wp-fedistream + composer install --no-dev + ``` + +4. Activate the plugin in WordPress admin under **Plugins > Installed Plugins** + +5. Navigate to **FediStream** in the admin menu to get started + +--- + +## Initial Configuration + +After activation, configure FediStream through **FediStream > Settings**. + +### General Settings + +| Setting | Description | Default | +|---------|-------------|---------| +| ActivityPub Integration | Enable Fediverse features for sharing releases | Enabled | +| WooCommerce Integration | Enable selling music (requires WooCommerce) | Disabled | +| Max Upload Size | Maximum audio file size in MB | 50 MB | +| Default License | Default copyright license for new uploads | All Rights Reserved | + +### License Options + +FediStream supports various licensing options: + +- **All Rights Reserved** - Traditional copyright +- **CC BY** - Creative Commons Attribution +- **CC BY-SA** - Attribution-ShareAlike +- **CC BY-NC** - Attribution-NonCommercial +- **CC BY-NC-SA** - Attribution-NonCommercial-ShareAlike +- **CC0** - Public Domain Dedication + +--- + +## Managing Artists + +Artists represent musicians, bands, duos, or collectives. Each artist can have their own ActivityPub presence. + +### Creating an Artist + +1. Go to **FediStream > Artists > Add New** +2. Fill in the required information: + - **Name** - Artist or band name + - **Biography** - Detailed description (supports rich text) + - **Featured Image** - Artist photo/logo +3. Configure artist details in the meta boxes: + - **Artist Type** - Solo, Band, Duo, or Collective + - **Formation Date** - When the artist/band started + - **Location** - City, Country + - **Website** - Official website URL +4. Add social media links: + - Mastodon, Twitter/X, Instagram, Facebook, YouTube, Spotify, Bandcamp, SoundCloud +5. For bands: Add band members with their names and roles +6. Assign genres from the Genre taxonomy +7. Publish the artist + +### Artist Types + +| Type | Description | +|------|-------------| +| Solo | Individual musician | +| Band | Group of musicians | +| Duo | Two-person musical act | +| Collective | Loose group of collaborating artists | + +--- + +## Creating Albums + +Albums organize your music into releases. They can be full albums, EPs, singles, or compilations. + +### Creating an Album + +1. Go to **FediStream > Albums > Add New** +2. Enter the album information: + - **Title** - Album name + - **Description** - Album notes, liner notes, story + - **Featured Image** - Album artwork (recommended: 1400x1400 pixels) +3. Configure album metadata: + - **Artist** - Select the primary artist + - **Album Type** - Album, EP, Single, or Compilation + - **Release Date** - Official release date + - **Catalog Number** - Your catalog reference (optional) + - **UPC/EAN** - Universal Product Code (optional) +4. Assign genres and license +5. Publish the album + +### Album Types + +| Type | Description | Typical Track Count | +|------|-------------|---------------------| +| Album | Full-length release | 8-15 tracks | +| EP | Extended Play | 4-6 tracks | +| Single | Single track release | 1-3 tracks | +| Compilation | Collection of tracks | Varies | + +--- + +## Adding Tracks + +Tracks are the individual songs or audio files in your library. + +### Creating a Track + +1. Go to **FediStream > Tracks > Add New** +2. Enter track information: + - **Title** - Song title + - **Description** - Lyrics, notes, credits +3. Upload the audio file: + - Click **Select Audio File** in the Track Audio meta box + - Supported formats: MP3, WAV, FLAC, OGG, AAC + - Recommended: High-quality MP3 (320kbps) or FLAC +4. Configure track metadata: + - **Album** - Associate with an album + - **Track Number** - Position in the album + - **Disc Number** - For multi-disc releases + - **Duration** - Auto-detected from audio file + - **BPM** - Beats per minute (optional) + - **Key** - Musical key (optional) + - **ISRC** - International Standard Recording Code (optional) +5. Set the featured image (track artwork, optional) +6. Assign genres, moods, and license +7. Publish the track + +### Audio File Guidelines + +| Format | Quality | Recommended For | +|--------|---------|-----------------| +| MP3 | 320kbps | Web streaming | +| FLAC | Lossless | Downloads, archival | +| WAV | Uncompressed | Master files | +| OGG | Variable | Alternative streaming | + +--- + +## Building Playlists + +Playlists are curated collections of tracks, useful for themed collections or user-generated content. + +### Creating a Playlist + +1. Go to **FediStream > Playlists > Add New** +2. Enter playlist information: + - **Title** - Playlist name + - **Description** - What the playlist is about + - **Featured Image** - Playlist cover art +3. Add tracks to the playlist: + - Use the **Playlist Tracks** meta box + - Search for tracks by title + - Click to add tracks to the playlist + - Drag and drop to reorder tracks +4. Configure visibility: + - **Public** - Visible to everyone + - **Private** - Only visible to the creator +5. Assign moods (optional) +6. Publish the playlist + +--- + +## Using Shortcodes + +FediStream provides shortcodes to display content anywhere in your WordPress site. + +### Available Shortcodes + +#### Display Single Artist + +```txt +[fedistream_artist id="123"] +``` + +Shows the artist profile with bio, image, and social links. + +**Attributes:** + +- `id` (required) - Artist post ID + +#### Display Album + +```txt +[fedistream_album id="456"] +``` + +Shows the album with artwork, tracklist, and play buttons. + +**Attributes:** + +- `id` (required) - Album post ID +- `show_tracks` - Show tracklist (default: true) + +#### Display Track + +```txt +[fedistream_track id="789"] +``` + +Shows a single track with player controls. + +**Attributes:** + +- `id` (required) - Track post ID + +#### Display Playlist + +```txt +[fedistream_playlist id="101"] +``` + +Shows the playlist with all tracks and player. + +**Attributes:** + +- `id` (required) - Playlist post ID + +#### Latest Releases + +```txt +[fedistream_latest_releases count="5"] +``` + +Shows a grid of recent album releases. + +**Attributes:** + +- `count` - Number of releases to show (default: 6) +- `columns` - Grid columns (default: 3) + +#### Popular Tracks + +```txt +[fedistream_popular_tracks count="10"] +``` + +Shows a list of most-played tracks. + +**Attributes:** + +- `count` - Number of tracks to show (default: 10) + +#### Artists Grid + +```txt +[fedistream_artists count="12" columns="4"] +``` + +Shows a grid of artists. + +**Attributes:** + +- `count` - Number of artists (default: 12) +- `columns` - Grid columns (default: 4) + +#### Audio Player Widget + +```txt +[fedistream_player] +``` + +Shows the persistent audio player. + +#### User Library + +```txt +[fedistream_library] +``` + +Shows the logged-in user's music library (favorites, followed artists, history). + +--- + +## Widgets + +FediStream includes widgets for your sidebar or widget areas. + +### Available Widgets + +| Widget | Description | +|--------|-------------| +| Recent Releases | Displays latest album releases | +| Popular Tracks | Shows most-played tracks | +| Featured Artist | Highlights a specific artist | +| Now Playing | Shows currently playing track | + +### Adding Widgets + +1. Go to **Appearance > Widgets** +2. Find FediStream widgets in the available widgets list +3. Drag to your desired widget area +4. Configure the widget options +5. Save + +--- + +## ActivityPub Integration + +FediStream integrates with the Fediverse through ActivityPub, allowing your artists to be followed from Mastodon, Pixelfed, and other platforms. + +### Requirements + +Install and activate the [ActivityPub plugin](https://wordpress.org/plugins/activitypub/) from WordPress.org. + +### How It Works + +1. Each artist becomes an ActivityPub actor (like a Mastodon account) +2. Fediverse users can follow artists using their handle: `@artist-slug@your-domain.com` +3. When you publish new albums or tracks, announcements are sent to followers +4. Followers can like and boost your releases, which shows on your site + +### Artist Discovery (Webfinger) + +Artists can be discovered via Webfinger: + +```txt +https://your-site.com/.well-known/webfinger?resource=acct:artist-name@your-site.com +``` + +### Activity Types + +| Activity | When Sent | +|----------|-----------| +| Create | New album or track published | +| Update | Album or track updated | +| Delete | Content removed | +| Follow/Accept | New follower confirmed | + +### Viewing Followers + +Artist followers are displayed on the artist's admin page under the Followers meta box. + +--- + +## WooCommerce Integration + +Sell your music directly through your WordPress site using WooCommerce. + +### Requirements + +- WooCommerce 10.0 or higher installed and activated +- WooCommerce integration enabled in FediStream settings + +### Setting Up Products + +1. Enable WooCommerce in **FediStream > Settings** +2. Go to **Products > Add New** +3. Select product type: + - **FediStream Album** - Sell a complete album + - **FediStream Track** - Sell individual tracks +4. Configure the FediStream tab: + - Link to the corresponding album or track + - Set pricing type (Fixed, Pay What You Want, Name Your Price) + - Configure minimum and suggested prices for PWYW + - Select available download formats + - Enable streaming access for purchasers +5. Publish the product + +### Pricing Types + +| Type | Description | +|------|-------------| +| Fixed | Standard fixed price | +| Pay What You Want (PWYW) | Customer chooses price above minimum | +| Name Your Price (NYP) | Customer sets any price (including free) | + +### Download Formats + +Customers can download purchased music in these formats: + +- MP3 (320kbps) +- FLAC (Lossless) +- WAV (Uncompressed) +- AAC (256kbps) +- OGG Vorbis + +### Streaming Access + +When "Include Streaming" is enabled: + +- Non-purchasers hear 30-second previews +- Purchasers get full-quality streaming access +- Access is tied to the customer account + +--- + +## User Library Features + +Logged-in users can build their personal music library. + +### Favorites + +- Click the heart icon on any track, album, or playlist to save it +- View all favorites in the Library page + +### Following Artists + +- Click "Follow" on any artist profile +- Get notified when they release new music + +### Listening History + +- Automatically tracks what you've listened to +- View recent plays in the Library page +- Option to clear history + +### Notifications + +Users receive notifications for: + +- New releases from followed artists +- New followers (for artists) +- Fediverse interactions (likes, boosts) +- Purchases (for WooCommerce) + +Notifications appear in the admin bar and can be configured for email delivery. + +--- + +## Troubleshooting + +### Audio Files Not Playing + +1. Verify the audio file is properly uploaded +2. Check browser console for errors +3. Ensure the audio format is supported +4. Verify file permissions on the server + +### ActivityPub Not Working + +1. Ensure the ActivityPub plugin is installed and active +2. Check that ActivityPub is enabled in FediStream settings +3. Verify your site's SSL certificate is valid +4. Check that `.well-known/webfinger` is accessible + +### WooCommerce Products Not Showing + +1. Ensure WooCommerce is installed and activated +2. Enable WooCommerce in FediStream settings +3. Clear any caching plugins +4. Check for JavaScript errors in browser console + +### Images Not Displaying + +1. Check that featured images are set on posts +2. Verify the Media Library has the images +3. Check theme compatibility with featured images +4. Regenerate thumbnails if image sizes are wrong + +### Performance Issues + +1. Consider using a caching plugin +2. Optimize images before upload +3. Use a CDN for audio files +4. Enable object caching if available + +### Getting Help + +- **Documentation**: Check this guide and the README +- **Issues**: Report bugs at the [issue tracker](https://src.bundespruefstelle.ch/magdev/wp-fedistream/issues) +- **Updates**: Keep the plugin updated for latest fixes + +--- + +## Quick Reference + +### URL Slugs + +| Content Type | URL Pattern | +|--------------|-------------| +| Artists | `/artists/{slug}/` | +| Albums | `/albums/{slug}/` | +| Tracks | `/tracks/{slug}/` | +| Playlists | `/playlists/{slug}/` | +| Genres | `/genre/{slug}/` | +| Moods | `/mood/{slug}/` | + +### User Roles + +| Role | Capabilities | +|------|--------------| +| FediStream Artist | Manage own content, upload files, view own stats | +| FediStream Label | Manage all content, manage taxonomies, view all stats | + +### Keyboard Shortcuts (Player) + +| Key | Action | +|-----|--------| +| Space | Play/Pause | +| Left Arrow | Previous track | +| Right Arrow | Next track | +| Up Arrow | Volume up | +| Down Arrow | Volume down | +| M | Mute/Unmute | +| S | Shuffle toggle | +| R | Repeat mode cycle | + +--- + +*For more information, visit the [project repository](https://src.bundespruefstelle.ch/magdev/wp-fedistream).* diff --git a/includes/Plugin.php b/includes/Plugin.php index 2970d1b..df8476f 100644 --- a/includes/Plugin.php +++ b/includes/Plugin.php @@ -196,6 +196,34 @@ final class Plugin { add_action( 'admin_menu', array( $this, 'add_admin_menu' ) ); add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_assets' ) ); add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_frontend_assets' ) ); + + // Add settings link to plugins page. + add_filter( 'plugin_action_links_' . WP_FEDISTREAM_BASENAME, array( $this, 'add_plugin_action_links' ) ); + } + + /** + * Add action links to the plugins page. + * + * @param array $links Existing action links. + * @return array Modified action links. + */ + public function add_plugin_action_links( array $links ): array { + $settings_link = sprintf( + '%s', + esc_url( admin_url( 'admin.php?page=fedistream-settings' ) ), + esc_html__( 'Settings', 'wp-fedistream' ) + ); + + $dashboard_link = sprintf( + '%s', + esc_url( admin_url( 'admin.php?page=fedistream' ) ), + esc_html__( 'Dashboard', 'wp-fedistream' ) + ); + + // Add our links at the beginning. + array_unshift( $links, $dashboard_link, $settings_link ); + + return $links; } /** diff --git a/wp-fedistream.php b/wp-fedistream.php index 3238a9d..0936497 100644 --- a/wp-fedistream.php +++ b/wp-fedistream.php @@ -3,7 +3,7 @@ * Plugin Name: WP FediStream * Plugin URI: https://src.bundespruefstelle.ch/magdev/wp-fedistream * Description: Stream music over ActivityPub - Build your own music streaming platform for Musicians and Labels. - * Version: 0.1.1 + * Version: 0.2.0 * Requires at least: 6.4 * Requires PHP: 8.3 * Author: Marco Graetsch @@ -26,7 +26,7 @@ if ( ! defined( 'ABSPATH' ) ) { * * @var string */ -define( 'WP_FEDISTREAM_VERSION', '0.1.1' ); +define( 'WP_FEDISTREAM_VERSION', '0.2.0' ); /** * Plugin file path.