Compare commits

..

29 commits
rework ... main

Author SHA1 Message Date
eb25ebba72 update list of things we do
All checks were successful
Hugo / build (push) Successful in -2s
2024-10-29 17:16:58 -04:00
8bcb2a411a update wording and art, bump theme version 2024-10-29 17:14:58 -04:00
b39c18cee1 update mastodon verification
All checks were successful
Hugo / build (push) Successful in 8s
2024-07-24 19:23:05 -04:00
9c249b921d add mastodon verification
All checks were successful
Hugo / build (push) Successful in 12s
2024-07-08 22:47:47 -04:00
737e2cd9f6 update theme
All checks were successful
Hugo / build (push) Successful in 6s
2024-07-06 17:16:59 -04:00
3c78ad0da4 update OG
All checks were successful
Hugo / build (push) Successful in 9s
2024-07-06 17:16:08 -04:00
ad3acbc2c0 bump version, switch naming of actions folder
All checks were successful
Hugo / build (push) Successful in 6s
2024-06-19 00:24:18 -04:00
5e394b74a0 bump theme
All checks were successful
Hugo / build (push) Successful in 6s
2024-06-18 19:04:59 -04:00
8bc29c81c9 bump theme version
All checks were successful
Hugo / build (push) Successful in 6s
2024-06-18 18:38:44 -04:00
8e6d5e4d25 bump version
All checks were successful
Hugo / build (push) Successful in 9s
2024-06-18 01:47:07 -04:00
9461570924 update theme, remove tags/catgegories page
All checks were successful
Hugo / build (push) Successful in 8s
2024-06-17 15:45:11 -04:00
36c9737034 update
All checks were successful
Hugo / build (push) Successful in 7s
2024-06-16 16:17:54 -04:00
bfc38ea8e2 update
Some checks failed
Hugo / build (push) Failing after 2s
2024-06-16 16:16:16 -04:00
bc12631d29 update
All checks were successful
Hugo / build (push) Successful in 7s
2024-06-16 06:02:42 -04:00
3b3bbaa82c update
All checks were successful
Hugo / build (push) Successful in 7s
2024-06-16 04:19:01 -04:00
337c972f2d update
All checks were successful
Hugo / build (push) Successful in 7s
2024-06-16 04:09:06 -04:00
35e5619cfd add contact info
All checks were successful
Hugo / build (push) Successful in 9s
2024-06-16 04:07:41 -04:00
7559e1bf91 switch to main branch instead of commit for submodule
All checks were successful
Hugo / build (push) Successful in 7s
2024-06-16 03:46:10 -04:00
9ad8d4b08b update theme
All checks were successful
Hugo / build (push) Successful in 10s
2024-06-16 03:41:32 -04:00
26243d155d update theme
All checks were successful
Hugo / build (push) Successful in 8s
2024-06-16 03:39:45 -04:00
4f46e37612 update theme
All checks were successful
Hugo / build (push) Successful in 7s
2024-06-16 03:32:00 -04:00
f0ff7dc09f update theme submodule
All checks were successful
Hugo / build (push) Successful in 7s
2024-06-16 03:22:34 -04:00
cdcdba8488 update theme
All checks were successful
Hugo / build (push) Successful in 9s
2024-06-16 03:13:24 -04:00
a04b0e3b7d update link
All checks were successful
Hugo / build (push) Successful in 7s
2024-06-16 03:04:46 -04:00
be3f6c8d88 add content
All checks were successful
Hugo / build (push) Successful in 10s
2024-06-16 01:06:28 -04:00
620cb2f074 remove files, add node files, add submodule 2024-06-15 22:38:51 -04:00
4d565dbfd4 remove outdated files to prep for maintenance page 2024-06-15 22:33:01 -04:00
brooke
ca1d1ce3b7 Update .gitea/workflows/deploy.yaml
All checks were successful
Hugo / build (push) Successful in 47s
2024-05-07 21:38:03 +00:00
brooke
471e0aee42 Update .gitea/workflows/deploy.yaml
All checks were successful
Hugo / build (push) Successful in 54s
2024-05-07 19:39:49 +00:00
34 changed files with 75 additions and 2457 deletions

View file

@ -9,15 +9,11 @@ jobs:
build: build:
runs-on: hugo-latest runs-on: hugo-latest
steps: steps:
- name: Grab packages
run: apt install -y rsync openssh-client
- uses: actions/checkout@v4 - uses: actions/checkout@v4
with: with:
submodules: 'true' submodules: "true"
- name: Run build task - name: Run build task
run: hugo --minify run: hugo --minify
- name: Test static page
run: bash ${{ gitea.workspace }}/bin/test_static_page.sh
- name: Deploy to Server - name: Deploy to Server
uses: https://git.myco.systems/mirrors/ssh-deploy@main uses: https://git.myco.systems/mirrors/ssh-deploy@main
env: env:
@ -27,10 +23,3 @@ jobs:
REMOTE_HOST: ${{ secrets.REMOTE_HOST }} REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }} REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: ${{ secrets.REMOTE_TARGET }} TARGET: ${{ secrets.REMOTE_TARGET }}
- name: Running Page Speed Insights
uses: https://github.com/JakePartusch/psi-action@v1.3
id: drafting
with:
url: "https://web.myco.systems"
threshold: 70
strategy: desktop

View file

@ -1,36 +0,0 @@
name: Hugo
on:
push:
branches:
- rework
jobs:
build:
runs-on: hugo-latest
steps:
- name: Grab packages
run: apt install -y rsync openssh-client
- uses: actions/checkout@v4
with:
submodules: 'true'
- name: Run build task
run: hugo --minify
- name: Test static page
run: bash ${{ gitea.workspace }}/bin/test_static_page.sh
- name: Deploy to Server
uses: https://git.myco.systems/mirrors/ssh-deploy@main
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
ARGS: "-rlgoDzvc -i --delete"
SOURCE: "public/"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: ${{ secrets.DEMO_REMOTE_TARGET }}
- name: Running Page Speed Insights
uses: https://github.com/JakePartusch/psi-action@v1.3
id: drafting
with:
url: "https://web.demo.myco.systems"
threshold: 70
strategy: desktop

