Skip to content

Commit 0f6d31c

Browse files
committed
ci: build and deploy the Vite landing page
1 parent f50aa3e commit 0f6d31c

4 files changed

Lines changed: 103 additions & 218 deletions

File tree

.github/workflows/pages.yml

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,28 @@ concurrency:
1515
cancel-in-progress: true
1616

1717
jobs:
18-
deploy:
19-
environment:
20-
name: github-pages
21-
url: ${{ steps.deployment.outputs.page_url }}
18+
build:
2219
runs-on: ubuntu-latest
2320
steps:
2421
- uses: actions/checkout@v4
22+
- uses: actions/setup-node@v4
23+
with:
24+
node-version: 22
25+
cache: npm
26+
- run: npm ci
27+
- run: npm run build
2528
- uses: actions/configure-pages@v5
2629
- uses: actions/upload-pages-artifact@v3
2730
with:
28-
path: .
31+
path: ./dist
32+
33+
deploy:
34+
needs: build
35+
environment:
36+
name: github-pages
37+
url: ${{ steps.deployment.outputs.page_url }}
38+
runs-on: ubuntu-latest
39+
steps:
2940
- name: Deploy to GitHub Pages
3041
id: deployment
3142
uses: actions/deploy-pages@v4

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
node_modules/
2+
dist/
23
.DS_Store

