Monorepo for building tech event sites (conference/symposium/seminar) with Plone 6 and Volto.
- Backend: collective.techevent (Plone add-on) provides content types, behaviors, and REST endpoints (e.g., /@schedule, /@sponsors).
- Frontend: @plone-collective/volto-techevent (Volto add-on) provides the UI: views, blocks, schedule, sponsors, listings, etc.
- Relationship:
- The frontend requires the backend to be installed and activated in Plone.
- The backend is intended to be used with the Volto addon for the full UX.
- An operating system that runs all the requirements mentioned
- uv
- nvm
- Node.js 22 and pnpm
- Make
- Git
- Docker (optional)
-
Clone this repository, then change your working directory.
git clone [email protected]:collective/tech-event.git cd tech-event
-
Install this code base.
make install
-
Create a new Plone site on your first run.
make backend-create-site
-
Start the backend at http://localhost:8080/.
make backend-start
-
In a new shell session, start the frontend at http://localhost:3000/.
make frontend-start
Voilà! Your Plone site should be live and kicking! 🎉
Deploy a local Docker Compose environment that includes:
- Docker images for Backend and Frontend 🖼️
- A stack with a Traefik router and a Postgres database 🗃️
- Accessible at http://tech-event.localhost 🌐
Execute the following:
make stack-start
make stack-create-siteAnd... you're all set! Your Plone site is up and running locally! 🚀
This monorepo consists of the following sections:
- backend
- Python package collective.techevent (Plone add-on)
- Provides content types (Talk, Keynote, Training, Presenter, Schedule, Sponsor, etc.), behaviors, and REST endpoints (/@schedule, /@sponsors)
- Intended to be used with the Volto addon for the UI
- frontend
- Volto addon @plone-collective/volto-techevent
- Provides blocks (Schedule, Sponsors, Packages), views, listings, and integrations
- Requires the backend add-on to be installed in Plone
- docs
- Project documentation
To automatically format your code and ensure it adheres to quality standards, execute:
make checkTo format the codebase, run:
make format| Section | Tool | Description | Configuration |
|---|---|---|---|
| backend | Ruff | Python code formatting, imports sorting | backend/pyproject.toml |
| backend | zpretty | XML and ZCML formatting | -- |
| frontend | ESLint | Fixes most common frontend issues | frontend/.eslintrc.js |
| frontend | Prettier | Format JS and TypeScript code | frontend/.prettierrc |
| frontend | Stylelint | Format styles (CSS, Less, Sass) | frontend/.stylelintrc |
Formatters can also be run within the backend or frontend folders.
To lint the codebase, run:
make lint| Section | Tool | Description | Configuration |
|---|---|---|---|
| backend | Ruff | Checks code formatting, imports sorting | backend/pyproject.toml |
| backend | Pyroma | Checks Python package metadata | -- |
| backend | check-python-versions | Checks Python version information | -- |
| backend | zpretty | Checks XML and ZCML formatting | -- |
| frontend | ESLint | Checks JS / TypeScript lint | frontend/.eslintrc.js |
| frontend | Prettier | Checks JS / TypeScript formatting | frontend/.prettierrc |
| frontend | Stylelint | Checks styles (CSS, Less, Sass) formatting | frontend/.stylelintrc |
Linters can be run individually within the backend or frontend folders.
Generate translation files for Plone and Volto with ease:
make i18nGenerated using Cookieplone (0.9.7) and cookieplone-templates (27a6b7b) on 2025-05-13 21:27:39.934395. A special thanks to all contributors and supporters!