Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
989a244
init front
forestream Apr 22, 2026
a1ff509
fix front eslint
forestream Apr 22, 2026
5fc65a0
Init front main
forestream Apr 22, 2026
b5896ec
Feat front header ui
forestream Apr 22, 2026
45a76bf
Feat mobile menu ui
forestream Apr 22, 2026
ff11339
Feat front main style
forestream Apr 22, 2026
eaf3d9a
Feat documentation page
forestream Apr 22, 2026
28a3869
Feat mdx pages
forestream Apr 22, 2026
80f0df5
Feat table of contents in documentation page
forestream Apr 23, 2026
1a1270e
About us page
forestream Apr 23, 2026
dc6de7a
Feat theme toggle
forestream Apr 23, 2026
8ca7230
Fix mdx table, code styles
forestream Apr 23, 2026
3677589
Feat mdx page static params
forestream Apr 23, 2026
cfae24a
Fix footer typography
forestream Apr 23, 2026
18da4f0
Fix header logo text color changing with io
forestream Apr 23, 2026
b8fd21e
Feat icon links, fix theme toggle event handling
forestream Apr 23, 2026
3e20a80
Feat document edit text ui
forestream Apr 23, 2026
59524be
Add links on landing
forestream Apr 23, 2026
1c0ade0
Fix style
forestream Apr 24, 2026
76a1553
Feat metadata, og
forestream Apr 24, 2026
c3491e3
Feat header selected tab ui
forestream Apr 24, 2026
0510c1f
Fix og iamge
forestream Apr 24, 2026
155f985
Add img alt
forestream Apr 24, 2026
8c9d01d
Fix about us page responsive style
forestream Apr 24, 2026
3e8984c
Fix header intersection observer logic
forestream Apr 24, 2026
fa21673
Feat search
forestream Apr 27, 2026
b39eb33
Chagne front to landing, fix build errors, add cicd script
forestream Apr 27, 2026
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
77 changes: 77 additions & 0 deletions .github/workflows/deploy-pages.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
name: Deploy to GitHub Pages

on:
push:
branches:
- main
pull_request:
branches:
- main
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: pages-${{ github.ref }}
cancel-in-progress: false

jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6

- name: Install bun
uses: oven-sh/setup-bun@v2

- name: Cache bun dependencies
uses: actions/cache@v5
with:
path: ~/.bun/install/cache
key: bun-${{ runner.os }}-${{ hashFiles('**/bun.lock') }}
restore-keys: |
bun-${{ runner.os }}-

- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: 22

- name: Cache Next.js build
uses: actions/cache@v5
with:
path: |
apps/landing/.next/cache
key: nextjs-${{ runner.os }}-${{ hashFiles('**/bun.lock') }}-${{ hashFiles('apps/landing/**/*.{js,jsx,ts,tsx,md,mdx}') }}
restore-keys: |
nextjs-${{ runner.os }}-${{ hashFiles('**/bun.lock') }}-

- name: Install dependencies
run: bun install

- name: Build landing
run: bun run --filter landing build

- name: Disable Jekyll
run: touch apps/landing/out/.nojekyll

- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./apps/landing/out

deploy:
needs: build
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,4 @@ bin/
*.iml
.idea/
.omc
node_modules
3 changes: 3 additions & 0 deletions .oxlintrc.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"extends": ["node_modules/eslint-plugin-devup/oxlintrc.json"]
}
78 changes: 77 additions & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1 +1,77 @@
@AGENTS.md
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

@AGENTS.md

## Repository Shape

Vespera is a **hybrid monorepo** with two workspaces living side-by-side at the repo root:

| Workspace | Manager | Members | Purpose |
|-----------|---------|---------|---------|
| Cargo (`Cargo.toml`) | cargo | `crates/*`, `examples/*` (excluding `examples/java-jni-demo`) | OpenAPI engine, proc-macros, JNI bridge |
| Bun (`package.json`) | bun | `apps/*` | Marketing/docs site + admin panel (Next.js) |

Both live at the root — `bun run ...` operates on the Node side; `cargo ...` on the Rust side. Many root scripts deliberately cross the boundary (e.g., `prelint` runs `cargo clippy/fmt/check` **before** oxlint runs on JS). See `AGENTS.md` for crate-level detail.

