Compare commits

..

No commits in common. "staging" and "gitea-to-forgejo" have entirely different histories.

22 changed files with 80 additions and 292 deletions

View file

@ -2,23 +2,25 @@ kind: pipeline
name: default
steps:
# stable site
- name: build_stable
image: klakegg/hugo:ext-alpine-ci
environment:
HUGO_SECURITY_HTTP_URLS: none
image: debian:buster-slim
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/
when:
branch:
- main
# staging site
- name: build_staging
image: klakegg/hugo:ext-alpine-ci
environment:
HUGO_SECURITY_HTTP_URLS: none
image: debian:buster-slim
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 --baseURL "https://staging.data.coop" --destination _site/
when:
branch:
@ -64,19 +66,12 @@ steps:
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})
# provoke build
- name: notify
image: plugins/matrix
settings:
homeserver: https://data.coop
roomid: plKSghHbepWeUEtbHE:data.coop
username:
from_secret: matrix_username
password:
from_secret: matrix_password

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:
```bash
``` {.sourceCode .bash}
docker-compose up serve
```
@ -25,7 +25,7 @@ file an issue!
Example recipe
```bash
``` {.sourceCode .bash}
# 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
@ -45,7 +45,7 @@ hugo server
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
build-and-deploy of the website.

View file

@ -17,15 +17,7 @@ markup:
languages:
da:
title: data.coop
params:
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"]
weight: 1
LanguageName: Dansk
menu:
nav:
@ -43,10 +35,7 @@ languages:
weight: 4
en:
title: data.coop
params:
description: "A data collective that takes care of your data."
weight: 2
images: ["/static/img/some_card_preview_large_en.png"]
LanguageName: English
menu:
nav:
@ -63,3 +52,5 @@ languages:
url: "en/rights/"
weight: 4
params:
description: "Et datakollektiv, der passer på dine data."

View file

@ -38,4 +38,3 @@ Vores kerneprincipper er:
</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.

View file

@ -3,7 +3,6 @@ title: Welcome 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.
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:

View file

@ -2,7 +2,7 @@
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.

View file

@ -2,10 +2,7 @@
title: "About"
---
**[data.coop]({{< ref "/" >}})** is an association and a cooperative.
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.
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.
**data.coop** is an association and a cooperative.
We — the members of the cooperative — own our own data.

View file

@ -2,17 +2,17 @@
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
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 bør læse vores [vedtægter](/rights/) 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](/about/) 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.
* Reg. 5444 (Arbejdernes Landsbank)
* Kontonr. 0510901
* Reg. 8401 (Merkur)
* Kontonr. 1016866
* Tekst på overførslen: Fornavn+efternavn
Årligt kontingent: **300 kr** (dog gerne mere)\

View file

@ -2,14 +2,14 @@
title: Become a member
---
[data.coop]({{< ref "/" >}}) is a cooperative established as a democratic association.
[data.coop](https://data.coop) is a cooperative established as a democratic association.
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
You need to read our [statutes](/rights/) 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).
If you have questions, you can find us on [Matrix or IRC](/about/) 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,
@ -21,8 +21,8 @@ to our treasurer [benjaoming@data.coop](mailto:benjaoming@data.coop), containing
Currently, the only option is to wire a bank payment to our Danish bank account:
* Reg. 5444 (Arbejdernes Landsbank)
* Kontonr. 0510901
* Reg. 8401 (Merkur)
* Kontonr. 1016866
* Text: First name + last name
Annual membership: **DKK 300** (or more)\

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
generalforsamling skal indeholde følgende punkter:
1. Formalia
1. Valg af dirigent.
2. Generalforsamlingens lovlighed (er indkaldelsen sket rettidigt).
3. Valg af referent.
1. Valg af dirigent og referent.
2. Bestyrelsens beretning.
3. Fremlæggelse og godkendelse af regnskab, budget og kontingent.
3. Fremlæggelse af regnskab, budget og kontingent.
4. Indkomne forslag.
5. Valg (Jf. § 3)
6. Eventuelt
5. Godkendelse af vedtægtsændringer og Acceptable Use Policy
6. Valg (Jf. § 3)
7. Eventuelt
### § 4.1. Afholdelse af generalforsamlinger og bestyrelsesmøder
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
som idéudviklingsforum for foreningen.
### § 5.1 Tegningsret
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
lån, af den samlede bestyrelse.
Den samlede bestyrelse kan meddele prokura til individuelle medlemmer af bestyrelsen.
## § 6. Medlemskab
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.
@ -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.
## § 8. Moderationspolitik
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
## § 8. Kontingent/finansiering
De årlige kontingenter fastsættes af generalforsamlingen.
Foreningen kan herudover finansieres ved sponsor- og annoncestøtte samt bidrag
fra offentlige/private virksomheder, fonde, øvrige foreninger/institutioner og
private personer, så længe det ikke stiller krav til foreningens dispositioner.
## § 10. Medlemsydelse
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
## § 9. Ekstraordinær generalforsamling
Indkaldelse sker, hvis et flertal af bestyrelsen ø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.
## § 12. Regnskab
## § 10. Regnskab
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
den ekstraordinære generalforsamlings fremmødte medlemmer.

View file

@ -2,163 +2,10 @@
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.
data.coop does not have a translation of its Danish statutes.
## § 1. Name and location
The name of the association is: data.coop
The reason is that we cannot guarantee that the democratic process that established the Danish statutes would understand an English translation in the same way.
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.
While we work out this challenge,
we encourage that you use some auto-generated translation of the [Danish statutes](/rights/)
and ask us questions about anything that would seem unclear.

View file

@ -5,10 +5,10 @@ title: Tjenester
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](/services/#badges), der deklarerer i hvor høj grad den
enkelte tjeneste lever op til [kerneprincipperne defineret i formålsparagraffen
i vores vedtægter]({{< ref "/rights.md#-2-formål" >}}).
i vores vedtægter](/rights/#-2-formål).
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](/services/#badges).
Klik på hver tjenestes navn for at se detaljer:

View file

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

View file

@ -1,10 +1,10 @@
<!doctype html>
<html lang="{{ .Site.Language.Lang }}">
<html lang="{{ site.Language }}">
{{ partial "head.html" . }}
<body>
<aside>
<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">
<span id="nav-toggle-a"></span>

View file

@ -1,12 +1,13 @@
<h2 id="badges">{{ i18n "badges_headline" }}</h2>
<section class="badge-definitions">
{{/* TODO: This needs to be sensitive to current language */}}
{{- $translated_badges := index $.Site.Data.badges .Lang }}
{{ range $badge_key, $badge := $translated_badges.badges.badges }}
<div class="badge-icon">
{{ $svg := printf "static/static/img/badges/%s" .icon }}
{{ $svg | readFile | safeHTML }}
{{$svg := printf "static/static/img/badges/%s" .icon}}
{{ $svg | readFile | safeHTML }}
</div>
<div class="badge-name">{{ title .name }}</div>

View file

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

View file

@ -3,7 +3,7 @@ license: "MIT"
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/"
homepage: "https://data.coop"
tags: ["nice"]
tags: ["nice",]
features: ["responsive", "small page size", "fuck google", "no tracking"]
min_version: "0.60.1"