Compare commits

..

No commits in common. "main" and "redesign-spring22" have entirely different histories.

31 changed files with 60 additions and 631 deletions

View File

@ -4,27 +4,19 @@ title = "The Co-op Cloud"
theme = "coopcloud.tech"
enableemoji = true
[menu]
[[menu.main]]
name = "Git"
url = "https://git.coopcloud.tech"
weight = 1
[[menu.main]]
name = "Docs"
url = "https://docs.coopcloud.tech"
weight = 2
[[menu.main]]
name = "Recipes"
url = "https://recipes.coopcloud.tech"
weight = 3
weight = 1
[[menu.main]]
name = "Blog"
url = "/blog/"
weight = 4
weight = 2
[params]
[params.links]
docs = "https://docs.coopcloud.tech/"
docsfaq = "https://docs.coopcloud.tech/intro/faq/"
docsfaq = "https://docs.coopcloud.tech/faq/"
getinvolved = "https://docs.coopcloud.tech/get-involved/"
autonomicSite = "https://autonomic.zone"
@ -41,11 +33,8 @@ enableemoji = true
name = "Mastodon"
link = "https://social.coop/@coopcloud"
[[params.links.footer]]
name = "RSS"
link = "https://coopcloud.tech/blog/index.xml"
name = "Twitter"
link = "https://twitter.com/coop_cloud"
[Permalinks]
code = "/:filename/"
[markup.goldmark.renderer]
unsafe = true

View File

