diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index 0031d45..18c7d78 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -96,7 +96,7 @@ Also in `Settings → General → Pull Requests`:
### Release data freshness
-`/download` is **prerendered**, not fetched in the browser. `components/DownloadButton.tsx` is a server component that resolves GitHub releases at render time via `lib/releases.ts`, then hands the data to `DownloadButtonClient.tsx` for the interactive bits. Visitors never call GitHub, so the page costs one upstream request per day instead of one per visitor — comfortably under GitHub's 60/hour unauthenticated limit.
+`/download` is **prerendered**, not fetched in the browser. `components/DownloadPanel.tsx` is a server component that resolves GitHub releases at render time via `lib/releases.ts`, then hands the data to `DownloadPanelClient.tsx` for the interactive bits. Visitors never call GitHub, so the page costs one upstream request per day instead of one per visitor — comfortably under GitHub's 60/hour unauthenticated limit.
Refresh is driven by the cron in `vercel.json`:
diff --git a/app/download/page.tsx b/app/download/page.tsx
index 821e415..757ebba 100644
--- a/app/download/page.tsx
+++ b/app/download/page.tsx
@@ -1,6 +1,6 @@
import type { Metadata } from "next";
import { Footer, Navbar } from "../../layout";
-import DownloadButton from "../../components/DownloadButton";
+import DownloadPanel from "../../components/DownloadPanel";
export const metadata: Metadata = {
title: "Download VoxKit",
@@ -26,7 +26,7 @@ export default function DownloadPage() {
Get the latest version of VoxKit for your operating system
-
+
diff --git a/components/DownloadButton.tsx b/components/DownloadPanel.tsx
similarity index 85%
rename from components/DownloadButton.tsx
rename to components/DownloadPanel.tsx
index 7ee06a4..6d837d0 100644
--- a/components/DownloadButton.tsx
+++ b/components/DownloadPanel.tsx
@@ -1,5 +1,5 @@
import { getReleases } from "../lib/releases";
-import DownloadButtonClient from "./DownloadButtonClient";
+import DownloadPanelClient from "./DownloadPanelClient";
/**
* Server component. Resolves release data during render so the panel arrives
@@ -9,7 +9,7 @@ import DownloadButtonClient from "./DownloadButtonClient";
* Freshness is controlled by the page's `revalidate` plus the nightly cron in
* `app/api/revalidate-releases/route.ts`, not by this component.
*/
-export default async function DownloadButton() {
+export default async function DownloadPanel() {
const result = await getReleases();
if (!result.ok) {
@@ -21,7 +21,7 @@ export default async function DownloadButton() {
}
return (
-
diff --git a/components/DownloadButtonClient.tsx b/components/DownloadPanelClient.tsx
similarity index 98%
rename from components/DownloadButtonClient.tsx
rename to components/DownloadPanelClient.tsx
index fd17246..5ee6dfb 100644
--- a/components/DownloadButtonClient.tsx
+++ b/components/DownloadPanelClient.tsx
@@ -13,7 +13,7 @@ import type {
type OS = OperatingSystem | null;
-type DownloadButtonClientProps = {
+type DownloadPanelClientProps = {
releases: GroupedReleases;
/** ISO timestamp of the server render that produced `releases`. */
lastUpdated: string;
@@ -68,10 +68,10 @@ const isPreReleaseVersion = (version: string): boolean => {
return major < 1;
};
-export default function DownloadButtonClient({
+export default function DownloadPanelClient({
releases,
lastUpdated,
-}: DownloadButtonClientProps) {
+}: DownloadPanelClientProps) {
const detectedOS = useSyncExternalStore(subscribeToOS, detectOS, getServerOS);
const [pickedOS, setPickedOS] = useState(null);
diff --git a/lib/releases.ts b/lib/releases.ts
index 806d353..7659e69 100644
--- a/lib/releases.ts
+++ b/lib/releases.ts
@@ -12,7 +12,7 @@ import { fakeGitHubReleases } from "./fakeReleases";
/**
* Server-side resolution of the latest VoxKit release per OS.
*
- * This runs during render (see `components/DownloadButton.tsx`), not in the
+ * This runs during render (see `components/DownloadPanel.tsx`), not in the
* browser, so a visitor never pays for a GitHub round trip and the download
* panel ships fully populated in the initial HTML.
*/
diff --git a/types/releases.ts b/types/releases.ts
index 64bcd62..a99f3d9 100644
--- a/types/releases.ts
+++ b/types/releases.ts
@@ -50,6 +50,6 @@ export interface ReleasesAPIResponse {
lastUpdated: string;
}
-export interface DownloadButtonProps {
+export interface DownloadPanelProps {
className?: string;
}