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
25 changes: 25 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: CI

on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:

jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: recursive

- uses: actions/setup-node@v4
with:
node-version: 22
cache: npm

- run: npm ci

- run: npm run cf:build
27 changes: 27 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Dependencies
node_modules/

# Build output
dist/
.astro/

# Generated from vendor/wavekat-brand submodule (run `make sync`)
/public/logos/

# Environment
.env
.env.*
!.env.example

# OS
.DS_Store
Thumbs.db

# Editor
.vscode/
.idea/
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "vendor/wavekat-brand"]
path = vendor/wavekat-brand
url = https://github.com/wavekat/wavekat-brand.git
70 changes: 70 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Claude Code Context

## What this repo is

This is the source for `wavekat.com` — the homepage for the WaveKat ecosystem. It replaces the previous `wavekat.com` (a resume builder) which still exists as a separate private repo (`wavekat`) but is no longer what this domain points to.

## Mission

> Give every small business the voice of a big one.

WaveKat builds open-source, AI-powered solutions. Voice is where we start, but not all we'll do.

## The WaveKat ecosystem

All repos live under the `wavekat` GitHub org. SSH access uses the `github.com-wavekat` host alias (i.e. `git@github.com-wavekat:wavekat/<repo>.git`).

### Solutions
| Repo | What it does | Status |
|------|-------------|--------|
| `wavekat-voice` | AI phone answering for small businesses (SIP/RTP) | Private, in development |

### Libraries
| Repo | What it does | Brand color |
|------|-------------|-------------|
| `wavekat-core` | Shared audio primitives (`AudioFrame`, sample conversion) | Green `#00e676` |
| `wavekat-vad` | Voice Activity Detection — WebRTC, Silero, TEN-VAD, FireRedVAD | Cyan `#00bcd4` |
| `wavekat-turn` | Turn detection — end-of-utterance for voice pipelines | Purple `#7c4dff` |
| `wavekat-lab` | Interactive dashboard for testing audio backends | Amber `#ffd740` |

### Other
| Repo | What it does |
|------|-------------|
| `wavekat-brand` | All brand assets — banners, wordmarks, logos, icons, SVG sources |

## Tech decisions

- **Framework**: Astro (static output) — chosen for speed, simplicity, GitHub Pages / Cloudflare Pages compatibility
- **Styles**: Tailwind CSS
- **Deployment**: Cloudflare Pages (consistent with rest of org)
- **Domain**: `wavekat.com` — DNS to be pointed at Cloudflare Pages once site is ready

## Brand assets

Logo SVGs come from `vendor/wavekat-brand` (git submodule — source of truth, never edit here).
`make sync` copies the needed files into `public/logos/` which is gitignored.
`make dev` and `make build` both run sync automatically.

To pull brand updates:
```sh
git submodule update --remote vendor/wavekat-brand
make sync
```

## Current state

- Working branch: `feat/astro-scaffold`
- Phase 1 (scaffold) and Phase 2 (homepage) are complete
- Node ≥ 22 required — use `nvm use 22`, or just use `make` (it handles this)
- Dark/light mode toggle with localStorage + OS preference fallback
- `wavekat-brand` is a git submodule at `vendor/wavekat-brand`

## What to do next

Phase 3 in `docs/dev-plan.md`:
- Pull remaining banners/assets from `wavekat-brand` as needed
- Optimise any additional SVGs for web

Phase 4:
- Connect repo to Cloudflare Pages (build command: `make build`, Node version: 22)
- Point `wavekat.com` DNS
31 changes: 31 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
SHELL := /bin/bash
NVM := . ~/.nvm/nvm.sh && nvm use 22 &&
.PHONY: dev build preview sync install clean cf-build

# Copy needed assets from wavekat-brand submodule → public/
sync:
$(NVM) npm run sync

# Start dev server
dev:
$(NVM) npm run dev

# Build for production → dist/
build:
$(NVM) npm run build

# Preview production build locally
preview: build
$(NVM) npm run preview

# Install dependencies
install:
$(NVM) npm install

# Simulate Cloudflare Pages build locally (no nvm, plain npm — mirrors CI)
cf-build:
npm run cf:build

# Remove build artifacts and synced assets
clean:
rm -rf dist/ .astro/ public/logos/
46 changes: 34 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
# wavekat.com

The homepage for the WaveKat audio ecosystem — built with [Astro](https://astro.build) and deployed on Cloudflare Pages.
> Give every small business the voice of a big one.

## What is WaveKat?
WaveKat builds open-source, AI-powered solutions that put enterprise-grade capabilities in the hands of everyone. We start with voice — answering phones, handling conversations, being present 24/7 — the kind of thing only big companies could afford to do well. But voice is just where we begin.

WaveKat is a collection of Rust libraries for audio intelligence in voice pipelines. Each library is independently usable and designed around a common set of audio primitives.
### Solutions

| Repo | Purpose |
|------|---------|
| [wavekat-core](https://github.com/wavekat/wavekat-core) | Shared audio types (`AudioFrame`, sample format conversion) |
| [wavekat-vad](https://github.com/wavekat/wavekat-vad) | Voice Activity Detection — unified interface across WebRTC, Silero, TEN-VAD, FireRedVAD |
| [wavekat-turn](https://github.com/wavekat/wavekat-turn) | Turn detection — end-of-utterance for voice pipelines |
| Repo | What it does |
|------|-------------|
| [wavekat-voice](https://github.com/wavekat/wavekat-voice) | AI phone answering for small businesses — SIP/RTP, voice-to-voice conversations |

### Libraries

| Repo | What it does |
|------|-------------|
| [wavekat-core](https://github.com/wavekat/wavekat-core) | Shared audio primitives (`AudioFrame`, sample format conversion) |
| [wavekat-vad](https://github.com/wavekat/wavekat-vad) | Voice Activity Detection — WebRTC, Silero, TEN-VAD, FireRedVAD |
| [wavekat-turn](https://github.com/wavekat/wavekat-turn) | Turn detection — knows when a speaker is done talking |
| [wavekat-lab](https://github.com/wavekat/wavekat-lab) | Interactive dashboard for testing and comparing audio backends |

## Tech Stack
Expand All @@ -21,16 +27,32 @@ WaveKat is a collection of Rust libraries for audio intelligence in voice pipeli

## Development

Requires Node 22 (`nvm use 22`).

```sh
npm install
npm run dev
make install # install dependencies
make dev # sync brand assets + start dev server
```

## Build

```sh
npm run build
# output → dist/
make build # sync brand assets + build → dist/
```

## Brand assets

Logo and wordmark files are sourced from the `wavekat-brand` submodule — never edited here.

```sh
# After cloning, initialise the submodule:
git submodule update --init

# Pull brand updates:
git submodule update --remote vendor/wavekat-brand

# Re-sync assets into public/logos/:
make sync
```

## License
Expand Down
17 changes: 17 additions & 0 deletions astro.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
// @ts-check
import { defineConfig } from 'astro/config';

import tailwindcss from '@tailwindcss/vite';

// https://astro.build/config
export default defineConfig({
output: 'static',
vite: {
plugins: [tailwindcss()],
server: {
watch: {
ignored: ['**/public/logos/**']
}
}
}
});
30 changes: 30 additions & 0 deletions docs/dev-plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Dev Plan

## Phase 1 — Scaffold
- [x] Init Astro project with static output mode
- [x] Add Tailwind CSS
- [x] Set up Cloudflare Pages config (`wrangler.toml`)
- [x] Establish folder structure: `src/components`, `src/layouts`, `src/pages`
- [x] Add brand tokens (colors per library) as Tailwind theme variables

## Phase 2 — Homepage
- [x] Layout: base HTML shell, `<head>` meta, fonts
- [x] **Hero section** — WaveKat wordmark + tagline + short description
- [x] **Library grid** — card for each crate (core, vad, turn, lab) using its brand accent color
- core → green `#00e676`
- vad → cyan `#00bcd4`
- turn → purple `#7c4dff`
- lab → amber `#ffd740`
- [x] **Footer** — GitHub org link, Apache 2.0 note
- [x] Responsive layout (mobile-first)
- [x] Dark / light mode toggle with localStorage persistence

## Phase 3 — Assets
- [ ] Pull banners and wordmarks from `wavekat-brand`
- [ ] Optimize SVGs for web (inline or `<img>`)
- [ ] Dark mode support (the brand already has dark/light logo variants)

## Phase 4 — Deploy
- [ ] Connect repo to Cloudflare Pages
- [ ] Point `wavekat.com` DNS to Cloudflare Pages
- [ ] Verify build pipeline (`npm run build` → `dist/`)
Loading
Loading