Skip to content

Commit 8b4db79

Browse files
fazxesclaude
andcommitted
docs: add live CI badges and improve README UX
- Add live CI and Tauri Build status badges - Center header with navigation links - Add keyboard shortcuts table - Use tables for better scannability - Add side-by-side tech stack layout - Simplify architecture diagram - Add CI pipeline visualization - Improve visual hierarchy with dividers - Fix flaky concurrent test in snowflake-settings 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 292a82d commit 8b4db79

2 files changed

Lines changed: 167 additions & 159 deletions

File tree

‎README.md‎

Lines changed: 157 additions & 154 deletions
Original file line numberDiff line numberDiff line change
@@ -1,70 +1,127 @@
1+
<div align="center">
2+
13
# Snowflake
24

3-
A modern AI-powered code editor built with **Tauri 2** (Rust) and **React 19** (TypeScript). Features conversational AI, code editing, terminal, Git integration, and file watching.
5+
**A modern AI-powered code editor built with Tauri 2 and React 19**
6+
7+
[![CI](https://github.com/Recusive/Snowflake-V0/actions/workflows/ci.yml/badge.svg)](https://github.com/Recusive/Snowflake-V0/actions/workflows/ci.yml)
8+
[![Tauri Build](https://github.com/Recusive/Snowflake-V0/actions/workflows/tauri-build.yml/badge.svg)](https://github.com/Recusive/Snowflake-V0/actions/workflows/tauri-build.yml)
9+
![Tauri](https://img.shields.io/badge/Tauri-2.0-24C8D8?logo=tauri&logoColor=white)
10+
![React](https://img.shields.io/badge/React-19-61DAFB?logo=react&logoColor=black)
11+
![Rust](https://img.shields.io/badge/Rust-1.85-DEA584?logo=rust&logoColor=black)
12+
![TypeScript](https://img.shields.io/badge/TypeScript-5.9-3178C6?logo=typescript&logoColor=white)
13+
14+
[Features](#features) • [Quick Start](#quick-start) • [Architecture](#architecture) • [Contributing](#contributing)
415

5-
![Tauri](https://img.shields.io/badge/Tauri-2.0-blue?logo=tauri)
6-
![React](https://img.shields.io/badge/React-19-blue?logo=react)
7-
![Rust](https://img.shields.io/badge/Rust-1.85-orange?logo=rust)
8-
![TypeScript](https://img.shields.io/badge/TypeScript-5.9-blue?logo=typescript)
9-
![License](https://img.shields.io/badge/License-Private-red)
16+
</div>
1017

1118
---
1219

1320
## Features
1421

15-
- **AI Chat Interface** - Streaming responses with Claude AI, markdown rendering, code highlighting
16-
- **Code Editor** - CodeMirror 6 with syntax highlighting for 10+ languages
17-
- **Integrated Terminal** - Full terminal emulation with xterm.js and PTY support
18-
- **File Explorer** - Tree navigation with file watching and auto-refresh
19-
- **Git Integration** - Stage, commit, diff, branch, and log operations
20-
- **Tool Visualization** - Real-time display of AI tool execution
21-
- **Multi-Panel Layout** - Resizable panels for chat, files, editor, and terminal
22-
- **Cross-Platform** - macOS, Windows, and Linux support
22+
| Feature | Description |
23+
| ---------------------- | --------------------------------------------------------------------------- |
24+
| **AI Chat** | Streaming responses with Claude AI, markdown rendering, syntax highlighting |
25+
| **Code Editor** | CodeMirror 6 with 10+ language support and custom themes |
26+
| **Terminal** | Full PTY terminal with xterm.js |
27+
| **File Explorer** | Tree navigation with real-time file watching |
28+
| **Git Integration** | Stage, commit, diff, branch, log operations |
29+
| **Tool Visualization** | Watch AI execute tools in real-time |
30+
| **Multi-Panel Layout** | Resizable IDE-style panels |
31+
| **Cross-Platform** | macOS, Windows, Linux |
2332

2433
---
2534

2635
## Quick Start
2736

2837
```bash
29-
# Install dependencies
38+
# Prerequisites: Node.js 22+, pnpm 9+, Rust 1.85+
39+
40+
# Clone and install
41+
git clone https://github.com/Recusive/Snowflake-V0.git
42+
cd Snowflake-V0
3043
pnpm install
3144

32-
# Start development (frontend + backend)
33-
pnpm tauri dev
45+
# Run the app (opens desktop window with hot-reload)
46+
pnpm dev
3447
```
3548

36-
This opens the desktop app with hot-reload for both React and Rust.
49+
> **Note:** First build compiles Rust and may take a few minutes. Subsequent starts are fast.
50+
51+
---
52+
53+
## Keyboard Shortcuts
54+
55+
| Shortcut | Action |
56+
| ---------------------- | --------------- |
57+
| `Cmd/Ctrl + S` | Save file |
58+
| `Cmd/Ctrl + P` | Quick open file |
59+
| `Cmd/Ctrl + Shift + P` | Command palette |
60+
| `Cmd/Ctrl + B` | Toggle sidebar |
61+
| `Cmd/Ctrl + J` | Toggle terminal |
62+
| `Cmd/Ctrl + \`` | New terminal |
63+
| `Cmd/Ctrl + N` | New chat |
64+
| `Cmd/Ctrl + Enter` | Send message |
3765

3866
---
3967

4068
## Technology Stack
4169

70+
<table>
71+
<tr>
72+
<td valign="top" width="50%">
73+
4274
### Frontend
4375

44-
| Technology | Purpose |
45-
| ------------------- | -------------------------- |
46-
| **React 19** | UI framework |
47-
| **TypeScript 5.9** | Type safety |
48-
| **Vite 7** | Build tool and dev server |
49-
| **Tailwind CSS v4** | Styling (CSS-first config) |
50-
| **Zustand + Immer** | State management |
51-
| **CodeMirror 6** | Code editing |
52-
| **xterm.js** | Terminal emulation |
53-
| **Shiki** | Syntax highlighting |
54-
| **Radix UI** | Accessible components |
55-
| **Zod 4** | Runtime validation |
76+
- **React 19** + TypeScript 5.9
77+
- **Vite 7** for builds
78+
- **Tailwind CSS v4**
79+
- **Zustand + Immer** state
80+
- **CodeMirror 6** editor
81+
- **xterm.js** terminal
82+
- **Shiki** highlighting
83+
- **Radix UI** components
84+
85+
</td>
86+
<td valign="top" width="50%">
5687

5788
### Backend (Rust)
5889

59-
| Crate | Purpose |
60-
| ---------------- | ------------------------ |
61-
| **tauri 2** | Desktop framework |
62-
| **tokio** | Async runtime |
63-
| **git2** | Git operations |
64-
| **notify** | File watching |
65-
| **portable-pty** | Terminal PTY |
66-
| **tower-lsp** | Language Server Protocol |
67-
| **serde** | JSON serialization |
90+
- **Tauri 2** framework
91+
- **Tokio** async runtime
92+
- **git2** for Git ops
93+
- **notify** file watcher
94+
- **portable-pty** terminal
95+
- **tower-lsp** LSP support
96+
- **serde** serialization
97+
98+
</td>
99+
</tr>
100+
</table>
101+
102+
---
103+
104+
## Architecture
105+
106+
```
107+
┌────────────────────────────────────────────────────────────┐
108+
│ Snowflake Desktop App │
109+
├────────────────────────────────────────────────────────────┤
110+
│ ┌──────────────────────────────────────────────────────┐ │
111+
│ │ Rust Backend (Main Process) │ │
112+
│ │ • Claude AI streaming • File system + watching │ │
113+
│ │ • Git operations • Terminal PTY │ │
114+
│ │ • Settings persistence • Search (ripgrep) │ │
115+
│ └─────────────────────────┬────────────────────────────┘ │
116+
│ │ Tauri IPC │
117+
│ ┌─────────────────────────▼────────────────────────────┐ │
118+
│ │ React Frontend (Renderer) │ │
119+
│ │ • Chat interface • CodeMirror editor │ │
120+
│ │ • File explorer • xterm terminal │ │
121+
│ │ • Tool visualization • Zustand state │ │
122+
│ └──────────────────────────────────────────────────────┘ │
123+
└────────────────────────────────────────────────────────────┘
124+
```
68125

69126
---
70127

@@ -73,160 +130,106 @@ This opens the desktop app with hot-reload for both React and Rust.
73130
```
74131
Snowflake-v0/
75132
├── src/ # React frontend
76-
│ ├── components/ # UI components (90+ files)
77-
│ │ ├── chat/ # Chat interface
78-
│ │ ├── editor/ # CodeMirror integration
79-
│ │ ├── terminal/ # xterm.js terminal
80-
│ │ ├── activity/ # File viewer, diffs
81-
│ │ └── ui/ # Radix primitives
82-
│ ├── hooks/ # React hooks
133+
│ ├── components/ # 90+ UI components
134+
│ ├── hooks/ # Custom React hooks
83135
│ ├── stores/ # Zustand state (10 stores)
84136
│ └── types/ # TypeScript definitions
85137
│
86-
├── src-tauri/ # Tauri backend
87-
│ ├── src/
88-
│ │ ├── commands/ # Tauri command handlers
89-
│ │ │ ├── files.rs # File operations
90-
│ │ │ ├── git.rs # Git operations
91-
│ │ │ ├── terminal.rs # Terminal/PTY
92-
│ │ │ └── settings.rs # Configuration
93-
│ │ └── lib.rs # App setup
94-
│ └── tauri.conf.json # App config
138+
├── src-tauri/ # Tauri app
139+
│ └── src/commands/ # IPC command handlers
95140
│
96-
├── crates/ # Rust library crates
97-
│ ├── snowflake-core/ # Core types
98-
│ ├── snowflake-fs/ # File system + watching
99-
│ ├── snowflake-git/ # Git operations
100-
│ ├── snowflake-terminal/ # PTY management
101-
│ ├── snowflake-settings/ # Configuration
102-
│ └── snowflake-search/ # Ripgrep search
103-
│
104-
└── Cargo.toml # Rust workspace
141+
└── crates/ # Rust libraries
142+
├── snowflake-core/ # Core types & text editing
143+
├── snowflake-fs/ # File system + watching
144+
├── snowflake-git/ # Git operations
145+
├── snowflake-terminal/ # PTY management
146+
├── snowflake-settings/ # Config persistence
147+
└── snowflake-search/ # Ripgrep integration
105148
```
106149

107150
---
108151

109152
## Development
110153

111-
### Prerequisites
112-
113-
- **Node.js** v22+ (see `.nvmrc`)
114-
- **pnpm** v9+
115-
- **Rust** 1.85+ with Cargo
116-
- **Tauri CLI**: `cargo install tauri-cli`
117-
118154
### Commands
119155

120-
```bash
121-
# Development
122-
pnpm tauri dev # Full app (Vite + Tauri + Rust)
123-
pnpm dev # Frontend only (port 5176)
124-
125-
# Quality checks
126-
pnpm typecheck # TypeScript check
127-
pnpm lint # ESLint (zero warnings)
128-
pnpm check # All checks (TS + ESLint + Rust)
129-
130-
# Build
131-
pnpm tauri build # Production app (.dmg/.exe/.AppImage)
132-
pnpm build # Frontend production build
133-
```
156+
| Command | Description |
157+
| ----------------- | ------------------------- |
158+
| `pnpm dev` | Start app with hot-reload |
159+
| `pnpm dev:web` | Frontend only (port 5176) |
160+
| `pnpm build` | Production build |
161+
| `pnpm check` | TypeScript + ESLint |
162+
| `pnpm check:rust` | Rust fmt + clippy + test |
163+
| `pnpm check:all` | All quality checks |
134164

135165
### Hot Reload
136166

137-
| Change Type | Behavior |
138-
| ----------------------- | --------------------------- |
139-
| React/TypeScript | Instant HMR via Vite |
140-
| CSS/Tailwind | Instant HMR via Vite |
141-
| Rust (`src-tauri/`) | Auto-rebuilds, restarts app |
142-
| Rust crates (`crates/`) | Auto-rebuilds, restarts app |
143-
144-
---
145-
146-
## Architecture
147-
148-
```
149-
┌─────────────────────────────────────────────────────────────────┐
150-
│ Tauri Desktop App │
151-
│ ┌──────────────────────────────────────────────────────────┐ │
152-
│ │ Main Process (Rust) │ │
153-
│ │ - Claude AI integration │ │
154-
│ │ - File system operations │ │
155-
│ │ - Git operations (git2) │ │
156-
│ │ - Terminal PTY management │ │
157-
│ │ - File watching (notify) │ │
158-
│ └────────────────────────┬─────────────────────────────────┘ │
159-
│ │ IPC (invoke/events) │
160-
│ ┌────────────────────────▼─────────────────────────────────┐ │
161-
│ │ Renderer Process (React) │ │
162-
│ │ - Chat interface │ │
163-
│ │ - CodeMirror editor │ │
164-
│ │ - xterm.js terminal │ │
165-
│ │ - File explorer │ │
166-
│ │ - Zustand state management │ │
167-
│ └──────────────────────────────────────────────────────────┘ │
168-
└─────────────────────────────────────────────────────────────────┘
169-
```
167+
| Change | Behavior |
168+
| ---------------- | ---------------------- |
169+
| React/TypeScript | Instant HMR |
170+
| CSS/Tailwind | Instant HMR |
171+
| Rust code | Auto-rebuild + restart |
170172

171173
---
172174

173175
## Code Quality
174176

175-
### Rust
176-
177-
- **Zero unsafe code**: `#![forbid(unsafe_code)]`
178-
- **No panics**: `#![deny(clippy::unwrap_used, clippy::expect_used)]`
179-
- **Strict linting**: All clippy::pedantic rules enabled
180-
- **cargo-deny**: License and vulnerability auditing
181-
182-
### TypeScript
177+
### Enforced Standards
183178

184-
- **Maximum strictness**: All strict options enabled
185-
- **No implicit any**: Every type explicit
186-
- **ESLint**: Zero warnings tolerance
187-
- **Consistent imports**: Type imports separated
179+
| Area | Rules |
180+
| -------------- | --------------------------------------- |
181+
| **Rust** | Zero unsafe, no panics, clippy pedantic |
182+
| **TypeScript** | Maximum strictness, no `any` |
183+
| **ESLint** | Zero warnings tolerance |
184+
| **Pre-commit** | Husky + lint-staged |
185+
| **CI** | 11 parallel checks on every push |
188186

189-
### CI/CD
187+
### CI Pipeline
190188

191-
- GitHub Actions for all quality checks
192-
- Pre-commit hooks with Husky + lint-staged
193-
- Dependabot auto-merge for patches
194-
- Release automation on version tags
189+
```
190+
Frontend: TypeScript → ESLint → Build
191+
Backend: Format → Clippy → Test → Deny → Doc → MSRV
192+
↓
193+
CI Passed (quality gate)
194+
```
195195

196196
---
197197

198198
## Implementation Status
199199

200-
### Completed
200+
### Done
201201

202-
- [x] Tauri 2 desktop framework
203-
- [x] React 19 frontend with TypeScript
204-
- [x] CodeMirror 6 editor with themes
205-
- [x] File system operations with watching
206-
- [x] Git integration (stage, commit, diff, log)
207-
- [x] Settings management with persistence
208-
- [x] Multi-panel resizable layout
209-
- [x] Theme switching (light/dark)
202+
- [x] Tauri 2 + React 19 setup
203+
- [x] CodeMirror editor with themes
204+
- [x] File system with watching
205+
- [x] Git integration (full)
206+
- [x] Settings persistence
207+
- [x] Multi-panel layout
208+
- [x] Light/dark themes
210209

211210
### In Progress
212211

213-
- [ ] Claude AI streaming integration
214-
- [ ] LSP language server support
215-
- [ ] Terminal PTY full implementation
212+
- [ ] Claude AI streaming
213+
- [ ] LSP completions
214+
- [ ] Full terminal PTY
216215

217216
---
218217

219218
## Contributing
220219

221-
1. Fork the repository
222-
2. Create a feature branch
223-
3. Run `pnpm check` before committing
224-
4. Submit a pull request
220+
1. Fork the repo
221+
2. Create feature branch
222+
3. Run `pnpm check:all`
223+
4. Submit PR
225224

226-
All CI checks must pass before merging.
225+
All 11 CI checks must pass.
227226

228227
---
229228

230-
## License
229+
<div align="center">
230+
231+
**Built with Rust and React**
232+
233+
Private • Recursive Labs
231234

232-
Private - Recursive Labs
235+
</div>

0 commit comments

Comments
 (0)