@ -1,60 +0,0 @@
---
title: "April 2023 funding report"
date: 2023-04-13T11:32:59+02:00
draft: false
image: "/img/comp-squat.jpg"
imageCredit: "Image from the Outdoor Computing Club collection by Fletcher Bach (are.na/fletcher-bach)."
description: "April 2023 funding report"
---
Were coming to the end of another funded chunk of work, heres what happened 🤟
<!--more-->
## What happened?
At the start of 2023, we announced [our next major round of funding](https://coopcloud.tech/blog/new-year-status-update/), this time from a private donor. We would like to thank them, and the [individual contributors on our OpenCollective](https://opencollective.com/coop-cloud#section-contributors), once again, for financially supporting our work and enabling us to push the project forward 💗
## Tooling updates
Theres a new `abra` available and if you havent upgraded, [please go ahead](https://docs.coopcloud.tech/abra/upgrade/)! Theres a [migration guide](https://docs.coopcloud.tech/abra/upgrade/#06x-beta-07x-beta) available and the full changelog is [here](https://git.coopcloud.tech/coop-cloud/abra/releases/tag/0.7.0-beta).
The idea behind the `0.7.x` series of `abra` was to fix several critical bugs and also re-factor - and, in some cases, remove - some of the more unreliable parts of the tool. Some of the main improvements are:
* `abra` has a more stable interaction model with SSH. Weve seen a dramatic decrease in obscure SSH related errors and hope that will be a thing of the past 😌
* Weve got the beginnings of machine-readable output! Try running ([with `jq` installed](https://stedolan.github.io/jq/download/)) `abra app ls -m | jq '.[].apps[].appName`. This has enabled such wonders as [`abra.php`](https://social.coop/@coopcloud/110125297575197185)!
* `abra` now continues to work during outages of `git.coopcloud.tech` - removing one dependency on a central point of failure, on the path to eventually [further decentralising the recipe catalogue infrastructure](https://git.coopcloud.tech/coop-cloud/organising/issues/139).
Lastly, were also happy to share news of `kadabra`, a server-side companion tool which is available for general alpha-testing (here be dragons!) which has been developed by `@Moritz`, a member of [Local-IT](https://local-it.org). Thank you `@Moritz` and Local-IT!
`kadabra` is about helping perform automatic upgrades of apps in your Co-op Cloud deployment. `abra` now attaches some extra metadata to the deployed app, and `kadabra` can read that and make a decision about whether or not to perform an automated upgrade. Its all new, and we welcome brave alpha-testers to check it out!
## The Federation bootstrap meeting
> Update: read more about our progress on [this post](/blog/federation-bootstrapped/)
Were delighted to announce that we have finally bootstrapped the federation 🎉 The process is far from over, but the wheels are now officially turning: we had 13 in attendance at the founding meeting, representing 7 collectives.
One of the main goals of the session was to come to agreement on what decision-making protocol to use. Thankfully, this was a success, and we now have a way to collectively make decisions together using consent and consensus. This means that Autonomic has completed the process of decentering itself as a main decision maker of the project and from now, will submit decisions to a vote like any other member of the federation.
We will be publishing all public federation minutes, decisions, plans, etc. [here](https://docs.coopcloud.tech/federation/).
## Finances
We have reached our goals for this current chunk of funded work and we still have funds remaining! This is money which was budgeted to support future administration and pay members for participating in the meetings (yet to be invoiced for). We will be transferring this money to the [Co-op Cloud Open Collective](https://opencollective.com/coop-cloud) once we finish up some remaining finance admin. In this way, we can also start to make collective finances more transparent.
## Whats next?
On the technical side of things, we will continue to identify critical bug fixes and improvements in `abra` and publish new versions. We hope to bring `kadabra` to a stable release soon and expand the collectives who are running the software.
For the federation, there will be more discussions and meetings coming up soon. We aim to continue thinking through how to organise our internal processes, for example, membership guidelines, financial sustainability and prioritisation of development efforts.
## Get Radical with us
We'd love to see more folks [get involved](https://docs.coopcloud.tech/get-involved/) :tada:
If you're thinking about setting up a technology co-op, you have a software stack sitting around waiting for you to pick up now; we have the technology! It's built by tech co-ops for tech co-ops. If you're curious but don't know where to start, [get in touch](https://docs.coopcloud.tech/intro/contact/) anyway!
We have [these amazing flyers](/pdf/flyercoopcloud.pdf) now (massive thanks to `@analuisa`)! Print, distribute, share, spread the word 🎺

View File

@ -1,215 +0,0 @@
---
title: "The Co-op Cloud Public Beta"
date: 2022-05-30T11:32:59+02:00
draft: false
image: "/img/beta.gif"
imageCredit: "'Graceful machines' by Faith Holland from the Internet Gardening collection by Trav Fryer (are.na/trav-fryer)."
description: "The Co-op Cloud Public Beta"
---
We're delighted to announce that the public beta of Co-op Cloud is here at last! There has never been a better time to get involved in Co-op Cloud because the software kinda actually maybe works now :laughing: Read on to see what we've been up to for the last 2 years...
<!--more-->
## Alpha :point_right: Beta
Before we dive in, if you're new to the project, [you'll probably want to start with our project launch post on `autonomic.zone`](https://autonomic.zone/blog/co-op-cloud/), and if you're still curious, follow along on [our (sometimes) monthly blog posts](https://coopcloud.tech/blog/) to get the full context.
So, what does "alpha" and "beta" quality software even mean?
Alpha meant that the project could fundamentally change at any time! Things were still super experimental and we were trying to find out how to make things work. Beta means things won't fundamentally change! We're pretty confident that we have a stable base now, the moving parts of the project fit well together and things are relatively easy to maintain as we bring in new changes.
Despite the experimental nature of the project so far, we've seen a lot of people picking up Co-op Cloud, setting up deployments and getting rad with us. Folks are reporting back that it is helping them get their work done, and fits their needs. It makes daily work convenient, and is relatively easy to learn.
To everyone who took the risk of getting involved in the alpha and even pre-alpha stages of this project: you are amazing and we couldn't have done it without you :heart:
## The beta bikemap in review
At the start of all this, we laid our goals out in a document we called [the beta bikemap](https://pad.autonomic.zone/s/C3uuqfSCk) (because roads are usually for cars, and bikes > cars). While we believe we did not yet fully address 3 of the goals ([Continuous integration testing for apps](https://pad.autonomic.zone/s/C3uuqfSCk#Continuous-integration-testing-for-apps), [Payments and billing](https://pad.autonomic.zone/s/C3uuqfSCk#Payments-and-billing), [Pen Testing/security](https://pad.autonomic.zone/s/C3uuqfSCk#Pen-Testingsecurity)), we think we did a good job with the 12 others!
In retrospect, it was quite an ambitious plan. Here is the breakdown of the bikemap and an overview of what we achieved on each point.
### [Command-line tool sustainability](https://pad.autonomic.zone/s/C3uuqfSCk#Command-line-tool-sustainability)
In the early days, we started off with a [Bash implementation of `abra`](https://git.coopcloud.tech/coop-cloud/abra-bash), our command-line tool for administrating Co-op Cloud deployments. One of our more galaxy brain ideas was to re-implement this Bash script in a programming language which would help us work with data structures, formats and 3rd party APIs in a more manageable way.
We've since implemented [`abra` in the Go programming language](https://git.coopcloud.tech/coop-cloud/abra)! There were some serious doubts along the way about whether we were just getting lost in a [second system syndrome](https://en.wikipedia.org/wiki/Second-system_effect) (yes, our Bash implementation was "small, elegant, and successful" :smile:) but we managed! Here's to 16,766 lines of Go code :beers:.
Some of the improvements include:
- `abra` is now distributed as a statically compiled single binary which is simple to install and start using. The binary works for several popular platforms, and we've seen a reduction in reports for installation problems.
- The Go implementation has feature parity with the Bash implementation but also gained new special powers! For example, the scripts interface, cloud server/DNS integration and recipe catalogue generation.
- Improvements to the `abra` test-suite-of-sorts, release automation & management, and fairly [comprehensive documentation](https://docs.coopcloud.tech/abra/).
- `abra` no longer relies on having Docker installed on your local work machine. We've managed to make it a fully compatible Docker daemon client which can interact via the remote HTTP API. This makes us more resilient, reducing our reliance on corporate tools for our community needs.
### [Versioning and deploy stability](https://pad.autonomic.zone/s/C3uuqfSCk#Versioning-and-deploy-stability)
A core goal for Co-op Cloud is stability. We want things to run smoothly when we maintain and upgrade our deployments. We've been working hard on this one and have managed to come up with several moving parts which we think help make Co-op Cloud deployments more reliable.
- Recipes can be versioned & published with `abra` to our [recipe catalogue](https://recipes.coopcloud.tech/). Each recipe uses a [variation](https://docs.coopcloud.tech/maintainers/handbook/#how-are-recipes-are-versioned) of [semantic versioning](https://semver.org/) which helps maintainers communicate what kind of changes are coming in the new version.
- We've [documented](https://docs.coopcloud.tech/maintainers/) ways to work with and maintain recipes so that anyone can join in and help.
- We've implemented commands in `abra` so that operators can easily control the deployment state of their apps (e.g. `deploy`/`upgrade`/`rollback`). We've set up a system for [release notes](https://docs.coopcloud.tech/maintainers/handbook/#how-do-i-write-version-release-notes) so that operators can leave helpful notes for other operators when doing deployments. These notes are shown at deploy-time, so operators will be warned and hopefully avoid any heartbreak.
- `abra` is able to parse all recipe repositories in order to generate [a JSON recipe catalogue listing](https://recipes.coopcloud.tech/recipes.json). This catalogue is then consumed by `abra` in order to reason about deployment state and determine available versions.
### [Backup and restore](https://pad.autonomic.zone/s/C3uuqfSCk#Backup-and-restore)
Standardising the way backup/restore is done was always seen as a boon for time-saving and re-use. Being able to back up and restore app data is often seen as one of the main ways a regular deployment turns into a "production deployment".
We struggled to arrive at a single "works for everyone" solution. Instead, we aimed for a general solution which is flexible and also open to other approaches. We've heard from several groups who do backups very differently, so we had to have something that was customisable.
We developed two approaches to doing backup/restore. One using `abra` (e.g. `abra app backup` / `abra app restore`) and another using a [run-time bot](https://git.coopcloud.tech/coop-cloud/backup-bot-two). [We documented](https://docs.coopcloud.tech/maintainers/handbook/#how-do-i-configure-backuprestore) both of these methods and have seen several operators making use of them.
The core of our approach was to use [Docker object labels](https://docs.docker.com/config/labels-custom-metadata/) to mark backup/restore commands inside the recipe configuration. This suits our approach of maintaining the entire production state of the deployment inside the recipe. Tools like `abra` and `backup-bot-two` can then read these labels at run-time and do backup/restore work.
### [Co-op Cloud “The Organisation”](https://pad.autonomic.zone/s/C3uuqfSCk#Co-op-Cloud-%E2%80%9CThe-Organisation%E2%80%9D)
Co-op Cloud isn't just about digital infrastructure and libre software. We also wanted to develop sustainable and democratic governance around our digital configuration commons.
We've been regularly astounded (to the point of questioning reality) by the amount of wonderful folks who have turned up and started organising in & around Co-op Cloud.
To formalise Co-op Cloud as a shared resource, we've proposed to form a [federation](https://coopcloud.tech/blog/federation-proposal/) of participating members that will democratically manage the project. The proposal is still out for review and feedback and we're working on concretising our next steps with groups who are engaging with it.
Beyond this, we'd like to give a huge shout-out to the folks who are using Co-op Cloud & those who are maintaining recipes, operating deployments and generally enthusiastic about the project.
Lists are always incomplete but we'll try anyway! Here is the cast of Co-op Cloud Comrades so far:
(PS. sorry if we forgot you! Please let us know and we'll add you in :fingers_crossed:)
- [Local-IT](https://local-it.org) (operators, maintainers)
- [Threndol Tutoring](https://threndoltutoring.com/) (end-users)
- [ruangrupa & `lumbung.space`](https://lumbung.space/about/) (end-users)
- [Servers Co-op](https://servers.coop/) (operators & end-users)
- [Vermont Real Estate Co-operative](https://vrec.coop/) (end-users)
- [United Tech & Allied Workers](https://utaw.tech/) (operators & end-users)
- [Industrial Workers of the World](https://iww.org.uk/) (end-users)
- [Autonomic Co-operative](https://autonomic.zone/) (operators, maintainers)
- [Neuronic Games](https://www.neuronicgames.com/) (end-users)
- [Fashion Revolution](https://www.fashionrevolution.org/) (end-users)
- [Biobulkbende](https://biobulkbende.org/) (operators & maintainers)
- [Third Sector Accountancy](https://www.thirdsectoraccountancy.coop/) (end-users)
- [Anarchy Rules](https://anarchyrules.info/) (end-users)
- [Doop Coop](https://doop.coop) (design work & feedback)
- [bath.social](https://about.bath.social/) (operators & maintainers)
- [Bonfire](https://bonfirenetworks.org/) (operators & maintainers)
- [Tante Wandel](https://wandelgut.de/projekte/einkaufskooperative-tante-wandel/) (end-users)
- [WASHNote](https://washnote.org) (operators)
- [Solisoft](https://solisoft.top/) (operators & maintainers)
- [Forum voor Anarchisme](https://www.forumvooranarchisme.nl/en/home) (operators)
- [Workers.coop](https://workers.coop) (end-users)
### [Compensating contributors](https://pad.autonomic.zone/s/C3uuqfSCk#Compensating-contributors)
We didn't want to be another project which asks people to do free work them. Instead, we set up an [Open Collective](https://opencollective.com/coop-cloud), [wrote clear documentation](https://docs.coopcloud.tech/get-involved/#compensation) and simply paid people for their contributions!
We're proud to report that we paid out around 2,000 euros worth of funding for work done by external contributors. It was a pleasure to open up space for people to actually get paid for their free software work and to re-distribute the available funding to other individuals, groups and projects.
We think more libre software projects should be thinking about how to use money for building collective power. In the (slightly edited) words of [LURK](https://lurk.org/):
> Big tech and an abusive misunderstanding of free and open source software practices have led us to believe that software production, server maintenance and on-line services should be free as in gratis. However there is no such things as a free lunch and software does not exist in a vacuum. If we want sustainable alternatives, these alternatives and the humans behind them, need to be supported.
### [Wider libre apps selection](https://pad.autonomic.zone/s/C3uuqfSCk#Wider-libre-apps-selection)
We wanted to expand the choice of libre software apps that operators could deploy so that different needs could be met. Certainly, we've seen that a lot of experimentation and testing needs to happen in order to understand if a libre software is a good pick.
We now currently have 90+ libre software apps packaged under our [`git.coopcloud.tech/coop-cloud/...`](https://git.coopcloud.tech/coop-cloud) repository listing. Most of those appear also under the [recipe catalogue listing](https://recipes.coopcloud.tech/) or will begin to appear once maintainers bring them into the catalogue.
Also, we wanted to make it easy to package new apps for Co-op Cloud. We expanded the [recipe documentation](https://docs.coopcloud.tech/maintainers/) in order to make it clear how to work with recipes in Co-op Cloud. We've since seen several new folks jump in and start packaging libre software without much help or guidance from us.
### [Documentation](https://pad.autonomic.zone/s/C3uuqfSCk#Documentation)
[`docs.coopcloud.tech`](https://docs.coopcloud.tech/) has been heavily revamped and redesigned from the ground up!
We expanded the idea of "roles" in the project, such as "operators" and "maintainers" and made sure to document all the recipe packaging tips, tricks & hacks.
Writing solid documentation has been our focus and will continue to be.
### [UI / UX testing](https://pad.autonomic.zone/s/C3uuqfSCk#UI--UX-testing)
We have been doing extensive interface design and end-user experience testing since the pre-alpha stages of the project. This is mainly due to the ["dog fooding"](https://en.wikipedia.org/wiki/Eating_your_own_dog_food) approach we've been taking.
We have been using `abra` extensively in our own deployments and projects for the entire period. We've encouraged other collectives to join us in this process and raise issues when they run into problems.
The results can be seen in [263 closed reports](https://git.coopcloud.tech/coop-cloud/organising/issues?q=&type=all&sort=&state=closed&labels=&milestone=0&assignee=0) on our shared issue tracker.
### [Portability testing (software/hardware)](https://pad.autonomic.zone/s/C3uuqfSCk#Portability-testing-softwarehardware)
We wanted Co-op Cloud deployments to run on new and old hardware and of course be compatible with current cloud providers.
`abra` can be cross-compiled to support several mainstream platforms: GNU/Linux, ARM (several versions) and MacOS. All versions can be seen on our [`abra` release page](https://git.coopcloud.tech/coop-cloud/abra/releases).
We set up release automation for automagic cross-platform builds and also see space for supporting new platforms as the needs arise.
### [Cloud provisioning portability](https://pad.autonomic.zone/s/C3uuqfSCk#Cloud-provisioning-portability-Hetzner-DO-Linode-etc)
A fact of life today is that a lot of democratic tech collectives are in a position of only being able to use corporate cloud server providers. This is due to a lot of reasons (and we're also working on [changing that](https://servers.coop/)) but we didn't want to ignore this and not have some form of support for it.
`abra` now supports the creation of servers through integrations with [Servers.coop](https://servers.coop) and [Hetzner](https://www.hetzner.com/) via the `abra server new` command interface. We support one co-op provider and one corporate provider.
Also, it's possible to work with cloud-based DNS providers via `abra` via the `abra record` command interface. Creating, editing and removing DNS records via [Gandi](https://www.gandi.net/en-GB) is currently supported.
We are happy to have these implementations to show what is possible.
### [Design and aesthetics](https://pad.autonomic.zone/s/C3uuqfSCk#Cloud-provisioning-portability-Hetzner-DO-Linode-etc)
We established branding and aesthetics through conversation about our values and how we want the project to be represented.
This design brief was then implemented across all our public sites such as [`coopcloud.tech`](https://coopcloud.tech), [`docs.coopcloud.tech`](https://docs.coopcloud.tech) & [`recipes.coopcloud.tech`](https://recipes.coopcloud.tech).
### [Public communications](https://pad.autonomic.zone/s/C3uuqfSCk#Public-communications)
Beyond organising the project internally, we also wanted to communicate clearly to two groups: a general public and democratic tech collectives.
We wanted to build up an online community infrastructure, so that we could invite people to join the discussion and stay informed.
We've managed to run our public communication through several mediums:
- We set up a [Mastodon](https://joinmastodon.org/) account over on [social.coop/@coopcloud](https://social.coop/@coopcloud).
- We created a [Matrix space](https://docs.coopcloud.tech/intro/contact/#matrix) on [`matrix.autonomic.zone`](https://matrix.autonomic.zone/_matrix/static/) for real-time chat
- We ran a (mostly) monthly blog post update on [`coopcloud.tech`](https://coopcloud.tech/blog/) to give a more general status update.
## Beta :point_right: :question:
As the public beta is now in effect, we are generally interested in the following focuses:
- Making time to welcome new folks into the project.
- Working with collectives to concretise how our federation might work in practice. [Our proposal](https://coopcloud.tech/blog/federation-proposal/) is still open for feedback and constructive critique. We want to try to make small steps in co-operation to realise this federation as a well functioning governance body.
- Stabilising how we maintain recipes between several collectives.
- Fixing bugs & delivering new features in [`abra`](https://docs.coopcloud.tech/abra/).
- Getting the documentation and website translated.
- Looking for new public funding.
## Public Money, Public Power
We'd like to say a **HUGE** thanks to the [ECF](https://culturalfoundation.eu/) who [funded this work towards the public beta](https://culturalfoundation.eu/stories/cosround4-autonomic-co-operative). We couldn't have gotten this far without their support and understanding during this process.
We feel it is important to emphasise that funding democratic technology collectives with public money delivers democratic outcomes!
All our work is copyleft licensed and made open and available as a digital configuration commons for others to re-use and build upon. ["Code paid by the people should be available to the people!"](https://publiccode.eu/)
Furthermore, our governance and organising models are open & for voluntary participation, following the spirit of [the co-operative principles](https://www.ica.coop/en/cooperatives/cooperative-identity). So we also focus on building our social and political commons.
As members of [Autonomic](https://autonomic.zone/), the idea of Co-op Cloud was rooted in our practical needs. We needed a democratically organised digital infrastructure project we could rely on. However, more than that, the project was also conceived as a way to put into practice our anti-capitalist politics. We still see Co-op Cloud as a way other collectives can organise to dismantle "Big Tech" today.
## Get Radical with us
We'd love to see more folks [get involved](https://docs.coopcloud.tech/get-involved/) :tada:
If you're thinking about setting up a technology co-op, you have a software stack sitting around waiting for you to pick up now. We have the technology. It's built by tech co-ops for tech co-ops. If you're curious but don't know where to start, [get in touch](https://docs.coopcloud.tech/intro/contact/) anyway!
We even have [these amazing flyers](/pdf/flyercoopcloud.pdf) now (massive thanks to `@analuisa`)! Print, distribute, share, spread the word :trumpet:
:v:

View File

@ -1,44 +0,0 @@
---
title: "The Federation is bootstrapped"
date: 2023-04-17T11:32:59+02:00
draft: false
image: "/img/solifedi.jpg"
imageCredit: "Solidarity by Roger Peet (instagram.com/toosphexy)"
description: "The democratic wheels are turning."
---
The democratic wheels are turning. We've successfully had the Federation Boostrap ™ meeting and things are up and running! Here's what we now know.
<!--more-->
### Public documentation
As of [Resolution 005](https://docs.coopcloud.tech/federation/resolutions/passed/005/), we now have public documentation for the federation.
Grab a beverage and dive in on [`docs.coopcloud.tech/federation`](https://docs.coopcloud.tech/federation).
### Decision making
In the [bootstrap meeting](https://docs.coopcloud.tech/federation/minutes/2022-03-03/), we decided on a decision making protocol in [Resolution 001](https://docs.coopcloud.tech/federation/resolutions/passed/001/). This has since been put to great use and we're seeing resolutions coming in and getting voted on. All resolutions that are passed are documented over [here](https://docs.coopcloud.tech/federation/resolutions/).
### Membership & dues
The federation currently has [9 members](https://docs.coopcloud.tech/federation/membership/) 🤓 As per [Resolution 002](https://docs.coopcloud.tech/federation/resolutions/passed/002/), all members present at the [bootstrap meeting](https://docs.coopcloud.tech/federation/minutes/2022-03-03/) are now members. Thanks everyone for turning up and joining in!
We've done some Open Collective adminstration and It is now possible to pay membership dues 🤑 Please submit an expense on behalf of your collective against the "Federation membership dues" tier. You can do that by clicking [here](https://opencollective.com/coop-cloud/contribute/federation-membership-dues-55111/checkout).
Membership is open if you're interested in joining! See [this FAQ question](https://docs.coopcloud.tech/federation/faq/#how-do-i-join-the-federation) for more information on how to get started. If you're hosting, developing or using free software which has some relation to Co-op Cloud, we'd encourage you to join the federation!
### Finances
Autonomic has published documentation about how the federation finances work [here](https://docs.coopcloud.tech/federation/finance/). If anything is unclear, please let us know!
As of today, the Open Collective balance represents the total sum of money available to the federation. This is currently **6,507.14 GBP** 🎉 This money is made up the ongoing Open Collective "Infrastructure Sustainability" tier donations and the remainder of [our previous round of funding](/blog/april-2023-funding-report/) (budget for this funding available to review [here](/blog/new-year-status-update/)). Thanks again for the support folks 😍
In [Resolution 003](https://docs.coopcloud.tech/federation/resolutions/passed/003/), we decided on budgets for paid work and an hourly rate. If you're a member of the federation, please submit budget proposals to get paid for your work!
### Meeting schedule
There is a poll currently flying around in the members only federation channel on Matrix. Please take a look and fill in your times! We will aim to discuss a fixed meeting schedule (which takes all members timezones into account) going forward, so we can avoid the organisational churn of online polls.
-- decentral1se on behalf of Autonomic

View File

@ -53,7 +53,7 @@ A warm beverage & a comfy chair is recommended for your review session -- it is
In terms of feedback, we want to emphasise that we don't have to figure it all out right now. What is more important is that we lay the foundations for democratically working it out as we go. Any red flags, major concerns & blockers to participation would be great to discover at this early stage. All feeback & constructive criticism is welcome!
We are happy to hear from folks on any of the communication channels that we have. Please see our [contact docs](https://docs.coopcloud.tech/intro/contact/) for more. We will gather all feedback, discussions & follow up with people by the end of April 2022, and we are aiming to publish the proposal as final by mid May 2022 (**UPDATE**: based on feedback, we've removed this deadline as we work out more details with groups who are engaging with this. More to come Soon :tm:).
We are happy to hear from folks on any of the communication channels that we have. Please see our [contact docs](https://docs.coopcloud.tech/intro/contact/) for more. We will gather all feedback, discussions & follow up with people by the end of April 2022, and we are aiming to publish the proposal as final by mid May 2022.
Thank you for your time!

View File

@ -1,40 +0,0 @@
---
title: "New year status update"
date: 2023-01-02T11:32:59+02:00
draft: false
image: "/img/compute-space.png"
imageCredit: "Image from the Outdoor Computing Club collection by Fletcher Bach (are.na/fletcher-bach)."
description: "New year status update"
---
Happy new year all! Here's our status update and some good news 😽
<!--more-->
## New funding secured
We're delighted to report that we have secured more funding! The proposal we wrote can be read here [in full](https://docz.autonomic.zone/share/359c2b0d-9a3d-477c-84cc-73448be05142). In short, we'll be focusing on 1) finalising the Co-op Cloud federation (see [our original blog post about it for more](/blog/federation-proposal/)) 2) fixing critical bugs in `abra`. The support has come via a donor who wishes to remain anonymous. We would like to thank them for getting in touch with us and for supporting our work and this community 💕
## New community hackers & organisers, w e l c o m e 🌻
We've seen a lot of activity in the Matrix channels in the last months. It's been great to have a steady stream of new people step into the project. We've received wonderfully constructive feedback! We're happy to welcome members of [Arso](https://arso.xyz) and [Agaric](https://agaric.coop) into the project and see them testing out Co-op Cloud.
We're now a grand total of [8 `abra` hackers](https://git.coopcloud.tech/coop-cloud/abra/src/branch/main/AUTHORS.md)! It's reassuring to know that folks who want to dive in and hack on `abra` can do so without too much trouble. `abra` is now `0.6.0-beta`, see [the docs](https://docs.coopcloud.tech/abra/upgrade/) for how to upgrade.
## FOSDEM 2023 talk confirmed
`@decentral1se` will be at [FOSDEM 2023](https://fosdem.org/2023) doing [a talk](https://fosdem.org/2023/schedule/event/sovcloud_the_co_operative_cloud/) in the Sovereign Cloud devroom. Maybe see you there if you're around for some Co-op Cloud Beverages & Chats 🍺 Here's the abstract for the talk:
> Co-op Cloud is a software stack that aims to make hosting libre software applications simple for small service providers such as tech co-ops who are looking to standardise around an open, transparent and scalable infrastructure. It uses the latest container technologies and configurations are shared into the commons for the benefit of all.
>
> The project launched public beta in May 2022 and has seen a lot of interest from hosters, hackers and end-users. We are currently in the process of forming our organisational model which help us make decisions collectively and work towards financial stability.
>
> In this presentation, I'll give a status update on the Co-op Cloud ecosystem and where we're going. The thinking and principles of the project closely overlap with the ideas of the Sovereign Cloud and the intersection of the needs of end-users and infrastructure providers.
## Get Radical with us
We'd love to see more folks [get involved](https://docs.coopcloud.tech/get-involved/) :tada:
If you're thinking about setting up a technology co-op, you have a software stack sitting around waiting for you to pick up now; we have the technology! It's built by tech co-ops for tech co-ops. If you're curious but don't know where to start, [get in touch](https://docs.coopcloud.tech/intro/contact/) anyway!
We have [these amazing flyers](/pdf/flyercoopcloud.pdf) now (massive thanks to `@analuisa`)! Print, distribute, share, spread the word :trumpet:

View File

@ -1,187 +0,0 @@
---
title: "Selfhosted Infrastructure Any%"
date: 2024-03-30T16:00:00+00:00
draft: false
image: "/img/speedrun.jpg"
---
A Co-op Cloud speedrun attempt livestream! Brought to you by by libre software.
<!--more-->
It'd been so long since [the last Co-op Cloud demo video](https://asciinema.org/a/405836) that, since then, our core command-line tool `abra` had been completely rewritten (from Bash to Golang), and the entire Co-op Cloud project moved from an in-house Autonomic production to a participatory, democratic [Co-op Cloud federation](https://docs.coopcloud.tech/federation/). Definitely time for an update!
So, Co-op Cloud nerd `@3wc` picked up the fine tradition of [speedrunning](https://en.wikipedia.org/wiki/Speedrunning) for a "Selfhosted Infrastructure Any%" livestream attempting to beat their personal best time of 46m17s to deploy chat (Matrix / Fluffychat), microblogging (Hometown), and file-/calendar-sharing (Nextcloud) behind single sign-on (Keycloak).
<iframe title="Selfhosted Infrastructure Any%" width="560" height="315" src="https://tv.undersco.re/videos/embed/0044ff41-bf84-4b53-a6e0-4f7d7ce38622" frameborder="0" allowfullscreen="" sandbox="allow-same-origin allow-scripts allow-popups"></iframe>
Before we dive into the write-up, mega-thanks to audience member `@yala` for putting together an excellent write-up during the stream, including some insightful questions. And, of course, to everyone who came along, and everyone who helped signal-boost the announcement beforehand!
# Concept
The integrated set-up of Keycloak/Matrix/Hometown/Nextcloud is a running start for a small-to-medium group looking for alternatives to corporate spyware. It comprises solid alternatives to Dropbox/Google Drive, Twitter, and Slack/Discord/Whatsapp. And, the entire stack can be hosted on a cheap server (or even an old laptop or desktop computer), and the services can be accessed using reasonably slick mobile and desktop apps.
Single sign-on means that in some ways, this set-up is even more usable, even for non-technical users, than the corporate equivalents. And, highlighting where Co-op Cloud can help, getting this combination of tools running manually without Co-op Cloud (that is, following the separate set-up instructions for each platform) is a non-trivial technical challenge.
The choice of apps is primarily geared towards working groups of 3-200 people, and the focus is on internal coördination platforms rather than publication.
## Preparation
To try and simulate an experience of setting up these apps for the first time, and as a nod to the purist conditions popular with videogame speedruns, the demo starts with a blank Debian Docker image (`docker run debian`) and a blank Debian 12 server. (All commands below are run inside that container, unless specified otherwise).
To avoid needing to screenshare DNS and server configuration, there are DNS records for `speedrun.coopcloud.tech` and `*.speedrun.coopcloud.tech` set up, and a pre-generated SSH key has permission to log into the server as root.
## Howto / script
### 1 Local setup
```bash
apt update && apt install vim curl wget openssh-client -y
export EDITOR=vim
```
(The recommended installation instructions for `abra` require both `curl` and `wget` for some reason. An issue has been opened to figure that out: [`#591`](https://git.coopcloud.tech/coop-cloud/organising/issues/591))
The next step is to copy-paste this from the [`abra` installation instructions](https://docs.coopcloud.tech/operators/tutorial/#install-abra):
```bash
curl https://install.abra.coopcloud.tech | bash
```
> An audience member commented that `curl X | bash` is not amazing security, and indeed downloading [the latest `abra` release binary](https://git.coopcloud.tech/coop-cloud/abra/releases) manually, and comparing the file checksums, would be more secure patches to [`docs.coopcloud.tech`](https://git.coopcloud.tech/coop-cloud/docs.coopcloud.tech/) extremely welcome! See more on [`#593`](https://git.coopcloud.tech/coop-cloud/organising/issues/593).
Then, running `abra autocomplete bash` shows the necessary commands to set us up some autocompletion for `abra` commands.
### 2. Server set-up
The next step, on the virtual server, is to run the ["Server set-up" section](https://docs.coopcloud.tech/operators/tutorial/#server-setup) of the Co-op Cloud docs:
```bash
ssh speedrun.coopcloud.tech
# docker install convenience script
wget -O- https://get.docker.com | bash
# setup swarm
docker swarm init
docker network create -d overlay proxy
```
(Skipping adding the current user to the `docker` group, because `root` already has permission to access the Docker daemon)
> As above, `wget ... | bash` is a bit wacky, this is the Docker-recommended installation method but there are others patches welcome!
Lastly, back on the local machine, `abra app server add speedrun.coopcloud.tech`
### 3. Traefik
```bash
abra app new traefik
abra app config traefik.speedrun.coopcloud.tech
abra app deploy traefik.speedrun.coopcloud.tech -c -n
```
(`-c` to skip waiting for the container to come up, and `-n` to skip the confirmation prompt)
![screenshot of Traefik dashboard](/img/speedrun-traefik.webp)
### 4. Keycloak
```bash
abra app new keycloak --secrets
abra app config keycloak.speedrun.coopcloud.tech
abra app deploy keycloak.speedrun.coopcloud.tech -c -n
```
Then the Keycloak interface is available at `https://keycloak.speedrun.coopcloud.tech`, necessary to set up the OpenID Connect "clients" for single sign-on for the other apps.
![screenshot of Keycloak login page](/img/speedrun-keycloak.webp)
### 5. Matrix
```bash
abra app new matrix-synapse
```
Meanwhile, by this point Keycloak is alive, and ready to create a new "client". Doing so requires specifying a "client ID", and generates a new "client secret", both of which get added:
```bash
abra app config matrix-synapse.speedrun.coopcloud.tech --secrets
# fill in SSO details
abra app secret insert matrix-synapse.speedrun.coopcloud.tech keycloak_client_secret v1 (value)
abra app deploy matrix-synapse.speedrun.coopcloud.tech -n -c
```
![screenshot of a terminal showing the above abra commands](/img/speedrun-matrix.webp)
### 6. Fluffychat
```bash
abra app new fluffychat
abra app config fluffychat.speedrun.coopcloud.tech -n -c
```
![screenshot of fluffychat login page](/img/speedrun-fluffychat.webp)
### 7. Hometown
```bash
abra app new hometown
```
Again, a new Keycloak "client" is needed, giving us a client secret and client ID.
Additionally (at least, for now), it's necessary to do some slightly cursed hacking on the server:
```bash
docker run -it git.coopcloud.tech/coop-cloud-chaos-patchs/hometown:v4.0.15-hometown-1.1.1 bash
/usr/local/bin/docker-entrypoint.sh bundle exec rake secret # once for otp_secret
/usr/local/bin/docker-entrypoint.sh bundle exec rake secret # then a second time for secret_key
/usr/local/bin/docker-entrypoint.sh bundle exec rake mastodon:webpush:generate_vapid_key
```
Then manually insert the secrets, generate the remaining ones, and edit in the `VAPID_PUBLIC_KEY` and the other SSO details:
```bash
abra app secret insert hometown.speedrun.coopcloud.tech vapid_private_key v1 <value>
abra app secret insert hometown.speedrun.coopcloud.tech otp_secret v1 <value>
abra app secret insert hometown.speedrun.coopcloud.tech secret_key v1 <value>
abra app config hometown.speedrun.coopcloud.tech
# set OIDC_* settings, and VAPID_PUBLIC_KEY
```
Now, finally, the app can be deployed!
```bash
abra app deploy hometown.speedrun.coopcloud.tech -n -c
```
![screenshot of the livestream, showing the speedrun timer, a quite-bad webcam
still, a terminal window with the above abra commands, and a chat log](/img/speedrun-hometown.webp)
### 8. Nextcloud
```bash
abra app new nextcloud --secrets
abra app deploy nextcloud.speedrun.coopcloud.tech
```
Annoyingly, Nextcloud needs stuff done in the web interface, and in the PHP config file, for SSO. So, with another new Keycloak client set up, the next step is logging into https://nextcloud.speedrun.coopcloud.tech, going to "Apps", installing "OIDC login by pulsejet", and then editing the config file:
```bash
abra app run nextcloud.speedrun.coopcloud.tech
apt update && apt install vim
vim config/config.php
# fill in from https://git.coopcloud.tech/coop-cloud/nextcloud#how-do-i-integrate-with-keycloak-sso
```
(in the demo, this was done from the server, but the above approach is probably conceptually simpler)
![screenshot of nextcloud login page](/img/speedrun-nextcloud.webp)
## Closing thoughts
Even though no records got broken, this was fun to make, and definitely a better way to prepare for an in-person demo than silent solo-hacking. It's also nice to get a little "this is how Co-op Cloud is currently looking" demo video out of it.
If you have ideas for future streams, hit us up on Mastodon ([@coopcloud@social.coop](https://social.coop/@coopcloud/)) or dive into our Matrix ([#coopcloud:autonomic.zone](https://matrix.to/#/#coopcloud:autonomic.zone)). Otherwise, follow us directly on owncast ([`@cast@cast.coopcloud.tech`](https://cast.coopcloud.tech/)) and/or peertube ([@coopcloud@tv.undersco.re](https://tv.undersco.re/a/coopcloud/)) to hear about future streams and videos when they happen!

View File

@ -29,7 +29,7 @@ Our rewrite of `abra`, the Co-op Cloud command-line tool, continues apace: the `
The machine-readable app index on [apps.coopcloud.tech](https://apps.coopcloud.tech) was down, but now it is back with all the new apps 💪
Meanwhile, [recipes.coopcloud.tech](https://recipes.coopcloud.tech) got some shiny new updates, including being able to filter the app list by score and name. Adding filtering has highlighted the amazing performance of [Elm](https://elm-lang.org) apps, giving near-instant feedback in a way that seems strange and refreshing in this age of every-button-click-usually-fires-off-20-HTTP-requests-and-1,000-DOM-changes. Still remains to be seen if it's a good long-term choice.
Meanwhile, [dev.apps.coopcloud.tech](https://dev.apps.coopcloud.tech) got some shiny new updates, including being able to filter the app list by score and name. Adding filtering has highlighted the amazing performance of [Elm](https://elm-lang.org) apps, giving near-instant feedback in a way that seems strange and refreshing in this age of every-button-click-usually-fires-off-20-HTTP-requests-and-1,000-DOM-changes. Still remains to be seen if it's a good long-term choice.
## New apps

View File

@ -22,14 +22,14 @@ We had a great chat at this month's Kite-Flying about Co-op Cloud "The Organisat
## New app packages
- [Snikket](https://git.coopcloud.tech/coop-cloud/snikket/), chat that is simple, secure, and private (an XMPP/Jabber server distribution that comes with its own nice client) by `@decentral1se` and `@3wc.`
- [Outline](https://git.coopcloud.tech/coop-cloud/outline), Notion-style team knowledge base and wiki, by `@travvy` and `@3wc`
- [n8n](https://git.coopcloud.tech/coop-cloud/n8n/), easily automate tasks across different services, by `@roxxers`
- [Jupyter-lab](https://git.coopcloud.tech/coop-cloud/jupyter-lab), extensible environment for interactive and reproducible computing, by `@3wc`
- [Outline](https://git.coopcloud.tech/coop-cloud/outline), Notion-style team knowledge base and wiki, by `@travvy` and `@3wc`
- [n8n](https://git.coopcloud.tech/coop-cloud/n8n/), easily automate tasks across different services, by `@roxxers`
- [Jupyter-lab](https://git.coopcloud.tech/coop-cloud/jupyter-lab), extensible environment for interactive and reproducible computing, by `@3wc`
- [Element-Web](https://git.coopcloud.tech/coop-cloud/element-web) by `@decentral1se`. We've got a proof-of-concept of Matrix synapse <-> keycloak <-> Element-web integration set up for our comrades at ruangrupa, who're doing ongoing testing.
### Recipe catalogue: redesign and update
Autonomic deisgners `@analuisa` and `@hazelnot` have kicked off a redesign of the [recipe catalog](https://recipes.coopcloud.tech/), starting with the review of the way that apps are categorised, and the information that's included.
Autonomic deisgners `@analuisa` and `@hazelnot` have kicked off a redesign of the [recipe catalog](https://dev.apps.coopcloud.tech/), starting with the review of the way that apps are categorised, and the information that's included.
Meanwhile, `@3wc` has been teaching `abra` to read metadata about packaging status and supported features from each recipe's `README.md` file to make sure we have the data to be able to display it.
@ -50,13 +50,13 @@ Co-op Cloud is partying like it's 1999! Thanks to our new Snikket recipe, we've
(More permananent room Coming Soon™)
This is a really interesting alternative to other communications platforms we already have packaged like Matrix, Rocketchat and email. XMPP servers are famously low on resource usage, and there's a really nice wide range of client apps for different platforms.
This is a really interesting alternative to other communications platforms we already have packaged like Matrix, Rocketchat and email. XMPP servers are famously low on resource usage, and there's a really nice wide range of client apps for different platforms.
Medium-term, we're curious about the prospects of bridging different systems: making it easier to run chat servers and bridges could help public interest projects meet people where they're at.
Medium-term, we're curious about the prospects of bridging different systems: making it easier to run chat servers and bridges could help public interest projects meet people where they're at.
### `abra` 0.3.x-alpha is out
The alpha testing is still going on in the usual chaotic manner, we're hoping to stabilise `abra` in this ~~0.3.x~~ 0.4.x series and hopefully do some sort of "code freeze" on new features and focus on squashing bugs, writing documentation and testing, testing, testing. Thanks to everyone who contributed to get this far :heart:
The alpha testing is still going on in the usual chaotic manner, we're hoping to stabilise `abra` in this ~~0.3.x~~ 0.4.x series and hopefully do some sort of "code freeze" on new features and focus on squashing bugs, writing documentation and testing, testing, testing. Thanks to everyone who contributed to get this far :heart:
`abra app restart <app>` is back! You no longer have to ssh to your remote machines to fix happy accidents.

View File

@ -25,13 +25,13 @@
"content": "is a revolutionary global union, fighting for better conditions today and economic democracy tomorrow. By training our members in powerful organising methods, direct-action and direct-democracy, we put power in the hands of workers."
},
{
"title": "[ruangrupa](https://ruangrupa.id) & [Lumbung.space](https://lumbung.space)",
"title": "[Ruangrupa](https://ruangrupa.id) & [Lumbung.space](https://lumbung.space)",
"thumbnail": "/img/thumbs/lumbung.svg",
"content": "is an experimental social and publishing platform by and for the lumbung artists and lumbung members initiated by ruangrupa. It is a (digital) living room for our collective lumbung building process that allows us to connect, support each other, and also share knowledge collectively. It is built on open platforms, co-operative governance, and as a community infrastructure meant for our practices to develop and thrive."
"content": "is an experimental social and publishing platform by and for the lumbung artists and lumbung members initiated by Ruangrupa. It is a (digital) living room for our collective lumbung building process that allows us to connect, support each other, and also share knowledge collectively. It is built on open platforms, co-operative governance, and as a community infrastructure meant for our practices to develop and thrive."
},
{
"title": "[Threndol Tutoring](https://threndoltutoring.com/)",
"thumbnail": "/img/thumbs/threndol-tutoring.png",
"content": "offers gamified lessons to help students be effective in their studies. We work well with students who have obstacles such as ADHD, dyslexia, and confidence struggles; as well as students who are high achievers and looking to keep grades high or break into a higher symbol. Our unique style of tutoring where we build skills using games builds the students capacity to excel."
}
]
]

View File

@ -9,7 +9,7 @@
},
{
"left": "What libre apps are available?",
"right": "You can see all the Co-op Cloud app \"recipes\" in [the online, live-updated recipe catalogue](https://recipes.coopcloud.tech/). Among these are Nextcloud, Jitsi, Mediawiki, Rocket.chat and many more!"
"right": "You can see all the Co-op Cloud app \"recipes\" in [the online, live-updated recipe catalogue](https://dev.apps.coopcloud.tech/). Among these are Nextcloud, Jitsi, Mediawiki, Rocket.chat and many more!"
},
{
"left": "What about other alternatives?",

View File

@ -1,3 +0,0 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json"
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 245 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 146 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 KiB

Binary file not shown.

View File

@ -35,11 +35,11 @@
"deprecated": false,
"description": "Modern CSS framework based on Flexbox",
"devDependencies": {
"autoprefixer": "^10.0.0",
"clean-css-cli": "^5.0.0",
"node-sass": "^9.0.0",
"autoprefixer": "^9.8.6",
"clean-css-cli": "^4.3.0",
"node-sass": "^4.14.1",
"postcss-cli": "^7.1.2",
"rimraf": "^5.0.0"
"rimraf": "^3.0.2"
},
"files": [
"css",

View File

@ -324,11 +324,6 @@ div.thumbnail {
.autonomic {
display: flex;
justify-content: space-between;
@media (max-width: 800px) {
.column.is-one-quarter.is-full-mobile {
flex: unset;
}
}
}
.cofunders {
@ -337,21 +332,21 @@ div.thumbnail {
.client-logos {
margin-top: 4rem;
display: grid;
grid-template-columns: 1fr 1fr 1fr;
@media (max-width: 480px) { grid-template-columns: 1fr 1fr; }
place-items: center;
gap: 1rem;
img {
object-fit: contain;
padding: 1.5rem;
height: 150px;
display: flex;
flex-direction: column;
justify-content: center;
gap: 3rem;
.first-row{
display: grid;
grid-template-columns: 1fr 1fr 1fr;
place-items: center;
}
.second-row {
display: flex;
justify-content: center;
}
}
}
}
.highlight {
margin-bottom: 1rem;
}
}

View File

@ -8,9 +8,5 @@
<p>
Copyleft {{ now.Format "2006"}} Autonomic Cooperative
</p>
<!-- NOTE(d1): for https://social.coop/settings/verification
due to requiring 'rel="me"', we can't stuff this in the config.toml -->
<a style="display:none;" rel="me" href="https://social.coop/@coopcloud">Mastodon</a>
</div>
</footer>

View File

@ -1,6 +1,6 @@
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
{{ $title := print .Site.Title " | " .Title }}
{{ if .IsHome }}{{ $title = .Site.Title }}{{ end }}
{{/* scss compiling */}}
@ -8,12 +8,8 @@
{{ $style := resources.Get "scss/main.scss" | resources.ToCSS $options }}
{{ template "_internal/opengraph.html" . }}
{{ template "_internal/twitter_cards.html" . }}
<link href='{{ $style.RelPermalink }}' rel="stylesheet" />
{{ with .OutputFormats.Get "rss" -}}
{{ printf `<link rel=%q type=%q href=%q title=%q />` .Rel .MediaType.Type .Permalink site.Title | safeHTML }}
{{ end }}
<meta name="go-import" content="coopcloud.tech/tagcmp git https://git.coopcloud.tech/coop-cloud/tagcmp" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link href='{{ $style.RelPermalink }}' rel="stylesheet">
<meta name="go-import" content="coopcloud.tech/tagcmp git https://git.coopcloud.tech/coop-cloud/tagcmp">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>{{ $title }}</title>
</head>

View File

@ -21,23 +21,25 @@
</div>
<div class="client-logos">
<div>
<a href="https://www.neuronicgames.com/"><img src='/logos/neuronic-games.png'></a>
<div class="first-row">
<div>
<a href="https://www.neuronicgames.com/"><img src='/logos/neuronic-games.png'></a>
</div>
<div>
<a href="https://www.fashionrevolution.org/"><img src='/logos/fashion-rev.svg' height="150px"></a>
</div>
<div>
<a href="https://biobulkbende.org/"><img src='/logos/biobulkbende.png'></a>
</div>
</div>
<div>
<a href="https://www.fashionrevolution.org/"><img src='/logos/fashion-rev.svg'></a>
</div>
<div>
<a href="https://biobulkbende.org/"><img src='/logos/biobulkbende.png'></a>
</div>
<div>
<a href="https://www.thirdsectoraccountancy.coop/"><img src='/logos/third-sector-accountancy.svg'></a>
</div>
<div>
<a href="https://anarchyrules.info/"><img src='/logos/anarchy-rules.png'></a>
</div>
<div>
<a href="https://culturalfoundation.eu/"><img src="/logos/ecf.png" alt="European Cultural Foundation"></a>
<div class="second-row">
<div>
<a href="https://www.thirdsectoraccountancy.coop/"><img src='/logos/third-sector-accountancy.svg' style="height:150px;"></a>
</div>
<div>
<a href="https://anarchyrules.info/"><img src='/logos/anarchy-rules.png' style="height:150px;"></a>
</div>
</div>
</div>
</div>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB