Add Markdown-based news content model

This commit is contained in:
Marc Froehlich
2026-07-07 00:51:36 +02:00
parent 67b91a766a
commit 6d1e08711a
44 changed files with 192 additions and 58 deletions
+8
View File
@@ -28,6 +28,14 @@ function rewriteManualLinks(content, lang) {
module.exports = function (eleventyConfig) {
eleventyConfig.addFilter("readableDate", function (dateObj) {
return new Intl.DateTimeFormat("en", {
year: "numeric",
month: "long",
day: "numeric"
}).format(dateObj);
});
eleventyConfig.addCollection("sortedFeatures", function (collectionApi) {
return collectionApi.getFilteredByTag("features").sort((a, b) => {
return (a.data.order || 999) - (b.data.order || 999);
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="Download KST4Contest">
<meta name="twitter:description" content="Download KST4Contest releases for Windows, Linux and macOS.">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="KST4Contest FAQ">
<meta name="twitter:description" content="Frequently asked questions about KST4Contest, ON4KST contest operation, AirScout integration and VHF/UHF/SHF contest workflow.">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="AirScout Integration">
<meta name="twitter:description" content="AirScout information helps operators evaluate AP windows, aircraft scatter timing and candidate stations during VHF/UHF/SHF contests.">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="Dual Chat Categories">
<meta name="twitter:description" content="Dual category support gives contest operators better overview when working across multiple ON4KST chat rooms.">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="DXCluster Server">
<meta name="twitter:description" content="KST4Contest includes DXCluster functionality to support situational awareness during contest operation.">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="KST4Contest Features">
<meta name="twitter:description" content="Contest-optimized ON4KST features for VHF, UHF and SHF operation.">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="Log Synchronization">
<meta name="twitter:description" content="Log synchronization helps KST4Contest understand worked stations, active bands and contest context.">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="Macros and Variables">
<meta name="twitter:description" content="Macros reduce repetitive typing and help operators respond quickly during active ON4KST contest sessions.">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="Priority Score System">
<meta name="twitter:description" content="KST4Contest ranks stations by activity, direction, sked context, band information, QRG hints and operator workflow signals.">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="Sked Reminder">
<meta name="twitter:description" content="KST4Contest keeps skeds in focus while the operator handles chat traffic, logging, bands and aircraft scatter timing.">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="Timeline View">
<meta name="twitter:description" content="The timeline view helps operators understand short propagation windows and candidate timing during active contest operation.">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="KST4Contest Contest-Optimized ON4KST Chat Client">
<meta name="twitter:description" content="KST4Contest is a modern ON4KST chat client built for VHF, UHF and SHF contest operation.">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="KST4Contest Deutsches Handbuch">
<meta name="twitter:description" content="Deutsches Benutzerhandbuch für KST4Contest.">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="KST4Contest English Manual">
<meta name="twitter:description" content="English user manual for KST4Contest.">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="{{ manual.title }} | KST4Contest Manual">
<meta name="twitter:description" content="KST4Contest manual page: {{ manual.title }}">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="KST4Contest Manual">
<meta name="twitter:description" content="Online manual for KST4Contest, the contest-optimized ON4KST chat client.">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
@@ -0,0 +1,81 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>KST4Contest Website Launch</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="KST4Contest is a contest-optimized ON4KST chat client for VHF, UHF and SHF ham radio contests.">
<link rel="canonical" href="https://kst4contest.hamradioonline.de/news/2026-07-website-launch/">
<meta property="og:type" content="website">
<meta property="og:title" content="KST4Contest Website Launch">
<meta property="og:description" content="Contest-optimized ON4KST chat client for VHF, UHF and SHF ham radio contests.">
<meta property="og:url" content="https://kst4contest.hamradioonline.de/news/2026-07-website-launch/">
<meta property="og:site_name" content="KST4Contest">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="KST4Contest Website Launch">
<meta name="twitter:description" content="Contest-optimized ON4KST chat client for VHF, UHF and SHF ham radio contests.">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
<div class="site-bg"></div>
<header class="site-header">
<a class="brand" href="/">
<span class="brand-mark"></span>
<span>
<strong>KST4Contest</strong>
<small>ON4KST Contest Client</small>
</span>
</a>
<nav class="site-nav">
<a href="/">Home</a>
<a href="/features/">Features</a>
<a href="/screenshots/">Screenshots</a>
<a href="/download/">Download</a>
<a href="/manual/">Manual</a>
<a href="/news/">News</a>
<a href="/faq/">FAQ</a>
<a class="nav-cta" href="https://github.com/praktimarc/kst4contest/releases/latest">Download</a>
</nav>
</header>
<main>
<section class="hero">
<p class="badge">News · July 7, 2026</p>
<h1>KST4Contest Website Launch</h1>
<p class="lead">The new KST4Contest website is being built as a static, SEO-friendly product portal with GitHub-based documentation.</p>
</section>
<section class="section narrow">
<article class="card content-card">
<h2>A new home for KST4Contest</h2>
<p>KST4Contest now has its own website at <code>kst4contest.hamradioonline.de</code>.</p>
<p>The site is built with Eleventy, generated from version-controlled Markdown and deployed as a fast static website.</p>
<h2>Why this matters</h2>
<p>The goal is to make KST4Contest easier to discover, easier to document and easier to maintain.</p>
<p>Documentation, release information, feature pages and future updates can now grow from a shared content model.</p>
</article>
</section>
</main>
<footer class="site-footer">
<p>KST4Contest contest-optimized ON4KST workflow for VHF/UHF/SHF operators.</p>
<p><a href="https://github.com/praktimarc/kst4contest">GitHub Repository</a></p>
</footer>
</body>
</html>
+14 -10
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="KST4Contest News">
<meta name="twitter:description" content="News, release updates and development notes for KST4Contest.">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
@@ -55,19 +55,23 @@
<main>
<section class="hero">
<h1>News</h1>
<p>
Release notes, development updates and contest workflow improvements.
<p class="badge">News</p>
<h1>Development updates and release notes.</h1>
<p class="lead">
Updates about KST4Contest releases, website improvements and contest workflow development.
</p>
</section>
<section class="section">
<div class="card">
<h2>Website launch</h2>
<p>
The new KST4Contest website is being built as a static, SEO-friendly product site
with GitHub-based documentation and automated deployment.
</p>
<div class="grid">
<article class="card">
<p class="eyebrow">July 7, 2026</p>
<h3><a href="/news/2026-07-website-launch/">KST4Contest Website Launch</a></h3>
<p>The new KST4Contest website is being built as a static, SEO-friendly product portal with GitHub-based documentation.</p>
<a href="/news/2026-07-website-launch/">Read more →</a>
</article>
</div>
</section>
</main>
+1 -1
View File
@@ -17,7 +17,7 @@
<meta name="twitter:title" content="KST4Contest Screenshots">
<meta name="twitter:description" content="Screenshots of KST4Contest, the contest-optimized ON4KST chat client for VHF, UHF and SHF operators.">
<link rel="stylesheet" href="/assets/css/main.css?v=1783377791810">
<link rel="stylesheet" href="/assets/css/main.css?v=1783378295352">
</head>
<body>
+3 -3
View File
@@ -18,9 +18,6 @@
<url>
<loc>https://kst4contest.hamradioonline.de/screenshots/</loc>
</url>
<url>
<loc>https://kst4contest.hamradioonline.de/news/</loc>
</url>
<url>
<loc>https://kst4contest.hamradioonline.de/faq/</loc>
</url>
@@ -54,4 +51,7 @@
<url>
<loc>https://kst4contest.hamradioonline.de/features/macros/</loc>
</url>
<url>
<loc>https://kst4contest.hamradioonline.de/news/2026-07-website-launch/</loc>
</url>
</urlset>
+15
View File
@@ -0,0 +1,15 @@
---
layout: base.njk
---
<section class="hero">
<p class="badge">News · {{ date | readableDate }}</p>
<h1>{{ title }}</h1>
<p class="lead">{{ summary }}</p>
</section>
<section class="section narrow">
<article class="card content-card">
{{ content | safe }}
</article>
</section>
@@ -0,0 +1,17 @@
---
title: KST4Contest Website Launch
summary: The new KST4Contest website is being built as a static, SEO-friendly product portal with GitHub-based documentation.
date: 2026-07-07
---
## A new home for KST4Contest
KST4Contest now has its own website at `kst4contest.hamradioonline.de`.
The site is built with Eleventy, generated from version-controlled Markdown and deployed as a fast static website.
## Why this matters
The goal is to make KST4Contest easier to discover, easier to document and easier to maintain.
Documentation, release information, feature pages and future updates can now grow from a shared content model.
+14 -9
View File
@@ -2,21 +2,26 @@
layout: base.njk
title: KST4Contest News
description: News, release updates and development notes for KST4Contest.
eleventyExcludeFromCollections: true
---
<section class="hero">
<h1>News</h1>
<p>
Release notes, development updates and contest workflow improvements.
<p class="badge">News</p>
<h1>Development updates and release notes.</h1>
<p class="lead">
Updates about KST4Contest releases, website improvements and contest workflow development.
</p>
</section>
<section class="section">
<div class="card">
<h2>Website launch</h2>
<p>
The new KST4Contest website is being built as a static, SEO-friendly product site
with GitHub-based documentation and automated deployment.
</p>
<div class="grid">
{% for post in collections.news | reverse %}
<article class="card">
<p class="eyebrow">{{ post.date | readableDate }}</p>
<h3><a href="{{ post.url }}">{{ post.data.title }}</a></h3>
<p>{{ post.data.summary }}</p>
<a href="{{ post.url }}">Read more →</a>
</article>
{% endfor %}
</div>
</section>
+4
View File
@@ -0,0 +1,4 @@
{
"layout": "news-post.njk",
"tags": "news"
}