{"id":15690927,"url":"https://github.com/audiodude/rainfall","last_synced_at":"2025-04-14T22:12:57.121Z","repository":{"id":204394316,"uuid":"711741986","full_name":"audiodude/rainfall","owner":"audiodude","description":"Bandcamp exodus solution, letting you create personal artist sites using Faircamp","archived":false,"fork":false,"pushed_at":"2025-04-10T22:33:38.000Z","size":744,"stargazers_count":17,"open_issues_count":27,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-14T22:12:25.990Z","etag":null,"topics":["bandcamp","faircamp","gui","hacktoberfest"],"latest_commit_sha":null,"homepage":"https://rainfall.dev","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/audiodude.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-10-30T04:43:03.000Z","updated_at":"2025-04-10T22:33:43.000Z","dependencies_parsed_at":"2025-01-06T18:29:06.741Z","dependency_job_id":"dcfe1ee1-aa80-4b33-a2fa-0c8e7279d386","html_url":"https://github.com/audiodude/rainfall","commit_stats":null,"previous_names":["audiodude/rainfall"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/audiodude%2Frainfall","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/audiodude%2Frainfall/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/audiodude%2Frainfall/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/audiodude%2Frainfall/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/audiodude","download_url":"https://codeload.github.com/audiodude/rainfall/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248968916,"owners_count":21191162,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bandcamp","faircamp","gui","hacktoberfest"],"created_at":"2024-10-03T18:17:47.698Z","updated_at":"2025-04-14T22:12:57.096Z","avatar_url":"https://github.com/audiodude.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rainfall\n\nFree Bandcamp exodus tool, letting you publish music sites to Netlify using [Faircamp](https://codeberg.org/simonrepp/faircamp).\n\n![GitHub build status](https://github.com/audiodude/rainfall/actions/workflows/ci.yml/badge.svg)\n[![codecov](https://codecov.io/gh/audiodude/rainfall/branch/main/graph/badge.svg?token=rTPXFzOytM)](https://codecov.io/gh/audiodude/rainfall)\n![GitHub License](https://img.shields.io/github/license/audiodude/rainfall)\n\nThis 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.\n\nRainfall has reached [version 1.5](https://sfba.social/@audiodude/113784434545357783) of development!\n\n![Screenshot of the Rainfall tool, on the song upload page](https://github.com/audiodude/rainfall/assets/57832/04e7088a-3d61-4dcd-b22a-445be161534e)\n\nCurrently, you can upload tracks and preview your Faircamp powered site. When you're ready, you can upload your site [directly to Netlify](https://www.netlify.com/), 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:\n\n- [Netlify](https://www.netlify.com/)\n- [Google Cloud](https://cloud.google.com/storage?hl=en)\n- [Amazon Web Services](https://aws.amazon.com/s3/)\n- [Render](https://render.com)\n- [Cloudflare Pages](https://pages.cloudflare.com/)\n- And many others!\n\nFuture integrations might allow you to purchase a domain name through Netlify and go from zero -\u003e running music site with just a few uploads.\n\n## Development\n\nRainfall features a [Python](https://www.python.org/) backend, using the amazing [Flask](https://flask.readthedocs.io/) API framework and the [SQLAlchemy](https://www.sqlalchemy.org/) ORM (which is much less scary than it seems at first). The database system is [MariaDB](https://mariadb.com/), though early versions used [SQLite](https://www.sqlite.org/index.html). It is tested using [Pytest](https://pytest.org/).\n\nThe frontend is written in [Vue 3](https://vuejs.org/) using the Options API, with frontend styling implemented using [TailwindCSS](https://tailwindcss.com/) and some [Flowbite](https://flowbite.com/) components. It is tested using [Cypress](https://www.cypress.io/).\n\nFor 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](https://fly.io/docs/reference/secrets/).\n\n### Dev services (Docker compose)\n\nThe file `docker-compose-dev.yml` contains a MariaDB instance and a Redis instance for use by the development environment. Start them with:\n\n```\ndocker compose -f docker-compose-dev.yml up -d\n```\n\n#### Celery workers\n\nRainfall uses [Celery](http://docs.celeryq.dev/en/stable/) for generating site previews in the background. For development, you can launch a dev worker from any command line with:\n\n```\npipenv run celery -A rainfall.main worker -l INFO\n```\n\n### Running Tests\n\n#### Backend\n\nFrom the project root, run:\n\n```bash\nRAINFALL_ENV=test pipenv run pytest\n```\n\n#### Frontend\n\nFrom the `rainfall-frontend` directory, run:\n\n```bash\nyarn run test:e2e:dev\n```\n\n## Deployment\n\nRainfall is deployed to [Fly.io](https://fly.io/) using a Docker container. Once you have installed [flyctl](https://fly.io/docs/hands-on/install-flyctl/) and authenticated, simply run the following:\n\n```bash\nfly deploy\n```\n\nThe 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.\n\nThe Docker container will automatically be built remotely and deployed. The backend data for the production site (song/project files) lives in [Minio](https://min.io/), which is also hosted on Fly.io as a separate app.\n\n### Running Database migrations\n\nFirst, make sure the web app is running (not sleeping) by visiting the Rainfall homepage ([https://rainfall.dev](https://rainfall.dev)).\n\nThen, log into the machine using fly ssh (first setting it up with a key if you need to):\n\n```bash\nfly ssh console\n```\n\nFinally run the alembic command:\n\n```bash\npipenv run alembic upgrade head\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faudiodude%2Frainfall","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faudiodude%2Frainfall","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faudiodude%2Frainfall/lists"}