From 99244c148fd25a27f5390c144c6a2c9b4cd1f94e Mon Sep 17 00:00:00 2001 From: gilgamezh Date: Sat, 4 Oct 2025 12:17:15 +0200 Subject: [PATCH 1/2] include agents file --- AGENTS.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 AGENTS.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..4cd1d76 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,34 @@ +# Repository Guidelines + +## Project Structure & Module Organization +- `content/` stores Pelican sources; events live in year folders, pages in `content/pages/`, and shared assets in `content/images/`. +- Site configuration resides in `pelicanconf.py` with environment-specific variants (`conf_prod.py`, `conf_preview.py`, `conf_gh_pages.py`); automation lives in `tasks.py` and the `Makefile`. +- The custom theme is under `theme/` (templates plus static files). Update assets here and keep compiled output out of version control. +- `docs/` holds authoring aids such as `event_template.rst`; `output/` is generated HTML and should be rebuilt rather than edited. + +## Build, Test, and Development Commands +- `python3 -m venv .venv && source .venv/bin/activate` creates a virtualenv; activate before installing dependencies. +- `pip install -r requirements.txt` installs Pelican, plugins, and deployment helpers. +- `make html` builds the site into `output/`; `make serve` hosts it at `http://localhost:8000` for manual review. +- `invoke livereload` watches content, theme, and config files and rebuilds as you edit. +- `invoke gh-pages` publishes a preview build to `gh-pages`; run from a clean tree. + +## Coding Style & Naming Conventions +- Follow PEP 8 with four-space indentation for Python helpers; annotate only non-obvious behaviour. +- Write content in reStructuredText. Name events `YYYY/event-name.rst`, include `:event_type:` and `:date:` (YYYY-MM-DD), and add RSVP or external URLs when relevant. +- Store shared imagery in `content/images/`; keep year folders text-only unless the asset is event-specific. + +## Testing Guidelines +- Run `make html` (or `invoke build`) before pushing; fix any Pelican warnings. +- Spot-check pages in `output/` or via `make serve`, confirming events render and metadata appears in listings. +- When editing theme templates or JS, use `invoke livereload` and test key breakpoints for layout changes. + +## Commit & Pull Request Guidelines +- Write short, present-tense imperative commits (`update who we are`, `add mastodon link`) to match existing history; keep related edits together. +- Reference the affected content in the body if context is needed (e.g., meetup slug, page path). +- PRs should summarise changes, link related events or issues, list verification steps (`make html`, manual checks), and add screenshots for layout updates. +- Confirm the branch merges cleanly and previews (if triggered) match expectations before requesting review. + +## Content Contribution Tips +- Start from `docs/event_template.rst`, update titles, slugs, and schedule fields, then move the file into the correct year directory. +- For recurring updates, duplicate the prior event file and adjust metadata to keep formatting consistent. From 8f42b80c6eeb1b740628d2684d6fcab9e920ae37 Mon Sep 17 00:00:00 2001 From: gilgamezh Date: Sat, 4 Oct 2025 12:33:37 +0200 Subject: [PATCH 2/2] Refresh supporter guidance and sponsorship section --- AGENTS.md | 2 +- content/images/gandi_black.png | Bin 0 -> 10978 bytes content/images/psf-logo.png | Bin 0 -> 19844 bytes .../templates/includes/section_sponsors.html | 60 ++++++++---------- 4 files changed, 26 insertions(+), 36 deletions(-) create mode 100644 content/images/gandi_black.png create mode 100644 content/images/psf-logo.png diff --git a/AGENTS.md b/AGENTS.md index 4cd1d76..cadf32d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -7,7 +7,7 @@ - `docs/` holds authoring aids such as `event_template.rst`; `output/` is generated HTML and should be rebuilt rather than edited. ## Build, Test, and Development Commands -- `python3 -m venv .venv && source .venv/bin/activate` creates a virtualenv; activate before installing dependencies. +- `source .venv/bin/activate` reuses the shared project virtualenv; run `python3 -m venv .venv` first if you need to recreate it locally. - `pip install -r requirements.txt` installs Pelican, plugins, and deployment helpers. - `make html` builds the site into `output/`; `make serve` hosts it at `http://localhost:8000` for manual review. - `invoke livereload` watches content, theme, and config files and rebuilds as you edit. diff --git a/content/images/gandi_black.png b/content/images/gandi_black.png new file mode 100644 index 0000000000000000000000000000000000000000..952e72b3c47885ab6ce86c435bb6bf98715dfe65 GIT binary patch literal 10978 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%0DGPFXVU=~72c1rLYwv)RmTbL=CbPF-L{-~ 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 n`z1!`BE&x -

+
-

Our

-

Community Contributors

-

Would you like to see your name or name of your company? - Contact us! -

+

Thanks to our

+

Supporters & Sponsors

+

These partners keep PyAmsterdam running for the community.

- -
- {{ add_sponsors( - { - 'Gandi': 'Our beautiful domain registrar!', - 'Optiver': 'provided a meeting space', - 'Crunchr': 'provided a meeting space', - 'Hubs': 'provided a meeting space', - 'Picnic': 'provided a meeting space', - 'KPN': 'provided a meeting space', - 'Brookz': 'provided a meeting space', - 'Sander van de Graaf': 'Talk: Detecting Outages at Scale', - 'Dinis Louseiro': 'Data Warehouse Automation in Python', - 'Daniel Bradburn': 'Battle testing your web API using OpenAPI and hypothesis', - 'Aybars Badour': 'Practical patterns in distributed systems for mere mortals (aka. patterns for microservices)', - 'Marc Wagner': 'Using micropython in IOT devices', - 'Jan van der Vegt': 'Industrialization of Machine Learning models is a complex task.', - 'Cornelis van Lit': 'Python in digital humanities research', - 'Santiago Fraire Willemoes': 'Exploring pytest capabilties', - 'Ɓukasz Langa': 'AsyncIO + Music', - 'Eric Holscher': 'About Read The docs and The Python Software Foundation', - 'Olga Sentemova': 'Getting started with FPGA with Python', - 'Mikaeil Orfanian': 'Architecture for Everyday Programming', - 'Joost Lek': 'Python 2 vs. Python 3: How to Navigate the Change', - } - ) - }} +
+
+
+ Gandi.net logo +

Gandi.net

+

Provides our py.amsterdam domain and DNS at no cost.

+
+
+
+
+ Python Software Foundation logo +

Python Software Foundation

+

Sponsors our Meetup.com account so we can organise community events.

+
+
+
+
+

Zammad

+

Donates ticketing software that helps us support attendees and volunteers.

+
+