2
.gitignore vendored
View file

@ -11,4 +11,6 @@ hugo.linux
# Temporary lock file while building # Temporary lock file while building
/.hugo_build.lock /.hugo_build.lock
# node modules
node_modules node_modules

23
.gitmodules vendored
View file

@ -1,20 +1,3 @@
[submodule "themes/blowfish"] [submodule "themes/hugo-maintenance"]
path = themes/blowfish path = themes/hugo-maintenance
url = https://github.com/nunocoracao/blowfish.git url = https://git.myco.systems/mycosystems/hugo-maintenance.git
branch = main
[submodule "static/styles"]
path = static/styles
url = https://git.myco.systems/mycosystems/styles.git
branch = main
[submodule "static"]
path = static
url = https://git.myco.systems/mycosystems/favicons.git
[submodule "assets/img"]
path = assets/img
url = https://git.myco.systems/mycosystems/images.git
[submodule "static/f"]
path = static/f
url = https://git.myco.systems/mycosystems/favicons.git
[submodule "static/i"]
path = static/i
url = https://git.myco.systems/mycosystems/backgrounds.git

View file

@ -1,15 +0,0 @@
{
"plugins": [
"prettier-plugin-go-template"
],
"overrides": [
{
"files": [
"*.html"
],
"options": {
"parser": "go-template"
}
}
]
}

View file