README.md

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,29 @@ This is the public landing page for [ONEComputer](https://github.com/ONE-Compute
44
an open-source governed AI computer forked from ONECli and built as a thin
55
business layer over OpenVTC trust infrastructure.
66

7-
It is a static GitHub Pages site with no runtime secrets or build service. The
8-
visual system uses JetBrains Mono + IBM Plex Sans, a dark security-blue palette,
9-
inline SVG-free CSS primitives, accessible focus states, and reduced-motion
10-
support. `framer-motion` is included for future component work without making
11-
the public page dependent on a JavaScript runtime.
7+
The site is a Vite/React application deployed as static assets on GitHub Pages.
8+
It uses real captures from the deployed ONEComputer product, the product's
9+
Geist typography and UI tokens, and Framer Motion for scroll, state, and
10+
security-flow animation. Raw test identifiers are covered by presentation-layer
11+
labels; the source screenshots remain unchanged.
1212

13-
## Local preview
13+
## Local development
1414

1515
```bash
16-
python3 -m http.server 8080
16+
npm install
17+
npm run dev
1718
```
1819

19-
Then open `http://127.0.0.1:8080`.
20+
Then open the local URL printed by Vite.
21+
22+
## Production build
23+
24+
```bash
25+
npm run build
26+
npm run preview
27+
```
2028

2129
## Deployment
2230

23-
The `pages.yml` workflow publishes the repository through GitHub Pages after a
24-
push to `main`.
31+
The `pages.yml` workflow builds `dist/` with Node 22 and deploys it through
32+
GitHub Pages after a push to `main`.
Lines changed: 68 additions & 203 deletions
Original file line numberDiff line numberDiff line change
@@ -1,203 +1,68 @@
1-
# Design System Master File
2-
3-
> **LOGIC:** When building a specific page, first check `design-system/pages/[page-name].md`.
4-
> If that file exists, its rules **override** this Master file.
5-
> If not, strictly follow the rules below.
6-
7-
---
8-
9-
**Project:** ONEComputer
10-
**Generated:** 2026-07-12 19:56:06
11-
**Category:** Cybersecurity Platform
12-
13-
---
14-
15-
## Global Rules
16-
17-
### Color Palette
18-
19-
| Role | Hex | CSS Variable |
20-
|------|-----|--------------|
21-
| Primary | `#0369A1` | `--color-primary` |
22-
| Secondary | `#0EA5E9` | `--color-secondary` |
23-
| CTA/Accent | `#22C55E` | `--color-cta` |
24-
| Background | `#F0F9FF` | `--color-background` |
25-
| Text | `#0C4A6E` | `--color-text` |
26-
27-
**Color Notes:** Security blue + protected green
28-
29-
### Typography
30-
31-
- **Heading Font:** JetBrains Mono
32-
- **Body Font:** IBM Plex Sans
33-
- **Mood:** code, developer, technical, precise, functional, hacker
34-
- **Google Fonts:** [JetBrains Mono + IBM Plex Sans](https://fonts.google.com/share?selection.family=IBM+Plex+Sans:wght@300;400;500;600;700|JetBrains+Mono:wght@400;500;600;700)
35-
36-
**CSS Import:**
37-
```css
38-
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&display=swap');
39-
```
40-
41-
### Spacing Variables
42-
43-
| Token | Value | Usage |
44-
|-------|-------|-------|
45-
| `--space-xs` | `4px` / `0.25rem` | Tight gaps |
46-
| `--space-sm` | `8px` / `0.5rem` | Icon gaps, inline spacing |
47-
| `--space-md` | `16px` / `1rem` | Standard padding |
48-
| `--space-lg` | `24px` / `1.5rem` | Section padding |
49-
| `--space-xl` | `32px` / `2rem` | Large gaps |
50-
| `--space-2xl` | `48px` / `3rem` | Section margins |
51-
| `--space-3xl` | `64px` / `4rem` | Hero padding |
52-
53-
### Shadow Depths
54-
55-
| Level | Value | Usage |
56-
|-------|-------|-------|
57-
| `--shadow-sm` | `0 1px 2px rgba(0,0,0,0.05)` | Subtle lift |
58-
| `--shadow-md` | `0 4px 6px rgba(0,0,0,0.1)` | Cards, buttons |
59-
| `--shadow-lg` | `0 10px 15px rgba(0,0,0,0.1)` | Modals, dropdowns |
60-
| `--shadow-xl` | `0 20px 25px rgba(0,0,0,0.15)` | Hero images, featured cards |
61-
62-
---
63-
64-
## Component Specs
65-
66-
### Buttons
67-
68-
```css
69-
/* Primary Button */
70-
.btn-primary {
71-
background: #22C55E;
72-
color: white;
73-
padding: 12px 24px;
74-
border-radius: 8px;
75-
font-weight: 600;
76-
transition: all 200ms ease;
77-
cursor: pointer;
78-
}
79-
80-
.btn-primary:hover {
81-
opacity: 0.9;
82-
transform: translateY(-1px);
83-
}
84-
85-
/* Secondary Button */
86-
.btn-secondary {
87-
background: transparent;
88-
color: #0369A1;
89-
border: 2px solid #0369A1;
90-
padding: 12px 24px;
91-
border-radius: 8px;
92-
font-weight: 600;
93-
transition: all 200ms ease;
94-
cursor: pointer;
95-
}
96-
```
97-
98-
### Cards
99-
100-
```css
101-
.card {
102-
background: #F0F9FF;
103-
border-radius: 12px;
104-
padding: 24px;
105-
box-shadow: var(--shadow-md);
106-
transition: all 200ms ease;
107-
cursor: pointer;
108-
}
109-
110-
.card:hover {
111-
box-shadow: var(--shadow-lg);
112-
transform: translateY(-2px);
113-
}
114-
```
115-
116-
### Inputs
117-
118-
```css
119-
.input {
120-
padding: 12px 16px;
121-
border: 1px solid #E2E8F0;
122-
border-radius: 8px;
123-
font-size: 16px;
124-
transition: border-color 200ms ease;
125-
}
126-
127-
.input:focus {
128-
border-color: #0369A1;
129-
outline: none;
130-
box-shadow: 0 0 0 3px #0369A120;
131-
}
132-
```
133-
134-
### Modals
135-
136-
```css
137-
.modal-overlay {
138-
background: rgba(0, 0, 0, 0.5);
139-
backdrop-filter: blur(4px);
140-
}
141-
142-
.modal {
143-
background: white;
144-
border-radius: 16px;
145-
padding: 32px;
146-
box-shadow: var(--shadow-xl);
147-
max-width: 500px;
148-
width: 90%;
149-
}
150-
```
151-
152-
---
153-
154-
## Style Guidelines
155-
156-
**Style:** Cyberpunk UI
157-
158-
**Keywords:** Neon, dark mode, terminal, HUD, sci-fi, glitch, dystopian, futuristic, matrix, tech noir
159-
160-
**Best For:** Gaming platforms, tech products, crypto apps, sci-fi applications, developer tools, entertainment
161-
162-
**Key Effects:** Neon glow (text-shadow), glitch animations (skew/offset), scanlines (::before overlay), terminal fonts
163-
164-
### Page Pattern
165-
166-
**Pattern Name:** App Store Style Landing
167-
168-
- **Conversion Strategy:** Show real screenshots. Include ratings (4.5+ stars). QR code for mobile. Platform-specific CTAs.
169-
- **CTA Placement:** Download buttons prominent (App Store + Play Store) throughout
170-
- **Section Order:** 1. Hero with device mockup, 2. Screenshots carousel, 3. Features with icons, 4. Reviews/ratings, 5. Download CTAs
171-
172-
---
173-
174-
## Anti-Patterns (Do NOT Use)
175-
176-
- ❌ Light mode
177-
- ❌ Poor data viz
178-
179-
### Additional Forbidden Patterns
180-
181-
-**Emojis as icons** — Use SVG icons (Heroicons, Lucide, Simple Icons)
182-
-**Missing cursor:pointer** — All clickable elements must have cursor:pointer
183-
-**Layout-shifting hovers** — Avoid scale transforms that shift layout
184-
-**Low contrast text** — Maintain 4.5:1 minimum contrast ratio
185-
-**Instant state changes** — Always use transitions (150-300ms)
186-
-**Invisible focus states** — Focus states must be visible for a11y
187-
188-
---
189-
190-
## Pre-Delivery Checklist
191-
192-
Before delivering any UI code, verify:
193-
194-
- [ ] No emojis used as icons (use SVG instead)
195-
- [ ] All icons from consistent icon set (Heroicons/Lucide)
196-
- [ ] `cursor-pointer` on all clickable elements
197-
- [ ] Hover states with smooth transitions (150-300ms)
198-
- [ ] Light mode: text contrast 4.5:1 minimum
199-
- [ ] Focus states visible for keyboard navigation
200-
- [ ] `prefers-reduced-motion` respected
201-
- [ ] Responsive: 375px, 768px, 1024px, 1440px
202-
- [ ] No content hidden behind fixed navbars
203-
- [ ] No horizontal scroll on mobile
1+
# ONEComputer public design system
2+
3+
The public site should feel like the ONEComputer application at editorial
4+
scale—not like an unrelated cybersecurity campaign.
5+
6+
## Product tokens
7+
8+
| Role | Value |
9+
| --- | --- |
10+
| Page background | `#1f1e1d` |
11+
| Deep background / sidebar | `#171615` / `#1a1918` |
12+
| Card surface | `#272625` |
13+
| Primary text | `#f5f5f3` |
14+
| Muted text | `#aaa7a2` |
15+
| Border | `#3b3937` |
16+
| Brand / enforcement | `#19ba5d` |
17+
| Warning | `#e5ad41` |
18+
| Danger | `#e05b55` |
19+
| Standard radius | `8–10px` |
20+
21+
Typography is local Geist for product and editorial copy, with Geist Mono for
22+
eyebrows, state, and evidence labels. Large headings may be expressive, but
23+
controls and captures must preserve the product's compact proportions.
24+
25+
## Visual principles
26+
27+
1. Lead with the real product. Use deployed screenshots and name the surface.
28+
2. Explain trust through separation: ONEComputer runs workflow; OpenVTC holds
29+
identity, signing authority, Trust Tasks, and evidence.
30+
3. Use motion to clarify transitions and state, never as ambient noise.
31+
4. Use green only for brand, verified state, enforcement, and primary actions.
32+
5. Prefer quiet borders and warm charcoal depth to neon glow or blue gradients.
33+
6. Keep technical claims specific, auditable, and free of roadmap language.
34+
35+
## Motion language
36+
37+
- Framer Motion owns page reveals, product-state transitions, scroll progress,
38+
the approval path, and small interaction feedback.
39+
- Default easing: `[0.22, 1, 0.36, 1]`.
40+
- Interaction transitions should finish in roughly 180–300 ms; editorial reveals
41+
may take 550–800 ms.
42+
- Honor the operating system's reduced-motion preference and never depend on
43+
animation to communicate required content.
44+
45+
## Product captures
46+
47+
- Show a browser or application frame only when it gives useful context.
48+
- Do not invent dashboards or metrics.
49+
- Cover internal test identifiers in the presentation layer; do not silently
50+
alter the source image.
51+
- Captions must identify captures as coming from the deployed cloud build.
52+
53+
## Accessibility and responsive requirements
54+
55+
- Preserve visible keyboard focus and semantic buttons, links, tabs, and panels.
56+
- Maintain WCAG AA text contrast.
57+
- Verify at 375, 768, 1024, and 1440 px widths.
58+
- Avoid horizontal page overflow; horizontal scrolling is permitted only inside
59+
a clearly bounded product-tab control on small screens.
60+
- Fixed navigation must not cover linked section headings.
61+
62+
## Forbidden patterns
63+
64+
- Cyberpunk, glitch, scanline, Matrix, or terminal cosplay
65+
- Generic stock imagery or generated product screenshots
66+
- Decorative metric claims without evidence
67+
- Approval controls that imply ONEComputer can sign its own high-risk actions
68+
- Hidden focus states, hover-only information, and motion without a reduced mode

0 commit comments

Comments
 (0)