The association's public website β deliberately small, and deliberately temporary.
This repository holds the website of GrowVolution e.V., a German non-profit association registered at the Amtsgericht Braunschweig under VR 202639. It runs on WebFluid, a fullstack Python runtime on top of FastAPI.
Live at https://growvolution.org.
This is not the association's product. It is the smallest site that discharges three obligations and one convenience:
- A single, citable Imprint. Everything the association publishes β
repositories, Matrix rooms, mailing addresses, printed material β links to
one
/imprint, so the Β§ 5 DDG details live in exactly one place and change in exactly one place. - A single, citable Privacy Policy. Same reasoning.
/privacycovers the whole network the association operates, not just this page, and is the address every other service points at. - A rough overview of what we actually do, for anyone who arrives from a link and wants to know who is behind it before reading the legal pages.
- The association-operating functions that are useful to have online β today that means donations, receipts included.
Everything beyond that is intentionally absent. When the association's actual platform is ready, this site is expected to be replaced rather than grown.
| Path | What it is |
|---|---|
/ |
The overview page |
/imprint |
Impressum (Β§ 5 DDG) |
/privacy |
DatenschutzerklΓ€rung, covering the whole network |
/donations/ |
Donation page β one-off or monthly, via Stripe |
/donations/validation |
Public check of a donation receipt's seal and integrity |
/donations/admin/ |
Administration of the receipt seal and the donation ledger |
/robots.txt, /sitemap |
Generated from SITE_PAGES in fluid/config.py |
/.well-known/matrix/server |
Server delegation for the association's Matrix homeserver |
The donation flow is worth a sentence, because it is the only part with real
moving pieces: a donor gives once or monthly without ever creating an account,
and whenever they leave a billing address with us, a ZuwendungsbestΓ€tigung on
the officially prescribed form is generated, sealed with the association's own
signing certificate, filed, and mailed out. The address is collected on our own
page, not by the payment provider. See additives/donations-de/README.md for
the whole picture and additives/donations-de/PROCESS.md for the
Verfahrensdokumentation the tax office gets.
verein/
βββ main.py # prepare_fluid() β the app factory
βββ app_configs/main.ini # secrets and switches, per deployment (gitignored)
βββ additives/ # feature modules, each its own repository (gitignored)
β βββ auth/ # login, sessions, 2FA
β βββ users/ # accounts and profiles
β βββ users-admin/ # user, role and permission administration
β βββ donations-de/ # donations and German donation receipts
βββ fluid/
βββ config.py # the app config class
βββ api/ # JSON routes
βββ app/ # HTML routes
βββ i18n/ # translation store (de, en)
βββ static/ # theme, logo, small scripts
βββ templates/ # base, index, imprint, privacy, base_email, sitemaps
app_configs/ and additives/ are gitignored β git status will not show
edits in there. app_configs/main.example.ini shows the shape of the config a
deployment needs.
Requires Python 3.14+ and a checkout of the additives listed above.
wf run main -d-d is debug mode: template auto-reload, the detailed error page, the [dev]
config section. Never use it for a deployment β that is plain wf run main.
Logs land in logs/main/<timestamp>.log, one file per run.
After a model change:
wf migrate revision main -a -m "what changed"Read the generated revision before applying it with wf migrate upgrade main.
Everything that is not a secret lives in fluid/config.py: the association's
name, address, board, register entry, contact details, the Matrix community,
the theme, the sitemap and the mail colour palette. main.py exposes those as
Jinja globals (association, ADDRESS, BOARD, MAIL_THEME, β¦), so the
imprint, the privacy page and every outgoing email read them from one source.
Secrets and per-deployment switches β the database URI, the Redis URI, the mail
credentials, the Stripe keys, the signing passphrase β belong in
app_configs/main.ini, which is never committed.
The code in this repository is released by GrowVolution e.V. under the
GNU General Public License v3.0; see LICENSE.
The additives it runs on are not all under the same terms:
| Additive | Licence |
|---|---|
auth |
GPL v3, maintained by GrowVolution e.V. |
users |
All Rights Reserved, licensed to us |
users-admin |
All Rights Reserved, licensed to us |
donations-de |
All Rights Reserved, licensed to us |
users and donations-de β together with users-admin, which belongs to
the users ecosystem β are the copyright of GrowVolution Media, Inh. Pierre
Schkoldow and are distributed commercially through the Ocean marketplace. The
copyright holder has granted GrowVolution e.V. a free-of-charge licence to use
these modules for the purpose of operating the association's website. That
grant covers this use and no other: it is not a sublicence, it does not travel
with a fork of this repository, and it confers no right to redistribute the
modules. Anyone wanting to run them elsewhere needs their own licence β see the
Ocean licensing overview.
Because those modules are gitignored here, a clone of this repository contains only the GPL-licensed part.
- Matrix: #people:growvolution.org
- Email: info@growvolution.org
- Imprint: https://growvolution.org/imprint