Skip to content
Merged
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,4 @@ node_modules/
dist/
.astro/
build/
__pycache__/
20 changes: 20 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,25 @@
# Changelog

## 0.1.5 – 2026-10-23

Pages for Update Gaps, Security Monitor, Status Board and Sharewerk, and the versions of today.

- **Four new project pages** in English and German, each with what it does, security, installation
and questions: Update Gaps and Security Monitor for Cockpit with screenshots, Status Board for
Cockpit without (its screenshots show real host names), and Sharewerk, which shows its app sign
like Lautwerk and says what Meta's terms of use and the rights of a post's author mean for it.
The projects page, the start page and the links between project pages include them.
- **Versions:** Cron Jobs 2.10.2, Image Update Monitor 0.25.1, Stellwerk 0.6.4, Update Gaps 0.7.1,
Security Monitor 0.3.1, Status Board 0.2.3 and Sharewerk 0.1.1. The build reads them from
GitHub, so the live site shows what was current when its release was built; the README now says
that new versions go live with the next website release.
- **Cron Jobs:** the page title names the product without "for Cockpit", like Image Update
Monitor's.
- **Design system:** tokens and component styles from commit 5f4b256; the tokens differ only in a
comment, the components add image previews.
- **README:** every place a new project page needs.
- **Repository:** a Python cache file under `deploy/` is gone, and `__pycache__/` is ignored.

## 0.1.4 – 2026-10-19

- **Privacy texts in German and English:** describe scroll depth and active time, distinguish daily
Expand Down
30 changes: 24 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public yet is named anywhere.
| --- | --- |
| `src/content/tools/{en,de}/<slug>.md` | A project page: frontmatter with every section's text, the installation in Markdown below it. The schema is in `src/content.config.ts`. |
| `src/content/legal/{en,de}/` | Legal notice and privacy policy. The German versions are binding. |
| `src/data/tools.ts` | The projects: names, category, status, license, screenshots. |
| `src/data/tools.ts` | The projects: names, category, status, license, screenshots or app sign. |
| `src/data/routes.mjs` | Every page pair by key; canonical, `hreflang`, language switch and sitemap use it. |
| `src/data/versions.json` | The latest release of each project; `npm run versions` updates it from GitHub. |
| `src/i18n/ui.ts` | Labels of the interface in both languages. |
Expand All @@ -44,17 +44,35 @@ public yet is named anywhere.

### A new project page

1. Add the project to `TOOL_SLUGS` in `src/data/routes.mjs`, to the `slug` list in
`src/content.config.ts` and to `TOOLS` in `src/data/tools.ts`, with its screenshots under
`src/assets/screenshots/<slug>/`.
2. Write `src/content/tools/en/<slug>.md` and `src/content/tools/de/<slug>.md`.
3. `npm run build`.
1. `src/data/routes.mjs`: the slug in `TOOL_SLUGS`.
2. `src/content.config.ts`: the slug in the `slug` list.
3. `src/data/tools.ts`: the slug in `ToolSlug` and an entry in `TOOLS`, where its place sets the order on
the site. `name` sets the product name as the design system does: `dot: true` for the gold dot
("Cron Jobs."), `suffix` for the part in italics ("Image Update *Monitor*"). Screenshots go under
`src/assets/screenshots/<slug>/`; a project without any gets its app sign from `src/assets/icons/`
as `icon`. A new `category` also needs `CATEGORY_ORDER` and the group titles in
`src/components/ProjectsPage.astro`.
4. `src/data/related.ts`: an entry in `PAIRS`, and the slug in the entries of the projects that
belong with it.
5. `scripts/versions.mjs`: the repository in `REPOS`; `npm run versions` then adds it to
`src/data/versions.json`.
6. `src/components/ProjectsPage.astro`: how it is installed (`install`, in both languages). Check
whether the descriptions of the projects page and of the start page (`HomePage.astro`) and the
start page's lead still name what there is.
7. Write `src/content/tools/en/<slug>.md` and `src/content/tools/de/<slug>.md`: a title of 10 to 60
and a description of 50 to 155 characters, an `alt` text for every picture key (`icon` for the
app sign).
8. `npm run build`. `scripts/check-dist.mjs` then checks the page pair, the lengths and the links.

### A new version of a project

Nothing to do in the texts: `npm run build` reads the latest releases from GitHub. Commit the updated
`src/data/versions.json` with the next change, so a build without network shows the same.

The live site shows the versions its release was built with: it changes only with a new release of
the website (see Releases). A project's new release therefore reaches azentrius.com with the next
website release, not before.

## Releases

