diff --git a/website/src/_data/screenshots.js b/website/src/_data/screenshots.js index 9b876804..989a2618 100644 --- a/website/src/_data/screenshots.js +++ b/website/src/_data/screenshots.js @@ -1,23 +1,32 @@ module.exports = [ { - id: "main-window", - title: "Main Window", - image: "/assets/screenshots/main-window.png", - alt: "KST4Contest ON4KST contest chat client main window", - caption: "Contest-oriented ON4KST chat workflow with candidate awareness." + id: "main-window-light", + title: "Main window · Light theme", + image: "/assets/completeViewLight.png", + alt: "KST4Contest main window in the light theme with ON4KST chat, station filters, priority candidates and sked controls", + caption: "The complete contest view brings chat messages, active bands, filters and priority candidates together." }, { - id: "priority-candidates", - title: "Priority Candidates", - image: "/assets/screenshots/priority-candidates.png", - alt: "Priority candidate list in KST4Contest", - caption: "Score-based candidate ranking for faster operator decisions." + id: "main-window-dark", + title: "Main window · Dark theme", + image: "/assets/completeViewDark.png", + alt: "KST4Contest main window in the dark theme with ON4KST chat, station filters, priority candidates and sked controls", + caption: "The same operating view in the dark theme, including worked status, candidate priorities and message preparation." }, { id: "timeline", - title: "Timeline View", - image: "/assets/screenshots/timeline.png", - alt: "KST4Contest AP timeline view", - caption: "Timeline support for AP windows and candidate timing." + title: "AP and sked timeline", + image: "/assets/timeline.png", + alt: "KST4Contest timeline showing scheduled contacts and Aircraft Scatter crossing windows", + caption: "Skeds and Aircraft Scatter opportunities share one time axis, making upcoming operating windows easier to coordinate.", + wide: true + }, + { + id: "airscout", + title: "KST4Contest with AirScout", + image: "/assets/complete_incl_AS.png", + alt: "KST4Contest main window alongside AirScout path and aircraft information", + caption: "AirScout adds path and aircraft information while KST4Contest keeps the related chat and station context visible.", + wide: true } -]; \ No newline at end of file +]; diff --git a/website/src/_layouts/base.njk b/website/src/_layouts/base.njk index b19ec2c2..8d3fb76c 100644 --- a/website/src/_layouts/base.njk +++ b/website/src/_layouts/base.njk @@ -61,6 +61,7 @@

Features

Download

Manual

+

Background

Roadmap

