- Astro 43.7%
- CSS 42.4%
- TypeScript 9.7%
- JavaScript 2.5%
- Dockerfile 0.9%
- Other 0.8%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| public | ||
| src | ||
| .dockerignore | ||
| .fallowrc.jsonc | ||
| .gitignore | ||
| .nvmrc | ||
| .prettierignore | ||
| .prettierrc.json | ||
| .stylelintrc.json | ||
| astro.config.mjs | ||
| DESIGN.md | ||
| Dockerfile | ||
| eslint.config.js | ||
| LICENSE | ||
| nginx.conf | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.json | ||
ITPU — Enhedslistens IT-politiske udvalg
Website for IT-Politisk Udvalg (ITPU). Statisk site bygget med Astro, redigeret med Sveltia CMS.
Kom i gang
npm install
npm run dev # http://localhost:4321
npm run build # statisk site i ./dist
npm run preview
npm run check # alle kvalitetstjek (køres også i CI)
Kodekvalitet
npm run check kører alle tjek og skal være grønt før merge. Der er ingen separat CI: tjekkene kører i Dockerfile, når Coolify bygger sitet (se Hosting og deploy). Kør derfor npm run check lokalt før push.
| Script | Værktøj | Tjekker |
|---|---|---|
check:types |
astro check + TypeScript strictest |
Typer i .ts- og .astro-filer, inkl. templates |
lint |
ESLint: typescript-eslint strict + stylistic (typebaseret), eslint-plugin-astro, jsx-a11y strict (via eslint-plugin-jsx-a11y-x) |
Fejl, usikre typer, tilgængelighed |
lint:css |
Stylelint (stylelint-config-standard, BEM-klassenavne, ingen !important/id-selektorer) |
CSS |
format:check |
Prettier (+ Astro-plugin) | Formatering. CMS-indhold er undtaget, så redigeringer i Sveltia ikke bryder CI |
fallow |
fallow med --fail-on-issues |
Død kode, ubrugte afhængigheder, duplikering, kompleksitet |
npm run format retter formateringen automatisk.
Struktur
src/
components/
layout/ Header, Footer
ui/ Logo, PageHeader, ProseSection, ContactDetails
home/ Forsidens sektioner
program/ Indholdsfortegnelse og sektioner til principprogrammet
news/ Nyhedsliste og artikelhoved
designsystem/ Sektionerne på /designsystem/
content/ Markdown fra CMS'et (principper, nyheder, sider)
data/ Indstillinger (JSON fra CMS'et) + typede moduler (site.ts, palette.ts)
lib/ collections.ts (data), links.ts (URL'er), format.ts, types.ts
scripts/ Klientside-TypeScript (mobilmenu)
styles/ tokens.css (designtokens) og global.css (base + fælles komponenter)
pages/ Ruter
Afhængigheder
Opdateringer tjekkes manuelt, fx med npx npm-check-updates, efterfulgt af npm run check. Der er ingen automatiske opdaterings-PR'er. To bevidste valg:
- TypeScript 6. TypeScript 7 (den nye Go-version) har endnu ikke det JavaScript-API, som
typescript-eslintogastro checkbygger på;@astrojs/checkkræver højst TypeScript 6, ognpm cifejler med 7. Opgradér, når værktøjerne følger med. overrides.minimatch. ESLint ogtypescript-eslintafhænger afminimatch10, som har en kendt sårbarhed (rettet i 11). API'et er det samme, såpackage.jsontvinger version 11. Fjern overriden, når afhængighederne selv kræver 11.
Hver komponent har sin CSS i en fil ved siden af (fx Header.astro + header.css) med BEM-klassenavne præfikset med komponentens navn.
Sider
| Side | Fil | Indhold fra |
|---|---|---|
/ |
src/pages/index.astro |
src/data/forside.json, principper, nyheder |
/principprogram/ |
src/pages/principprogram.astro |
src/content/sider/principprogram.md + src/content/program/*.md |
/nyheder/ |
src/pages/nyheder/ |
src/content/nyheder/*.md |
/om/ |
src/pages/om.astro |
src/content/sider/om.md, src/data/settings.json |
/kommissorium/ |
src/pages/kommissorium.astro |
src/content/sider/kommissorium.md |
/designsystem/ |
src/pages/designsystem.astro |
Levende oversigt over designsystemet |
/rss.xml |
src/pages/rss.xml.ts |
Nyheder som RSS |
Redigering med Sveltia CMS
CMS'et ligger på /admin/ og er konfigureret i public/admin/config.yml.
Lokalt (anbefalet til udvikling): Kør npm run dev, åbn http://localhost:4321/admin/ i Chrome eller Edge, vælg Work with Local Repository og peg på mappen med repoet. Ændringer skrives direkte til filerne.
Online: Sveltia gemmer ændringer som commits i repoet itpu/itpu-website på ITPU's egen Forgejo, https://git.itpu.dk (gren main). Redaktører skal have en bruger dér med skriveadgang til repoet og kan logge ind på to måder:
- Forgejo-login — via OAuth2-appen ITPU website CMS i organisationens indstillinger på git.itpu.dk (offentlig klient, redirect-URI
https://itpu.dk/admin/). Dens client ID står somapp_idipublic/admin/config.yml. - Adgangstoken — vælg Sign in with Token og indsæt et Forgejo-adgangstoken med repository: read and write.
CMS-scriptet serveres fra sitet selv (/admin/sveltia-cms.js). Det kopieres fra node_modules ved npm install og er ikke i git.
Sitet genbygges automatisk efter hver ændring, se nedenfor.
Deploy
- Byggekommando:
npm run build - Output-mappe:
dist - Node 26 (aktiv LTS, se
.nvmrc) - Sæt miljøvariablen
SITEtil det endelige domæne (bruges til kanoniske URL'er og RSS), og opdatersite_urlipublic/admin/config.yml.
Designsystem
Se DESIGN.md og /designsystem/ på sitet.
Skrifter og logo
- Maj er Enhedslistens egen skrift (ÅBC/Kontrapunkt), udgivet under en open source-licens, der giver partiets medlemmer ret til at bruge den uændret.
- Logo-filerne i
public/images/er konverteret fra Enhedslistens officielle.ai-filer.
Licens
Koden er udgivet under GNU AGPL v3 — se LICENSE. Enhedslistens logo og skriften Maj er ikke omfattet af AGPL-licensen.
Hosting og deploy
Repoet ligger på ITPU's egen Forgejo (https://git.itpu.dk). Sitet bygges og hostes selv:
- Coolify bygger
Dockerfile:npm ci,npm run check(alle kvalitetstjek),npm run build, og serverer derefterdist/med nginx (nginx.conf). Fejler et tjek, fejler deployet, og den kørende version bliver stående. - Build-variablen
SITEsætter det endelige domæne (standardhttps://itpu.dk). - Pangolin står foran og håndterer HTTPS.
- Nye commits på
main(også fra Sveltia CMS) opdages inden for et minut og deployes automatisk.
Branding af Jitsi
public/jitsi/branding.json styrer farver og logo i ITPU's Jitsi (moede.itpu.dk / møde.itpu.dk). Jitsi henter filen via DYNAMIC_BRANDING_URL, derfor sender nginx en CORS-header for /jitsi/. Farverne følger designguiden: mørkegrøn baggrund og grønne knapper (ingen rød op ad grøn).
Tekster overskrives med labels-da.json og labels-en.json (samme struktur som Jitsis lang/main.json; kun de nøgler, der skal ændres).