Free Bandcamp exodus tool, letting you publish music sites to Netlify using Faircamp.
This project does not aim to replicate the full feature set of the Bandcamp site/app. Instead, the goal is to allow artists to create individual websites where users can listen to and potentially download and pay for their tracks. These websites are created using the Faircamp static site generator, and can be hosted anywhere on the web.
Rainfall has reached version 1.4 of development!
Currently, you can upload tracks and preview your Faircamp powered site. When you're ready, you can upload your site directly to Netlify, using an OAuth integration. Alternately, you can download a .ZIP file of your site, which you can then upload to any of the cloud providers mentioned on the welcome page, or anywhere else that hosts static websites:
- Netlify
- Google Cloud
- Amazon Web Services
- Render
- Cloudflare Pages
- And many others!
Future integrations might allow you to purchase a domain name through Netlify and go from zero -> running music site with just a few uploads.
Rainfall features a Python backend, using the amazing Flask API framework and the SQLAlchemy ORM (which is much less scary than it seems at first). The database system is MariaDB, though early versions used SQLite. It is tested using Pytest.
The frontend is written in Vue 3 using the Options API, with frontend styling implemented using TailwindCSS and some Flowbite components. It is tested using Cypress.
For development, you will need a .env
file in the project root directory, and a .env.development
file in the rainfall-frontend
directory. The project directory may also contain a .env.prod
file, but this is never loaded, it is purely for reference. Production environment variables are set using Fly.io secrets.
From the project root, run:
RAINFALL_ENV=test pipenv run pytest
From the rainfall-frontend
directory, run:
yarn run test:e2e:dev
Rainfall is deployed to Fly.io using a Docker container. Once you have installed flyctl and authenticated, simply run the following:
fly deploy
The frontend (./rainfall-frontend
, NOT the root directory or Flask app) also requires a .env.production
file with the fields GOOGLE_CLIENT_ID
and VITE_GOOGLE_REDIRECT_URI
. This will be ignored by git, but needs to be present when fly deploy
is run so that it is baked into the frontend production deployment.
The Docker container will automatically be built remotely and deployed. The backend data for the production site (song/project files) lives on a Fly volume that is attached to the web worker. Current work involves migrating this to object storage using Minio.
First, make sure the web app is running (not sleeping) by visiting the Rainfall homepage (https://rainfall.dev).
Then, log into the machine using fly ssh (first setting it up with a key if you need to):
fly ssh console
Finally run the alembic command:
pipenv run alembic upgrade head