Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 13 additions & 10 deletions agents.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ Developer and user documentation site for Freeshard, published at docs.freeshard
## Tech Stack

- **Generator**: MkDocs with Material theme
- **Plugins**: blog, glightbox (image lightbox)
- **Plugins**: glightbox (image lightbox)
- **Markdown extensions**: admonitions, details, syntax highlighting, Mermaid diagrams, emoji, markdown-include
- **Dependencies**: `requirements.txt` (mkdocs, mkdocs-material, markdown-include, mkdocs-glightbox), pinned to exact versions — MkDocs 1.x is unmaintained and MkDocs 2.0 is not a viable upgrade (no plugin system, no Material support). Do not bump these; the migration target is Zensical, tracked in [issue #10](https://github.com/FreeshardBase/documentation/issues/10) and blocked on moving the blog to the landing page ([issue #4](https://github.com/FreeshardBase/documentation/issues/4)).
- **Dependencies**: `requirements.txt` (mkdocs, mkdocs-material, markdown-include, mkdocs-glightbox), pinned to exact versions — MkDocs 1.x is unmaintained and MkDocs 2.0 is not a viable upgrade (no plugin system, no Material support). Do not bump these; the migration target is Zensical, tracked in [issue #10](https://github.com/FreeshardBase/documentation/issues/10). That was blocked on the Material `blog` plugin, which Zensical does not implement; the blog has since moved to freeshard.net ([issue #4](https://github.com/FreeshardBase/documentation/issues/4)) and the plugin is gone, so #10 is unblocked.

## Commands

Expand All @@ -30,10 +30,7 @@ docs/
includes/ Reusable markdown snippets (template vars, portal name info)
img/ Developer docs images
user_guides/ End-user guides (password management, smart home)
blog/
posts/ Blog posts (date-prefixed directories)
YYYY-MM-DD_slug/ Each post: main.md + images
.authors.yml Blog author metadata
blog/ Only redirect stubs now — see Retired Blog below
css/extra.css Custom styles
img/ Shared images (logo)
mkdocs.yml Site config, navigation, theme, plugins
Expand All @@ -42,16 +39,22 @@ mkdocs.yml Site config, navigation, theme, plugins
## Conventions

### Navigation
Navigation is explicitly defined in `mkdocs.yml` under the `nav` key. Four top-level sections: Overview, Developer Docs, Blog, User Guides. Adding a new page requires adding it to `nav`.
Navigation is explicitly defined in `mkdocs.yml` under the `nav` key. Three top-level sections: Overview, Developer Docs, User Guides. Adding a new page requires adding it to `nav`.

### Blog Posts
Blog posts live in `docs/blog/posts/YYYY-MM-DD_slug/main.md`. Each post directory contains the markdown file and any associated images. Authors are defined in `docs/blog/.authors.yml`.
### Retired Blog
The blog no longer lives here. It moved to `freeshard.net/<lang>/blog/`, as an Astro content collection in the `landing-page` repo — write new posts there, not here.

What remains under `docs/blog/` is 20 hand-written `index.html` redirect stubs, one per URL the Material `blog` plugin used to publish (13 posts, 5 archive years, `page/2/`, and the index). MkDocs copies non-markdown files through verbatim, so they land at exactly the old paths. Each stub is an instant `meta refresh` plus a `rel=canonical` and a visible link.

They are static HTML rather than a server-side 301 because `docs.freeshard.net` is served by GitHub Pages, which cannot issue arbitrary redirects. Google [documents](https://developers.google.com/search/docs/crawling-indexing/301-redirects) that it reads an instant `meta refresh` as a permanent redirect, while still recommending a server-side redirect where one is possible. Putting the site behind a proxy that can answer 301s is the upgrade path if the link equity ever proves to matter.

Do not delete these stubs, and do not let a generator swap drop them — they are the only thing standing between the old URLs and a 404.

### Markdown Includes
Reusable snippets in `docs/developer_docs/includes/` can be included in other docs via the `markdown-include` extension: `{!developer_docs/includes/snippet.md!}`.

### Images
Store images alongside the content that uses them (in subdirectory `img/` or in blog post directories). Use relative paths. The glightbox plugin automatically adds lightbox behavior to images.
Store images alongside the content that uses them (in a subdirectory `img/`). Use relative paths. The glightbox plugin automatically adds lightbox behavior to images.

### Mermaid Diagrams
Supported via `pymdownx.superfences` custom fence. Use ` ```mermaid ` code blocks.
Expand Down
5 changes: 0 additions & 5 deletions docs/blog/.authors.yml

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/getting-rid-of-registration-and-login-views/">
<link rel="canonical" href="https://freeshard.net/en/blog/getting-rid-of-registration-and-login-views/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/getting-rid-of-registration-and-login-views/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/getting-rid-of-registration-and-login-views/">https://freeshard.net/en/blog/getting-rid-of-registration-and-login-views/</a>.</p>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/new-features-for-the-portal-app-store/">
<link rel="canonical" href="https://freeshard.net/en/blog/new-features-for-the-portal-app-store/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/new-features-for-the-portal-app-store/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/new-features-for-the-portal-app-store/">https://freeshard.net/en/blog/new-features-for-the-portal-app-store/</a>.</p>
</body>
</html>
14 changes: 14 additions & 0 deletions docs/blog/2022/06/10/starting-and-stopping-apps/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/starting-and-stopping-apps/">
<link rel="canonical" href="https://freeshard.net/en/blog/starting-and-stopping-apps/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/starting-and-stopping-apps/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/starting-and-stopping-apps/">https://freeshard.net/en/blog/starting-and-stopping-apps/</a>.</p>
</body>
</html>
14 changes: 14 additions & 0 deletions docs/blog/2022/06/28/shared-directories/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/shared-directories/">
<link rel="canonical" href="https://freeshard.net/en/blog/shared-directories/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/shared-directories/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/shared-directories/">https://freeshard.net/en/blog/shared-directories/</a>.</p>
</body>
</html>
14 changes: 14 additions & 0 deletions docs/blog/2022/07/25/backup-your-portal/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/backup-your-portal/">
<link rel="canonical" href="https://freeshard.net/en/blog/backup-your-portal/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/backup-your-portal/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/backup-your-portal/">https://freeshard.net/en/blog/backup-your-portal/</a>.</p>
</body>
</html>
14 changes: 14 additions & 0 deletions docs/blog/2022/11/01/peer-2-peer-communication/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/peer-2-peer-communication/">
<link rel="canonical" href="https://freeshard.net/en/blog/peer-2-peer-communication/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/peer-2-peer-communication/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/peer-2-peer-communication/">https://freeshard.net/en/blog/peer-2-peer-communication/</a>.</p>
</body>
</html>
14 changes: 14 additions & 0 deletions docs/blog/2022/12/08/smart-home-and-iot/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/smart-home-and-iot/">
<link rel="canonical" href="https://freeshard.net/en/blog/smart-home-and-iot/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/smart-home-and-iot/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/smart-home-and-iot/">https://freeshard.net/en/blog/smart-home-and-iot/</a>.</p>
</body>
</html>
14 changes: 14 additions & 0 deletions docs/blog/2023/09/16/app-integration-overhaul/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/app-integration-overhaul/">
<link rel="canonical" href="https://freeshard.net/en/blog/app-integration-overhaul/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/app-integration-overhaul/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/app-integration-overhaul/">https://freeshard.net/en/blog/app-integration-overhaul/</a>.</p>
</body>
</html>
14 changes: 14 additions & 0 deletions docs/blog/2024/04/07/eating-your-own-dog-food/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/eating-your-own-dog-food/">
<link rel="canonical" href="https://freeshard.net/en/blog/eating-your-own-dog-food/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/eating-your-own-dog-food/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/eating-your-own-dog-food/">https://freeshard.net/en/blog/eating-your-own-dog-food/</a>.</p>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/going-paperless-with-paperless-on-portal/">
<link rel="canonical" href="https://freeshard.net/en/blog/going-paperless-with-paperless-on-portal/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/going-paperless-with-paperless-on-portal/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/going-paperless-with-paperless-on-portal/">https://freeshard.net/en/blog/going-paperless-with-paperless-on-portal/</a>.</p>
</body>
</html>
14 changes: 14 additions & 0 deletions docs/blog/2025/04/29/rebrand-and-public-source-code/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/rebrand-and-public-source-code/">
<link rel="canonical" href="https://freeshard.net/en/blog/rebrand-and-public-source-code/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/rebrand-and-public-source-code/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/rebrand-and-public-source-code/">https://freeshard.net/en/blog/rebrand-and-public-source-code/</a>.</p>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/unblocking-apps-by-fixing-a-performance-bottleneck/">
<link rel="canonical" href="https://freeshard.net/en/blog/unblocking-apps-by-fixing-a-performance-bottleneck/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/unblocking-apps-by-fixing-a-performance-bottleneck/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/unblocking-apps-by-fixing-a-performance-bottleneck/">https://freeshard.net/en/blog/unblocking-apps-by-fixing-a-performance-bottleneck/</a>.</p>
</body>
</html>
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/putting-apps-to-sleep-and-waking-them-in-under-two-seconds/">
<link rel="canonical" href="https://freeshard.net/en/blog/putting-apps-to-sleep-and-waking-them-in-under-two-seconds/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/putting-apps-to-sleep-and-waking-them-in-under-two-seconds/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/putting-apps-to-sleep-and-waking-them-in-under-two-seconds/">https://freeshard.net/en/blog/putting-apps-to-sleep-and-waking-them-in-under-two-seconds/</a>.</p>
</body>
</html>
14 changes: 14 additions & 0 deletions docs/blog/archive/2022/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/">
<link rel="canonical" href="https://freeshard.net/en/blog/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/">https://freeshard.net/en/blog/</a>.</p>
</body>
</html>
14 changes: 14 additions & 0 deletions docs/blog/archive/2023/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/">
<link rel="canonical" href="https://freeshard.net/en/blog/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/">https://freeshard.net/en/blog/</a>.</p>
</body>
</html>
14 changes: 14 additions & 0 deletions docs/blog/archive/2024/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/">
<link rel="canonical" href="https://freeshard.net/en/blog/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/">https://freeshard.net/en/blog/</a>.</p>
</body>
</html>
14 changes: 14 additions & 0 deletions docs/blog/archive/2025/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/">
<link rel="canonical" href="https://freeshard.net/en/blog/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/">https://freeshard.net/en/blog/</a>.</p>
</body>
</html>
14 changes: 14 additions & 0 deletions docs/blog/archive/2026/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/">
<link rel="canonical" href="https://freeshard.net/en/blog/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/">https://freeshard.net/en/blog/</a>.</p>
</body>
</html>
14 changes: 14 additions & 0 deletions docs/blog/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/">
<link rel="canonical" href="https://freeshard.net/en/blog/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/">https://freeshard.net/en/blog/</a>.</p>
</body>
</html>
Empty file removed docs/blog/index.md
Empty file.
14 changes: 14 additions & 0 deletions docs/blog/page/2/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Moved to freeshard.net</title>
<meta http-equiv="refresh" content="0; url=https://freeshard.net/en/blog/2/">
<link rel="canonical" href="https://freeshard.net/en/blog/2/">
<meta name="robots" content="noarchive">
</head>
<body>
<p>The Freeshard blog now lives on <a href="https://freeshard.net/en/blog/2/">freeshard.net</a>.</p>
<p>If you are not redirected automatically, follow <a href="https://freeshard.net/en/blog/2/">https://freeshard.net/en/blog/2/</a>.</p>
</body>
</html>
Loading
Loading