Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 52 additions & 47 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,60 +1,65 @@
# Tech Conference for Plone 🚀
# Tech Event Support for Plone 🚀

Monorepo for building tech event sites (conference/symposium/seminar) with Plone 6 and Volto.

- Backend: [collective.techevent](https://pypi.org/project/collective.techevent) (Plone add-on) provides content types, behaviors, and REST endpoints (e.g., /@schedule, /@sponsors).
- Frontend: [@plone-collective/volto-techevent](https://www.npmjs.com/package/@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.

[![Built with Cookieplone](https://img.shields.io/badge/built%20with-Cookieplone-0083be.svg?logo=cookiecutter)](https://github.com/plone/cookieplone-templates/)
[![CI](https://github.com/collective/tech-event/actions/workflows/main.yml/badge.svg)](https://github.com/collective/tech-event/actions/workflows/main.yml)

Support for implementing tech conference in a Plone site.

## Quick Start 🏁

### Prerequisites ✅

- An [operating system](https://6.docs.plone.org/install/create-project-cookieplone.html#prerequisites-for-installation) that runs all the requirements mentioned.
- [uv](https://6.docs.plone.org/install/create-project-cookieplone.html#uv)
- [nvm](https://6.docs.plone.org/install/create-project-cookieplone.html#nvm)
- [Node.js and pnpm](https://6.docs.plone.org/install/create-project.html#node-js) 22
- [Make](https://6.docs.plone.org/install/create-project-cookieplone.html#make)
- [Git](https://6.docs.plone.org/install/create-project-cookieplone.html#git)
- [Docker](https://docs.docker.com/get-started/get-docker/) (optional)

- An [operating system](https://6.docs.plone.org/install/create-project-cookieplone.html#prerequisites-for-installation) that runs all the requirements mentioned
- [uv](https://6.docs.plone.org/install/create-project-cookieplone.html#uv)
- [nvm](https://6.docs.plone.org/install/create-project-cookieplone.html#nvm)
- [Node.js 22 and pnpm](https://6.docs.plone.org/install/create-project.html#node-js)
- [Make](https://6.docs.plone.org/install/create-project-cookieplone.html#make)
- [Git](https://6.docs.plone.org/install/create-project-cookieplone.html#git)
- [Docker](https://docs.docker.com/get-started/get-docker/) (optional)

### Installation 🔧

1. Clone this repository, then change your working directory.
1. Clone this repository, then change your working directory.

```shell
git clone git@github.com:collective/tech-event.git
cd tech-event
```

2. Install this code base.
2. Install this code base.

```shell
make install
```


### Fire Up the Servers 🔥

1. Create a new Plone site on your first run.
1. Create a new Plone site on your first run.

```shell
make backend-create-site
```

2. Start the backend at http://localhost:8080/.
2. Start the backend at http://localhost:8080/.

```shell
make backend-start
```

3. In a new shell session, start the frontend at http://localhost:3000/.
3. In a new shell session, start the frontend at http://localhost:3000/.

```shell
make frontend-start
```

Voila! Your Plone site should be live and kicking! 🎉
Voilà! Your Plone site should be live and kicking! 🎉

### Local Stack Deployment 📦

Expand All @@ -75,19 +80,18 @@ And... you're all set! Your Plone site is up and running locally! 🚀

## Project Structure 🏗️

This monorepo consists of the following distinct sections:
This monorepo consists of the following sections:

- **backend**: Houses the API and Plone installation, utilizing pip instead of buildout, and includes a policy package named collective.techevent.
- **frontend**: Contains the React (Volto) package.
- **devops**: Encompasses Docker Stack, Ansible playbooks, and Cache settings.
- **docs**: Scaffold for writing documentation for your project.

### Why This Structure? 🤔

- All necessary codebases to run the site are contained within the repo (excluding existing addons for Plone and React).
- Specific GitHub Workflows are triggered based on changes in each codebase (refer to .github/workflows).
- Simplifies the creation of Docker images for each codebase.
- Demonstrates Plone installation/setup without buildout.
- 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

## Code Quality Assurance 🧐

Expand All @@ -99,40 +103,41 @@ make check

### Format the codebase

To format the codebase, it is possible to run `format`:
To format the codebase, run:

```shell
make format
```

| Section | Tool | Description | Configuration |
| --- | --- | --- | --- |
| backend | Ruff | Python code formatting, imports sorting | [`backend/pyproject.toml`](./backend/pyproject.toml) |
| backend | `zpretty` | XML and ZCML formatting | -- |
| frontend | ESLint | Fixes most common frontend issues | [`frontend/.eslintrc.js`](.frontend/.eslintrc.js) |
| frontend | prettier | Format JS and Typescript code | [`frontend/.prettierrc`](.frontend/.prettierrc) |
| frontend | Stylelint | Format Styles (css, less, sass) | [`frontend/.stylelintrc`](.frontend/.stylelintrc) |
| backend | Ruff | Python code formatting, imports sorting | [`backend/pyproject.toml`](./backend/pyproject.toml) |
| backend | zpretty | XML and ZCML formatting | -- |
| frontend | ESLint | Fixes most common frontend issues | [`frontend/.eslintrc.js`](./frontend/.eslintrc.js) |
| frontend | Prettier | Format JS and TypeScript code | [`frontend/.prettierrc`](./frontend/.prettierrc) |
| frontend | Stylelint | Format styles (CSS, Less, Sass) | [`frontend/.stylelintrc`](./frontend/.stylelintrc) |

Formatters can also be run within the `backend` or `frontend` folders.
Formatters can also be run within the backend or frontend folders.

### Linting the codebase
or `lint`:

```shell
To lint the codebase, run:

```shell
make lint
```

| Section | Tool | Description | Configuration |
| --- | --- | --- | --- |
| backend | Ruff | Checks code formatting, imports sorting | [`backend/pyproject.toml`](./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/.eslintrc.js) |
| frontend | prettier | Check JS / Typescript formatting | [`frontend/.prettierrc`](.frontend/.prettierrc) |
| frontend | Stylelint | Check Styles (css, less, sass) formatting | [`frontend/.stylelintrc`](.frontend/.stylelintrc) |

Linters can be run individually within the `backend` or `frontend` folders.
| backend | Ruff | Checks code formatting, imports sorting | [`backend/pyproject.toml`](./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/.eslintrc.js) |
| frontend | Prettier | Checks JS / TypeScript formatting | [`frontend/.prettierrc`](./frontend/.prettierrc) |
| frontend | Stylelint | Checks styles (CSS, Less, Sass) formatting | [`frontend/.stylelintrc`](./frontend/.stylelintrc) |

Linters can be run individually within the backend or frontend folders.

## Internationalization 🌐

Expand Down
126 changes: 86 additions & 40 deletions backend/README.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,102 @@
# collective.techevent
# Tech Event Support for Plone (collective.techevent)

Support for implementing tech conference in a Plone site.
Content types, behaviors, and REST endpoints to build tech event sites (conference/symposium/seminar) in Plone.

Important: This backend package requires a Volto frontend with the addon `@plone-collective/volto-techevent` installed. The frontend consumes the endpoints and provides the UI for schedules, sessions, sponsors, and more.

## Features

TODO: List our awesome features
### Content types

#### Event root
- Tech Event: Represents an event edition. Available if the site supports multiple editions, otherwise the Plone Site acts as the event root.

#### Location
- **Venue**: Location where the event takes place.
- **Room**: A room/auditorium inside a venue.

#### Event schedule
- **Schedule**: Folderish content to organize the event schedule.
- **Keynote**: Main presentation of the event.
- **Talk**: A session presentation.
- **Training**: A training/tutorial.
- **Open Space**: Open space session.
- **Lightning Talks**: Lightning talks session (supports listing each short presentation).
- **Meeting**: Meetings (e.g., Plone Foundation Annual Membership Meeting).
- **Slot**: Generic slot in the schedule (Registration, Group Photo, Party, etc.).
- **Break**: Coffee break or lunch time slot.
- **Presenter**: Presenter profile.

#### Sponsor support
- **SponsorsDB**: Folderish container for sponsoring information.
- **SponsorLevel**: Sponsoring package/level available for the event.
- **Sponsor**: Sponsor/supporter entry.

### Behaviors
- `collective.techevent.event_settings`: Event configuration; marks content as IEventRoot.
- `collective.techevent.schedule`: Scheduling support for content items.
- `collective.techevent.session`: Basic session information.
- `collective.techevent.presenter_roles`: Presenter roles on a content item.

### REST endpoints
- `/@schedule` (on event root): Returns the complete event schedule.
- `/@sponsors` (on event root): Lists all sponsors, grouped by package level.

## See it in action

- [Python Cerrado 2025](https://2025.pythoncerrado.org)
- [Plone Conference 2025](https://2025.ploneconf.org)
- [Python Brasil 2025](https://2025.pythonbrasil.org.br)

## Installation

Install collective.techevent with uv.
Considering you have a Plone project created with latest `cookieplone`, add `collective.techevent` as a dependency on the `backend/pyproject.toml`.

```shell
uv add collective.techevent
```toml
[project]
dependencies = [
# ...existing dependencies...
"collective.techevent",
]
```

Create the Plone site.
Then run the installation with:

```shell
make create-site
make install
```

Load the package ZCML (if not using auto-include) in dependencies.zcml:

```xml
<?xml version="1.0" encoding="utf-8"?>
<configure xmlns="http://namespaces.zope.org/zope">
<!-- ...existing includes... -->
<include package="collective.techevent" />
</configure>
```

Ensure the GenericSetup profile is installed (e.g., from your policy package metadata.xml):

```xml
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<version>1000</version>
<dependencies>
<!-- ...existing dependencies... -->
<dependency>profile-collective.techevent:default</dependency>
</dependencies>
</metadata>
```

Create your Plone site as usual and install the “Tech Event” add-on in the Add-ons control panel if not auto-installed.

### Frontend requirement

This package is intended to be used with a Volto frontend:
- Install @plone-collective/volto-techevent in your Volto app.
- The Volto addon integrates with the endpoints and content types provided here.

## Contribute

- [Issue tracker](https://github.com/collective/tech-event/issues)
Expand All @@ -39,7 +116,6 @@ make create-site

```shell
git clone git@github.com:collective/tech-event.git
cd tech-event/backend
```

2. Install this code base.
Expand All @@ -48,39 +124,9 @@ make create-site
make install
```


### Add features using `plonecli` or `bobtemplates.plone`

This package provides markers as strings (`<!-- extra stuff goes here -->`) that are compatible with [`plonecli`](https://github.com/plone/plonecli) and [`bobtemplates.plone`](https://github.com/plone/bobtemplates.plone).
These markers act as hooks to add all kinds of features through subtemplates, including behaviors, control panels, upgrade steps, or other subtemplates from `bobtemplates.plone`.
`plonecli` is a command line client for `bobtemplates.plone`, adding autocompletion and other features.

To add a feature as a subtemplate to your package, use the following command pattern.

```shell
make add <template_name>
```

For example, you can add a content type to your package with the following command.

```shell
make add content_type
```

You can add a behavior with the following command.

```shell
make add behavior
```

```{seealso}
You can check the list of available subtemplates in the [`bobtemplates.plone` `README.md` file](https://github.com/plone/bobtemplates.plone/?tab=readme-ov-file#provided-subtemplates).
See also the documentation of [Mockup and Patternslib](https://6.docs.plone.org/classic-ui/mockup.html) for how to build the UI toolkit for Classic UI.
```

## License

The project is licensed under GPLv2.
GPLv2

## Credits and acknowledgements 🙏

Expand Down
1 change: 1 addition & 0 deletions backend/news/+metadata.internal
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Update package metadata. @ericof
1 change: 1 addition & 0 deletions backend/news/+readme.documentation
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Update README file. @ericof
2 changes: 2 additions & 0 deletions backend/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ keywords = [
"CMS",
"Plone",
"Python",
"Conference",
"Event",
]
classifiers = [
"Development Status :: 3 - Alpha",
Expand Down
6 changes: 3 additions & 3 deletions docs/README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Tech Conference for Plone
# Tech Event Support for Plone

Documentation for Tech Conference for Plone.
Documentation for Tech Event Support for Plone.
Support for implementing tech conference in a Plone site.

This project provides a Sphinx-based documentation environment for your Plone project, powered by the [Plone Sphinx Theme](https://github.com/plone/plone-sphinx-theme).
Expand Down Expand Up @@ -59,7 +59,7 @@ make help
```


## Customize the Tech Conference for Plone documentation
## Customize the Tech Event Support for Plone documentation

This section provides how-to guidance to customize your documentation.

Expand Down
8 changes: 4 additions & 4 deletions docs/docs/concepts/index.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
myst:
html_meta:
"description": "Tech Conference for Plone concepts"
"property=og:description": "Tech Conference for Plone concepts"
"property=og:title": "Tech Conference for Plone concepts"
"keywords": "Plone, Tech Conference for Plone, concepts"
"description": "Tech Event Support for Plone concepts"
"property=og:description": "Tech Event Support for Plone concepts"
"property=og:title": "Tech Event Support for Plone concepts"
"keywords": "Plone, Tech Event Support for Plone, concepts"
---

# Concepts
Expand Down
Loading