Skip to content

Commit 4bc0bcb

Browse files
committed
Add Education edition card, direct SourceForge download, plainer punctuation
The editions grid gains an Education card (Workstation-derived, coming soon) and switches to 3 columns on wide screens. The download section's primary button now points straight at the latest ISO on SourceForge, resolved from the latest GitHub release tag, with a secondary link to the release notes. Em dashes in visible copy were replaced with plainer punctuation.
1 parent 399776b commit 4bc0bcb

2 files changed

Lines changed: 43 additions & 15 deletions

File tree

src/components/HomePage.astro

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@ const t = translations[lang];
1515
const p = langPrefix(lang);
1616
const auroraHref = subHref(p, 'aurora', '/aurora', links.auroraSite);
1717
18-
const editionOrder = ['workstation', 'play', 'mobile', 'tablet', 'cast'] as const;
18+
const editionOrder = ['workstation', 'education', 'play', 'mobile', 'tablet', 'cast'] as const;
1919
2020
const editionIcons: Record<(typeof editionOrder)[number], string> = {
2121
workstation: 'M3 5h18v11H3zM1 19h22v1.5H1z',
22+
education: 'M12 4L2 9l10 5 10-5zM6 11.5V16c0 1.7 2.7 3 6 3s6-1.3 6-3v-4.5M22 9v5',
2223
play: 'M6 8h12a4 4 0 0 1 4 4v3a3 3 0 0 1-5.4 1.8L15 15H9l-1.6 1.8A3 3 0 0 1 2 15v-3a4 4 0 0 1 4-4z',
2324
mobile: 'M8 2h8a2 2 0 0 1 2 2v16a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2zm2 17h4',
2425
tablet: 'M5 3h14a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z',
@@ -170,10 +171,13 @@ const editionIcons: Record<(typeof editionOrder)[number], string> = {
170171
<div class="container download-inner">
171172
<h2>{t.download.title}</h2>
172173
<p>{t.download.subtitle}</p>
173-
<a class="btn btn-primary btn-lg" href={links.releasesLatest} target="_blank" rel="noopener">
174-
{t.download.button}
175-
<span class="release-tag mono" data-release-tag hidden></span>
176-
</a>
174+
<div class="download-actions">
175+
<a class="btn btn-primary btn-lg" data-sf-iso href={links.sfFiles} target="_blank" rel="noopener">
176+
{t.download.button}
177+
<span class="release-tag mono" data-release-tag hidden></span>
178+
</a>
179+
<a class="btn btn-ghost" href={links.releasesLatest} target="_blank" rel="noopener">{t.download.notes} ↗</a>
180+
</div>
177181
<p class="download-note">{t.download.note}</p>
178182
</div>
179183
</section>
@@ -199,17 +203,20 @@ const editionIcons: Record<(typeof editionOrder)[number], string> = {
199203

200204
<script>
201205
const tagEl = document.querySelector('[data-release-tag]');
202-
if (tagEl) {
206+
const isoEl = document.querySelector('[data-sf-iso]');
207+
if (tagEl && isoEl) {
203208
fetch('https://api.github.com/repos/luminusOS/images/releases/latest')
204209
.then((r) => (r.ok ? r.json() : Promise.reject(new Error(String(r.status)))))
205210
.then((release) => {
206-
if (release?.tag_name) {
211+
const tag = release?.tag_name?.replace(/^v/, '');
212+
if (tag) {
207213
tagEl.textContent = release.tag_name;
208214
tagEl.removeAttribute('hidden');
215+
isoEl.href = `https://sourceforge.net/projects/luminusos/files/${tag}/luminusos-workstation-${tag}.iso/download`;
209216
}
210217
})
211218
.catch(() => {
212-
/* no releases yet — button still points at /releases/latest */
219+
/* no releases yet — button still points at the SourceForge files page */
213220
});
214221
}
215222
</script>
@@ -385,7 +392,7 @@ const editionIcons: Record<(typeof editionOrder)[number], string> = {
385392

386393
@media (min-width: 1100px) {
387394
.edition-grid {
388-
grid-template-columns: repeat(5, 1fr);
395+
grid-template-columns: repeat(3, 1fr);
389396
}
390397
}
391398

@@ -530,6 +537,14 @@ const editionIcons: Record<(typeof editionOrder)[number], string> = {
530537
padding: 0.2rem 0.7rem;
531538
}
532539

540+
.download-actions {
541+
display: flex;
542+
flex-wrap: wrap;
543+
gap: 0.9rem;
544+
justify-content: center;
545+
align-items: center;
546+
}
547+
533548
.download-note {
534549
font-size: 0.85rem;
535550
color: var(--ink-faint);

src/i18n/translations.ts

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,11 @@ const en = {
126126
device: 'PCs & notebooks',
127127
body: 'The flagship. A GNOME desktop refined with Aurora Shell, ready for work, study and everything in between.',
128128
},
129+
education: {
130+
name: 'Education',
131+
device: 'Classrooms & labs',
132+
body: 'A Workstation-derived edition for schools and student devices, with curated educational apps and easy fleet management.',
133+
},
129134
play: {
130135
name: 'Play',
131136
device: 'Gaming handhelds',
@@ -160,7 +165,8 @@ const en = {
160165
subtitle:
161166
'Grab the latest Workstation ISO, flash it to a USB drive and install. That is the last update you will ever do by hand.',
162167
button: 'Download latest ISO',
163-
note: 'Downloads are served from GitHub Releases. The button always points to the most recent version.',
168+
notes: 'Release notes',
169+
note: 'Downloads are served from SourceForge mirrors worldwide. The button always points to the most recent version.',
164170
checking: 'checking latest version…',
165171
latest: 'Latest release',
166172
},
@@ -206,7 +212,7 @@ const en = {
206212
{
207213
tag: 'Clipboard History',
208214
title: 'Your clipboard finally remembers',
209-
body: 'Everything you copy, searchable and one shortcut away. Pin what matters, navigate with the keyboard, and rest easy — history never leaves your machine.',
215+
body: 'Everything you copy, searchable and one shortcut away. Pin what matters, navigate with the keyboard, and rest easy. History never leaves your machine.',
210216
file: 'clipboard.png',
211217
},
212218
{
@@ -218,7 +224,7 @@ const en = {
218224
{
219225
tag: 'Weather & Meeting Clock',
220226
title: 'Your day, right next to the clock',
221-
body: 'Current weather on one side, your next meeting on the other. Alerts before calls start, snooze when you need five more minutes all in the panel you already look at.',
227+
body: 'Current weather on one side, your next meeting on the other. Alerts before calls start, snooze when you need five more minutes, all in the panel you already look at.',
222228
file: 'clock.png',
223229
},
224230
{
@@ -467,6 +473,11 @@ const ptBr: typeof en = {
467473
device: 'PCs e notebooks',
468474
body: 'A edição principal. Um desktop GNOME refinado com o Aurora Shell, pronto para trabalho, estudo e tudo no meio do caminho.',
469475
},
476+
education: {
477+
name: 'Education',
478+
device: 'Salas de aula e laboratórios',
479+
body: 'Uma edição derivada da Workstation para escolas e dispositivos de estudantes, com apps educacionais selecionados e gestão fácil de frota.',
480+
},
470481
play: {
471482
name: 'Play',
472483
device: 'Portáteis de jogos',
@@ -501,7 +512,8 @@ const ptBr: typeof en = {
501512
subtitle:
502513
'Baixe a ISO mais recente da Workstation, grave em um pendrive e instale. Essa é a última atualização que você vai fazer na mão.',
503514
button: 'Baixar ISO mais recente',
504-
note: 'Os downloads vêm do GitHub Releases. O botão sempre aponta para a versão mais recente.',
515+
notes: 'Notas da versão',
516+
note: 'Os downloads vêm de mirrors do SourceForge no mundo todo. O botão sempre aponta para a versão mais recente.',
505517
checking: 'verificando última versão…',
506518
latest: 'Última versão',
507519
},
@@ -547,7 +559,7 @@ const ptBr: typeof en = {
547559
{
548560
tag: 'Clipboard History',
549561
title: 'Sua área de transferência finalmente lembra',
550-
body: 'Tudo que você copia, pesquisável e a um atalho de distância. Fixe o que importa, navegue pelo teclado e fique tranquilo — o histórico nunca sai da sua máquina.',
562+
body: 'Tudo que você copia, pesquisável e a um atalho de distância. Fixe o que importa, navegue pelo teclado e fique tranquilo. O histórico nunca sai da sua máquina.',
551563
file: 'clipboard.png',
552564
},
553565
{
@@ -559,7 +571,7 @@ const ptBr: typeof en = {
559571
{
560572
tag: 'Weather & Meeting Clock',
561573
title: 'O seu dia, ao lado do relógio',
562-
body: 'O clima de um lado, a próxima reunião do outro. Alertas antes das chamadas começarem, soneca quando você precisa de mais cinco minutos tudo no painel que você já olha.',
574+
body: 'O clima de um lado, a próxima reunião do outro. Alertas antes das chamadas começarem, soneca quando você precisa de mais cinco minutos, tudo no painel que você já olha.',
563575
file: 'clock.png',
564576
},
565577
{
@@ -721,6 +733,7 @@ export const links = {
721733
releasesLatest: 'https://github.com/luminusOS/images/releases/latest',
722734
releasesAll: 'https://github.com/luminusOS/images/releases',
723735
releasesApi: 'https://api.github.com/repos/luminusOS/images/releases/latest',
736+
sfFiles: 'https://sourceforge.net/projects/luminusos/files/',
724737
org: 'https://github.com/luminusOS',
725738
discord: 'https://discord.gg/eVmXsqkvkw',
726739
imagesRepo: 'https://github.com/luminusOS/images',

0 commit comments

Comments
 (0)