• PHP 68.5%
  • TypeScript 28.9%
  • Blade 1.5%
  • Shell 0.3%
  • Dockerfile 0.3%
  • Other 0.4%
Find a file
Adam Lavin 42e52cc20a
Resolve track/album owner to the active account
Usernames are not unique: imports create archived placeholder users
that can share a username with a real account. The admin owner-edit
path resolved the username with an unordered first(), which could
return the duplicate and silently reassign the track or album on an
ordinary save or publish. Order the lookup to prefer non-archived,
non-disabled, oldest accounts.
2026-09-05 23:17:16 +01:00
.github/workflows Inertia v2 + React 19 foundation: Vite 7 toolchain, SSR, popup OIDC login (#247) 2026-08-16 12:29:48 +01:00
app Resolve track/album owner to the active account 2026-09-05 23:17:16 +01:00
bootstrap Upgrade to Laravel 8 and Docker support (#174) 2026-08-05 21:17:12 +01:00
config Account + admin areas, embeds, upload pipeline fixes (#251) 2026-08-16 12:29:50 +01:00
database Account + admin areas, embeds, upload pipeline fixes (#251) 2026-08-16 12:29:50 +01:00
docker Snappier navigation: asset prefetch, hover link prefetch, player time split 2026-08-16 20:03:24 +01:00
documentation Remove the legacy Angular/gulp frontend (#255) 2026-08-21 00:51:41 +01:00
public Remove the legacy Angular/gulp frontend (#255) 2026-08-21 00:51:41 +01:00
resources Fix notification crash, album_id validation, and upload error handling (#258) 2026-09-05 23:01:21 +01:00
routes Remove the legacy Angular/gulp frontend (#255) 2026-08-21 00:51:41 +01:00
storage Upgrade to Laravel 8 and Docker support (#174) 2026-08-05 21:17:12 +01:00
tests Add Opus transcode target and make it the streaming default (#253) 2026-08-18 23:11:45 +01:00
tools Moved nginx's and MySQL's logs into the "storage" directory. 2015-09-12 16:49:16 -07:00
vagrant Add new aac codec for the modern age 2023-02-26 03:25:52 -05:00
.arcconfig Merge rPF91611faead64: Merge the MLP Music Archive import scripts. 2015-09-10 12:15:19 +01:00
.dockerignore Remove the legacy Angular/gulp frontend (#255) 2026-08-21 00:51:41 +01:00
.editorconfig Improved track pagination to better handle tons of content, including a "jump to page" button. 2015-10-29 03:24:12 -07:00
.env.example Rebuild notification emails as checked-in Blade templates; add Mailpit (#254) 2026-08-21 00:51:41 +01:00
.gitattributes Removed non-local configs from this repo. 2015-12-20 04:59:01 -08:00
.gitignore Remove the legacy Angular/gulp frontend (#255) 2026-08-21 00:51:41 +01:00
.nvmrc Inertia v2 + React 19 foundation: Vite 7 toolchain, SSR, popup OIDC login (#247) 2026-08-16 12:29:48 +01:00
artisan Laravel 5.5 2017-11-28 07:00:11 +00:00
components.json Design system: tokens, Base UI primitives, Pony.fm components (#248) 2026-08-16 12:29:49 +01:00
composer.json Add zip extension: ZipStream album downloads need ZipArchive 2026-08-16 23:50:31 +01:00
composer.lock Add zip extension: ZipStream album downloads need ZipArchive 2026-08-16 23:50:31 +01:00
docker-compose.prod.yaml Prod compose: worker service, Redis DB isolation, Octane port, /mnt/datastore 2026-08-16 12:58:48 +01:00
docker-compose.yaml Remove the legacy Angular/gulp frontend (#255) 2026-08-21 00:51:41 +01:00
DOCKER-README.md Remove the legacy Angular/gulp frontend (#255) 2026-08-21 00:51:41 +01:00
Dockerfile Add zip extension: ZipStream album downloads need ZipArchive 2026-08-16 23:50:31 +01:00
Dockerfile.dev Upgrade to Laravel 8 and Docker support (#174) 2026-08-05 21:17:12 +01:00
justfile Remove the legacy Angular/gulp frontend (#255) 2026-08-21 00:51:41 +01:00
LICENSE Licensed Pony.fm under the GNU Affero General Public License (AGPL). 2015-10-24 22:17:45 -07:00
package.json Inertia v2 + React 19 foundation: Vite 7 toolchain, SSR, popup OIDC login (#247) 2026-08-16 12:29:48 +01:00
phpspec.yaml fix local dev env (#241) 2026-08-08 19:22:45 +01:00
phpunit.xml Platform modernization: Laravel 13, PHP 8.4, FrankenPHP/Octane, OIDC, Redis queue (#246) 2026-08-16 12:29:48 +01:00
pnpm-lock.yaml Inertia v2 + React 19 foundation: Vite 7 toolchain, SSR, popup OIDC login (#247) 2026-08-16 12:29:48 +01:00
pnpm-workspace.yaml Inertia v2 + React 19 foundation: Vite 7 toolchain, SSR, popup OIDC login (#247) 2026-08-16 12:29:48 +01:00
README.md Remove the legacy Angular/gulp frontend (#255) 2026-08-21 00:51:41 +01:00
server.php Initial L5.1 commit 2015-08-30 12:26:03 +01:00
tsconfig.json Inertia v2 + React 19 foundation: Vite 7 toolchain, SSR, popup OIDC login (#247) 2026-08-16 12:29:48 +01:00
Vagrantfile Update dev environment & add media player notifications (#139) 2021-01-01 22:29:36 -08:00
vite.config.ts Remove the legacy Angular/gulp frontend (#255) 2026-08-21 00:51:41 +01:00

Pony.fm Logo

The community for pony fan music.

For artists, Pony.fm features unlimited uploads and downloads, automatic transcoding to a number of audio formats, and synchronized tags in all downloads.

For listeners, Pony.fm offers unlimited streaming and downloading, user-generated playlists, favourite lists, and a way of discovering new music with pony-based taxonomies.

Contributing

If you've run across a bug or have a feature request, open an issue for it.

For general questions and discussions about the site, stop by at the Pony.fm forum.

For quick fixes, go ahead and submit a pull request!

For larger features, it's best to open an issue before sinking a ton of work into building them, to coordinate with Pony.fm's maintainers.

Developer documentation is available in the documentation directory.

Protip: Looking for a place to jump in and start coding? Try a quickwin issue - these are smaller in scope and easier to tackle if you're unfamiliar with the codebase!

Starting a dev environment

Recommended: the Docker-based setup described in DOCKER-README.md — dependencies run in containers and the app runs on your host.

The Vagrant environment below is the legacy setup and may bitrot:

To begin development, do the following:

  1. Install Vagrant and VirtualBox if you don't have them already.

  2. Install the vagrant-hostmanager plugin: vagrant plugin install vagrant-hostmanager

  3. Install the vagrant-bindfs plugin: vagrant plugin install vagrant-bindfs

  4. Run vagrant up from the folder in which you cloned the repository

  5. Run vagrant ssh, cd /vagrant, and php artisan poni:setup.

Once everything is up and running, you'll be able to access the site at http://ponyfm-dev.poni/. You can access the PostgreSQL database by logging into ponyfm-dev.poni:5432 with the username homestead and the password secret. Pony.fm's database is named homestead.

Asset pipeline

Frontend assets are built with Vite. Install dependencies with pnpm install, then run pnpm dev while developing (or pnpm build for a production build).

Email templates

Email templates are plain Blade views:

In dev, sent mail is caught by Mailpit (started by docker compose up -d) and viewable at http://localhost:8025.

Configuring the servers

Pony.fm uses nginx, php-fpm, redis, and PostgreSQL. You can modify the configuration of these services by locating the appropriate config file in the vagrant folder. Once modified, you must reload the configuration by running the appropriate shell script (reload-config.sh) or bat files (reload-config.bat and reload-config.vmware.bat). These scripts simply tell Vagrant to run copy-and-restart-config.sh on the VM.

If you need to change any other configuration file on the VM - copy the entire file over into the vagrant folder, make your changes, and update the copy-and-restart-config.sh script to copy the modified config back into the proper folder. All potential configuration requirements should be represented in the vagrant folder and never only on the VM itself as changes will not be preserved.