# Libre Wedding Planner Libre Wedding Planner is Free, Open Source Software that helps organize several aspects of a wedding. The project is not production-ready yet. ## Features The follwing features are either developed or under active development: - Guests management - Expense management - Seating chart ## Next steps Some ideas we would like to implement next: - Authentication (required to make an instance public) - Website with wedding information - Attendance confirmation forms - Multitenancy # Development setup Libre Wedding Planner is made of two main pieces: - The backend (this repo), built with Ruby (on Rails) - The frontend (repo [here](https://gitea.bustikiller.com/bustikiller/wedding-planner-frontend/)), built with NextJS and React. You will need both to have the service fully working. Both repositories are expected to live have a common parent directory: ``` projects |-> wedding-planner |-> wedding-planner-frontend ``` ## Docker compose Docker compose is the recommended way to run Libre Wedding Planner for development purposes. After downloading both repositories, `cd` to the root of `wedding-planner` and run: ```bash docker compose up --build ``` Several containers will be started: - backend: starts a Rails server that will act as an API. - workers: starts a runner of [solid queue](https://github.com/rails/solid_queue/) that takes .care of async tasks. - frontend: starts a NextJS application in charge of the frontend. - nginx: A reverse proxy that the backend and frontend under the same domain, and routes all requests to the upstream services. - db: A Postgres instance used by the backend service. The backend service will seed the database with fake data. It's worth noting that the Postgres container does not have a volume, so the application will be seeded every time the container is created. The backend, frontend and workers have hot-reloading enabled, so changes made to the codebase should be reflected in the application on the next request. Once all containers have started, visit http://libre-wedding-planner.app.localhost/default/dashboard to load the application. ## Multitenancy LibreWeddingPlanner is designed to manage multiple weddings in a single host. All URLs (in the API and the frontend) are scoped under a slug that is unique per wedding. The slug is made of lowercase letters, numbers, and dashes (-). The development environment is seeded with a wedding whose slug is `default`. ## Email delivery In the development environment, real emails will not be sent. You can visit http://libre-wedding-planner.app.localhost/letter_opener/ to get a list of emails generated by the application. ## Testing Unit tests can be executed with ``` bundle exec rspec ``` ## API documentation Generate the OpenAPI documentation with the command: ``` rake rswag:specs:swaggerize ``` The documentation is available in Swagger UI in http://libre-wedding-planner.app.localhost/api/api-docs/index.html. If testing the API through the UI, you will need to select the second server (which includes the `/api` path), intended for development. ## Contributing Contributions of all kinds (code, UX/UI, testing, translations, etc.) are welcome. The procedures to contribute are still being defined, but don't hesitate to reach out in case you want to participate. # License This project is licensed under the GNU Affero General Public License (AGPL). Check [COPYING.md](./COPYING.md) for additional information.