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
20 changes: 18 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ on:
pull_request:

jobs:
test:
name: test
rust:
name: rust
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
Expand All @@ -18,3 +18,19 @@ jobs:
- run: cargo clippy --all-targets -- -D warnings
- run: cargo test
- run: cargo package --allow-dirty

site:
name: site
runs-on: ubuntu-latest
defaults:
run:
working-directory: site
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm
cache-dependency-path: site/package-lock.json
- run: npm ci
- run: npm run build
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/target/
/.vercel/
/.ocvm/
/.openclaw-version
.omx/
Expand Down
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# Changelog

## Unreleased

- Updated landing page and crate metadata for `https://ocvm.vercel.app`.
- Clarified the site Install section around the pinned `v0.1.1` release.
- Added a GitHub Actions site build gate for the Vercel app in `site/`.
- Added repository-root Vercel build configuration for GitHub deployments.

## 0.1.0

- Initial Rust CLI project for `ocvm`.
Expand Down
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ edition = "2021"
description = "OpenClaw Version Manager"
license = "MIT"
repository = "https://github.com/PerfectPan/ocvm"
homepage = "https://ocvm.vercel.app"
readme = "README.md"
keywords = ["openclaw", "version-manager", "cli"]
categories = ["command-line-utilities", "development-tools"]
Expand Down
11 changes: 9 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

This is a version manager, not an OpenClaw installer replacement. Installation is the mechanism; reproducible local OpenClaw environments are the product.

Website: https://site-neon-two.vercel.app
Website: https://ocvm.vercel.app

## Status

Expand Down Expand Up @@ -214,13 +214,20 @@ Run real npm OpenClaw install validation in Docker instead of on the host:

## Landing Page

The TanStack Start landing page is deployed at https://site-neon-two.vercel.app. Source lives in `site/` and is configured for Vercel deployments from that directory:
The TanStack Start landing page is deployed at https://ocvm.vercel.app. Source lives in `site/` and is configured for Vercel deployments from that directory:

```bash
npm ci --prefix site
npm run build --prefix site
```

For automatic Vercel deployments from GitHub, connect the Vercel project to
`PerfectPan/ocvm` and track `main` as the production branch. The root
`vercel.json` installs and builds the `site/` app, then places Nitro's Vercel
output where Vercel expects it for a repository-root project. Pull requests
receive preview deployments; merges to `main` publish production deployments
for `ocvm.vercel.app`.

## Development

```bash
Expand Down
15 changes: 15 additions & 0 deletions site/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

TanStack Start landing page for the OpenClaw Version Manager.

Production URL: https://ocvm.vercel.app

## Development

```bash
Expand Down Expand Up @@ -31,3 +33,16 @@ docker run --rm -u "$(id -u):$(id -g)" \

Deploy the `site/` directory with Vercel. The site-specific `vercel.json` uses
`npm ci` and `npm run build`.

For GitHub-backed automatic deployments:

- Import or connect `PerfectPan/ocvm` in Vercel.
- Use `main` as the production branch.
- Assign `ocvm.vercel.app` to the project production domain.
- Keep the repository-root `vercel.json` when the Vercel project is connected
at the repository root. It runs the site install/build commands and copies
`site/.vercel/output` to the root `.vercel/output` expected by Vercel.
- If the Vercel project Root Directory is changed to `site`, the site-local
`vercel.json` is enough and the root build wrapper is not used.
- Keep the GitHub `CI` workflow's `site` job required so proposed changes
exercise the same site build command before merge.
34 changes: 31 additions & 3 deletions site/src/routes/__root.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@ import type { ReactNode } from 'react'

import appCss from '../styles.css?url'

const siteUrl = 'https://ocvm.vercel.app/'
const siteTitle = 'ocvm - OpenClaw Version Manager'
const siteDescription =
'ocvm installs, pins, switches, snapshots, and verifies OpenClaw versions for reproducible local projects.'

export const Route = createRootRoute({
head: () => ({
meta: [
Expand All @@ -14,19 +19,42 @@ export const Route = createRootRoute({
content: 'width=device-width, initial-scale=1',
},
{
title: 'ocvm - OpenClaw Version Manager',
title: siteTitle,
},
{
name: 'description',
content:
'ocvm installs, pins, switches, snapshots, and verifies OpenClaw versions for reproducible local projects.',
content: siteDescription,
},
{
property: 'og:title',
content: siteTitle,
},
{
property: 'og:description',
content: siteDescription,
},
{
property: 'og:url',
content: siteUrl,
},
{
property: 'og:type',
content: 'website',
},
{
name: 'twitter:card',
content: 'summary',
},
],
links: [
{
rel: 'stylesheet',
href: appCss,
},
{
rel: 'canonical',
href: siteUrl,
},
{
rel: 'icon',
href: '/ocvm-mark.svg',
Expand Down
25 changes: 22 additions & 3 deletions site/src/routes/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@ import { createFileRoute } from '@tanstack/react-router'

export const Route = createFileRoute('/')({ component: Home })

const currentRelease = 'v0.1.1'
const installCommand = `curl -fsSL \\
https://raw.githubusercontent.com/PerfectPan/ocvm/${currentRelease}/install.sh | sh`

const features = [
{
title: 'Project pinning',
Expand Down Expand Up @@ -88,12 +92,27 @@ OpenClaw 2026.3.28`}</pre>
</section>

<section id="install" className="installBand">
<div>
<div className="installText">
<p className="sectionLabel">Install</p>
<h2>Install a pinned release with one command.</h2>
<h2>Install the current pinned release.</h2>
<p>
The installer downloads the {currentRelease} GitHub Release asset
for your platform, verifies the checksum when one is available, and
installs <code>ocvm</code> into your local bin directory.
</p>
<div className="installActions">
<a
href={`https://github.com/PerfectPan/ocvm/releases/tag/${currentRelease}`}
>
View release
</a>
<a href="https://github.com/PerfectPan/ocvm/blob/main/docs/release.md">
Release guide
</a>
</div>
</div>
<pre className="installCommand">
curl -fsSL https://raw.githubusercontent.com/PerfectPan/ocvm/v0.1.1/install.sh | sh
<code>{installCommand}</code>
</pre>
</section>

Expand Down
34 changes: 33 additions & 1 deletion site/src/styles.css
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,33 @@ h1 {
color: #fffdf7;
}

.installText p:not(.sectionLabel) {
max-width: 560px;
margin: 18px 0 0;
color: #dfe8d9;
font-size: 1.05rem;
line-height: 1.62;
}

.installText code {
color: #fffdf7;
font-family: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
font-size: 0.95em;
}

.installActions {
display: flex;
flex-wrap: wrap;
gap: 18px;
margin-top: 24px;
color: #d8f5cc;
font-weight: 750;
}

.installActions a {
border-bottom: 1px solid currentColor;
}

h2 {
margin-bottom: 0;
font-size: 3.3rem;
Expand All @@ -192,6 +219,11 @@ h2 {
line-height: 1.55;
}

.installCommand code {
white-space: pre-wrap;
overflow-wrap: anywhere;
}

.features {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
Expand Down Expand Up @@ -297,7 +329,7 @@ h2 {
.terminal pre,
.installCommand {
padding: 18px;
font-size: 0.72rem;
font-size: 0.78rem;
}

h1 {
Expand Down
5 changes: 5 additions & 0 deletions vercel.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"framework": null,
"installCommand": "cd site && npm ci",
"buildCommand": "cd site && npm run build && rm -rf ../.vercel && cp -R .vercel ../.vercel"
}
Loading