## Common Commands (Root)

```bash
# Rust side
cargo build # Build all crates
cargo test --workspace # All Rust tests
cargo test -p vespera_macro # One crate
cargo test --test <name> -- <filter> # Single integration test
cargo tarpaulin --out stdout # Coverage (run via `bun run posttest`)

# Lint / format (order matters — `prelint` hook runs Rust FIRST)
bun run lint # oxlint over JS/TS (runs after prelint → cargo clippy+fmt+check)
bun run lint:fix # oxlint --fix (prelint:fix runs cargo clippy --fix + fmt first)

# Front-end workspace
bun run dev # Runs `dev` in every apps/* (Next.js dev servers)
bun run build # Builds apps/front and apps/admin
cd apps/front && bun dev # Single-app dev (preferred over -F flag, per devfive-frontend skill)

# Tests (Bun side)
bun test # Root runs bun test + tarpaulin via posttest hook

# Release tooling
bun run changepacks # Version bumps via @changepacks/cli
```

> **`prelint` gotcha:** `bun run lint` triggers `cargo clippy -- -D warnings && cargo fmt --check && cargo check` first. Any Rust warning fails the JS lint. Run `bun run lint:fix` (which chains `cargo clippy --fix && cargo fmt`) to auto-resolve both sides.

## Frontend (`apps/front`)

Next.js 16 App Router + React 19 + @devup-ui/react (build-time CSS-in-JS). Theme tokens live in `apps/front/devup.json` and use the `$token` syntax in JSX props only.

- `apps/front/src/app/` contains **only** `layout.tsx` and `page.tsx` — all other components belong in `src/components/` (per devfive-frontend conventions).
- `src/api.ts` is generated/edited via `@devup-api/fetch`; it currently contains a placeholder `/users/users` call that fails typecheck — a known scaffolding leftover, not a regression.
- Styling: use devup-ui shorthand props (`bg`, `p`, `w`, `_hover`, `[mobile,null,pc]` responsive arrays). Never `style={{...}}` or Tailwind. See `~/.claude/skills/devup-ui/SKILL.md` via the `/devup-ui` skill.

## Rust × Java Boundary

The JNI integration (`crates/vespera_jni` → `libs/vespera-bridge/` Java lib) is load-bearing for `examples/rust-jni-demo`. When touching:

- `vespera_inprocess` owns transport-agnostic dispatch (no JNI deps).
- `vespera_jni` is a thin layer depending on `vespera_inprocess` + `jni` + `tokio/rt-multi-thread`.
- User code depends on `vespera` only, with `features = ["jni"]` — never `vespera_jni` directly. Breaking this invariant is an AGENTS.md-listed anti-pattern.

The Java package `com.devfive.vespera.bridge` is **fixed** because the JNI symbol name is derived from it. Renaming it breaks the native load.

## Pre-Commit (Husky)

`bun run prepare` installs husky. Commits trigger whatever lives in `.husky/` — typically a `lint` pass. Never bypass with `--no-verify`; fix the underlying Rust or oxlint finding.

## Where Tests Live

| Concern | Location |
|---------|----------|
| Macro integration tests | `crates/vespera_macro/tests/` (+ `insta` snapshots) |
| Core unit tests | `crates/vespera_core/src/**` inline `#[cfg(test)]` |
| JNI end-to-end | `examples/rust-jni-demo` (Rust + Java + Gradle) |
| Front tests | `apps/front/src/__tests__/` (bun test + bun-test-env-dom) |

Snapshot tests use `insta` — run `cargo insta review` to accept drifts.
10 changes: 5 additions & 5 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

41 changes: 41 additions & 0 deletions apps/landing/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/versions

# testing
/coverage

# next.js
/.next/
/out/

# production
/build

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*

# env files (can opt-in for committing if needed)
.env*

# vercel
.vercel

# typescript
*.tsbuildinfo
next-env.d.ts
36 changes: 36 additions & 0 deletions apps/landing/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).

## Getting Started

First, run the development server:

```bash
npm run dev
# or
yarn dev
# or
pnpm dev
# or
bun dev
```

Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.

You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.

This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.

## Learn More

To learn more about Next.js, take a look at the following resources:

- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.

You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!

## Deploy on Vercel

The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.

Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
Loading
Loading