Compare commits
29 commits
Author | SHA1 | Date | |
---|---|---|---|
eb25ebba72 | |||
8bcb2a411a | |||
b39c18cee1 | |||
9c249b921d | |||
737e2cd9f6 | |||
3c78ad0da4 | |||
ad3acbc2c0 | |||
5e394b74a0 | |||
8bc29c81c9 | |||
8e6d5e4d25 | |||
9461570924 | |||
36c9737034 | |||
bfc38ea8e2 | |||
bc12631d29 | |||
3b3bbaa82c | |||
337c972f2d | |||
35e5619cfd | |||
7559e1bf91 | |||
9ad8d4b08b | |||
26243d155d | |||
4f46e37612 | |||
f0ff7dc09f | |||
cdcdba8488 | |||
a04b0e3b7d | |||
be3f6c8d88 | |||
620cb2f074 | |||
4d565dbfd4 | |||
|
ca1d1ce3b7 | ||
|
471e0aee42 |
34 changed files with 75 additions and 2457 deletions
|
@ -9,15 +9,11 @@ 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:
|
||||
|
@ -27,10 +23,3 @@ 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
|
|
@ -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
2
.gitignore
vendored
|
@ -11,4 +11,6 @@ hugo.linux
|
|||
|
||||
# Temporary lock file while building
|
||||
/.hugo_build.lock
|
||||
|
||||
# node modules
|
||||
node_modules
|
23
.gitmodules
vendored
23
.gitmodules
vendored
|
@ -1,20 +1,3 @@
|
|||
[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
|
||||
[submodule "themes/hugo-maintenance"]
|
||||
path = themes/hugo-maintenance
|
||||
url = https://git.myco.systems/mycosystems/hugo-maintenance.git
|
||||
|
|
15
.prettierrc
15
.prettierrc
|
@ -1,15 +0,0 @@
|
|||
{
|
||||
"plugins": [
|
||||
"prettier-plugin-go-template"
|
||||
],
|
||||
"overrides": [
|
||||
{
|
||||
"files": [
|
||||
"*.html"
|
||||
],
|
||||
"options": {
|
||||
"parser": "go-template"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
35
README.md
35
README.md
|
@ -1,42 +1,15 @@
|
|||
# web.myco.systems
|
||||
|
||||
### Start developing
|
||||
mycosystems client site, maintenance page
|
||||
|
||||
```
|
||||
git clone https://git.myco.systems/mycosystems/web.myco.systems.git
|
||||
```
|
||||
```
|
||||
git fetch
|
||||
```
|
||||
```
|
||||
git switch rework
|
||||
```
|
||||
```
|
||||
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:
|
||||
[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)
|
|
@ -1,8 +0,0 @@
|
|||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
draft: true
|
||||
description: ""
|
||||
---
|
||||
{{< lead >}}
|
||||
|
||||
{{< /lead >}}
|
|
@ -1 +0,0 @@
|
|||
Subproject commit e797ede26496387d4c7667d1bcad3a77104864f5
|
|
@ -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
34
config.yaml
Normal 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
|
|
@ -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
|
|
@ -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" }]
|
|
@ -1,10 +0,0 @@
|
|||
[goldmark]
|
||||
[goldmark.renderer]
|
||||
unsafe = true
|
||||
|
||||
[highlight]
|
||||
noClasses = false
|
||||
|
||||
[tableOfContents]
|
||||
startLevel = 2
|
||||
endLevel = 4
|
|
@ -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
|
|
@ -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]
|
|
@ -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>
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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.
|
|
@ -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/)
|
|
@ -1,6 +0,0 @@
|
|||
---
|
||||
title: "Privacy Consulting"
|
||||
draft: false
|
||||
description: "Learn how to build Blowfish manually."
|
||||
---
|
||||
|
|
@ -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/).
|
|
@ -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 >}}
|
|
@ -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 }}
|
25
layouts/partials/head.html
Normal file
25
layouts/partials/head.html
Normal 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" . }}
|
|
@ -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 }}
|
|
@ -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
1411
package-lock.json
generated
File diff suppressed because it is too large
Load diff
|
@ -1,10 +1,6 @@
|
|||
{
|
||||
"dependencies": {
|
||||
"caniuse-lite": "^1.0.30001620",
|
||||
"tailwindcss": "^3.4.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"prettier": "^3.2.5",
|
||||
"prettier": "^3.3.2",
|
||||
"prettier-plugin-go-template": "^0.0.15"
|
||||
}
|
||||
}
|
||||
|
|
1
static
1
static
|
@ -1 +0,0 @@
|
|||
Subproject commit 2a3eb1322ba55085fdb12a7659b73a1c6a4bf458
|
|
@ -1 +0,0 @@
|
|||
Subproject commit f06bcb2a557cabf6071a78018304f323c71247cc
|
1
themes/hugo-maintenance
Submodule
1
themes/hugo-maintenance
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit b9d9b524931d887b4ed00019c2cead6b5c6506ff
|
Loading…
Add table
Reference in a new issue