Thanks for your interest in contributing!
# Clone the repo
git clone https://github.com/oglenyaboss/chainchat.git
cd chainchat
# Install dependencies
npm install
# Copy environment config
cp .env.example .env
# Start signaling server + dev server
npm run dev:allOpen http://localhost:3000 in two browser tabs to test P2P messaging.
- Frontend: Nuxt 4 + Vue 3 + TypeScript + Tailwind CSS 4
- State: Pinia with persisted state
- Signaling server:
server.js(Node.js + ws)
| Command | Description |
|---|---|
npm run dev |
Nuxt dev server |
npm run dev:signal |
Signaling server only |
npm run dev:all |
Both servers in parallel |
npm run build |
Production build |
npm test |
Run tests |
npm run lint |
Lint code |
- TypeScript strict mode — avoid
any - Immutable state updates (spread, not mutation)
- Small focused files (under 400 lines ideally)
- No
console.login production code
- Fork the repo and create a feature branch
- Make your changes
- Run
npm run lintandnpm test - Open a PR with a clear description of the change
app/
lib/ Core logic (blockchain, crypto, protocol, sync)
composables/ Vue composables (WebRTC, signaling, mining, state machine)
stores/ Pinia stores (blockchain, chat, identity, peers, windows)
components/ UI components (win95/, chat/, explorer/, network/, apps/)
server.js WebSocket signaling server
The lib/ layer is pure TypeScript with no Vue dependencies — it's the easiest place to contribute.