Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions apps/frontend/solidcraft-landing/public/_redirects
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
/app https://docs.solidcraft.io/app 302
/app/ https://docs.solidcraft.io/app 302
/app-rc https://docs.solidcraft.io/app-rc/ 302
/app-rc/ https://docs.solidcraft.io/app-rc/ 302
/app-edge https://docs.solidcraft.io/app-edge/ 302
/app-edge/ https://docs.solidcraft.io/app-edge/ 302
/downloads/ /download/ 301
/github/ https://github.com/tangency-labs/solidcraft 302
16 changes: 16 additions & 0 deletions apps/frontend/solidcraft-landing/src/components/Actions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ import { useRelease } from "../lib/use-release";
export default function Actions({
compact = false,
direct = false,
versions = false,
}: {
compact?: boolean;
direct?: boolean;
versions?: boolean;
}) {
const release = useRelease();
const [system, setSystem] = useState<{
Expand Down Expand Up @@ -58,6 +60,20 @@ export default function Actions({
<Globe aria-hidden="true" size={18} strokeWidth={1.5} />
Try in your browser
</a>
{versions && (
<p className="small muted" style={{ flexBasis: "100%" }}>
Other versions to try:{" "}
<a className="text-link" href={site.appRc}>
release candidate
</a>{" "}
or{" "}
<a className="text-link" href={site.appEdge}>
latest build
</a>
. These can break, and designs saved in them may not open in the
stable version.
</p>
)}
</div>
);
}
2 changes: 2 additions & 0 deletions apps/frontend/solidcraft-landing/src/data/site.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ export const site = {
name: "SolidCraft",
url: "https://solidcraft.io",
app: "https://solidcraft.io/app",
appRc: "https://solidcraft.io/app-rc",
appEdge: "https://solidcraft.io/app-edge",
discord: "/discord",
discordInvite: "https://discord.gg/FtU4NQNVDH",
docs: "https://docs.solidcraft.io/",
Expand Down
6 changes: 6 additions & 0 deletions apps/frontend/solidcraft-landing/src/pages/download.astro
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,12 @@ const release = snapshotSchema.parse(snapshot);
On macOS you can also install with Homebrew:{" "}
<code>brew install --cask tangency-labs/tap/solidcraft</code>
</p>
<p class="small muted" data-prereleases style="margin-top:12px">
Want to test early? Release candidates are published as pre-releases on{" "}
<a class="text-link" href={site.releases}>GitHub Releases</a>. They can
break, and designs saved in them may not open in the stable version. The
downloads above are always the latest stable release.
</p>
<DownloadSelector client:load />
<noscript>
<p class="notice">
Expand Down
2 changes: 1 addition & 1 deletion apps/frontend/solidcraft-landing/src/pages/index.astro
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ import { homeStructuredData } from "../lib/structured-data";
feature history. Work in the editor or connect an AI agent through
MCP.
</p>
<Actions direct client:load />
<Actions direct versions client:load />
<a class="text-link" href="/mcp/">
Connect an AI agent<Icon size={17} />
</a>
Expand Down
8 changes: 7 additions & 1 deletion apps/frontend/solidcraft-landing/tests/browser/site.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ test("interior pages reflow on mobile, and font failure preserves usable content
await page.emulateMedia({ reducedMotion: "reduce" });
await page.goto("/");
await expect(page.locator(".hero h1")).toBeVisible();
await expect(page.locator(".hero .actions a")).toHaveCount(3);
await expect(page.locator(".hero .actions a")).toHaveCount(5);
expect(
await page.evaluate(
() => document.documentElement.scrollWidth <= window.innerWidth,
Expand All @@ -91,6 +91,12 @@ test("hero actions stay visible and layouts reflow at representative widths", as
await expect(
actions.getByRole("link", { name: "Try in your browser" }),
).toHaveAttribute("href", site.app);
await expect(
actions.getByRole("link", { name: "release candidate" }),
).toHaveAttribute("href", site.appRc);
await expect(
actions.getByRole("link", { name: "latest build" }),
).toHaveAttribute("href", site.appEdge);
expect(
await page.evaluate(
() => document.documentElement.scrollWidth <= window.innerWidth,
Expand Down
Loading