Actions › **release** › Run workflow, on `main`, after giving the version in `package.json` a dated
Expand Down
Binary file removed deploy/__pycache__/azentrius-website.cpython-313.pyc
Binary file not shown.
4 changes: 2 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "azentrius-website",
"version": "0.1.4",
"version": "0.1.5",
"private": true,
"description": "The website azentrius.com: project pages for the Azentrius tools, in English and German.",
"license": "Apache-2.0",
Expand Down
4 changes: 4 additions & 0 deletions scripts/versions.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,12 @@ const FILE = new URL("../src/data/versions.json", import.meta.url);
const REPOS = {
"cockpit-cronjobs": "Azentrius/cockpit-cronjobs",
"cockpit-image-update-monitor": "Azentrius/cockpit-image-update-monitor",
"cockpit-update-gaps": "Azentrius/cockpit-update-gaps",
"cockpit-security-monitor": "Azentrius/cockpit-security-monitor",
"cockpit-status-board": "Azentrius/cockpit-status-board",
stellwerk: "Azentrius/stellwerk",
lautwerk: "Azentrius/lautwerk",
sharewerk: "Azentrius/sharewerk",
"home-assistant-theme": "Azentrius/home-assistant-theme",
};

Expand Down
1 change: 1 addition & 0 deletions src/assets/icons/sharewerk.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 4 additions & 4 deletions src/components/HomePage.astro
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ const text = {
en: {
title: "Azentrius – open-source tools for self-hosters",
description:
"Open-source tools for your infrastructure and devices: Cockpit add-ons for cron and Docker updates, a desk display for Claude Code and Codex, and more.",
"Open-source tools for your infrastructure and devices: Cockpit add-ons for cron, updates and security, a desk display for Claude Code and Codex, and more.",
eyebrow: "Digital sovereignty",
h1: "Software you own",
lead: "Open-source tools for your own infrastructure and devices: add-ons for Cockpit, a desk display for Claude Code and Codex, an Android voice app and a theme for Home Assistant. Local control, transparent dependencies: each project page says what it needs and what it talks to.",
lead: "Open-source tools for your own infrastructure and devices: add-ons for Cockpit, a desk display for Claude Code and Codex, an Android voice app, a self-hosted tool for passing on Instagram and Facebook posts, and a theme for Home Assistant. Local control, transparent dependencies: each project page says what it needs and what it talks to.",
toProjects: "View projects",
toPackages: "Set up the package repository",
facts: [
Expand Down Expand Up @@ -65,10 +65,10 @@ const text = {
de: {
title: "Azentrius – Open-Source-Werkzeuge für Self-Hoster",
description:
"Open-Source-Werkzeuge für eigene Server und Geräte: Cockpit-Add-ons für Cron und Docker-Updates, ein Tischdisplay für Claude Code und Codex und mehr.",
"Open-Source-Werkzeuge für eigene Server und Geräte: Cockpit-Add-ons für Cron, Updates und Sicherheit, ein Tischdisplay für Claude Code und Codex und mehr.",
eyebrow: "Digitale Souveränität",
h1: "Software, die dir gehört",
lead: "Open-Source-Werkzeuge für deine eigene Infrastruktur und deine Geräte: Erweiterungen für Cockpit, ein Tischdisplay für Claude Code und Codex, eine Sprach-App für Android und ein Theme für Home Assistant. Kontrolle bei dir, Abhängigkeiten offen benannt: Jede Projektseite sagt, was ein Projekt braucht und womit es spricht.",
lead: "Open-Source-Werkzeuge für deine eigene Infrastruktur und deine Geräte: Erweiterungen für Cockpit, ein Tischdisplay für Claude Code und Codex, eine Sprach-App für Android, ein selbst gehostetes Werkzeug zum Weitergeben von Instagram- und Facebook-Beiträgen und ein Theme für Home Assistant. Kontrolle bei dir, Abhängigkeiten offen benannt: Jede Projektseite sagt, was ein Projekt braucht und womit es spricht.",
toProjects: "Projekte ansehen",
toPackages: "Paketquelle einrichten",
facts: [
Expand Down
12 changes: 10 additions & 2 deletions src/components/ProjectsPage.astro
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ const text = {
en: {
title: "Open-source Cockpit add-ons and developer tools | Azentrius",
description:
"Azentrius projects: Cockpit add-ons for cron and Docker updates, a Claude Code and Codex desk display, an Android voice app and a Home Assistant theme.",
"Azentrius projects: Cockpit add-ons for cron, updates and security, a desk display for Claude Code and Codex, tools for Android and Home Assistant.",
h1: "Projects",
lead: "Everything Azentrius makes is open source under Apache-2.0 and public on GitHub. Each page says what a project needs and what it talks to.",
groups: {
Expand All @@ -35,15 +35,19 @@ const text = {
install: {
"cockpit-cronjobs": "Package repository, release",
"cockpit-image-update-monitor": "Package repository, release",
"cockpit-update-gaps": "Package repository (Debian, Ubuntu), release",
"cockpit-security-monitor": "Package repository (Debian, Ubuntu), release",
"cockpit-status-board": "Package repository, release",
stellwerk: "Release",
lautwerk: "Build from source",
sharewerk: "Docker Compose",
"home-assistant-theme": "HACS, release",
},
},
de: {
title: "Cockpit-Add-ons und Werkzeuge für Entwickler | Azentrius",
description:
"Azentrius-Projekte: Cockpit-Add-ons für Cron und Docker-Updates, ein Tischdisplay für Claude Code und Codex, eine Sprach-App und ein Home-Assistant-Theme.",
"Azentrius-Projekte: Cockpit-Add-ons für Cron, Updates und Sicherheit, ein Tischdisplay für Claude Code und Codex, Werkzeuge für Android und Home Assistant.",
h1: "Projekte",
lead: "Alles, was Azentrius baut, ist Open Source unter Apache-2.0 und öffentlich auf GitHub. Jede Seite sagt, was ein Projekt braucht und womit es spricht.",
groups: {
Expand All @@ -57,8 +61,12 @@ const text = {
install: {
"cockpit-cronjobs": "Paketquelle, Release",
"cockpit-image-update-monitor": "Paketquelle, Release",
"cockpit-update-gaps": "Paketquelle (Debian, Ubuntu), Release",
"cockpit-security-monitor": "Paketquelle (Debian, Ubuntu), Release",
"cockpit-status-board": "Paketquelle, Release",
stellwerk: "Release",
lautwerk: "Aus dem Quellcode",
sharewerk: "Docker Compose",
"home-assistant-theme": "HACS, Release",
},
},
Expand Down
8 changes: 4 additions & 4 deletions src/components/ToolPage.astro
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import { tool as findTool, TOOLS, repoUrl } from "../data/tools";
import { t } from "../i18n/ui";
import versions from "../data/versions.json";
import { SITE } from "../data/routes.mjs";
import lautwerkIcon from "../assets/icons/lautwerk.svg";

interface Props {
entry: CollectionEntry<"tools">;
Expand Down Expand Up @@ -78,7 +77,8 @@ const ogImage = og
}
: undefined;
// A project without screenshots shows its app icon next to the hero text.
const showIcon = !tool.hero && tool.slug === "lautwerk";
const icon = tool.hero ? undefined : tool.icon;
const showIcon = Boolean(icon);
---

<Base
Expand Down Expand Up @@ -112,9 +112,9 @@ const showIcon = !tool.hero && tool.slug === "lautwerk";
</ul>
</div>
{
showIcon && (
icon && (
<div class="hero__icon">
<Image src={lautwerkIcon} alt={d.alt.icon ?? ""} width={200} height={200} loading="eager" />
<Image src={icon} alt={d.alt.icon ?? ""} width={200} height={200} loading="eager" />
</div>
)
}
Expand Down
4 changes: 4 additions & 0 deletions src/content.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,12 @@ const tools = defineCollection({
slug: z.enum([
"cockpit-cronjobs",
"cockpit-image-update-monitor",
"cockpit-update-gaps",
"cockpit-security-monitor",
"cockpit-status-board",
"stellwerk",
"lautwerk",
"sharewerk",
"home-assistant-theme",
]),
lang: z.enum(["en", "de"]),
Expand Down
4 changes: 2 additions & 2 deletions src/content/tools/de/cockpit-cronjobs.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
slug: cockpit-cronjobs
lang: de
title: Cron Jobs für Cockpit – Cronjobs und systemd-Timer verwalten
title: "Cron Jobs: Cronjobs und systemd-Timer in Cockpit verwalten"
description: "Cockpit-Seite für cron: alle Cronjobs und systemd-Timer an einem Ort, sichere Crontab-Änderungen, Ergebnis jedes Laufs, Umwandeln in systemd-Timer."
eyebrow: Cockpit-Add-on
h1: Cronjobs und systemd-Timer in Cockpit verwalten
Expand Down Expand Up @@ -58,7 +58,7 @@ alt:
primaryAction:
label: Cron Jobs installieren
href: "#install"
updated: 2026-10-19
updated: 2026-10-23
---

### Aus der Azentrius-Paketquelle
Expand Down
Loading
Loading