Compare commits

..

54 commits
main ... rework

Author SHA1 Message Date
498f77b0c9 add npm packages, start working on a call to action button for articles, add hardware dep article
All checks were successful
Hugo / build (push) Successful in 1m6s
2024-05-30 17:32:19 -04:00
b8addf6071 update urls
All checks were successful
Hugo / build (push) Successful in 59s
2024-05-10 20:23:53 -04:00
3f49b8e57c update branch name in yaml
All checks were successful
Hugo / build (push) Successful in 56s
2024-05-10 20:20:58 -04:00
d506a75c10 add demo deploy file 2024-05-10 20:19:13 -04:00
2fd309b5ef update article title 2024-05-10 20:17:48 -04:00
e9a1e70da3 update article title
Some checks failed
Hugo / build (push) Failing after 3s
2024-05-10 20:16:00 -04:00
brooke
7eb41f9fff Update README.md
All checks were successful
Hugo / build (push) Successful in 26s
2024-04-28 23:28:32 +00:00
c7991495e4 Merge branch 'rework' of ssh://git.myco.systems:2200/mycosystems/web.myco.systems into rework
All checks were successful
Hugo / build (push) Successful in 29s
2024-04-28 19:23:54 -04:00
7f98d082c1 update default article template, device anon title, and readme for article reviews 2024-04-28 19:23:10 -04:00
afaf1444a5 update
All checks were successful
Hugo / build (push) Successful in 26s
2024-04-24 22:27:46 -04:00
230cc8fe23 update cloud deploy
All checks were successful
Hugo / build (push) Successful in 29s
2024-04-24 21:34:52 -04:00
89ae0a4614 start reworking cloud article
All checks were successful
Hugo / build (push) Successful in 30s
2024-04-22 20:50:04 -04:00
a90fc0e539 update device anon article 2024-04-22 20:24:30 -04:00
6b720e4007 Merge branch 'rework' of https://git.myco.systems/mycosystems/web.myco.systems into rework
All checks were successful
Hugo / build (push) Successful in 37s
2024-04-22 18:30:08 -04:00
a1e4de98a2 update log page 2024-04-22 18:29:40 -04:00
8043531b61 update readme
All checks were successful
Hugo / build (push) Successful in 38s
2024-04-19 16:00:43 -04:00
19cbca30c2 update logging page
All checks were successful
Hugo / build (push) Successful in 36s
2024-04-17 23:01:18 -04:00
4631a6ab6f update modules
All checks were successful
Hugo / build (push) Successful in 35s
2024-04-16 23:19:20 -04:00
b4b20bd8a6 setup progressive jpeg instead of PNG
All checks were successful
Hugo / build (push) Successful in 35s
2024-04-16 23:15:47 -04:00
cc3f33a59c remove stacks until there's articles written for them, add log menu item, remove header space
All checks were successful
Hugo / build (push) Successful in 36s
2024-04-16 22:40:30 -04:00
4f80678a41 log policy page 2024-04-16 22:30:29 -04:00
085298876e link to license
All checks were successful
Hugo / build (push) Successful in 1m14s
2024-04-16 21:48:08 -04:00
62fa3ae7c5 update links
All checks were successful
Hugo / build (push) Successful in 35s
2024-04-16 21:35:26 -04:00
742aff5260 remove unneeded override file 2024-04-16 21:31:03 -04:00
494d772f8e finalize re-organization 2024-04-16 21:30:53 -04:00
ce72bcecca redoing image layout
All checks were successful
Hugo / build (push) Successful in 25s
2024-04-16 21:27:33 -04:00
68e0c8cf10 update prettierrc
Some checks failed
Hugo / build (push) Failing after 6s
2024-04-16 21:19:24 -04:00
58b3b59c8e change around around file organization 2024-04-16 21:17:34 -04:00
fc56c807ee update links to images
All checks were successful
Hugo / build (push) Successful in 29s
2024-04-16 19:53:12 -04:00
fcab7aea63 add background images 2024-04-16 19:49:49 -04:00
34e7013656 add favicon repo 2024-04-16 19:44:35 -04:00
ef00516556 remove styles repo 2024-04-16 19:42:57 -04:00
3c7ca98709 update web hosting article
All checks were successful
Hugo / build (push) Successful in 27s
2024-04-16 19:33:56 -04:00
70e24ff862 update 2024-04-16 19:02:30 -04:00
1b4826f173 update
All checks were successful
Hugo / build (push) Successful in 33s
2024-04-16 15:43:46 -04:00
e91e43d1a3 fix favicons.html
All checks were successful
Hugo / build (push) Successful in 28s
2024-04-16 15:38:42 -04:00
17724e8442 update base url for demo 2024-04-16 15:31:05 -04:00
a9c945dd4e update script
All checks were successful
Hugo / build (push) Successful in 30s
2024-04-16 15:19:44 -04:00
43f0b8dc48 demo deploy
Some checks failed
Hugo / build (push) Failing after 1m9s
2024-04-16 15:16:47 -04:00
e85e739ba0 update stacks index and content 2024-04-16 15:13:09 -04:00
1d01b02d2d update showcase 2024-04-14 22:41:48 -04:00
db74762fe6 update articles 2024-04-14 20:19:14 -04:00
23a33acc17 remove unneeded frontmatter, update 2 articles 2024-04-14 19:33:10 -04:00
92530b0c4d update favicons and device anon 2024-04-14 13:02:25 -04:00
27a4ec8f55 update prettierrc, clean config files, manual main.html for service articles 2024-04-13 20:36:12 -04:00
60d01a20e1 clean up config files 2024-04-13 18:20:01 -04:00
2250789ae1 write draft for device anonymization 2024-04-13 14:42:59 -04:00
cd9da9d200 updated wording to web developement article 2024-04-13 13:53:41 -04:00
ae746bf82c update links to photos, remove commented lines and mastodon links, remove theme switcher and redundant attribution 2024-04-12 23:48:46 -04:00
500df4fccf add styles/images submodule 2024-04-12 23:33:46 -04:00
c01f59b518 update main page language, remove images 2024-04-12 23:32:58 -04:00
8d471ab3fc remove broken layouts 2024-04-12 23:30:28 -04:00
2c258736a7 update gitignore, update readme, remove images 2024-04-12 23:29:26 -04:00
f137fa25c7 add blowfish as a submodule, update gitignore, update readme 2024-04-12 23:28:35 -04:00
34 changed files with 2457 additions and 75 deletions