diff --git a/website/src/assets/completeViewDark.png b/website/src/assets/completeViewDark.png new file mode 100644 index 00000000..d4bbaad3 Binary files /dev/null and b/website/src/assets/completeViewDark.png differ diff --git a/website/src/assets/completeViewLight.png b/website/src/assets/completeViewLight.png new file mode 100644 index 00000000..6b9ea841 Binary files /dev/null and b/website/src/assets/completeViewLight.png differ diff --git a/website/src/assets/complete_incl_AS.png b/website/src/assets/complete_incl_AS.png new file mode 100644 index 00000000..6d31fd11 Binary files /dev/null and b/website/src/assets/complete_incl_AS.png differ diff --git a/website/src/assets/css/main.css b/website/src/assets/css/main.css index 99cf7ab0..2e564c55 100644 --- a/website/src/assets/css/main.css +++ b/website/src/assets/css/main.css @@ -641,18 +641,31 @@ a:hover { margin-top: 30px; } -.screenshot-placeholder { - display: grid; - place-items: center; - min-height: 180px; +.screenshot-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); +} + +.screenshot-card--wide { + grid-column: 1 / -1; +} + +.screenshot-link { + display: block; margin-bottom: 16px; border-radius: 18px; - background: - linear-gradient(135deg, rgba(56, 189, 248, 0.20), rgba(168, 85, 247, 0.20)), - rgba(2, 6, 23, 0.7); + overflow: hidden; border: 1px solid var(--border); - color: white; - font-weight: 800; + background: rgba(2, 6, 23, 0.7); +} + +.screenshot-image { + display: block; + width: 100%; + height: auto; +} + +.screenshot-card h3 { + margin-bottom: 8px; } .cta-panel { @@ -718,6 +731,14 @@ code { align-items: flex-start; flex-direction: column; } + + .screenshot-grid { + grid-template-columns: 1fr; + } + + .screenshot-card--wide { + grid-column: auto; + } } @media (prefers-reduced-motion: no-preference) { diff --git a/website/src/assets/timeline.png b/website/src/assets/timeline.png new file mode 100644 index 00000000..13352e62 Binary files /dev/null and b/website/src/assets/timeline.png differ diff --git a/website/src/download/index.njk b/website/src/download/index.njk index 8ec340ee..29fe663c 100644 --- a/website/src/download/index.njk +++ b/website/src/download/index.njk @@ -212,6 +212,45 @@ description: Download the latest stable KST4Contest packages for Windows, Linux
+
+
+

Conference papers

+

Background from GHz-Tagung Dorsten

+

+ These historical conference papers document KST4Contest at the time of the 2025 and 2026 talks. + They provide project background, not a complete description of the current feature set. +

+
+ +
+ + + +
+
+

Choosing a package

diff --git a/website/src/screenshots/index.njk b/website/src/screenshots/index.njk index 45e507ba..ff16c773 100644 --- a/website/src/screenshots/index.njk +++ b/website/src/screenshots/index.njk @@ -14,15 +14,26 @@ description: Screenshots of KST4Contest, the contest-optimized ON4KST chat clien
-
+
+

Four working views

+

From chat overview to Aircraft Scatter timing

+

+ These screenshots were captured in a test environment. Version-like text inside chat messages is + test data, not an announcement of a published KST4Contest version. +

+
+ +
{% for shot in screenshots %} -
-
\ No newline at end of file + diff --git a/website/test/homepage.test.js b/website/test/homepage.test.js index a333f4a0..9c96480d 100644 --- a/website/test/homepage.test.js +++ b/website/test/homepage.test.js @@ -60,3 +60,61 @@ test("homepage contains one selected function grid and a complete-overview link" assert.match(source, /href="\/features\/"[^>]*>Open the complete function overview/); assert.doesNotMatch(source, /Observe|Evaluate|>Act<|One workflow, shared context/); }); + +test("screenshot page uses the four approved originals as full-size links", () => { + const page = fs.readFileSync( + path.join(__dirname, "../src/screenshots/index.njk"), + "utf8" + ); + const css = fs.readFileSync( + path.join(__dirname, "../src/assets/css/main.css"), + "utf8" + ); + const screenshots = require("../src/_data/screenshots.js"); + + assert.equal(screenshots.length, 4); + assert.deepEqual( + screenshots.map(({ image }) => image), + [ + "/assets/completeViewLight.png", + "/assets/completeViewDark.png", + "/assets/timeline.png", + "/assets/complete_incl_AS.png" + ] + ); + assert.ok(screenshots.every(({ alt, caption }) => alt && caption)); + assert.equal(screenshots.find(({ id }) => id === "timeline").wide, true); + assert.doesNotMatch(JSON.stringify(screenshots), /Priority Candidates/); + assert.match(page, /href="{{ shot\.image }}"[\s\S]*]*src="{{ shot\.image }}"/); + assert.match(page, /Version-like text inside chat messages is[\s\S]*not an announcement/); + assert.match(css, /\.screenshot-image\s*\{[\s\S]*?width:\s*100%;[\s\S]*?height:\s*auto;/); + assert.match(css, /\.screenshot-card--wide\s*\{\s*grid-column:\s*1\s*\/\s*-1;/); +}); + +test("footer and download page expose background and conference papers", () => { + const layout = fs.readFileSync( + path.join(__dirname, "../src/_layouts/base.njk"), + "utf8" + ); + const download = fs.readFileSync( + path.join(__dirname, "../src/download/index.njk"), + "utf8" + ); + + assert.match(layout, /

Background<\/a><\/p>/); + for (const name of [ + "kst4contest-ghz-tagung-2025-de.pdf", + "kst4contest-ghz-tagung-2025-en.pdf", + "kst4contest-ghz-tagung-2026-de.pdf", + "kst4contest-ghz-tagung-2026-en.pdf" + ]) { + assert.match(download, new RegExp(`/assets/papers/${name.replaceAll(".", "\\.")}`)); + } + assert.match(download, /href="\/background\/#paper-2025"/); + assert.match(download, /href="\/background\/#paper-2026"/); + assert.match(download, /historical conference papers[\s\S]*not a complete description of the current feature set/); + assert.ok( + download.indexOf("Background from GHz-Tagung Dorsten") > + download.indexOf('

') + ); +});