Add portable Windows desktop downloads and release uploads

This commit is contained in:
2026-10-11 11:44:27 +05:00
parent fc6da6756d
commit a54a3e7705
24 changed files with 4159 additions and 5 deletions

View File

@@ -3,6 +3,7 @@ import { Header, Footer } from "@/components/Shell";
import { Blocks, Server, Download, ExternalLink } from "lucide-react";
import { existsSync } from "node:fs";
import Link from "next/link";
import desktopRelease from "@/shared/desktop-release.json";
const release = "0.1.3";
const versions = ["1.21.11", "26.1", "26.2"];
export const dynamic = "force-dynamic";
@@ -14,6 +15,34 @@ export default async function Downloads() {
<>
<Header />
<main className="section page-content">
<article className="tool-card" style={{ marginBottom: 40 }}>
<span className="eyebrow">{t("MINEGEO DESKTOP")}</span>
<h2>{t("Your next expedition, on your desktop.")}</h2>
<p className="muted">
{t(
"Download the portable app, run the EXE, and start exploring. No installation needed.",
)}
</p>
<a className="button primary" href={desktopRelease.file} download>
<Download size={16} /> {t("Download for Windows")}
</a>
<p className="muted" style={{ marginTop: 16 }}>
{t(
"Windows 10/11 · 64-bit · Version {version} · Internet required",
{ version: desktopRelease.version },
)}
</p>
<p className="muted">
{t(
"The app connects to minegeo.vercel.app and keeps you signed in on this device.",
)}
</p>
<p className="muted">
{t(
"This release is unsigned. Windows may show a publisher warning when you open it.",
)}
</p>
</article>
<span className="eyebrow">
{t("MADE FOR THE PEOPLE WHO KNOW THEIR WORLDS")}
</span>

View File

@@ -263,6 +263,7 @@ nav a:hover,
}
.hero-actions {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 26px;
margin-top: 30px;

View File

@@ -8,12 +8,14 @@ import {
Timer,
Blocks,
Upload,
Download,
} from "lucide-react";
import { Header, Footer } from "@/components/Shell";
import { MapCard } from "@/components/MapCard";
import { catalog } from "@/lib/catalog";
import { leaderboard } from "@/lib/leaderboard";
import { LeaderboardPreview } from "@/components/Leaderboard";
import desktopRelease from "@/shared/desktop-release.json";
export const dynamic = "force-dynamic";
export default async function Home() {
const { t, formatNumber } = await getI18n();
@@ -45,6 +47,9 @@ export default async function Home() {
<Link href="/servers" className="button primary">
{t("Start exploring")} <ArrowRight size={18} />
</Link>
<a href={desktopRelease.file} className="button" download>
<Download size={18} /> {t("Download for Windows")}
</a>
<Link href="/leaderboard" className="text-link">
{t("Meet the top explorers")} <ArrowRight size={14} />
</Link>