temporarily hide downloads (#1830)

This commit is contained in:
BFlat
2026-08-02 10:57:54 +07:00
committed by GitHub
parent 5f46ee0e7e
commit 6b1b4c7b0d
8 changed files with 138 additions and 83 deletions
@@ -5,7 +5,10 @@ import {
faLinux,
} from "@fortawesome/free-brands-svg-icons";
import { isMobile, isWindows, isMacOs } from "react-device-detect";
import { DOWNLOAD_LINKS } from "../../config/github_download_links";
import {
DOWNLOAD_LINKS,
DOWNLOADS_ENABLED,
} from "../../config/github_download_links";
interface DownloadButtonProps {
className?: string;
@@ -21,10 +24,12 @@ export const DownloadButton = ({ className = "" }: DownloadButtonProps) => {
const getDownloadLink = () => {
if (isWindows) return DOWNLOAD_LINKS.WINDOWS;
if (isMacOs) return DOWNLOAD_LINKS.MACOS;
if (isLinux) return DOWNLOAD_LINKS.LINUX;
// No Linux build is published yet.
return null;
};
if (!DOWNLOADS_ENABLED) return null;
const getIcon = () => {
if (isMobile) return undefined;
if (isWindows) return faWindows;
@@ -3,7 +3,10 @@ import { isMobile, isMacOs } from "react-device-detect";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faWindows, faApple } from "@fortawesome/free-brands-svg-icons";
import { faRocket } from "@fortawesome/pro-solid-svg-icons";
import { DOWNLOAD_LINKS } from "../config/github_download_links";
import {
DOWNLOAD_LINKS,
DOWNLOADS_ENABLED,
} from "../config/github_download_links";
interface LandingActionButtonsProps {
onDownloadClick?: (e: React.MouseEvent) => void;
@@ -40,23 +43,25 @@ export const LandingActionButtons = ({
<FontAwesomeIcon icon={faRocket} />
{creditsButtonText}
</Button>
<div className="relative">
<Button
className="text-md px-8 py-4 text-lg font-semibold rounded-xl shadow-lg gap-3 transition-all duration-300 bg-white hover:bg-white/80 text-black"
as="link"
href={downloadUrl}
onClick={onDownloadClick}
>
<FontAwesomeIcon icon={isMacOs ? faApple : faWindows} />
Download for {isMacOs ? "Mac" : "Windows"}
</Button>
<a
href="/download"
className="absolute left-1/2 -translate-x-1/2 top-full mt-2 text-xs text-white/40 hover:text-white/70 transition-colors duration-200 whitespace-nowrap"
>
More download options
</a>
</div>
{DOWNLOADS_ENABLED && (
<div className="relative">
<Button
className="text-md px-8 py-4 text-lg font-semibold rounded-xl shadow-lg gap-3 transition-all duration-300 bg-white hover:bg-white/80 text-black"
as="link"
href={downloadUrl}
onClick={onDownloadClick}
>
<FontAwesomeIcon icon={isMacOs ? faApple : faWindows} />
Download for {isMacOs ? "Mac" : "Windows"}
</Button>
<a
href="/download"
className="absolute left-1/2 -translate-x-1/2 top-full mt-2 text-xs text-white/40 hover:text-white/70 transition-colors duration-200 whitespace-nowrap"
>
More download options
</a>
</div>
)}
</>
)}
</div>
@@ -10,6 +10,11 @@ const WINDOWS_VERSION = "0.32.0"; // 2026-04-03 characters + prompt box
//const MAC_VERSION = "0.20.0"; // 2026-03-24 Reprompt, performance
const MAC_VERSION = "0.32.0"; // 2026-04-03 characters + prompt box
// The published desktop builds are out of date — every download button and
// link on the site is hidden while this is false. Flip back on when a current
// release ships.
export const DOWNLOADS_ENABLED = false;
export const DOWNLOAD_LINKS = {
WINDOWS: `https://github.com/storytold/artcraft/releases/download/artcraft-v${WINDOWS_VERSION}/ArtCraft_${WINDOWS_VERSION}_x64-setup.exe`,
MACOS: `https://github.com/storytold/artcraft/releases/download/artcraft-v${MAC_VERSION}/ArtCraft_${MAC_VERSION}_universal.dmg`,
@@ -9,7 +9,10 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { Button } from "@storyteller/ui-button";
import { Link, useSearchParams } from "react-router-dom";
import { isMobile, isMacOs } from "react-device-detect";
import { DOWNLOAD_LINKS } from "../../config/github_download_links";
import {
DOWNLOAD_LINKS,
DOWNLOADS_ENABLED,
} from "../../config/github_download_links";
import { SOCIAL_LINKS } from "../../config/links";
import Seo from "../../components/seo";
import { PagePatternBackdrop } from "../../components/truchet-pattern";
@@ -142,14 +145,16 @@ const CheckoutSuccess = () => {
{/* CTA Buttons */}
{!isMobile ? (
<div className="flex flex-col sm:flex-row gap-4 justify-center">
<Button
as="link"
href={downloadUrl}
className="rounded-full bg-primary hover:bg-primary-600 px-8 py-3 text-sm font-bold rounded-xl justify-center"
>
<FontAwesomeIcon icon={faDownload} className="mr-2" />
Download ArtCraft
</Button>
{DOWNLOADS_ENABLED && (
<Button
as="link"
href={downloadUrl}
className="rounded-full bg-primary hover:bg-primary-600 px-8 py-3 text-sm font-bold rounded-xl justify-center"
>
<FontAwesomeIcon icon={faDownload} className="mr-2" />
Download ArtCraft
</Button>
)}
</div>
) : (
<div className="bg-[#431407] border border-orange-900/50 rounded-2xl p-6 text-orange-200 text-sm leading-relaxed">
@@ -162,7 +167,7 @@ const CheckoutSuccess = () => {
)}
{/* Download Links */}
{!isMobile && (
{!isMobile && DOWNLOADS_ENABLED && (
<div className="mt-6 flex justify-center gap-6 text-sm font-medium text-white/40">
<a
href={DOWNLOAD_LINKS.WINDOWS}
@@ -7,7 +7,10 @@ import {
} from "@fortawesome/pro-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { Button } from "@storyteller/ui-button";
import { DOWNLOAD_LINKS } from "../../config/github_download_links";
import {
DOWNLOAD_LINKS,
DOWNLOADS_ENABLED,
} from "../../config/github_download_links";
import { isMobile, isMacOs } from "react-device-detect";
import { useState, useEffect } from "react";
import Lenis from "lenis";
@@ -120,7 +123,7 @@ const Download = () => {
>
Download on a desktop
</Button>
) : (
) : DOWNLOADS_ENABLED ? (
<Button
className="rounded-full glow-border-animated text-md px-8 py-4 text-lg font-semibold rounded-xl shadow-lg gap-3 transition-all duration-300 hover:scale-105 hover:shadow-primary/25 bg-white text-black hover:bg-white/90"
as="link"
@@ -130,6 +133,13 @@ const Download = () => {
<FontAwesomeIcon icon={isMacOs ? faApple : faWindows} />
Download for {isMacOs ? "Mac" : "Windows"}
</Button>
) : (
<Button
className="rounded-full text-lg font-semibold rounded-xl shadow-lg"
disabled
>
Downloads temporarily unavailable — check back soon
</Button>
)}
</div>
</div>
@@ -203,7 +213,7 @@ const Download = () => {
>
Desktop only
</Button>
) : (
) : DOWNLOADS_ENABLED ? (
<Button
className="rounded-full w-full justify-center font-semibold gap-2"
as="link"
@@ -213,6 +223,13 @@ const Download = () => {
>
Download
</Button>
) : (
<Button
className="rounded-full w-full justify-center font-semibold"
disabled
>
Temporarily unavailable
</Button>
)}
</div>
);
@@ -35,7 +35,10 @@ import { DownloadModal } from "../../components/download-modal";
import ModelBadgeGrid from "../../components/model-badge-grid";
import { getSession } from "../../lib/session";
import { BillingApi } from "@storyteller/api";
import { DOWNLOAD_LINKS } from "../../config/github_download_links";
import {
DOWNLOAD_LINKS,
DOWNLOADS_ENABLED,
} from "../../config/github_download_links";
import { webappUrl, SOCIAL_LINKS } from "../../config/links";
import { Button } from "@storyteller/ui-button";
import { Tooltip } from "@storyteller/ui-tooltip";
@@ -770,17 +773,19 @@ const LandingSD25 = () => {
isLoggedIn={isLoggedIn}
hasSubscription={hasSubscription}
/>
<a
href={downloadUrl}
onClick={onDownloadClick}
className="inline-flex items-center gap-2 h-11 px-5 rounded-full bg-white hover:bg-white/90 text-black text-[14px] font-semibold transition-all hover:-translate-y-px shadow-[0_4px_24px_-4px_rgba(255,255,255,0.2)]"
>
<FontAwesomeIcon
icon={isMacOs ? faApple : faWindows}
className="text-[13px]"
/>
Download for {isMacOs ? "Mac" : "Windows"}
</a>
{DOWNLOADS_ENABLED && (
<a
href={downloadUrl}
onClick={onDownloadClick}
className="inline-flex items-center gap-2 h-11 px-5 rounded-full bg-white hover:bg-white/90 text-black text-[14px] font-semibold transition-all hover:-translate-y-px shadow-[0_4px_24px_-4px_rgba(255,255,255,0.2)]"
>
<FontAwesomeIcon
icon={isMacOs ? faApple : faWindows}
className="text-[13px]"
/>
Download for {isMacOs ? "Mac" : "Windows"}
</a>
)}
</>
)}
</div>
@@ -1547,17 +1552,19 @@ const LandingSD25 = () => {
isLoggedIn={isLoggedIn}
hasSubscription={hasSubscription}
/>
<a
href={downloadUrl}
onClick={onDownloadClick}
className="inline-flex items-center gap-2 h-11 px-5 rounded-full bg-white hover:bg-white/90 text-black text-[14px] font-semibold transition-all hover:-translate-y-px shadow-[0_4px_24px_-4px_rgba(255,255,255,0.2)]"
>
<FontAwesomeIcon
icon={isMacOs ? faApple : faWindows}
className="text-[13px]"
/>
Download for {isMacOs ? "Mac" : "Windows"}
</a>
{DOWNLOADS_ENABLED && (
<a
href={downloadUrl}
onClick={onDownloadClick}
className="inline-flex items-center gap-2 h-11 px-5 rounded-full bg-white hover:bg-white/90 text-black text-[14px] font-semibold transition-all hover:-translate-y-px shadow-[0_4px_24px_-4px_rgba(255,255,255,0.2)]"
>
<FontAwesomeIcon
icon={isMacOs ? faApple : faWindows}
className="text-[13px]"
/>
Download for {isMacOs ? "Mac" : "Windows"}
</a>
)}
</>
)}
</div>
@@ -36,7 +36,10 @@ import { DownloadModal } from "../../components/download-modal";
import ModelBadgeGrid from "../../components/model-badge-grid";
import { getSession } from "../../lib/session";
import { BillingApi } from "@storyteller/api";
import { DOWNLOAD_LINKS } from "../../config/github_download_links";
import {
DOWNLOAD_LINKS,
DOWNLOADS_ENABLED,
} from "../../config/github_download_links";
import { webappUrl, SOCIAL_LINKS } from "../../config/links";
import { Button } from "@storyteller/ui-button";
import { Tooltip } from "@storyteller/ui-tooltip";
@@ -704,17 +707,19 @@ const Landing3 = () => {
isLoggedIn={isLoggedIn}
hasSubscription={hasSubscription}
/>
<a
href={downloadUrl}
onClick={onDownloadClick}
className="inline-flex items-center gap-2 h-11 px-5 rounded-full bg-white hover:bg-white/90 text-black text-[14px] font-semibold transition-all hover:-translate-y-px shadow-[0_4px_24px_-4px_rgba(255,255,255,0.2)]"
>
<FontAwesomeIcon
icon={isMacOs ? faApple : faWindows}
className="text-[13px]"
/>
Download for {isMacOs ? "Mac" : "Windows"}
</a>
{DOWNLOADS_ENABLED && (
<a
href={downloadUrl}
onClick={onDownloadClick}
className="inline-flex items-center gap-2 h-11 px-5 rounded-full bg-white hover:bg-white/90 text-black text-[14px] font-semibold transition-all hover:-translate-y-px shadow-[0_4px_24px_-4px_rgba(255,255,255,0.2)]"
>
<FontAwesomeIcon
icon={isMacOs ? faApple : faWindows}
className="text-[13px]"
/>
Download for {isMacOs ? "Mac" : "Windows"}
</a>
)}
</>
)}
</div>
@@ -1399,17 +1404,19 @@ const Landing3 = () => {
isLoggedIn={isLoggedIn}
hasSubscription={hasSubscription}
/>
<a
href={downloadUrl}
onClick={onDownloadClick}
className="inline-flex items-center gap-2 h-11 px-5 rounded-full bg-white hover:bg-white/90 text-black text-[14px] font-semibold transition-all hover:-translate-y-px shadow-[0_4px_24px_-4px_rgba(255,255,255,0.2)]"
>
<FontAwesomeIcon
icon={isMacOs ? faApple : faWindows}
className="text-[13px]"
/>
Download for {isMacOs ? "Mac" : "Windows"}
</a>
{DOWNLOADS_ENABLED && (
<a
href={downloadUrl}
onClick={onDownloadClick}
className="inline-flex items-center gap-2 h-11 px-5 rounded-full bg-white hover:bg-white/90 text-black text-[14px] font-semibold transition-all hover:-translate-y-px shadow-[0_4px_24px_-4px_rgba(255,255,255,0.2)]"
>
<FontAwesomeIcon
icon={isMacOs ? faApple : faWindows}
className="text-[13px]"
/>
Download for {isMacOs ? "Mac" : "Windows"}
</a>
)}
</>
)}
</div>
@@ -8,7 +8,10 @@ import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { Button } from "@storyteller/ui-button";
import { Link } from "react-router-dom";
import { isMobile, isMacOs } from "react-device-detect";
import { DOWNLOAD_LINKS } from "../../config/github_download_links";
import {
DOWNLOAD_LINKS,
DOWNLOADS_ENABLED,
} from "../../config/github_download_links";
import Seo from "../../components/seo";
import { PricingTable } from "@storyteller/ui-pricing-table";
import { PagePatternBackdrop } from "../../components/truchet-pattern";
@@ -75,8 +78,9 @@ const Welcome = () => {
</div>
<p className="text-white/60 mb-6">
Your download should have started automatically. Follow these
steps to begin creating:
{DOWNLOADS_ENABLED
? "Your download should have started automatically. Follow these steps to begin creating:"
: "Follow these steps to begin creating:"}
</p>
<div className="grid grid-cols-1 sm:grid-cols-2 gap-4 mb-8">
@@ -99,7 +103,7 @@ const Welcome = () => {
</div>
{/* Download Contingency */}
{!isMobile && (
{!isMobile && DOWNLOADS_ENABLED && (
<div className="pt-6 border-t border-white/10">
<div className="flex flex-col sm:flex-row items-center justify-between gap-4">
<span className="text-white/50 text-sm">