EchoVault Music Uploader
Secure audio upload & instant playback for WordPress. Visitors submit tracks, admins moderate in one click, approved tracks play instantly via an embedded HTML5 player.
by Prince Boyard MBOUNGOU NGOMA · github.com/mrboyard7/echovault-wp · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/mrboyard7/echovault-wp/archive/refs/heads/main.zipReadme
EchoVault Music Uploader
A secure, self-service audio upload and instant playback system for WordPress. Visitors drop an audio file into a form, an administrator approves it in one click, and it plays instantly through an embedded HTML5 player — no page rebuild, no external streaming service.
Built as a standalone plugin (works with any theme) plus an optional lightweight companion theme with brand colours and a ready-made front page.
Features
- 🎧 Drag-and-drop upload form —
[echovault_upload_form]shortcode, with client-side validation and no page reload. - ▶️ Automatic audio player —
[echovault_player id="123"]for a single track,[echovault_recent_tracks]for a feed of the latest approved ones. - 🛡️ Moderation by default — every upload waits for admin approval before it goes live (can be turned off in Settings).
- 🔒 Defence in depth — real MIME-type sniffing (not just file extension checks), per-IP rate limiting, nonce-protected REST endpoint, and a hardened upload folder that blocks direct PHP execution.
- 📊 Storage dashboard — see how much space uploads are using, with a configurable warning threshold.
- 🎨 Brand-ready styling — colours, fonts and logo placement exposed as simple CSS variables / theme support, no page-builder required.
- 🧩 Built for extension — tracks live in their own custom post type, so playlists, e-commerce add-ons (WooCommerce), or user-account ownership can be layered on top later without a rewrite.
Project structure
echovault-wp/
├── .github/workflows/ci.yml # GitHub Actions: PHPCS + PHPUnit + Codecov
├── assets/
│ ├── css/ # frontend.css (brand vars, player, upload form) + admin.css
│ ├── images/logo-placeholder.svg # swap for your real logo
│ └── js/frontend-upload.js # drag & drop + fetch()-based REST upload
├── docs/
│ ├── HANDOFF.md # plugin list, custom code map, demo script
│ ├── SERVER-REQUIREMENTS.md # PHP/webserver tuning for large audio files
│ └── USER-ACCOUNTS-MIGRATION.md # accounts vs. anonymous uploads, pros/cons + migration steps
├── includes/
│ ├── class-echovault-admin.php # moderation screen + settings page
│ ├── class-echovault-player.php # [echovault_player], [echovault_recent_tracks]
│ ├── class-echovault-plugin.php # bootstraps every component
│ ├── class-echovault-post-type.php # the "echovault_track" CPT
│ ├── class-echovault-rest-api.php # POST /wp-json/echovault/v1/upload
│ ├── class-echovault-security.php # MIME validation, rate limiting, folder hardening
│ ├── class-echovault-settings.php # Settings API wrapper
│ ├── class-echovault-storage.php # upload paths + human-readable usage stats
│ └── class-echovault-uploader.php # [echovault_upload_form] + upload processing
├── templates/ # small PHP view partials used by the classes above
├── tests/ # PHPUnit + WP_Mock unit tests
├── theme/echovault-theme/ # optional child theme (Twenty Twenty-One parent)
├── composer.json
├── phpcs.xml.dist # WordPress Coding Standards ruleset
├── phpunit.xml.dist
├── uninstall.php
├── LICENSE # MIT
└── README.md
Requirements
- WordPress 6.0+
- PHP 7.4+
- A host that allows setting
upload_max_filesize/post_max_sizeabove the default (seedocs/SERVER-REQUIREMENTS.mdfor exact values and why)
Quick start
git clone https://github.com/MrBoyard7/echovault-wp.git
cd echovault-wp
composer install
Then, on a local WordPress install:
- Copy (or symlink) the
echovault-wpfolder intowp-content/plugins/. - Activate EchoVault Music Uploader from the Plugins screen.
- (Optional) Copy
theme/echovault-themeintowp-content/themes/and activate it — it requires the Twenty Twenty-One theme to also be installed, since it's a child theme. - Create a page containing
[echovault_upload_form]and set it as your homepage, or drop the shortcode into any existing page/post.
Usage
| Shortcode | What it does |
|---|---|
[echovault_upload_form] |
Renders the drag-and-drop upload form. |
[echovault_player id="123"] |
Renders the player for one approved track (ID from the admin screen). |
[echovault_recent_tracks count="10"] |
Renders a feed of the most recently approved tracks. |
Admin screens live under EchoVault in the WordPress sidebar:
- Tracks — approve, reject, or delete submissions.
- Settings — max upload size, storage warning threshold, and whether approval is required at all.
User accounts: yes or no?
The plugin works fully without visitor accounts — moderation is what
keeps content clean, not registration. If you later want per-user
dashboards, ownership, or a foundation for e-commerce add-ons, see
docs/USER-ACCOUNTS-MIGRATION.md
for the trade-offs and the exact steps to add it — it's additive, not
a rewrite.
Testing
This repository ships two layers of testing:
composer install
composer run cs # WordPress Coding Standards (PHPCS)
composer run test # PHPUnit + WP_Mock unit tests
Every push and pull request runs the same two commands, on PHP 7.4 through 8.3, via GitHub Actions (see the CI badge above); coverage is reported to Codecov automatically.
If you just want a quick sanity check without installing Composer dependencies, verify every file's PHP syntax:
find . -name "*.php" -not -path "./vendor/*" -exec php -l {} \;
Roadmap
- [ ] Optional user accounts + "My Tracks" dashboard (see migration doc above)
- [ ] Playlist creation
- [ ] WooCommerce integration for paid downloads / premium tracks
- [ ] Waveform preview instead of a plain progress bar
Contributing
See CONTRIBUTING.md.
License
Released under the MIT License.
Copyright (c) 2026 Prince Boyard MBOUNGOU NGOMA
Author
Prince Boyard MBOUNGOU NGOMA GitHub: @MrBoyard7