@ -1,42 +1,15 @@
# web.myco.systems # web.myco.systems
### Start developing mycosystems client site, maintenance page
``` ```
git clone https://git.myco.systems/mycosystems/web.myco.systems.git git clone https://git.myco.systems/mycosystems/web.myco.systems.git
``` ```
``` ```
git fetch
```
```
git switch rework
```
```
git submodule update --init --recursive git submodule update --init --recursive
``` ```
Optionally we recommend installing prettier, the prettierrc file is preconfigured to use the go template plugin.
```
npm install --save-dev prettier prettier-plugin-go-template
```
### Writing articles
- [ ] Grammar checked
- [ ] Spelling checked
- [ ] Title fits the article
- [ ] folder name is short and fits the title
- [ ] Lead and description are populated and fit the article
#### New Articles
When starting a new article or page, use the command `hugo new content` This will create a new folder and markdown file with frontmatter for a title and description; under the frontmatter is a lead. The lead is to substitute the description; as the description is only used for OG, the lead will display under the title when a user is reading that article.
```
hugo new content content/new-page/index.md
```
#### Editing/Reviewing Articles
When reviewing, an article should have a fitting title, the folder should match the name of the article (The folder decides the name of the articles's slug), and there should be a description and lead that are fitting to the article.
# License: # License:
[MIT](https://git.myco.systems/mycosystems/web.myco.systems/src/branch/main/LICENSE), thank you to the people over at [Blowfish](https://blowfish.page) Body text and articles are under [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)
Theme files are under MIT [as licensed by MycoSystems](https://git.myco.systems/mycosystems/hugo-maintenance)

View file

@ -1,8 +0,0 @@
---
title: "{{ replace .Name "-" " " | title }}"
draft: true
description: ""
---
{{< lead >}}
{{< /lead >}}

@ -1 +0,0 @@
Subproject commit e797ede26496387d4c7667d1bcad3a77104864f5

View file

@ -1,26 +0,0 @@
#!/bin/bash
PORT=21300
python3 -m http.server $PORT --directory public/ &
SERVER_PID=$!
# Give it a moment to start
sleep 2
# Check if the server is running
if [ ! -d "/proc/$SERVER_PID" ]; then
echo "HTTP server failed to start."
exit 1
fi
# Check HTTP status
status_code=$(curl -o /dev/null -s -w "%{http_code}" http://localhost:$PORT)
# Kill the http server
kill $SERVER_PID
# Check if status code is 200
if [ "$status_code" -ne 200 ]; then
echo "Website returned a non-200 status code: $status_code"
exit 1
fi

34
config.yaml Normal file
View file

@ -0,0 +1,34 @@
theme: hugo-maintenance
baseURL: https://web.myco.systems/
defaultContentLanguage: en
params:
openGraph:
title: "MycoSystems web"
image: ""
description: |
Building a more open and equitable internet, starting with your organization. No more bloated websites, licensing fees, or shady proprietary software, we want to help you and your organization switch to a no-bullshit model of internet infrastructure.
url: "https://web.myco.systems/"
title: "MycoSystems web"
body: |
Building a more open and equitable internet, starting with your organization. No more bloated websites, licensing fees, or shady proprietary software, we want to help you and your organization switch to a no-bullshit model of internet infrastructure.
faq:
- question: "Why does your website look like this?"
answer: "Our pretty site is currently under construction."
- question: "What do y'all do?"
answer: "We have experience in designing and hosting websites. We also provide managed hosting for web analytics, business management software, and content management systems like Wordpress, Ghost, etc. So, please get in contact with project details, we'd love to help!"
contact:
- service: "e-mail"
input: "contact@myco.systems"
asciiArt: 5
theme: default
disableKinds:
- taxonomy
ignoreErrors:
- error-disable-taxonomy

View file

@ -1,57 +0,0 @@
theme = "blowfish"
baseURL = "https://web.demo.myco.systems/"
defaultContentLanguage = "en"
enableRobotsTXT = false
paginate = 100
summaryLength = 30
buildDrafts = false
buildFuture = false
[imaging]
anchor = 'Center'
[taxonomies]
tag = "tags"
category = "categories"
author = "authors"
series = "series"
[sitemap]
changefreq = 'always'
filename = 'sitemap.xml'
priority = 0.5
[outputs]
home = ["HTML"]
[related]
threshold = 0
toLower = false
[[related.indices]]
name = "tags"
weight = 100
[[related.indices]]
name = "categories"
weight = 100
[[related.indices]]
name = "series"
weight = 50
[[related.indices]]
name = "authors"
weight = 20
[[related.indices]]
name = "date"
weight = 10
[[related.indices]]
applyFilter = false
name = 'fragmentrefs'
type = 'fragments'
weight = 10

View file

@ -1,19 +0,0 @@
languageCode = "en"
languageName = "English"
weight = 1
title = "MycoSystems Co-Op"
[params]
displayName = "EN"
isoCode = "en"
rtl = false
dateFormat = "2 January 2006"
description = "Hi, welcome to MycoSystems Web!"
copyright = "Articles are copyleft, no rights reserved. Thank you to the devs @ [Blowfish](https://blowfish.page)"
[author]
name = "MycoSystems"
image = "/img/logos/blue.png"
headline = "Hi, welcome to MycoSystems Web!"
bio = "Hi, welcome to MycoSystems Web!"
#links = [{ github = "https://git.myco.systems/explore" }]

View file

@ -1,10 +0,0 @@
[goldmark]
[goldmark.renderer]
unsafe = true
[highlight]
noClasses = false
[tableOfContents]
startLevel = 2
endLevel = 4

View file

@ -1,45 +0,0 @@
[[main]]
name = "Services"
pageRef = "services"
weight = 10
# [[main]]
# name = "Stacks"
# pageRef = "stacks"
# weight = 20
[[main]]
name = "Showcase"
pageRef = "showcase"
weight = 30
[[main]]
name = "Tracking"
pageRef = "logs"
weight = 40
[[footer]]
identifier = "github"
pre = "github"
url = "https://git.myco.systems/explore"
weight = 400
[[footer]]
name = "Services"
pageRef = "services"
weight = 10
[[footer]]
name = "Showcase"
pageRef = "showcase"
weight = 20
# [[footer]]
# name = "Stacks"
# pageRef = "stacks"
# weight = 30
[[footer]]
name = "Tracking"
pageRef = "logs"
weight = 40

View file

@ -1,113 +0,0 @@
colorScheme = "forest"
defaultAppearance = "dark"
autoSwitchAppearance = true
enableSearch = false
enableCodeCopy = true
mainSections = ["services"]
disableImageOptimization = false
defaultBackgroundImage = "img/single-brick.jpeg"
defaultFeaturedImage = "img/single-brick.jpeg"
highlightCurrentMenuArea = true
smartTOC = true
smartTOCHideUnfocusedChildren = false
[header]
layout = "fixed"
[footer]
showMenu = true
showCopyright = true
showThemeAttribution = false
showAppearanceSwitcher = false
showScrollToTop = true
[homepage]
layout = "background"
homepageImage = "img/single-brick.jpeg"
showRecent = true
showRecentItems = 6
showMoreLink = false
showMoreLinkDest = "services"
cardView = true
cardViewScreenWidth = false
layoutBackgroundBlur = true
[article]
showDate = false
showViews = false
showLikes = false
showDateUpdated = false
showAuthor = false
showHero = true
heroStyle = "background"
layoutBackgroundBlur = true
showBreadcrumbs = true
showDraftLabel = true
showEdit = false
editAppendPath = false
seriesOpened = false
showHeadingAnchors = true
showPagination = true
invertPagination = false
showReadingTime = true
showTableOfContents = true
showRelatedContent = true
relatedContentLimit = 6
showTaxonomies = true
showAuthorsBadges = true
showWordCount = false
showSummary = true
sharingLinks = ["linkedin", "twitter", "email"]
[list]
showHero = true
heroStyle = "background"
layoutBackgroundBlur = true
layoutBackgroundHeaderSpace = false
showBreadcrumbs = false
showSummary = false
showViews = true
showLikes = true
showTableOfContents = true
showCards = true
groupByYear = false
cardView = true
cardViewScreenWidth = false
constrainItemsWidth = true
[sitemap]
excludedKinds = ["taxonomy", "term"]
[taxonomy]
showTermCount = true
showHero = true
heroStyle = "background"
showBreadcrumbs = false
showViews = true
showLikes = true
showTableOfContents = true
cardView = false
[term]
showHero = true
heroStyle = "background"
showBreadcrumbs = false
showViews = true
showLikes = true
showTableOfContents = true
groupByYear = false
cardView = true
cardViewScreenWidth = false
[firebase]
[fathomAnalytics]
[buymeacoffee]
[verification]

View file

@ -1,10 +0,0 @@
**Building a more open and equitable internet, starting with your organization.**
**No more bloated websites, licensing fees, or shady proprietary software,
we want to help you and your organization switch to a no-bullshit model of internet infrastructure.**
**Take a look around, and learn about our 100% open-source solutions for websites and IT systems.**
<a href="mailto:interfacing@myco.systems">
<button id="contact-button" class="px-4 !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700" style="width: 100%;font-weight: bold;font-size: large;" >Contact Us!</button>
</a>

View file

@ -1,36 +0,0 @@
---
title: "Logging Policies"
description: "How we log."
layoutBackgroundHeaderSpace: false
cascade:
showDate: false
showAuthor: false
invertPagination: true
showLikes: false
showViews: false
---
## No Cookies, NGINX Logs
We do not use cookies on any of our websites. Instead, we primarily use NGINX logs. Here's an example of what a user looks like to us:
```
[16/Apr/2024:18:50:17 -0700] "https://web.myco.systems/" 200 5929 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/123.0"
```
### Log breakdown:
- **Date:** 16th April, 2024, 6:50:17 PM (GMT-7 timezone)
- **URL:** https://web.myco.systems/
- **Response Code:** 200 (success)
- **Response Size:** 5929 bytes
- **User Agent:** Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/123.0
### We explicitly do not collect the following information:
- **IP addresses**
- **How long users spend on a page**
- **Site referrers**
We do not sell data to 3rd parties, our log retention policy is to wipe logs older than 180 days.

View file

@ -1,17 +0,0 @@
---
title: "Services"
description: "Learn what we can do for your company."
cascade:
showDate: false
showAuthor: false
invertPagination: true
showLikes: false
showViews: false
---
{{< lead >}}
Simple, yet powerful. Learn how to use complex open-source tools.
{{< /lead >}}
Never worry about renewing a license, open-source projects can be incredibly useful for small and medium sized companies/orginizations. Don't just settle for "good enough" we help you get a secure and powerful suite of software running on your own server or managed through our secure cloud.

View file

@ -1,33 +0,0 @@
---
title: "Personalized Cloud Deployments"
draft: false
description: "Develop and deploy a personal cloud for home or business."
---
{{< lead >}}
It's time to take control of your data, services, and even your organization's online presence with a personal cloud.<br><br>Websites, web apps, and much more hosted on your own hardware.
{{< /lead >}}
Whether you're managing servers in an office, home, or data center, we're here to guide you through the process of turning your VPS, on-site, and collocated hardware into a versatile personalized cloud and gateway to your organization's digital ecosystem.
### Office Apps
Think Office 365, Google Drive, or iCloud. We can help you deploy a full suite of applications to fill the basic needs of any office:
- [**oCIS**](https://owncloud.com/infinite-scale-4-0/) — Written in Golang, oCIS is a highly efficient and scalable file synchronization server. oCIS cleanly integrates with fully featured document editors similar to Word and Excel.
- [**Grist**](https://www.getgrist.com/) — Started in 2014, Grist is a spreadsheet application for databases with millions of rows and features hundreds of available integrations and templates.
- [**TwentyCRM**](https://twenty.com/) — A simple, sleek, CRM platform that helps manage customer relationships, sales, and marketing efforts.
### Archival & Digital Preservation
We want to help your organization build datasets internally or serve them to the public:
- [**CKAN**](https://ckan.org/) — Fully customizable data management system (DMS) that can scale from a dozen datasets to hundreds of millions. CKAN is more than 17 years old now and is trusted by thousands of organizations and governments.
- [**Paperless-ngx**](https://docs.paperless-ngx.com/) — Organize, index, and build datasets and archives. Paperless supports over 100 languages using the Tesseract OCR engine and can ingress almost any text file type for full-text search.
### Software Development
Say goodbye to Github Actions and Codespaces. We can assist you in deploying your own development environments, hosting your code, and managing CI/CD pipelines:
- [**Daytona**](https://www.daytona.io/) — Quickly get developers onboarded and coding with daytona development environments, create the environment with all of your dependencies once and sync it across all workspaces.
- [**Forgejo**](https://forgejo.org/) — Host your git repositories with confidence on Forgejo, a highly performant and low maintenance git server featuring a built-in [Actions server](https://forgejo.org/docs/next/user/actions/) compatible with Github Actions.
- [**Bencher**](https://bencher.dev/) — Quickly catch regressions in your CI pipeline before it makes its way into a release. Bencher creates simple visualizations out of your code benchmarks so that you're always releasing a fast product.

View file

@ -1,24 +0,0 @@
---
title: "Fleet Device Hardening"
draft: false
description: "Learn how you could implement anonymized hardware."
---
{{< lead >}}
We want to help your organization prepare fleet devices to uphold a high standard of security for your users.
{{< /lead >}}
Preloading your organization's devices with a secure and private operating system can help foster a safe environment for you and your user's data. The end result of this process will be a collection of secure, completely anonymized hardware.
### Android
CalyxOS and GrapheneOS are two of the most reputable custom ROMs for Android devices, focused on privacy and security. Both ROMs offer a range of features that allow users to take control of their device's data and prevent unauthorized access.
- [**CalyxOS**](https://calyxos.org/) — Developed by Calyx Institute, this open-source operating system offers basic security features to keep your user's data safe while also being as recognizable to stock Android. Like GrapheneOS, Calyx supports on-device encryption, regular security updates, and sandboxing apps in a "Work" profile.
- [**GrapheneOS**](https://grapheneos.org/) — Developed by Daniel Micay, is a hardened Android-based operating system featuring enhanced sandboxing and secure element support. GrapheneOS's strong focus on reducing the Android attack surface by disabling unneeded features and services sets it apart from other privacy-focused operating systems including CalyxOS. But, may feature a steeper learning curve compared to CalyxOS.
### Desktop Linux Distributions
- [**Qubes OS**](https://www.qubes-os.org/) — Qubes OS is a security-focused operating system that compartmentalizes different tasks into separate virtual machines (VMs) called "AppVMs" or "qubes." This approach provides an additional layer of isolation, creating a more dynamic attack surface.
- [**Tails OS**](https://tails.net/) — Tails is a live operating system that leaves no trace on the host computer. It routes all internet traffic through the Tor network by default, protecting users' anonymity. Preloaded with privacy-focused applications, Tails OS offers a comprehensive solution for secure communication with a more device agnostic design.

View file

@ -1,39 +0,0 @@
---
title: "Hardware Installation"
draft: false
description: "Learn how MycoSystems can help improve your business workflow through their hardware installation services."
---
## Introduction
In this article, we will cover the benefits of our hardware installation services and how they can help your business or organization succeed.
## The Importance of Network Attached Storage (NAS)
A NAS offers an efficient and centralized storage system that allows multiple users within a network to access and share files securely. This is particularly important for businesses with remote workers or those needing to store large amounts of data, such as renders, media files, and design projects. We can install and configure your NAS to ensure smooth file sharing and optimal performance for your entire organization, we have experience with many different operating systems to make sure maintainence is a breeze:
- **CasaOS** — a simple, easy to maintain, open source operating system to manage storage and services. It comes with many "one-click install" services that take most of the work out of maintaining a complex deployment for internal services.
- **TrueNAS Scale** — based on linux, TrueNAS Scale is a fast, efficient, and extensible NAS. TrueNAS allows you to maintain periodic tests on large clusters of drives, containers for easy deployment of services like Syncthing or Minio, and has some of the most in-depth documentation of any OS we have experience with.
## Secure Office VPNs for Remote Workers
Remote work has become increasingly popular in recent years, studies over the past 3 years have shown significant links to higher productivity, lower burnout rates, and high satisfaction overall when employees or co-owners can choose their own hours and work from an environment where they feel most comfortable.
However, ensuring the security of remote workers' connections is paramount. We offer a fully managed remote access VPN based on WireGuard & Rosenpass, a "post-quantum-secure" encryption method. We also fully understand how important self-management is for small and medium-sized companies, so we provide deployments using [Firezone](https://www.firezone.dev/) and [netbird](https://netbird.io/) either fully managed by MycoSystems or managed by your own IT. Both pieces of software offer superior control over WireGuard without draining engineer time; both let you connect multiple private networks like offices, datacenters, etc. Both allow users to run client applications on Android, iOS, Linux, Windows, macOS, BSD, etc.
## Internal Clusters for Enhanced Compute
Processing large amounts of data and creating high-quality outputs require significant computational power in some cases.
We offer hardware installation services designed to help organizations create internal clusters that can distribute rendering tasks across multiple machines, greatly improving efficiency and speeding up the render process. This means faster turnaround times for projects.
What kind of software do we support?
- **Adobe Media Encoder**
- **Blender**
- **Meshroom**
- **NerfStudio**
- **Forgejo/Drone CI Actions**
#### Contact us today to learn more about how we can help streamline your workflow and improve productivity across your organization.

View file

@ -1,49 +0,0 @@
---
title: "Hosting"
draft: false
description: "Learn about our web hosting offerings."
---
### Static Sites
We present a simple solution for scalable website deployments featuring a location based [Anycast](https://www.cloudflare.com/learning/cdn/glossary/anycast-network/) network. We use Anycast to serve your website from the closest available server. Your static sites are delivered from up to 4 regions:
- **Asia**
- **Europe**
- **US-East**
- **US-West**
Deployment is done using a [Continuous Integration](https://en.wikipedia.org/wiki/Continuous_integration) service such as [Act](https://github.com/nektos/act), DroneCI, Gitlab CI, etc. Your site will be pushed to every server when you merge your changes into the main branch of your repository. **Does your team not know how to use git?** Ask us about hosting a CMS like [Sveltia](https://github.com/sveltia/sveltia-cms) or [Directus](https://directus.io/) that integrates with your CI pipeline.
### Backend Services
We provide the capability to operate game servers, VOIP systems, or any other latency-sensitive service using Anycast technology for a nominal cost.
If you don't require a heavy load service and simply need a data storage solution, we offer Docker hosts situated in our US-East and US-West data centers. These enable you to efficiently manage and deploy your service or database without incurring the high management fees associated with major cloud providers like AWS, Azure, or Digital Ocean.
### DDoS Protection
Across all ingress points we use Path.net DDoS protection, providing your website with up to 3.5+ Tbits/s of flood protection. If you have a particularly volnerable service you need to protect, they have specialized profiles for:
#### Volumetric Attacks
- TCP Flood Attacks
- HTTP GET/POST Floods
- UDP Flood Attacks
- UDP Fragmentation Attacks
- XORDDOS
#### Reflective Attacks
- NTP Amplification
- DNS Amplification
- Chargen Responses
- SSDP/UPNP Responses
- SNMP Responses
#### Resource Exhaustion Attacks
- Invalid port numbers
- Private IP address attacks
- Slow HTTP requests (Slowloris, RUDY, etc)
- HOIC, and LOIC
- SYN, Spoofed SYN, SYN-ACK floods, etc
[Source](https://buyvm.net/ddos-protection/)

View file

@ -1,6 +0,0 @@
---
title: "Privacy Consulting"
draft: false
description: "Learn how to build Blowfish manually."
---

View file

@ -1,17 +0,0 @@
---
title: "Web Development & Design"
draft: false
description: "Learn how we can help you build fast and beautiful websites."
---
We present a simple solution for scalable websites, with the use of a static site CMS (i.e. [Decap CMS](https://github.com/decaporg/decap-cms), [Static CMS](https://github.com/StaticJsCMS/static-cms), [Sveltia](https://github.com/sveltia/sveltia-cms)), an optional analytics platform like [Plausible](https://github.com/plausible/analytics), and a static site generator (i.e. [Hugo](https://github.com/gohugoio/hugo) or [Jekyll](https://github.com/jekyll/jekyll)) you can quickly and efficiently deploy new pages to a website with a pipeline that works for you.
### Why static sites? And, why this stack?
- **Full In-House Control** — Your data, your rules. Nothing is obfuscated, and all important details are at your fingertips. No data is collected of you or your users, Plausible is not just GDPR complaint but collects truly generalized data that still allows you to get the information you need without sacrificing user privacy.
- **Version Control & Portability** — All your code resides in a Git repository alongside your content and a static site CMS is built to run CI/CD for your git repository. This means you can easily track all changes made to your website and quickly deploy it to a new server during an outage or upgrade.
- **Customization** — Hugo brings a world of customization to your fingertips. Choose from a wide array of prebuilt themes or engage our team to draft a theme from scratch, perfectly tailored to you. We want to make it easy for your organization to have a snappy and reliable web presence. [Take a look at the theme we used for this website](https://blowfish.page/).
- **Usability** — Don't sacrifice the usability afforded by tools like WordPress, most static site content management platforms we use and recommend provide a helpful UI to walk you through the process of managing your website. [Static CMS demo](https://demo.staticcms.org/).

View file

@ -1,33 +0,0 @@
---
title: "Showcase"
description: "Learn what we can do for your company."
layoutBackgroundHeaderSpace: false
cascade:
showDate: false
showAuthor: false
invertPagination: true
showLikes: false
showViews: false
showTableOfContents: false
showBreadcrumbs: true
---
{{< timeline >}}
{{< timelineItem icon="link" header="B2B facing static site" subheader="Click image to expand" >}}
<img style="border-radius:5px;margin:0px !important;" src="img/showcase/bellaskeys.png"/>
<a href="https://git.myco.systems/mycosystems/bellaskeys.com" target="_blank" >View the page source</a>
{{< /timelineItem >}}
{{< timelineItem icon="link" header="Light & accessible blog" subheader="Click image to expand" >}}
<img style="border-radius:5px;margin:0px !important;" src="img/showcase/mycoop.png"/>
<a href="https://git.myco.systems/mycosystems/coop.myco.systems" target="_blank" >View the page source</a>
{{< /timelineItem >}}
{{< timelineItem icon="link" header="Custom stylized org homepage" subheader="Click image to expand" >}}
<img style="border-radius:5px;margin:0px !important;" src="img/showcase/mycomain.png"/>
<a href="https://git.myco.systems/mycosystems/myco.systems" target="_blank" >View the page source</a>
{{< /timelineItem >}}
{{< /timeline >}}

View file

@ -1,185 +0,0 @@
{{ define "main" }}
{{ .Scratch.Set "scope" "single" }}
<article>
{{ if .Params.showHero | default (.Site.Params.article.showHero | default false) }}
{{ $heroStyle := .Params.heroStyle }}
{{ if not $heroStyle }}
{{ $heroStyle = .Site.Params.article.heroStyle }}
{{ end }}
{{ $heroStyle := print "partials/hero/" $heroStyle ".html" }}
{{ if templates.Exists $heroStyle }}
{{ partial $heroStyle . }}
{{ else }}
{{ partial "partials/hero/basic.html" . }}
{{ end }}
{{ end }}
<header id="single_header" class="mt-5 max-w-prose">
{{ if .Params.showBreadcrumbs | default (.Site.Params.article.showBreadcrumbs | default false) }}
{{ partial "breadcrumbs.html" . }}
{{ end }}
<h1
class="mt-0 text-4xl font-extrabold text-neutral-900 dark:text-neutral"
>
{{ .Title | emojify }}
</h1>
<div
class="mt-1 mb-6 text-base text-neutral-500 dark:text-neutral-400 print:hidden"
>
{{ partial "article-meta/basic.html" (dict "context" . "scope" "single") }}
</div>
{{ $authorsData := .Site.Data.authors }}
{{ $taxonomies := .Site.Taxonomies.authors }}
{{ $baseURL := .Site.BaseURL }}
{{ $taxonomyLink := 0 }}
{{ $showAuthor := 0 }}
{{ if not (strings.HasSuffix $baseURL "/") }}
{{ $baseURL = delimit (slice $baseURL "/") "" }}
{{ end }}
{{ if not (.Params.showAuthorBottom | default ( .Site.Params.article.showAuthorBottom | default false)) }}
{{ if .Params.showAuthor | default (.Site.Params.article.showAuthor | default true) }}
{{ $showAuthor = 1 }}
{{ partial "author.html" . }}
{{ end }}
{{ range $author := .Page.Params.authors }}
{{ $authorData := index $authorsData $author }}
{{- if $authorData -}}
{{ range $taxonomyname, $taxonomy := $taxonomies }}
{{ if (eq $taxonomyname $author) }}
{{ $taxonomyLink = delimit (slice $baseURL "/authors/" $author) "" }}
{{ end }}
{{ end }}
{{ partial "author-extra.html" (dict "context" . "data" $authorData "link" $taxonomyLink) }}
{{- end -}}
{{ end }}
{{ if or $taxonomyLink $showAuthor }}
<div class="mb-5"></div>
{{ end }}
{{ end }}
</header>
<section
class="flex flex-col max-w-full mt-0 prose dark:prose-invert lg:flex-row"
>
{{ if or (and (.Params.showTableOfContents | default (.Site.Params.article.showTableOfContents | default false)) (in
.TableOfContents "<ul")) (.Site.Params.article.showRelatedPosts | default false)
}}
<div
class="order-first lg:ml-auto px-0 lg:order-last ltr:lg:pl-8 rtl:lg:pr-8"
>
<div
class="toc ltr:pl-5 rtl:pr-5 print:hidden lg:sticky {{ if hasPrefix .Site.Params.header.layout "fixed" -}}
lg:top-[140px]
{{ else }}
lg:top-10
{{ end }}
"
>
{{ if and (.Params.showTableOfContents | default (.Site.Params.article.showTableOfContents | default false)) (in
.TableOfContents "<ul")
}}
{{ partial "toc.html" . }}
{{ end }}
{{ if .Site.Params.article.showRelatedPosts |
default false
}}
sd
{{ end }}
</div>
</div>
{{ end }}
<div class="min-w-0 min-h-0 max-w-fit">
{{ partial "series/series.html" . }}
<div class="article-content max-w-prose mb-20">
{{ .Content | emojify }}
<div>
<div
class="flex px-4 py-2 mb-8 text-base rounded-md bg-primary-100 dark:bg-primary-900"
>
<span
class="flex items-center justify-between grow dark:text-neutral-300"
><span class="prose dark:prose-invert"
>Like what you see? Drop us a message!</span
>
<a href="mailto:contact@myco.systems"
><button
class="px-4 !text-neutral !no-underline rounded-md bg-primary-600 hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
>
contact@myco.systems
</button></a
></span
>
</div>
</div>
</div>
{{ if (.Params.showAuthorBottom | default ( .Site.Params.article.showAuthorBottom | default false)) }}
{{ if .Params.showAuthor | default (.Site.Params.article.showAuthor | default true) }}
{{ $showAuthor = 1 }}
{{ partial "author.html" . }}
{{ end }}
{{ range $author := .Page.Params.authors }}
{{ $authorData := index $authorsData $author }}
{{- if $authorData -}}
{{ range $taxonomyname, $taxonomy := $taxonomies }}
{{ if (eq $taxonomyname $author) }}
{{ $taxonomyLink = delimit (slice $baseURL "/authors/" $author) "" }}
{{ end }}
{{ end }}
{{ partial "author-extra.html" (dict "context" . "data" $authorData "link" $taxonomyLink) }}
{{- end -}}
{{ end }}
{{ if or $taxonomyLink $showAuthor }}
<div class="mb-10"></div>
{{ end }}
{{ end }}
{{ partial "series/series-closed.html" . }}
{{ partial "sharing-links.html" . }}
{{ partial "related.html" . }}
</div>
{{ $translations := .AllTranslations }}
{{ with .File }}
{{ $path := .Path }}
{{ range $translations }}
{{ $lang := print "." .Lang ".md" }}
{{ $path = replace $path $lang ".md" }}
{{ end }}
<script>
var oid = "views_{{ $path }}"
var oid_likes = "likes_{{ $path }}"
</script>
{{ end }}
{{ $jsPage := resources.Get "js/page.js" }}
{{ $jsPage = $jsPage | resources.Minify | resources.Fingerprint "sha512" }}
<script
type="text/javascript"
src="{{ $jsPage.RelPermalink }}"
integrity="{{ $jsPage.Data.Integrity }}"
></script>
</section>
<footer class="pt-8 max-w-prose print:hidden">
{{ partial "article-pagination.html" . }}
</footer>
</article>
{{ end }}

View file

@ -0,0 +1,25 @@
<a rel="me" href="https://kolektiva.social/@eyess"></a>
<a rel="me" href="https://kolektiva.social/@brooke"></a>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width" />
<meta property="og:title" content="{{ .Site.Params.opengraph.title }}" />
<meta property="og:image" content="{{ .Site.Params.opengraph.image }}" />
<meta
property="og:description"
content="{{ .Site.Params.opengraph.description | html }}"
/>
<meta property="og:url" content="{{ .Permalink }}" />
<meta name="twitter:card" content="summary" />
<meta name="twitter:title" content="{{ .Site.Params.opengraph.title }}" />
<meta
name="twitter:description"
content="{{ .Site.Params.opengraph.description | html }}"
/>
<meta name="twitter:image" content="{{ .Site.Params.opengraph.image }}" />
<title>{{ .Site.Params.opengraph.title }}</title>
<link rel="canonical" href="{{ .Permalink }}" itemprop="url" />
{{ partialCached "head/css.html" . }}

View file

@ -1,171 +0,0 @@
<div style="padding-left:0;padding-right:0;padding-top:2px;padding-bottom:3px"
class="main-menu flex items-center justify-between px-4 py-6 sm:px-6 md:justify-start space-x-3">
{{ if .Site.Params.Logo }}
{{ $logo := resources.Get .Site.Params.Logo }}
{{ if $logo }}
<div>
<a href="{{ "" | relLangURL }}" class="flex">
<span class="sr-only">{{ .Site.Title | markdownify | emojify }}</span>
</a>
</div>
{{ end }}
{{- end }}
<div class="flex flex-1 items-center justify-between">
<nav class="flex space-x-3">
{{ if not .Site.Params.disableTextInHeader | default true }}
<a href="{{ "" | relLangURL }}" class="text-base font-medium text-gray-500 hover:text-gray-900">{{
.Site.Title | markdownify
| emojify }}</a>
{{ end }}
</nav>
<nav class="hidden md:flex items-center space-x-5 md:ml-12 h-12">
{{ if .Site.Menus.main }}
{{ range .Site.Menus.main }}
{{ partial "header/header-option.html" . }}
{{ end }}
{{ end }}
{{ partial "translations.html" . }}
{{ if .Site.Params.enableSearch | default false }}
<button id="search-button" aria-label="Search" class="text-base hover:text-primary-600 dark:hover:text-primary-400"
title="{{ i18n " search.open_button_title" }}">
{{ partial "icon.html" "search" }}
</button>
{{ end }}
{{ if .Site.Params.footer.showAppearanceSwitcher | default false }}
<div
class="{{ if .Site.Params.footer.showScrollToTop | default true -}} ltr:mr-14 rtl:ml-14 {{- end }} flex items-center">
<button id="appearance-switcher" aria-label="Dark mode switcher" type="button" class="text-base hover:text-primary-600 dark:hover:text-primary-400">
<div class="flex items-center justify-center dark:hidden">
{{ partial "icon.html" "moon" }}
</div>
<div class="items-center justify-center hidden dark:flex">
{{ partial "icon.html" "sun" }}
</div>
</button>
</div>
{{ end }}
</nav>
<div class="flex md:hidden items-center space-x-5 md:ml-12 h-12">
<span></span>
{{ partial "translations.html" . }}
{{ if .Site.Params.enableSearch | default false }}
<button id="search-button-mobile" aria-label="Search" class="text-base hover:text-primary-600 dark:hover:text-primary-400"
title="{{ i18n " search.open_button_title" }}">
{{ partial "icon.html" "search" }}
</button>
{{ end }}
{{ if .Site.Params.footer.showAppearanceSwitcher | default false }}
<button id="appearance-switcher-mobile" aria-label="Dark mode switcher" type="button" class="text-base hover:text-primary-600 dark:hover:text-primary-400" style="margin-right:5px">
<div class="flex items-center justify-center dark:hidden">
{{ partial "icon.html" "moon" }}
</div>
<div class="items-center justify-center hidden dark:flex">
{{ partial "icon.html" "sun" }}
</div>
</button>
{{ end }}
</div>
</div>
<div class="-my-2 -mr-2 md:hidden">
<label id="menu-button" for="menu-controller" class="block">
<input type="checkbox" id="menu-controller" class="hidden" />
{{ if .Site.Menus.main }}
<div class="cursor-pointer hover:text-primary-600 dark:hover:text-primary-400">
{{ partial "icon.html" "bars" }}
</div>
<div id="menu-wrapper" style="padding-top:5px;"
class="fixed inset-0 z-30 invisible w-screen h-screen m-0 overflow-auto transition-opacity opacity-0 cursor-default bg-neutral-100/50 backdrop-blur-sm dark:bg-neutral-900/50">
<ul
class="flex space-y-2 mt-3 flex-col items-end w-full px-6 py-6 mx-auto overflow-visible list-none ltr:text-right rtl:text-left max-w-7xl">
<li>
<span
class="cursor-pointer inline-block align-text-bottom hover:text-primary-600 dark:hover:text-primary-400">{{
partial
"icon.html"
"xmark" }}</span>
</li>
{{ range .Site.Menus.main }}
{{ partial "header/header-mobile-option.html" . }}
{{ end }}
</ul>
{{ if .Site.Menus.subnavigation }}
<hr>
<ul
class="flex mt-4 flex-col items-end w-full px-6 py-6 mx-auto overflow-visible list-none ltr:text-right rtl:text-left max-w-7xl">
{{ range .Site.Menus.subnavigation }}
<li class="mb-1">
<a href="{{ .URL }}" {{ if or (strings.HasPrefix .URL "http:" ) (strings.HasPrefix .URL "https:"
) }} target="_blank" {{ end }} class="flex items-center">
{{ if .Pre }}
<span {{ if and .Pre .Name}} class="mr-3" {{ end }}>
{{ partial "icon.html" .Pre }}
</span>
{{ end }}
<p class="text-sm font-sm text-gray-500 hover:text-gray-900" title="{{ .Title }}">
{{ .Name | markdownify | emojify }}
</p>
</a>
</li>
{{ end }}
</ul>
{{ end }}
{{ end }}
</div>
</label>
</div>
</div>
{{ if .Site.Menus.subnavigation }}
<div class="main-menu flex pb-3 flex-col items-end justify-between md:justify-start space-x-3" {{ if .Site.Params.Logo
}} style="margin-top:-15px" {{ end }}>
<div class="hidden md:flex items-center space-x-5">
{{ range .Site.Menus.subnavigation }}
<a href="{{ .URL }}" {{ if or (strings.HasPrefix .URL "http:" ) (strings.HasPrefix .URL "https:" ) }}
target="_blank" {{ end }} class="flex items-center">
{{ if .Pre }}
<span {{ if and .Pre .Name}} class="mr-1" {{ end }}>
{{ partial "icon.html" .Pre }}
</span>
{{ end }}
<p class="text-xs font-light text-gray-500 hover:text-gray-900" title="{{ .Title }}">
{{ .Name | markdownify | emojify }}
</p>
</a>
{{ end }}
</div>
</div>
{{ end }}
{{ if .Site.Params.highlightCurrentMenuArea }}
<script>
(function () {
var $mainmenu = $('.main-menu');
var path = window.location.pathname;
$mainmenu.find('a[href="' + path + '"]').each(function (i, e) {
$(e).children('p').addClass('active');
});
})();
</script>
{{ end }}

View file

@ -1,30 +0,0 @@
{{ $recentArticles := 5 }}
{{ $showMoreLinkDest := "/posts" }}
{{ if .Site.Params.homepage.showRecent | default false }}
{{ if index .Site.Params.homepage "showRecentItems" }}
{{ $recentArticles = .Site.Params.homepage.showRecentItems }}
{{ end }}
<h2 class="mt-8 text-2xl font-extrabold mb-10">Service Articles</h2>
{{ if and .Site.Params.homepage.cardView (not .Site.Params.homepage.cardViewScreenWidth) | default false }}
{{ partial "recent-articles/cardview.html" . }}
{{ else if and .Site.Params.homepage.cardView .Site.Params.homepage.cardViewScreenWidth | default false }}
{{ partial "recent-articles/cardview-fullwidth.html" . }}
{{ else }}
{{ partial "recent-articles/list.html" . }}
{{ end }}
{{ if .Site.Params.homepage.showMoreLink | default false }}
{{ if index .Site.Params.homepage "showRecentItems" }}
{{ $showMoreLinkDest = .Site.Params.homepage.showMoreLinkDest }}
{{ end }}
<div class="mt-10 flex justify-center">
<a href="{{ $showMoreLinkDest }}">
<button
class="bg-transparent hover:text-primary-500 prose dark:prose-invert font-semibold hover:text-white py-2 px-4 border border-primary-500 hover:border-transparent rounded">
{{ i18n "recent.show_more" | markdownify | emojify }}
</button>
</a>
</div>
{{ end }}
{{ end }}

1411
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,10 +1,6 @@
{ {
"dependencies": {
"caniuse-lite": "^1.0.30001620",
"tailwindcss": "^3.4.3"
},
"devDependencies": { "devDependencies": {
"prettier": "^3.2.5", "prettier": "^3.3.2",
"prettier-plugin-go-template": "^0.0.15" "prettier-plugin-go-template": "^0.0.15"
} }
} }

1
static

@ -1 +0,0 @@
Subproject commit 2a3eb1322ba55085fdb12a7659b73a1c6a4bf458

@ -1 +0,0 @@
Subproject commit f06bcb2a557cabf6071a78018304f323c71247cc

@ -0,0 +1 @@
Subproject commit b9d9b524931d887b4ed00019c2cead6b5c6506ff