Compare commits

..

No commits in common. "main" and "new-cleanup" have entirely different histories.

49 changed files with 1361 additions and 1016 deletions

View file

@ -1,56 +0,0 @@
# syntax=docker/dockerfile:1
FROM mcr.microsoft.com/devcontainers/base:ubuntu-22.04
ARG USER=vscode
ARG DEBIAN_FRONTEND=noninteractive
RUN usermod -s /usr/bin/zsh ${USER}
# VARIANT can be either 'hugo' for the standard version or 'hugo_extended' for the extended version.
ARG VARIANT=hugo_extended
# VERSION can be either 'latest' or a specific version number
ARG VERSION=latest
# Download Hugo
RUN case ${VERSION} in \
latest) \
export VERSION=$(curl -s https://api.github.com/repos/gohugoio/hugo/releases/latest | grep "tag_name" | awk '{print substr($2, 3, length($2)-4)}') ;;\
esac && \
echo ${VERSION} && \
case $(uname -m) in \
aarch64) \
export ARCH=ARM64 ;; \
*) \
export ARCH=64bit ;; \
esac && \
echo ${ARCH} && \
wget -O ${VERSION}.tar.gz https://github.com/gohugoio/hugo/releases/download/v${VERSION}/${VARIANT}_${VERSION}_Linux-${ARCH}.tar.gz && \
tar xf ${VERSION}.tar.gz && \
mv hugo /usr/bin/hugo
# Hugo dev server port
EXPOSE 1313
USER ${USER}
ARG HOME=/home/${USER}
WORKDIR ${HOME}
ARG PNPM_HOME=${HOME}/.local/share/pnpm
ENV PATH="${PNPM_HOME}:$PATH"
RUN <<EOT
wget -qO- https://get.pnpm.io/install.sh | ENV="${HOME}/.zshrc" SHELL=/bin/zsh sh -
pnpm env use -g lts
EOT
ARG OHMYZSH_HOME=${HOME}/.oh-my-zsh
# ARG OHMYZSH_THEME=${OHMYZSH_HOME}/custom/themes
# RUN <<EOT
# git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ${OHMYZSH_THEME}/powerlevel10k
# sed -i 's|ZSH_THEME="devcontainers"|ZSH_THEME="powerlevel10k/powerlevel10k"|g' .zshrc
# echo 'POWERLEVEL9K_DISABLE_CONFIGURATION_WIZARD=true' >> .zshrc
# EOT
RUN <<EOT
hugo completion zsh > ${OHMYZSH_HOME}/plugins/git/_hugo
EOT

View file

@ -1,51 +0,0 @@
{
"name": "Hugo & pnpm",
"build": {
"dockerfile": "Dockerfile"
},
// 👇 Features to add to the Dev Container. More info: https://containers.dev/implementors/features.
// "features": { "ghcr.io/devcontainers/features/docker-in-docker:2": {} },
// 👇 Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Configure tool-specific properties.
"customizations": {
// Configure properties specific to VS Code.
"vscode": {
// Set *default* container specific settings.json values on container create.
"settings": {
"html.format.templating": true
},
// Add the IDs of extensions you want installed when the container is created.
"extensions": [
// https://marketplace.visualstudio.com/items?itemName=eliostruyf.vscode-front-matter
"eliostruyf.vscode-front-matter",
// https://marketplace.visualstudio.com/items?itemName=rusnasonov.vscode-hugo
"rusnasonov.vscode-hugo",
// https://marketplace.visualstudio.com/items?itemName=budparr.language-hugo-vscode
"budparr.language-hugo-vscode",
// https://marketplace.visualstudio.com/items?itemName=eliostruyf.vscode-hugo-themer
"eliostruyf.vscode-hugo-themer",
// https://marketplace.visualstudio.com/items?itemName=kaellarkin.hugo-shortcode-syntax
"kaellarkin.hugo-shortcode-syntax",
// "csstools.postcss",
// "esbenp.prettier-vscode",
// "tamasfe.even-better-toml",
// "naumovs.color-highlight",
// "GitHub.vscode-pull-request-github",
// "eamodio.gitlens",
"davidanson.vscode-markdownlint",
"streetsidesoftware.code-spell-checker"
]
}
},
"remoteUser": "vscode",
"postCreateCommand": "pnpm install-completion zsh"
}

View file

@ -2,32 +2,16 @@ kind: pipeline
name: default name: default
steps: steps:
# stable site - name: build
- name: build_stable image: debian:buster-slim
image: floryn90/hugo:ext-alpine-ci
user: root
environment:
HUGO_SECURITY_HTTP_URLS: none
commands: commands:
- apt-get update; apt-get upgrade -y
- apt-get install -y wget git
- wget https://github.com/gohugoio/hugo/releases/download/v0.111.2/hugo_extended_0.111.2_linux-amd64.deb -O hugo.deb
- dpkg -i hugo.deb
- hugo --destination _site/ - hugo --destination _site/
when:
branch:
- main
# staging site - name: docker
- name: build_staging
image: floryn90/hugo:ext-alpine-ci
user: root
environment:
HUGO_SECURITY_HTTP_URLS: none
commands:
- hugo --baseURL "https://staging.data.coop" --destination _site/
when:
branch:
- staging
# stable site
- name: docker_stable
image: plugins/docker image: plugins/docker
settings: settings:
repo: docker.data.coop/data-coop-website repo: docker.data.coop/data-coop-website
@ -38,45 +22,20 @@ steps:
from_secret: DOCKER_PASSWORD from_secret: DOCKER_PASSWORD
tags: tags:
- "${DRONE_BUILD_NUMBER}" - "${DRONE_BUILD_NUMBER}"
- "stable" - "hugo"
when: when:
branch: branch:
- main - new
event: event:
exclude: exclude:
- pull_request - pull_request
# staging site - name: notify
- name: docker_staging image: plugins/matrix
image: plugins/docker
settings: settings:
repo: docker.data.coop/data-coop-website homeserver: https://data.coop
registry: docker.data.coop roomid: plKSghHbepWeUEtbHE:data.coop
username: username:
from_secret: DOCKER_USERNAME from_secret: matrix_username
password: password:
from_secret: DOCKER_PASSWORD from_secret: matrix_password
tags:
- "${DRONE_BUILD_NUMBER}"
- "staging"
when:
branch:
- staging
event:
exclude:
- pull_request
# - name: notify
# image: spotlightkid/drone-matrixchat-notify:latest
# settings:
# homeserver: https://data.coop
# roomid: '!plKSghHbepWeUEtbHE:data.coop'
# userid:
# from_secret: matrix_username
# password:
# from_secret: matrix_password
# markdown: 'yes'
# template: |
# `${DRONE_REPO}` build #${DRONE_BUILD_NUMBER} status: **${DRONE_BUILD_STATUS}**
#
# ${DRONE_PULL_REQUEST_TITLE}](${DRONE_COMMIT_LINK})

7
Dockerfile_hugo Normal file
View file

@ -0,0 +1,7 @@
FROM debian:buster-slim
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y wget git && \
wget https://github.com/gohugoio/hugo/releases/download/v0.111.1/hugo_extended_0.111.1_linux-amd64.deb -O hugo.deb && \
dpkg -i hugo.deb

View file

@ -10,7 +10,7 @@ Running with Docker
In `docker-compose.yml`, we have specified a `serve` target which you can run locally like this: In `docker-compose.yml`, we have specified a `serve` target which you can run locally like this:
```bash ``` {.sourceCode .bash}
docker-compose up serve docker-compose up serve
``` ```
@ -25,7 +25,7 @@ file an issue!
Example recipe Example recipe
```bash ``` {.sourceCode .bash}
# Fetch .deb from Github # Fetch .deb from Github
wget https://github.com/gohugoio/hugo/releases/download/v0.80.0/hugo_extended_X.Y.Z_Linux-64bit.deb -O hugo_extended.deb wget https://github.com/gohugoio/hugo/releases/download/v0.80.0/hugo_extended_X.Y.Z_Linux-64bit.deb -O hugo_extended.deb
@ -45,7 +45,7 @@ hugo server
Deploying the site Deploying the site
------------------ ------------------
Simply pushing to `main` in our main repo at Simply pushing to `master` in our main repo at
<https://git.data.coop/data.coop/website/> will trigger a <https://git.data.coop/data.coop/website/> will trigger a
build-and-deploy of the website. build-and-deploy of the website.

View file

@ -1,4 +1,4 @@
baseURL: https://data.coop baseURL: https://new.data.coop
copyright: CC-BY, see https://creativecommons.org/licenses/by/4.0/ copyright: CC-BY, see https://creativecommons.org/licenses/by/4.0/
@ -17,15 +17,7 @@ markup:
languages: languages:
da: da:
title: data.coop title: data.coop
params: weight: 1
description: "Et datakollektiv, der passer på dine data."
weight: 1
# First Hugo looks in your post front matter for an images value (images: [""])
# Then Hugo searchs for image page resources with feature, cover or thumbnail in their name. These are images files under a directory that matches the post (e.g. content\posts\first-post)
# If not images are found, Hugo looks for images (images: [""]) in your site config
# If no image if found, then an image-less Twitter summary card is used instead of summary_large_image
# https://digitaldrummerj.me/hugo-preview-when-sharing-twitter/
images: ["/static/img/some_card_preview_large_da.png"]
LanguageName: Dansk LanguageName: Dansk
menu: menu:
nav: nav:
@ -43,10 +35,7 @@ languages:
weight: 4 weight: 4
en: en:
title: data.coop title: data.coop
params:
description: "A data collective that takes care of your data."
weight: 2 weight: 2
images: ["/static/img/some_card_preview_large_en.png"]
LanguageName: English LanguageName: English
menu: menu:
nav: nav:
@ -63,3 +52,5 @@ languages:
url: "en/rights/" url: "en/rights/"
weight: 4 weight: 4
params:
description: "Et datakollektiv, der passer på dine data."

View file

@ -38,4 +38,3 @@ Vores kerneprincipper er:
</dl> </dl>
Ud fra de kerneprincipper vil vi med tiden udbyde onlinetjenester til medlemmerne. Hovedtanken er, at vi som udgangspunkt stoler mere på hinanden end på "de store" som f.eks. Google, Microsoft eller Facebook. Ud fra de kerneprincipper vil vi med tiden udbyde onlinetjenester til medlemmerne. Hovedtanken er, at vi som udgangspunkt stoler mere på hinanden end på "de store" som f.eks. Google, Microsoft eller Facebook.

View file

@ -1,45 +1,13 @@
--- ---
title: Welcome to data.coop title: Velcome to data.coop
--- ---
data.coop is a cooperative, which owns and operates a digital infrastructure for its members. Our fundamental vision is to protect our members' data. We are an association whose purpose is to look after the members' data. Our core principles are
The community consists of members around the Copenhagen-area and is open to inquiries from abroad to start sister infrastructures based on the same principles.
Our core principles are: - Privacy
- Encryption
<dl class="principles-list"> - Decentralization
<dt> - Zero-knowledge
<img src="/static/img/icons/no-surveillance.svg" />
Privacy
</dt>
<dd>
We protect member data together.
We do not share them for profit.
Data is always encrypted in transit.
</dd>
<dt>
<img src="/static/img/icons/encrypted.svg" />
Encryption
</dt>
<dd>
We provide secure services that are thoroughly declared.
</dd>
<dt>
<img src="/static/img/icons/decentralised.svg" />
Decentralization
</dt>
<dd>
Our services exist together with other decentralized counterparts.
</dd>
<dt>
<img src="/static/img/icons/zero-knowledge.svg" />
Zero knowledge
</dt>
<dd>
Whenever possible, we ensure that a system administrator does not have technical ability to access member data.
</dd>
</dl>
From these core principles, we will continue to develop services for members.
The idea is that we trust each other more than any Big Tech operators, such as Google, Microsoft or Facebook.
Based on the core principles, over time we will provide online services to members. The main idea is,
that we basically rely more on each other than on the "big ones" such as Google, Microsoft or Facebook.

View file

@ -2,7 +2,7 @@
title: "Om os" title: "Om os"
--- ---
**[data.coop]({{< ref "/" >}})** er en forening og et kooperativ. **data.coop** er en forening og et kooperativ.
Vi — medlemmerne i kooperativet — ejer vores egne data. Vi — medlemmerne i kooperativet — ejer vores egne data.
@ -17,5 +17,5 @@ Du kan finde os på:
* Matrix: [#data.coop:data.coop](https://matrix.to/#/#data.coop:data.coop) * Matrix: [#data.coop:data.coop](https://matrix.to/#/#data.coop:data.coop)
* IRC (Libera.chat): #data.coop * IRC (Libera.chat): #data.coop
* Vores [Forgejo server](https://git.data.coop/data.coop/) * Vores [Gitea server](https://git.data.coop/data.coop/)
* På Fødiverset/Mastodon: <a rel="me" href="https://social.data.coop/@datacoop">@datacoop@data.coop</a> * På Fødiverset/Mastodon: <a rel="me" href="https://social.data.coop/@datacoop">@datacoop@data.coop</a>

View file

@ -2,23 +2,7 @@
title: "About" title: "About"
--- ---
**[data.coop]({{< ref "/" >}})** is an association and a cooperative. ## This Theme
The community consists of members around the Copenhagen-area and is open to inquiries from abroad to start sister infrastructures based on the same principles. Thanks for visiting this theme demo. If you're interested, checkout my other stuff over at <https://zwbetz.com>
If you are interested in becoming a member of data.coop but you are not able to participate in physical meetings in Copenhagen, we encourage that you get in touch with us about a vision you have for your community, rather than signing up as a member.
We — the members of the cooperative — own our own data.
In practice, this means that:
* We own our own hardware.
* We only use Open Source Software.
The cooperative owns 2 rack servers, of which one is in use and one is spare.
You can find us here:
* Matrix: [#data.coop:data.coop](https://matrix.to/#/#data.coop:data.coop)
* IRC (Libera.chat): #data.coop
* Our [Forgejo server](https://git.data.coop/data.coop/)
* In the Fediverse/Mastodon: <a rel="me" href="https://social.data.coop/@datacoop">@datacoop@data.coop</a>

View file

@ -2,35 +2,18 @@
title: Bliv medlem title: Bliv medlem
--- ---
[data.coop]({{< ref "/" >}}) er en demokratisk forening. Medlemmer bestemmer [data.coop](https://data.coop) er en demokratisk forening. Medlemmer bestemmer
over foreningens generelle drift og hvordan data skal forvaltes. Dette sker som i en helt klassisk forening i henhold til vores vedtægter på den årlige over foreningens generelle drift og hvordan data skal forvaltes. Dette sker som i en helt klassisk forening i henhold til vores vedtægter på den årlige
generalforsamling. generalforsamling.
Du bør læse vores [vedtægter]({{< ref "/rights.md" >}}) og især vores [Acceptable Usage Policy (AUP)](https://git.data.coop/data.coop/dokumenter/src/branch/main/Acceptable%20Usage%20Policy.md) inden du melder dig ind. Har du spørgsmål, kan du finde os på [Matrix og IRC]({{< ref "/about.md" >}}) eller [sende en e-mail til bestyrelsen](mailto:board@data.coop). Du bliver medlem ved at overføre penge til vores konto og sende en email til
vores kasserer, [benjaoming@data.coop](mailto:benjaoming@data.coop), med dit navn.
## Medlemspris * Reg. 8401 (Merkur)
* Kontonr. 1016866
* Tekst på overførslen: Fornavn+efternavn
Vores kontingentår løber fra og med 1. juli til og med 30. juni. Årligt kontingent: **300 kr** (dog gerne mere)\
Nedsat kontingent for studerende/arbejdsløse: **50 kr**
Medlemskab består af et kontingent til foreningen, samt en medlemsydelse for brug af tjenesterne. Betalinger følger det kontingentåret. Dvs. medlemskab er fortløbende fra betaling af kontingent frem til overstået ordinær generalforsamling. Medlemsydelsen er ligeledes 1 år forudbetalt og følger også kontingentåret, dog i indmeldelsesåret er kun indregnet tilbageværende måneder til og med juni. Kontingent-perioden gælder for det år, man melder sig ind i.
* Almindeligt medlem: **600 kr / år**
* Heraf 150 kr kontingent
* ...og 450 kr medlemsydelse (inkl. moms)
* Nedsat kontingent: **100 kr / år**
* Heraf 50 kr kontingent
* ...og 50 kr medlemsydelse (inkl. moms)
Nedsat kontingent tilbydes til studerende og arbejdsløse.
## Sådan melder du dig ind
En betalingsløsning er under udvikling.
Du melder dig ind ved at skrive til kasserer@data.coop med følgende information:
* At du har læst og er enig i vores [vedtægter]({{< ref "/rights.md" >}}) og [Acceptable Usage Policy (AUP)](https://git.data.coop/data.coop/dokumenter/src/branch/main/Acceptable%20Usage%20Policy.md).
* Ønsket primært brugernavn
* Ønsket email-adresse
Herefter kan vi sende dig en invitation og et betalingslink.

View file

@ -2,43 +2,4 @@
title: Become a member title: Become a member
--- ---
[data.coop]({{< ref "/" >}}) is a cooperative established as a democratic association. :P
The members decide on the association's operations and how data should be governed.
Governance resembles any classic association: We have legal statutes and formal general assemblies.
You need to read our [statutes]({{< relref "/rights.md" >}}) and our
[Acceptable Usage Policy (AUP)](https://git.data.coop/data.coop/dokumenter/src/branch/main/Acceptable%20Usage%20Policy.md)
before becoming a member.
If you have questions, you can find us on [Matrix or IRC]({{< ref "/about.md" >}}) or [send an email to the board](mailto:board@data.coop).
*English speakers:* We would love to have you as a member.
Many parts of this organization are already in English,
but our legal documents are not (yet).
Please write us if you have any questions.
## Price
Our membership period runs from one general assembly to the next => July 1st until June 30th.
A membership is comprised of a contingent to the association and a service fee. Payments follow the membership period.
* Ordinary membershio: **600 kr / år**
* ...of which 150 kr is contingent
* ...and 450 kr are service fee (incl. VAT)
* Reduced membership: **100 kr / år**
* ...of which 50 kr is contingent
* ...and 50 kr is service fee (incl. VAT)
The reduced membership is offered to students and unemployed members.
## How to become a member
We are developing a sign-up form.
Currently, you sign up by writing kasserer@data.coop with the following info:
* That you have read and agree to our [statutes]({{< ref "/rights.md" >}}) and [Acceptable Usage Policy (AUP)](https://git.data.coop/data.coop/dokumenter/src/branch/main/Acceptable%20Usage%20Policy.md).
* A desired primary username
* The email address to connect to your account
After this, we can send you an invite and payment link.

View file

@ -43,15 +43,13 @@ foreningens hjemmeside og mailinglister. Ordinær generalforsamling afholdes
hvert år inden udgangen af september måned. Dagsorden for ordinær hvert år inden udgangen af september måned. Dagsorden for ordinær
generalforsamling skal indeholde følgende punkter: generalforsamling skal indeholde følgende punkter:
1. Formalia 1. Valg af dirigent og referent.
1. Valg af dirigent.
2. Generalforsamlingens lovlighed (er indkaldelsen sket rettidigt).
3. Valg af referent.
2. Bestyrelsens beretning. 2. Bestyrelsens beretning.
3. Fremlæggelse og godkendelse af regnskab, budget og kontingent. 3. Fremlæggelse af regnskab, budget og kontingent.
4. Indkomne forslag. 4. Indkomne forslag.
5. Valg (Jf. § 3) 5. Godkendelse af vedtægtsændringer og Acceptable Use Policy
6. Eventuelt 6. Valg (Jf. § 3)
7. Eventuelt
### § 4.1. Afholdelse af generalforsamlinger og bestyrelsesmøder ### § 4.1. Afholdelse af generalforsamlinger og bestyrelsesmøder
Generalforsamlinger og bestyrelsesmøder kan afholdes på internettet. Generalforsamlinger og bestyrelsesmøder kan afholdes på internettet.
@ -79,14 +77,10 @@ Bestyrelsen fastsætter selv sin forretningsorden.
Bestyrelsen kan sammensætte samarbejdsgrupper af medlemmer, der kan fungerer Bestyrelsen kan sammensætte samarbejdsgrupper af medlemmer, der kan fungerer
som idéudviklingsforum for foreningen. som idéudviklingsforum for foreningen.
### § 5.1 Tegningsret
Tegningsret for foreningen har forpersonen og kassereren, dog ved køb, salg eller Tegningsret for foreningen har forpersonen og kassereren, dog ved køb, salg eller
pantsætning af fast ejendom, indgåelse af driftsaftaler samt ved optagelse af pantsætning af fast ejendom, indgåelse af driftsaftaler samt ved optagelse af
lån, af den samlede bestyrelse. lån, af den samlede bestyrelse.
Den samlede bestyrelse kan meddele prokura til individuelle medlemmer af bestyrelsen.
## § 6. Medlemskab ## § 6. Medlemskab
Som medlem kan enhver fysisk person optages, som har interesse i at støtte Som medlem kan enhver fysisk person optages, som har interesse i at støtte
foreningens formål. Medlemskab er bindende for et år ad gangen. foreningens formål. Medlemskab er bindende for et år ad gangen.
@ -114,56 +108,14 @@ på en ekstraordinær generalforsamling.
Mistillid til administratorer skal meldes til bestyrelsen. Bestyrelsen kan midlertidigt fratage en administrator vedkommendes administrationsrettigheder, indtil mistillidserklæringen mod vedkommende er behandlet. Mistillid til administratorer skal meldes til bestyrelsen. Bestyrelsen kan midlertidigt fratage en administrator vedkommendes administrationsrettigheder, indtil mistillidserklæringen mod vedkommende er behandlet.
## § 8. Moderationspolitik ## § 8. Kontingent/finansiering
Foreningen vedtager en moderationspolitik for foreningens sociale tjenester på generalforsamlingen. Moderationspolitikken håndhæves af et moderatorhold.
### § 8.1 Udpegning af moderatorer
Bestyrelsen udpeger moderatorer.
Udpegning af moderatorer skal annonceres til foreningens medlemmer.
Kun medlemmer af foreningen kan bestride hvervet som moderator. Moderatorer skal så vidt muligt findes udenfor bestyrelsen, dog skal mindst én moderator samtidig være bestyrelsesmedlem.
### § 8.2 Mistillid til moderatorer
Hvis der er mistillid til en eller flere moderatorer skal dette behandles
på en ekstraordinær generalforsamling.
Mistillid til moderatorer skal meldes til bestyrelsen. Bestyrelsen kan midlertidigt fratage en moderator vedkommendes moderatorrettigheder, indtil mistillidserklæringen mod vedkommende er behandlet.
## § 9. Kontingent/finansiering
De årlige kontingenter fastsættes af generalforsamlingen. De årlige kontingenter fastsættes af generalforsamlingen.
Foreningen kan herudover finansieres ved sponsor- og annoncestøtte samt bidrag Foreningen kan herudover finansieres ved sponsor- og annoncestøtte samt bidrag
fra offentlige/private virksomheder, fonde, øvrige foreninger/institutioner og fra offentlige/private virksomheder, fonde, øvrige foreninger/institutioner og
private personer, så længe det ikke stiller krav til foreningens dispositioner. private personer, så længe det ikke stiller krav til foreningens dispositioner.
## § 10. Medlemsydelse ## § 9. Ekstraordinær generalforsamling
Foreningen stiller tjenester til rådighed for sine medlemmer mod betaling af medlemsydelse.
Medlemsydelsen defineres og prissættes af bestyrelsen.
### § 10.1 Leverings- og betalingsbetingelser
Bestyrelsen fastsætter leverings- og betalingsbetingelser, såsom betalingsperioder, frister og refusion.
Bestyrelsen forudsætter sig ret til at pålægge gebyrer eller lukke for tjenester ved udebleven betaling.
### § 10.2 Ændring af medlemsydelser og betalingsbetingelser
Ændring af ydelser og betalingsbetingelser skal annonceres til foreningens medlemmer mindst 30 dage inden ændringen træder i kraft.
Tilføjelser af flere tjenester eller ændringer på konfigurationen af tjenester anses IKKE som ændringer, der kræver varslinger.
### § 10.3 Indsigelse mod ændringer
Hvis et eller flere medlemmer er uenige i ændringer af medlemsydelsen eller betalingsbetingelser, kan de indsende en skriftlig indsigelse til bestyrelsen.
Indsigelsen skal være bestyrelsen i hænde senest 14 dage før ændringen træder i kraft.
Hvis bestyrelsen modtager indsigelser fra mindst 1/3 af foreningens medlemmer, skal bestyrelsen indkalde til en ekstraordinær generalforsamling, hvor ændringen skal fremsættes som forslag og godkendes af generalforsamlingen.
## § 11. Ekstraordinær generalforsamling
Indkaldelse sker, hvis et flertal af bestyrelsen ønsker det. Indkaldelse sker, hvis et flertal af bestyrelsen ønsker det.
Indkaldelse sker, hvis 1/3 af medlemmerne ønsker det. Indkaldelse sker, hvis 1/3 af medlemmerne ønsker det.
@ -172,10 +124,10 @@ Indkaldelse sker under samme betingelser, som anført i §4.
Dagsorden skal motiveres. Dagsorden skal motiveres.
## § 12. Regnskab ## § 10. Regnskab
Regnskabsåret for Foreningen er kalenderåret. Regnskabsåret for Foreningen er kalenderåret.
## § 13. Opløsning ## § 11. Opløsning
Opløsning af foreningen kræver et flertal på ¾ af generalforsamlingens eller Opløsning af foreningen kræver et flertal på ¾ af generalforsamlingens eller
den ekstraordinære generalforsamlings fremmødte medlemmer. den ekstraordinære generalforsamlings fremmødte medlemmer.

View file

@ -1,164 +0,0 @@
---
title: Legal statutes of data.coop
---
> This translation is provided solely for the purpose of guidance. The [Danish version](/rights/) remains the official and legally binding version.
## § 1. Name and location
The name of the association is: data.coop
The association is based in the city of Copenhagen but (its activities are) primarily online.
## § 2. Aim
The main aims of the association is to provide digital infrastructure to its members, while keeping the core principles of the association — privacy, encryption, decentralization and zero knowledge — in focus.
### § 2.1 Secondary aims
* The association works to promote its core principles.
* The association helps people act responsibly online.
* The association collaborates with other data cooperatives and/or helps other start up similar initiatives.
* The association may provide its services to other non-profits, grassroots movements and similar, working independently of the association with goals that match the aims and core principles of the association.
## § 3. Governance
Overriding power of the association lies with the General Assembly, consisting of members with a valid proof of membership.
The General Assembly elects:
- A board of 5 members
- 2 alternate board members
- 1 financial auditor
- Optionally, 1 alternate financial auditor
Board members are elected for a period of 2 years, so that at least 2 members are up for election every year. The auditor and alternates are up for election every year.
## § 4. The General Assembly (GA)
The board calls for meetings of the GA no less than 14 days prior through the website of the association and mailing lists. The GA meets every year before the end of September. The agenda of the annual meeting of the GA must include the following items:
1. Formalities
1. Election of a meeting chair and notetaker
2. Legality of the meeting (was the meeting called in time)
3. Election of a notetaker
2. Report from the board
3. Presentation and approval of accounts, budget and membership fee
4. Incoming motions
5. Elections (as per §3)
6. Any other business
### § 4.1. Holding of meetings of the GA and the board
Meetings of the GA and the board may take place online.
### § 4.2. Incoming motions and statute amendments
Motions and statute amendments must be received by the board no less than a week before the meeting of the GA and presented to members no less than 4 days before the the meeting of the GA.
### § 4.3. Statute amendments
Passing of statute amendments requires a three-quarters majority of members present at the meeting of the GA.
### § 4.4. Motions
Passing of motions requires a simple majority of members present at the meeting of the GA.
## § 5. The board of the association
The executive power of the association lies with the board (as per §3). The board itself elects its officers including a chair, a vice chair and a treasurer. The board delegates handling of daily business of the association to an executive committee consisting of the chair, vice chair and treasurer.
The board is in charge of drafting the accounts and the budget.
The board itself determines its own rules of procedure.
The board may create ad-hoc working groups consisting of members, functioning as fora for developing ideas for the association.
### §5.1 Legal authority
The chair and treasurer have legal authority, but when it comes to purchasing, selling, or mortgaging real estate, making service agreements, or taking loans, the board as a whole must agree to bind the association.
The board as a whole may assign power of attorney to individual members of the board.
## § 6. Membership
Any physical person who supports the aims of the association may become a member. Membership is binding for one year at a time.
The board has the authority to remove members from the association if they act in violation of the Acceptable Use Policy (AUP).
Membership is continuous from the payment of dues until the conclusion of the annual meeting of the GA.
## § 7. Administrators
The services offered by the associated are maintained by a team of administrators. Only members of the association can assume the role of administrator.
Only administrators hold administrative access to the servers and services of the association.
### § 7.1 Appointment of administrators
The board appoints administrators.
The appointment of administrators must be announced to the members of the association.
### § 7.2 Mistrust of administrators
Mistrust towards one or more administrators must be addressed at an extraordinary meeting of the GA.
Mistrust towards administrators must be reported to the board. The board has the authority to temporarily suspend an administrator's administrative rights until the declaration of mistrust against them is addressed
## § 8. Moderation policy
The association maintains a moderation policy for its social services, approved by the GA. The moderation policy is enforced by a team of moderators.
### § 8.1 Appointment of moderators
The board appoints moderators.
The appointment of moderators must be announced to the members of the association.
Only members of the association can hold the position of moderator. Ideally, moderators should not be board members, however, at least one moderator must also be a board member.
### § 8.2 Mistrust of moderators
Mistrust towards one or more moderators must be addressed at an extraordinary meeting of the GA.
Mistrust towards moderators must be reported to the board. The board has the authority to temporarily suspend a moderator's moderator rights until the declaration of mistrust against them is addressed
## § 9. Membership fees/funding
Annual membership fees are decided by the GA.
Additionally, the association can receive funding through sponsorships, advertising support, as well as contributions from public/private companies, foundations, other associations/institutions, and private individuals, as long as it does not impose conditions on the association's decisions.
## § 10. Service fees
The association provides services to its members who pay a service fee.
The service fee is defined and determined by the board.
### § 10.1 Terms of delivery and payment
The board determines the terms of delivery and payment, such as terms, payment times and refunds.
The board reserves the right to charge late fees or suspend services in case of lacking payments.
### § 10.2 Change of service fees and payment terms
Changes to service fees or payment terms must be announced to the members of the association no later than 30 days before taking effect.
The addition of services or changes to service configurations are NOT considered changes requiring notice.
### § 10.3 Disputing changes
If one or more members disagree with changes in service fees or payment terms, they may file a dispute in writing to the board.
The dispute must be received by the board no later than 14 days before the change would take effect.
If the board receives disputes from at least 1/3 of the members of the association, the board must call for an extraordinary GA, at which the change must be presented as a motion to be approved by the GA.
## § 11. Extraordinary General Assembly (GA)
Extraordinary GAs may be called if desired by a majority of the board.
Extraordinary GAs may be called if desired by one-third of the members.
Extraordinary GAs are called following the same terms as in §4.
The agenda must be substantiated.
## § 12. Accounts
The association's financial year is the calendar year.
## § 13. Dissolution
Dissolution of the association requires a majority vote of three-quarters of members present at the GA or extraordinary GA.
The dissolution must then be approved at a subsequent extraordinary GA.
In the event of the dissolution of the association, the association's assets shall be transferred to European Digital Rights (EDRi) and Free Software Foundation Europe (FSFE)
The association data.coop was founded on June 24, 2014.

View file

@ -5,10 +5,10 @@ title: Tjenester
Visse tjenester **data.coop** driver er kun for medlemmer, andre er åbne for alle. Visse tjenester **data.coop** driver er kun for medlemmer, andre er åbne for alle.
Alle tjenester er benævnt med [badges]({{< ref "/services/#badges" >}}), der deklarerer i hvor høj grad den Alle tjenester er benævnt med [badges](/badges/), der deklarerer i hvor høj grad den
enkelte tjeneste lever op til [kerneprincipperne defineret i formålsparagraffen enkelte tjeneste lever op til [kerneprincipperne defineret i formålsparagraffen
i vores vedtægter]({{< ref "/rights.md#-2-formål" >}}). i vores vedtægter](/_pages/vedtaegter.html#-2-form%C3%A5l).
Vi har skrevet en definition af [hvad de forskellige badges dækker over]({{< ref "/services/#badges" >}}). Vi har skrevet en definition af [hvad de forskellige badges dækker over](/badges/).
Klik på hver tjenestes navn for at se detaljer: Klik på hver tjenestes navn for at se detaljer:

View file

@ -1,18 +0,0 @@
---
layout: page
title: Forgejo
service_badges:
stability: positive
secure_connection: positive
anonymity: partial
encrypted_storage: negative
zero_knowledge: negative
backup: positive
logging: negative
---
If you write code or other types of texts that need revisioning,
you can use this fantastic Git platform<!--more-->
The platform is open for all data.coop members,
and you can ask for accounts for non-members.

View file

@ -1,6 +1,6 @@
--- ---
layout: page layout: page
title: Forgejo title: Gitea
service_badges: service_badges:
stability: positive stability: positive
secure_connection: positive secure_connection: positive
@ -11,8 +11,5 @@ service_badges:
logging: negative logging: negative
--- ---
Skriver du kode eller anden tekst som du gerne vil holde under versionsstyring, Skriver du kode eller anden tekst som du gerne vil holde under versionsstyring, kan du gemme det her.
kan du gemme det på denne fantastiske Git-platform.<!--more-->
Platformen er åben for alle data.coops medlemmer,
og du kan forespørge konti til ikke-medlemmer.

View file

@ -4,17 +4,11 @@ title: HedgeDoc
service_badges: service_badges:
stability: positive stability: positive
connection_security: positive connection_security: positive
connection_anonymous: partial connection_anonymous: negative
storage_encrypted: negative storage_encrypted: negative
zero_knowledge: partial zero_knowledge: partial
storage_backup: positive storage_backup: positive
logging: negative logging: negative
--- ---
Tag tilfældige noter eller skriv dokumenter i Markdown: HedgeDoc kan bruges til mange ting.<!--more--> Skriv
De fleste bruger HedgeDoc til hurtigt at tage noter eller starte dokumenter.
Man kan skrive samtidig.
Og resultatet er flot.
Der findes også flere udvidelser, bl.a. Mermaid-diagrammer. Læs mere på [HedgeDoc's hjemmeside](https://hedgedoc.org/).

View file

@ -1,22 +0,0 @@
---
layout: page
title: HedgeDoc
service_badges:
stability: positive
connection_security: positive
connection_anonymous: partial
storage_encrypted: negative
zero_knowledge: partial
storage_backup: positive
logging: negative
---
Take random notes or write full documents in Markdown: HedgeDoc can be used for many things.<!--more-->
Most people use HedgeDoc for quickly making notes are bootstrapping documents.
You can collaborate in real-time with others.
And the results are pretty!
There are also several extensions, for instance for Mermaid diagrams.
Read more on the [HedgeDoc website](https://hedgedoc.org/).

View file

@ -1,14 +0,0 @@
---
layout: page
title: Mastodon
service_badges:
stability: positive
connection_security: positive
connection_anonymous: negative
storage_encrypted: negative
zero_knowledge: partial
storage_backup: positive
logging: negative
---
Share cat photos and memes and see what other interesting people are doing.

View file

@ -5,17 +5,10 @@ service_badges:
stability: positive stability: positive
connection_security: positive connection_security: positive
connection_anonymous: negative connection_anonymous: negative
storage_encrypted: positive storage_encrypted: negative
zero_knowledge: partial zero_knowledge: partial
storage_backup: positive storage_backup: positive
logging: negative logging: negative
--- ---
Matrix er en chat-server, som kan rigtig mange ting. Den kan bruges som alternativ til f.eks. Slack, Discord, IRC og meget andet. Chat
Vi har også vores egen hostede version af reference-klienten Element på [element.data.coop](https://element.data.coop/).<!--more-->
Du kan bruge Matrix til at kommunikere med andre på hele Matrix-netværket,
dvs. ikke bare andre data.coop-medlemmer.
Matrix er en kæmpestor platform, som muliggør en lang række interaktionsformer.
Bl.a. har flere konferencer oprettet rum til live videostream og chat.

View file

@ -1,22 +0,0 @@
---
layout: page
title: Matrix
service_badges:
stability: positive
connection_security: positive
connection_anonymous: negative
storage_encrypted: positive
zero_knowledge: partial
storage_backup: positive
logging: negative
---
Matrix is a chat server that's capable of a lot of things.
It can be used as an alternative for Slack, Discord, IRC and lots more.
We have our own hosted version of its reference client Element available at [element.data.coop](https://element.data.coop/).<!--more-->
You can use Matrix for communicating with the entire Matrix network,
not just data.coop members.
Matrix is a gigantic platform which enables a wide range of communication types.
It supports channels, live videos and chat.

View file

@ -1,15 +0,0 @@
---
layout: page
title: Nextcloud
service_badges:
stability: positive
connection_security: positive
connection_anonymous: partial
storage_encrypted: negative
zero_knowledge: negative
storage_backup: positive
logging: negative
---
Store your files, calendar, contacts and many other things in the local cloud.
Access from all your devices.

View file

@ -1,14 +0,0 @@
---
layout: page
title: Passit
service_badges:
stability: positive
connection_security: positive
connection_anonymous: positive
storage_encrypted: positive
zero_knowledge: partial
storage_backup: positive
logging: positive
---
Helps you remember your strong, unique passwords for websites and applications.

View file

@ -1,17 +0,0 @@
---
layout: page
title: PrivateBin
service_badges:
stability: positive
connection_security: positive
connection_anonymous: partial
storage_encrypted: positive
zero_knowledge: positive
storage_backup: positive
logging: negative
---
Del en simpel hemmelighed gennem et unikt og hemmeligt link.
Du kan tilsætte password og sørge for, at hemmeligheden slettes automatisk.<!--more-->
Denne service er åben for alle og kræver ikke login.

View file

@ -1,17 +0,0 @@
---
layout: page
title: PrivateBin
service_badges:
stability: positive
connection_security: positive
connection_anonymous: partial
storage_encrypted: positive
zero_knowledge: positive
storage_backup: positive
logging: negative
---
Share a secret through a unique and secret link.
You can add a password and make the secret expire and delete itself.<!--more-->
This service is open and does not require a login.

View file

@ -1,15 +0,0 @@
---
layout: page
title: Rallly
service_badges:
stability: positive
connection_security: positive
connection_anonymous: partial
storage_encrypted: negative
zero_knowledge: negative
storage_backup: positive
logging: negative
---
Rally makes it easy to find a date for an event with your friends, family or any other group of people.
It's a lot like Doodle, but better!

View file

@ -11,5 +11,4 @@ service_badges:
logging: negative logging: negative
--- ---
Rallly gør det nemt at finde en dato med dine venner/familie/gruppe. Aftaler
Det minder om Doodle, men det er bedre!

View file

@ -0,0 +1,6 @@
---
layout: page
title: Opdateringer
---
## Opdateringer og nyheder

View file

@ -0,0 +1,6 @@
---
layout: page
title: Updates
---
## Updates and news

File diff suppressed because it is too large Load diff

View file

@ -1,74 +1,52 @@
# This determines which badges are active and the order to display them in # This determines which badges are active and the order to display them in
active_badges: active_badges:
- stability - stability
- secure_connection - secure_connection
- encrypted_storage - encrypted_storage
- zero_knowledge - zero_knowledge
- backup - backup
- logging - logging
- anonymity - anonymity
badges: badges:
stability: stability:
name: Stabilitet name: stabilitet
description: | description: Det første badge er som sådan ikke relateret til hvorvidt tjenesten lever op til vores formålsparagraf. Det angiver i stedet hvorvidt tjenesten er stabil nok til at vi vil anbefale almindelige mennesker at bruge den. Vi tilbyder løbende nye tjenester, og der vil være en periode i starten af en tjenestes levetid hvor vi anser den som værende “ustabil”, indtil den har vist sit værd med en mindre skare af brugere der er med på at tjenesten kan være ustabil. Alle er dog stadig velkomne til at benytte sig af tjenesten, så længe de er indforstået med dette forbehold for stabiliteten.
*Tjenesten er altid tilgængelig.*
Dette badge beskriver hvor stabil tjenesten er, dvs. om der er stor eller lille risiko for nedetid og/eller tab af data. I starten af enhver tjenestes levetid vil den være mindre stabil, da den ikke er testet i brug endnu.
icon: stable.svg icon: stable.svg
secure_connection: secure_connection:
name: Sikker forbindelse name: sikker forbindelse
description: | description: Sikker forbindelse angiver at trafikken over internettet mellem dig og tjenesten er krypteret. Du kender det som regel som en hængelås foran adresselinjen i din browser. Det betyder at ingen andre end dig og tjenesten kan se hvad der bliver sendt frem og tilbage mellem dig og tjenesten.
*Data kan kun ses af dig og tjenesten.*
Trafikken mellem dig og tjenesten er krypteret. F.eks. viser browsere en hængelås foran adresselinjen, når forbindelsen er krypteret. Det betyder at kun dig og tjenesten kan se indholdet af data.
icon: secure-connection.svg icon: secure-connection.svg
encrypted_storage: encrypted_storage:
name: Krypteret opbevaring af data name: krypteret opbevaring af data
description: | description: Tjenestens data gemmes krypteret, og er dermed ikke umiddelbart læsbare for andre end tjenesten selv og data.coops systemadministratorer. I tilfælde af at data lækkes (fx ved virtuelt eller fysisk indbrud), kræver det en særlig “hovednøgle” at læse data, som datatyven forhåbentligt ikke er i besiddelse af.
Tjenestens data opbevares i krypteret form, eksempelvis på en krypteret
harddisk. Dette er med til at beskytte dataen i tilfælde af fysisk
indbrud, da det kun er systemadministratorerne der har hovednøglen til at
låse op for adgang til dataen.
icon: encrypted-data-storage.svg icon: encrypted-data-storage.svg
zero_knowledge: zero_knowledge:
name: Zero-knowledge name: zero knowledge
description: | description: Data gemmes krypteret, og tjenesten er konstrueret på en måde, så selv ikke data.coops systemadministratorer har mulighed for at tilgå og læse brugernes data. Der findes simpelthen ingen “hovednøgle” som giver fuld datadgang, og det er dermed kun brugerne selv der kan læse deres data. I tilfælde af at data lækkes, er ingen større katastrofe sket, da der heller ikke er risiko for at datatyven også har stjålet hovednøglen, da der ingen hovednøgle er.
*Du har den eneste nøgle.*
I dette tilfælde har data.coops systemadministratorer ikke mulighed for at tilgå data. Der er ingen “hovednøgle”. Det giver mere sikkerhed, men betyder også at data er tabt, hvis man mister sin nøgle.
icon: zero-knowledge.svg icon: zero-knowledge.svg
backup: backup:
name: Backup name: Backup
description: | description: |
Tjenestens data sikkerhedskopieres løbende, for at minimere skadens Der tages løbende backup af tjenestens data, for at minimere skadens omfang i tilfælde af tekniske nedbrud.
omfang i tilfælde af tekniske nedbrud eller cyberangreb.
Sikkerhedskopierne opbevares et andet fysisk sted end serveren som **Bemærk:** Vi tager pt. slet ikke backup af noget, men det står selvfølgelig højt på vores prioritetsliste.
tjenesten kører på.
icon: backup.svg icon: backup.svg
# TODO: We should describe how we label logging that isn't fully documented as configured.
logging: logging:
name: Logning name: Logning
description: | description: |
Teknisk logning handler primært om *metadata*, som også kan kaldes *data om data*. Hvem bruger hvad hvornår? På den ene side er det relevant for systemadministratorerne at se, hvorfor serveren eks. er på overarbejde, men ligesom alle data kan det misbruges. Eks. til at bevise at en bruger har været online på det pågældende tidspunkt. Dette badge er lidt omvendt: Det positive badge tildeles tjenester der ikke foretager logning.
Bemærk at "positiv" status for logning betyder, at tjenesten laver forventet minimal logning af meta-data, hvilke vi tilstræber at dokumentere for hver enkelt tjeneste. En "negativ" status betyder at der logges mere end nødvendigt. Logning fungerer på forskellig vis og foretages i større eller mindre grad. Som regel giver logning data.coops systemadministratorer overordnet indsigt i hvordan tjenester bruges, men ikke i det konkrete data tjenesten behandler for brugerne. Fx vil logning afsløre overfor data.coops systemadministratorer, at nogen overfører en fil, men ikke hvad selve filen indeholder eller hvem der overfører filen.
icon: logging.svg icon: logging.svg
anonymity: anonymity:
name: Anonym adgang name: Anonym adgang
description: | description: Tjenester med anonym adgang kan benyttes helt uden at man skal være registreret ved tjenesten. De fleste tjenester kræver en form for registrering af brugerne, da de data tjenesten indeholder knyttes til de enkelte brugere. Nogle tjenester tilbyder anonym læseadgang. Fx kan det kræve registrering at uploade en fil til tjenesten, men andre kan downloade filen at være registreret.
Tjenester med anonym adgang kan benyttes uden at være registreret. Dette
betyder at man kan benytte tjenesten helt anonymt og uden at opgive
personoplysninger. Dog kan nogle tjenester have begrænset adgang hvis man
ikke er registreret. F.eks. kan det være, at man ved en tjeneste kun kan
uploade en fil hvis man har en bruger, men alle kan downloade filen
anonymt uden et login.
icon: anonymous-access.svg icon: anonymous-access.svg

View file

@ -1,26 +1,17 @@
status: status:
positive: positive:
order: 1
name: positiv name: positiv
description: Tjenesten lever op til kravene til det badget dækker over. description: Tjenesten lever op til kravene til det badget dækker over.
css_class: "positive" css_class: "positive"
partial: partial:
order: 2 name: Delvis
name: delvis
description: Tjenesten lever delvist op til det badget dækker over. Dog i en sådan grad at vi mener det er værd at fremhæve. description: Tjenesten lever delvist op til det badget dækker over. Dog i en sådan grad at vi mener det er værd at fremhæve.
css_class: "partial" css_class: "partial"
negative: negative:
order: 3
name: negativ name: negativ
description: Tjenesten lever ikke op til det badget dækker over. description: Tjenesten lever ikke op til det badget dækker over.
css_class: "negative" css_class: "negative"
none:
order: 4
name: uoplyst
description: Dette badge er udefineret for denne tjeneste. Dette skyldes sansynligvis, at vi mangler en klar redegørelse.
css_class: "none"

View file

@ -1,75 +0,0 @@
# This determines which badges are active and the order to display them in
active_badges:
- stability
- secure_connection
- encrypted_storage
- zero_knowledge
- backup
- logging
- anonymity
badges:
stability:
name: Stability
description: |
*Service is always available.*
This badge describes how stable the service is. For instance if there is a big or small risk that the service may suffer from outages or loss of data. Immediately after launching a service, it might be considered less stable than after it has matured through long-time tests and usage.
icon: stable.svg
secure_connection:
name: Secure connection
description: |
*Data can only be seen by you and the service.*
The traffic between you and the service is encrypted. For instance, the browser will display a padlock in the address bar when the connection is encrypted. This means that it's only you and the service that can see transferred data.
icon: secure-connection.svg
encrypted_storage:
name: Encrypted storage
description: |
The service stores data in an ecrypted way, for instance on an encrypted storage media.
This ensures that the data is protected in case of a physical breach of security,
since it's only the system administrator who has the encryption key that can decrypt storage media.
icon: encrypted-data-storage.svg
zero_knowledge:
name: Zero knowledge
description: |
*You have the only key.*
In this case, data.coop's system administrator cannot access data.
There is no "main key". This provides more security, but it also means that data will be lost if you lose the key.
icon: zero-knowledge.svg
backup:
name: Backup
description: |
The service's data is backed up frequently in order to minimize damages from technical outages or cyber attacks.
Backups are stored in another physical location than the server.
icon: backup.svg
# TODO: We should describe how we label logging that isn't fully documented as configured.
logging:
name: Logging
description: |
Technical logging is primarily about *meta data*, which can be understood as *data about data*.
Who does what and when? On one side, it's relevant for system administrators to see why a server is overloaded, but as with all data this can be abused.
For instance, it can be used to prove that what a user was doing at a specific time.
Note that "positive" status for logging means that the service is performing an expected amount of *minimal* logging of meta data.
We strive to document this data for every service. A "negative" status means that unnecessary amounts of logging take place.
icon: logging.svg
anonymity:
name: Anonymous access
description: |
Services with anonymous access can be used without registration and authentication.
This means that the service can be used anonymously without sharing personal information.
Some services may have limited access for unregistered users.
This may be relevant for instance for a service where a registered user can upload a file
and an unregistered user can download the file.
icon: anonymous-access.svg

View file

@ -1,26 +0,0 @@
status:
positive:
order: 1
name: positive
description: Service satisfies the requirements of the badge.
css_class: "positive"
partial:
order: 2
name: partial
description: Service partially satisfies the requirements of the badge. But to an extend that we find worth noting.
css_class: "partial"
negative:
order: 3
name: negative
description: Service does not live up to badge requirements.
css_class: "negative"
none:
order: 4
name: undefined
description: The requirements of the badge are currently undefined. This is likely due to a lack of analysis and full understanding.
css_class: "none"

View file

@ -1,10 +1,15 @@
version: "3" version: "3"
services: services:
server: serve:
image: floryn90/hugo:ext-alpine build:
command: server context: .
dockerfile: Dockerfile_hugo
command: |
/bin/bash -c "
cd /code
hugo serve
"
network_mode: "host"
volumes: volumes:
- ".:/src" - .:/code
ports:
- "1313:1313"

View file

@ -1,37 +0,0 @@
<svg viewBox="0 0 212 212" xmlns="http://www.w3.org/2000/svg">
<metadata
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
>
<rdf:RDF>
<cc:Work rdf:about="https://codeberg.org/forgejo/governance/src/branch/main/branding#logo">
<dc:title>Forgejo logo</dc:title>
<cc:creator rdf:resource="https://caesarschinas.com/"><cc:attributionName>Caesar Schinas</cc:attributionName></cc:creator>
<cc:license rdf:resource="http://creativecommons.org/licenses/by-sa/4.0/" />
</cc:Work>
</rdf:RDF>
</metadata>
<style type="text/css">
:root, svg {
color-scheme: dark light;
}
circle {
fill: none;
stroke: #4b3aba;
stroke-width: 15;
}
path {
fill: none;
stroke: #4b3aba;
stroke-width: 25;
}
</style>
<g transform="translate(6,6)">
<path d="M58 168 v-98 a50 50 0 0 1 50-50 h20" />
<path d="M58 168 v-30 a50 50 0 0 1 50-50 h20" />
<circle cx="142" cy="20" r="18" />
<circle cx="142" cy="88" r="18" />
<circle cx="58" cy="180" r="18" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
id="main_outline"
x="0px"
y="0px"
viewBox="0 0 640 640"
xml:space="preserve"
sodipodi:docname="gitea_logo.svg"
style="enable-background:new 0 0 640 640;"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs16" /><sodipodi:namedview
id="namedview14"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showgrid="false"
inkscape:zoom="1.2984375"
inkscape:cx="320.38508"
inkscape:cy="320.77016"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="main_outline" />
<g
id="g11"
transform="matrix(1,0,0,1.0012257,0,-0.17537094)">
<path
id="teabag"
style="fill:#ffffff"
d="M 395.9,484.2 269,423.2 c -12.5,-6 -17.9,-21.2 -11.8,-33.8 l 61,-126.9 c 6,-12.5 21.2,-17.9 33.8,-11.8 17.2,8.3 27.1,13 27.1,13 l -0.1,-109.2 16.7,-0.1 0.1,117.1 c 0,0 57.4,24.2 83.1,40.1 3.7,2.3 10.2,6.8 12.9,14.4 2.1,6.1 2,13.1 -1,19.3 l -61,126.9 c -6.2,12.7 -21.4,18.1 -33.9,12 z" />
<g
id="g9">
<g
id="g7">
<path
style="fill:#4b3aba"
d="m 622.7,149.8 c -4.1,-4.1 -9.6,-4 -9.6,-4 0,0 -117.2,6.6 -177.9,8 -13.3,0.3 -26.5,0.6 -39.6,0.7 0,39.1 0,78.2 0,117.2 -5.5,-2.6 -11.1,-5.3 -16.6,-7.9 0,-36.4 -0.1,-109.2 -0.1,-109.2 -29,0.4 -89.2,-2.2 -89.2,-2.2 0,0 -141.4,-7.1 -156.8,-8.5 -9.8,-0.6 -22.5,-2.1 -39,1.5 -8.7,1.8 -33.5,7.4 -53.8,26.9 -45,40.1 -33.5,103.9 -32.1,113.5 1.7,11.7 6.9,44.2 31.7,72.5 45.8,56.1 144.4,54.8 144.4,54.8 0,0 12.1,28.9 30.6,55.5 25,33.1 50.7,58.9 75.7,62 63,0 188.9,-0.1 188.9,-0.1 0,0 12,0.1 28.3,-10.3 14,-8.5 26.5,-23.4 26.5,-23.4 0,0 12.9,-13.8 30.9,-45.3 5.5,-9.7 10.1,-19.1 14.1,-28 0,0 55.2,-117.1 55.2,-231.1 -1.1,-34.5 -9.6,-40.6 -11.6,-42.6 z M 125.6,353.9 c -25.9,-8.5 -36.9,-18.7 -36.9,-18.7 0,0 -19.1,-13.4 -28.7,-39.8 -16.5,-44.2 -1.4,-71.2 -1.4,-71.2 0,0 8.4,-22.5 38.5,-30 13.8,-3.7 31,-3.1 31,-3.1 0,0 7.1,59.4 15.7,94.2 7.2,29.2 24.8,77.7 24.8,77.7 0,0 -26.1,-3.1 -43,-9.1 z m 300.3,107.6 c 0,0 -6.1,14.5 -19.6,15.4 -5.8,0.4 -10.3,-1.2 -10.3,-1.2 0,0 -0.3,-0.1 -5.3,-2.1 l -112.9,-55 c 0,0 -10.9,-5.7 -12.8,-15.6 -2.2,-8.1 2.7,-18.1 2.7,-18.1 L 322,273 c 0,0 4.8,-9.7 12.2,-13 0.6,-0.3 2.3,-1 4.5,-1.5 8.1,-2.1 18,2.8 18,2.8 L 467.4,315 c 0,0 12.6,5.7 15.3,16.2 1.9,7.4 -0.5,14 -1.8,17.2 -6.3,15.4 -55,113.1 -55,113.1 z"
id="path3" />
<path
style="fill:#4b3aba"
d="m 326.8,380.1 c -8.2,0.1 -15.4,5.8 -17.3,13.8 -1.9,8 2,16.3 9.1,20 7.7,4 17.5,1.8 22.7,-5.4 5.1,-7.1 4.3,-16.9 -1.8,-23.1 l 24,-49.1 c 1.5,0.1 3.7,0.2 6.2,-0.5 4.1,-0.9 7.1,-3.6 7.1,-3.6 4.2,1.8 8.6,3.8 13.2,6.1 4.8,2.4 9.3,4.9 13.4,7.3 0.9,0.5 1.8,1.1 2.8,1.9 1.6,1.3 3.4,3.1 4.7,5.5 1.9,5.5 -1.9,14.9 -1.9,14.9 -2.3,7.6 -18.4,40.6 -18.4,40.6 -8.1,-0.2 -15.3,5 -17.7,12.5 -2.6,8.1 1.1,17.3 8.9,21.3 7.8,4 17.4,1.7 22.5,-5.3 5,-6.8 4.6,-16.3 -1.1,-22.6 1.9,-3.7 3.7,-7.4 5.6,-11.3 5,-10.4 13.5,-30.4 13.5,-30.4 0.9,-1.7 5.7,-10.3 2.7,-21.3 -2.5,-11.4 -12.6,-16.7 -12.6,-16.7 -12.2,-7.9 -29.2,-15.2 -29.2,-15.2 0,0 0,-4.1 -1.1,-7.1 -1.1,-3.1 -2.8,-5.1 -3.9,-6.3 4.7,-9.7 9.4,-19.3 14.1,-29 -4.1,-2 -8.1,-4 -12.2,-6.1 -4.8,9.8 -9.7,19.7 -14.5,29.5 -6.7,-0.1 -12.9,3.5 -16.1,9.4 -3.4,6.3 -2.7,14.1 1.9,19.8 -8.2,16.8 -16.4,33.6 -24.6,50.4 z"
id="path5" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

View file

@ -55,10 +55,6 @@
--burger_size : 45px; --burger_size : 45px;
} }
html {
scroll-behavior: smooth;
}
body { body {
display : flex; display : flex;
flex-direction : row; flex-direction : row;
@ -111,7 +107,7 @@ main ol, main ul {
} }
main ol li, main ul li { main ol li, main ul li {
margin : 0; margin : 0.5rem 0;
} }
aside { aside {
@ -160,10 +156,6 @@ aside nav ol li a {
font-size : 2rem; font-size : 2rem;
margin : 1.2rem 0; margin : 1.2rem 0;
text-decoration : none; text-decoration : none;
@media (max-height: 700px) {
font-size : 1.5rem;
margin : 0.5rem 0;
}
} }
aside nav ol li a:hover { aside nav ol li a:hover {
@ -185,18 +177,11 @@ aside #menu-toggle {
aside nav footer { aside nav footer {
margin : var(--base-grid) 0 0 0; margin : var(--base-grid) 0 0 0;
@media (max-height: 700px) {
margin : (var(--base-grid) / 1.5) 0 0 0;
}
} }
aside nav footer ol li a { aside nav footer ol li a {
font-size : 1.65rem; font-size : 1.65rem;
margin : 1.2rem 0; margin : 1.2rem 0;
@media (max-height: 700px) {
font-size : 1.2rem;
margin : 0.1rem 0;
}
} }
aside header a img { aside header a img {
@ -234,12 +219,7 @@ aside > footer img:hover {
margin: 0; margin: 0;
display: grid; display: grid;
grid-template-columns: max-content 1fr; grid-template-columns: max-content 1fr;
align-items: start;
@media(max-width: 700px) {
grid-template-columns: 100%;
}
align-items: center;
gap: 20px; gap: 20px;
dt { dt {
vertical-align: top; vertical-align: top;
@ -260,7 +240,6 @@ dl.dl-services,
{ {
display : grid; display : grid;
column-gap : 2rem; column-gap : 2rem;
row-gap: 2rem;
dt { dt {
grid-column-start : 1; grid-column-start : 1;
grid-column-end : 2; grid-column-end : 2;
@ -298,23 +277,6 @@ dl.dl-services,
.badge-status { .badge-status {
margin-bottom: 40px; margin-bottom: 40px;
} }
@media(max-width: 700px) {
grid-template-columns: min-content auto;
.badge-icon {
grid-column-start : 1;
grid-column-end : 2;
}
.badge-name {
grid-column-start : 2;
grid-column-end : 3;
}
.badge-description {
grid-column-start : 1;
grid-column-end : 3;
}
}
} }
@ -339,22 +301,6 @@ dl.dl-services,
margin-top: 20px; margin-top: 20px;
} }
} }
@media(max-width: 700px) {
grid-template-columns: min-content auto;
.badge-icon {
grid-column-start : 1;
grid-column-end : 2;
}
.badge-name {
grid-column-start : 2;
grid-column-end : 3;
}
.badge-description {
grid-column-start : 1;
grid-column-end : 3;
}
}
} }
.badge-status { .badge-status {
@ -377,11 +323,6 @@ dl.dl-services,
border: 5px solid #cc4; border: 5px solid #cc4;
} }
.badge-status-none {
@extend .badge-status;
border: 5px solid #888;
}
@media(max-width:1000px) { @media(max-width:1000px) {
:root { :root {
--base-grid : 40px; --base-grid : 40px;

View file

@ -1,10 +1,10 @@
<!doctype html> <!doctype html>
<html lang="{{ .Site.Language.Lang }}"> <html lang="{{ site.Language }}">
{{ partial "head.html" . }} {{ partial "head.html" . }}
<body> <body>
<aside> <aside>
<header> <header>
<a href="{{ .Site.Home.Permalink }}"><img src="/static/img/logo_{{ .Site.Language.Lang }}.svg" alt="data.coop logo" width="240" height="140"></a> <a href="/"><img src="{{ printf "/static/img/logo_%s.svg" .Site.Language.Lang | absURL }}" alt="data coop logo" width="240" height="140"></a>
<div class="nav-toggle" id="nav-toggle-header"> <div class="nav-toggle" id="nav-toggle-header">
<span id="nav-toggle-a"></span> <span id="nav-toggle-a"></span>

View file

@ -1,12 +1,13 @@
<h2 id="badges">{{ i18n "badges_headline" }}</h2> <h2>{{ i18n "badges_headline" }}</h2>
<section class="badge-definitions"> <section class="badge-definitions">
{{/* TODO: This needs to be sensitive to current language */}}
{{- $translated_badges := index $.Site.Data.badges .Lang }} {{- $translated_badges := index $.Site.Data.badges .Lang }}
{{ range $badge_key, $badge := $translated_badges.badges.badges }} {{ range $badge_key, $badge := $translated_badges.badges.badges }}
<div class="badge-icon"> <div class="badge-icon">
{{ $svg := printf "static/static/img/badges/%s" .icon }} {{$svg := printf "static/static/img/badges/%s" .icon}}
{{ $svg | readFile | safeHTML }} {{ $svg | readFile | safeHTML }}
</div> </div>
<div class="badge-name">{{ title .name }}</div> <div class="badge-name">{{ title .name }}</div>
@ -23,3 +24,26 @@
{{ end }} {{ end }}
</section> </section>
<h2>{{ i18n "status_headline" }}</h2>
<section class="status-definitions">
{{ range $.Site.Data.badges.da.status.status }}
<div class="badge-icon badge-status badge-status-{{ .css_class }}"></div>
<div class="badge-name">{{ title .name }}</div>
<div class="badge-description">
{{- $markdown := .description | markdownify -}}
{{ if not ( findRE "<[h|p][^>]*>" $markdown ) }}
<p>{{ $markdown }}</p>
{{ else }}
{{ $markdown }}
{{ end }}
</div>
{{ end }}
</section>

View file

@ -1,3 +1,3 @@
<a rel="me" href="https://social.data.coop/@datacoop"><img src="/static/img/mastodon_logo.svg" alt="Mastodon logo" title="data.coop on Mastodon" width="40" height="40" /></a> <a rel="me" href="https://social.data.coop/@datacoop"><img src="/static/img/mastodon_logo.svg" alt="Mastodon logo" title="data.coop on Mastodon" width="40" height="40" /></a>
<a href="https://git.data.coop/data.coop"><img src="/static/img/forgejo_logo.svg" alt="Forgejo logo" title="data.coop on Forgejo" width="" height="40" /></a> <a href="https://git.data.coop/data.coop"><img src="/static/img/gitea_logo.svg" alt="Gitea logo" title="data.coop on Gitea" width="" height="40" /></a>
<a href="https://matrix.to/#/#data.coop:data.coop"><img src="/static/img/matrix_logo.svg" alt="Matrix logo" title="data.coop on Matrix" width="" height="40" /></a> <a href="https://matrix.to/#/#data.coop:data.coop"><img src="/static/img/matrix_logo.svg" alt="Matrix logo" title="data.coop on Matrix" width="" height="40" /></a>

View file

@ -9,19 +9,17 @@
<meta name="description" content="{{ . }}"> <meta name="description" content="{{ . }}">
{{ end }} {{ end }}
<link rel="apple-touch-icon" sizes="180x180" href="/static/img/apple-touch-icon.png"> <link rel="apple-touch-icon" sizes="180x180" href="{{ "/static/img" | absURL }}/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/static/img/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="32x32" href="{{ "/static/img" | absURL }}/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/static/img/favicon-16x16.png"> <link rel="icon" type="image/png" sizes="16x16" href="{{ "/static/img" | absURL }}/favicon-16x16.png">
<link rel="manifest" href="{{ "" | absURL }}/site.webmanifest"> <link rel="manifest" href="{{ "" | absURL }}/site.webmanifest">
<link rel="mask-icon" href="/static/img/safari-pinned-tab.svg" color="#4b3aba"> <link rel="mask-icon" href="{{ "/static/img" | absURL }}/safari-pinned-tab.svg" color="#4b3aba">
<meta name="msapplication-TileColor" content="#4b3aba"> <meta name="msapplication-TileColor" content="#4b3aba">
<meta name="theme-color" content="#4b3aba"> <meta name="theme-color" content="#4b3aba">
{{ template "_internal/twitter_cards.html" . }} {{ $style := resources.Get "static/css/style.scss" | resources.ToCSS | resources.Minify | resources.Fingerprint "sha512" }}
{{ template "_internal/opengraph.html" . }}
{{ $style := resources.Get "static/css/style.scss" | resources.ToCSS | resources.Minify | resources.Fingerprint "sha512" }}
<link rel="stylesheet" href="{{ $style.RelPermalink }}" integrity="{{ $style.Data.Integrity }}"> <link rel="stylesheet" href="{{ $style.RelPermalink }}" integrity="{{ $style.Data.Integrity }}">
<title>{{ .Title }} | {{ .Site.Title }}</title> <title>{{ .Title }} | {{ .Site.Title }}</title>
</head> </head>

View file

@ -1,23 +0,0 @@
<h2>{{ i18n "status_headline" }}</h2>
<section class="status-definitions">
{{- $translated_status := index $.Site.Data.badges .Lang }}
{{ range sort $translated_status.status.status "order" "asc" }}
<div class="badge-icon badge-status badge-status-{{ .css_class }}"></div>
<div class="badge-name">{{ title .name }}</div>
<div class="badge-description">
{{- $markdown := .description | markdownify -}}
{{ if not ( findRE "<[h|p][^>]*>" $markdown ) }}
<p>{{ $markdown }}</p>
{{ else }}
{{ $markdown }}
{{ end }}
</div>
{{ end }}
</section>

View file

@ -9,8 +9,7 @@
{{ range $pages.ByTitle }} {{ range $pages.ByTitle }}
<dt><a href="{{ .Permalink }}">{{ .Title | markdownify }}</a></h2></dt> <dt><a href="{{ .Permalink }}">{{ .Title | markdownify }}</a></h2></dt>
<dd> <dd>
{{ $summary := index (split .Content "</p>") 0 }} {{ .Summary }}
{{ $summary | plainify }}
</dd> </dd>
{{ end }} {{ end }}
@ -18,8 +17,6 @@
{{ partial "badges.html" . }} {{ partial "badges.html" . }}
{{ partial "status.html" . }}
{{- end -}} {{- end -}}

View file

@ -11,17 +11,15 @@
{{ range $translated_badges.badges.active_badges }} {{ range $translated_badges.badges.active_badges }}
{{- $badge := index $translated_badges.badges.badges . }} {{- $badge := index $translated_badges.badges.badges . }}
{{- $status_name := default "none" (index $page_params.service_badges .) -}} {{- $status := index $page_params.service_badges . -}}
{{- $status := index $translated_badges.status.status $status_name -}} <div class="badge-icon badge-status-{{ $status }}">
<div class="badge-icon badge-status-{{ $status_name }}">
{{ $svg := printf "static/static/img/badges/%s" $badge.icon }} {{ $svg := printf "static/static/img/badges/%s" $badge.icon }}
{{ $svg | readFile | safeHTML }} {{ $svg | readFile | safeHTML }}
</div> </div>
<div class="badge-name"> <div class="badge-name">
{{ title $badge.name }}<br> {{ title $badge.name }}<br>
= {{ $status.name }} = {{ i18n ($status | printf "service_badges_status_%s") }}
</div> </div>
@ -39,6 +37,4 @@
{{ end }} {{ end }}
</div> </div>
{{ partial "status.html" . }}
{{- end -}} {{- end -}}

View file

@ -3,7 +3,7 @@ license: "MIT"
licenselink: "https://github.com/zwbetz-gh/minimal-bootstrap-hugo-theme/blob/master/LICENSE" licenselink: "https://github.com/zwbetz-gh/minimal-bootstrap-hugo-theme/blob/master/LICENSE"
description: "Yay data.coop theme - started with this one https://github.com/zwbetz-gh/minimal-bootstrap-hugo-theme/" description: "Yay data.coop theme - started with this one https://github.com/zwbetz-gh/minimal-bootstrap-hugo-theme/"
homepage: "https://data.coop" homepage: "https://data.coop"
tags: ["nice"] tags: ["nice",]
features: ["responsive", "small page size", "fuck google", "no tracking"] features: ["responsive", "small page size", "fuck google", "no tracking"]
min_version: "0.60.1" min_version: "0.60.1"