- Astro 71.4%
- TypeScript 8.5%
- CSS 7.9%
- JavaScript 4.8%
- Shell 4.3%
- Andere 3.1%
|
|
||
|---|---|---|
| nginx | ||
| public | ||
| scripts | ||
| src | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| .nvmrc | ||
| astro.config.mjs | ||
| docker-compose.yml | ||
| Dockerfile | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
SME Holland — website
Moderne website van Stichting Sustainable Meat Ethiopia (SME Holland), gebouwd met Astro en Decap CMS.
- ⚡️ Astro — snelle, statische site (HTML), geserveerd door nginx.
- ✍️ Decap CMS — lokaal gehost (geen CDN), bewerkbaar via
/admin/. - 🔑 Forgejo/Gitea login — OAuth2 met PKCE, alleen een Client ID nodig (geen secret, geen proxy).
- 🐳 Docker — makkelijk te deployen met Coolify via de meegeleverde
Dockerfile. - 🖼️ Afbeeldingen + cache — alle media lokaal in
public/uploads, met cache die vanuit de CMS te regelen is. - 📄 ANBI — jaarverslagen, balansen en pdf's eenvoudig te uploaden via de CMS.
Inhoud bewerken (voor het bestuur)
- Ga naar
https://<domein>/admin/(bijv.https://sme-holland.org/admin/). - Log in met je Forgejo-account.
- Pas teksten, foto's en documenten aan. Bij opslaan/publiceren wordt automatisch een commit gemaakt in Forgejo en bouwt Coolify de site opnieuw.
Beschikbare onderdelen in de CMS:
| Onderdeel | Wat |
|---|---|
| Site settings | Naam, contactgegevens, bankrekening, ANBI-nummers, afbeeldingscache |
| Home page | Hero, statistieken, kaarten, missietekst |
| Content sections | Secties voor About, Background, Project en Somaliland (herschikbaar via "Order") |
| Newsletters | Nieuwsbrieven (bijv. het waterproject in Somaliland) |
| Board members | Bestuursleden (naam, rol, foto) |
| ANBI page | Introtekst van de ANBI-pagina |
| ANBI documents | Jaarverslagen / balansen / overige pdf's — hier upload je de pdf's |
| Photo gallery | Foto's & video |
ANBI-pdf uploaden
CMS → ANBI documents → New ANBI document → titel, jaar en categorie invullen, PDF document uploaden → Publish. De pdf verschijnt automatisch onder het juiste jaar op de ANBI-pagina.
Forgejo OAuth-app aanmaken (eenmalig)
De CMS-login gebruikt een OAuth2-applicatie in Forgejo. Aanmaken:
- In Forgejo: Settings → Applications → Manage OAuth2 Applications (op org- of gebruikersniveau).
- Application Name: bijv.
SME Holland CMS. - Redirect URI:
https://<domein>/admin/(bijv.https://sme-holland.org/admin/). - Confidential Client: uitvinken (PKCE, geen secret nodig).
- Opslaan en de Client ID kopiëren → zet deze als
FORGEJO_CLIENT_ID(zie hieronder). - Zorg dat CORS aanstaat in Forgejo (Forgejo ≥ 1.21.4 / Gitea ≥ 1.20). In
app.ini:[cors] ENABLED = true
De ingelogde gebruiker moet schrijfrechten hebben op de repo
SMEholland/SMEHollandSite.
Deployen met Coolify
- New Resource → Application en koppel de Forgejo-repo
SMEholland/SMEHollandSite. - Build Pack: Dockerfile (Coolify gebruikt de
Dockerfilein de repo). - Stel de environment variables in (zie tabel). Belangrijkste:
FORGEJO_CLIENT_ID. - Koppel het domein; Coolify regelt HTTPS. De container luistert op poort 80.
- (Aanbevolen) Zet in Forgejo een webhook naar Coolify zodat de site herbouwt bij elke wijziging — ook bij wijzigingen vanuit de CMS.
Environment variables
| Variabele | Standaard | Uitleg |
|---|---|---|
SITE_URL |
https://sme-holland.org |
Productie-URL (canonical, sitemap, OG). Zet ook als build argument als het domein anders is. |
FORGEJO_CLIENT_ID |
(leeg) | Verplicht. Client ID van de OAuth-app. |
FORGEJO_BASE_URL |
https://code.securityasaservice.org |
URL van de Forgejo-server. |
FORGEJO_REPO |
SMEholland/SMEHollandSite |
De repo. |
FORGEJO_BRANCH |
main |
Branch waarnaar de CMS commit. |
IMAGE_CACHE_MAX_AGE |
(uit CMS) | Optioneel: overschrijf de cache max-age (seconden). |
IMAGE_CACHE_ENABLED |
(uit CMS) | Optioneel: true/false om caching aan/uit te zetten. |
Afbeeldingscache beheren vanuit de CMS
CMS → Site settings → General → Image cache:
- Cache version — verhoog dit getal nadat je een afbeelding hebt vervangen. Aan alle
afbeeldings-URL's wordt
?v=<version>toegevoegd, zodat browsers de nieuwe versie laden. - Browser cache max-age (seconds) — hoe lang browsers afbeeldingen/pdf's bewaren
(standaard 30 dagen). Wordt door nginx als
Cache-Controlmeegegeven. - Enable image caching — caching helemaal aan of uit.
Deze waarden worden bij het bouwen meegenomen; ze kunnen op de server nog overschreven worden
met IMAGE_CACHE_MAX_AGE / IMAGE_CACHE_ENABLED. Astro-assets (/_astro/…) hebben een eigen,
permanente cache (ze krijgen een unieke hash).
Lokaal ontwikkelen
Vereist Node ≥ 22.12.
npm install
npm run dev # http://localhost:4321
De CMS lokaal bewerken zonder Forgejo-login (schrijft direct naar je schijf):
# in een tweede terminal:
npx decap-server
# open daarna http://localhost:4321/admin/
Productie-build testen:
npm run build # output in dist/
npm run preview
Of de volledige container lokaal:
FORGEJO_CLIENT_ID=... docker compose up --build # http://localhost:8080
Projectstructuur
├── public/
│ ├── admin/ # Decap CMS (index.html + config.yml; bundle wordt lokaal gekopieerd)
│ └── uploads/ # ALLE afbeeldingen en pdf's van de oude site (+ nieuwe uploads)
├── src/
│ ├── content/ # Inhoud (markdown/json) — beheerd via de CMS
│ ├── components/ # Astro-componenten (Header, Footer, Section, …)
│ ├── layouts/ # BaseLayout
│ ├── lib/ # settings, navigatie, helpers
│ ├── pages/ # Routes
│ ├── styles/ # global.css (huisstijl: Ethiopische vlagkleuren uit het logo)
│ └── content.config.ts # Schema's van de content-collecties
├── nginx/ # nginx-template + entrypoint (cache + OAuth-injectie)
├── scripts/ # build-helpers (Decap kopiëren, cache-hints schrijven)
├── Dockerfile
└── docker-compose.yml
Opmerkingen
- Geen CDN: de Decap-bundle wordt bij het bouwen uit
node_modulesnaarpublic/admin/gekopieerd (scripts/copy-decap.mjs) en lokaal geserveerd. - Alle media lokaal: afbeeldingen en pdf's staan in de repo onder
public/uploads/en worden door nginx geserveerd (met de cache-instellingen hierboven). - De kerncontent is Engels; ANBI, donaties en de Somaliland-nieuwsbrieven zijn Nederlands — net als op de oorspronkelijke site.