View file

@ -0,0 +1,36 @@
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

View file

@ -9,11 +9,15 @@ jobs:
build:
runs-on: hugo-latest
steps:
- name: Grab packages
run: apt install -y rsync openssh-client
- uses: actions/checkout@v4
with:
submodules: "true"
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:
@ -23,3 +27,10 @@ jobs:
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
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

2
.gitignore vendored
View file

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

23
.gitmodules vendored
View file

@ -1,3 +1,20 @@
[submodule "themes/hugo-maintenance"]
path = themes/hugo-maintenance
url = https://git.myco.systems/mycosystems/hugo-maintenance.git
[submodule "themes/blowfish"]
path = themes/blowfish
url = https://github.com/nunocoracao/blowfish.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

15
.prettierrc Normal file
View file

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

View file

@ -1,15 +1,42 @@
# web.myco.systems
mycosystems client site, maintenance page
### Start developing
```
git clone https://git.myco.systems/mycosystems/web.myco.systems.git
```
```
git fetch
```
```
git switch rework
```
```
git submodule update --init --recursive
```
# License:
Body text and articles are under [CC BY-SA 4.0](https://creativecommons.org/licenses/by-sa/4.0/)
Optionally we recommend installing prettier, the prettierrc file is preconfigured to use the go template plugin.
Theme files are under MIT [as licensed by MycoSystems](https://git.myco.systems/mycosystems/hugo-maintenance)
```
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:
[MIT](https://git.myco.systems/mycosystems/web.myco.systems/src/branch/main/LICENSE), thank you to the people over at [Blowfish](https://blowfish.page)

8
archetypes/default.md Normal file
View file

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

1
assets/img Submodule

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

26
bin/test_static_page.sh Normal file
View file

@ -0,0 +1,26 @@
#!/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

View file

@ -1,34 +0,0 @@
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

@ -0,0 +1,57 @@
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

@ -0,0 +1,19 @@
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

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

View file

@ -0,0 +1,45 @@
[[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

113
config/_default/params.toml Normal file
View file

@ -0,0 +1,113 @@
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]

10
content/_index.md Executable file
View file

@ -0,0 +1,10 @@
**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>

36
content/logs/index.md Normal file
View file

@ -0,0 +1,36 @@
---
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

@ -0,0 +1,17 @@
---
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

@ -0,0 +1,33 @@
---
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

@ -0,0 +1,24 @@
---
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

@ -0,0 +1,39 @@
---
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

@ -0,0 +1,49 @@
---
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

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

View file

@ -0,0 +1,17 @@
---
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/).

33
content/showcase/index.md Normal file
View file

@ -0,0 +1,33 @@
---
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

@ -0,0 +1,185 @@
{{ 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

@ -1,25 +0,0 @@
<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

@ -0,0 +1,171 @@
<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

@ -0,0 +1,30 @@
{{ $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,6 +1,10 @@
{
"dependencies": {
"caniuse-lite": "^1.0.30001620",
"tailwindcss": "^3.4.3"
},
"devDependencies": {
"prettier": "^3.3.2",
"prettier": "^3.2.5",
"prettier-plugin-go-template": "^0.0.15"
}
}

1
static Submodule

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

1
themes/blowfish Submodule

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

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