A personal portfolio website featuring a terminal emulator interface, deployed on IPFS.
This is my personal website. The site features a novel terminal-style interface where visitors can navigate using CLI commands rather than traditional UI elements.
Live Access:
- nipsys.eth.limo
- IPNS Gateway (note: no proper caching, expect timeouts)
- Terminal Interface - Navigate the site using CLI commands (
help,whoami,contact,status, etc.) - Decentralized Status - Real-time service health monitoring via Logos Delivery (previously named Waku, a P2P communication network)
- IPFS Deployment - Hosted on IPFS with IPNS for mutable content
- Internationalization - Available in English and French
- Dark/Light Theme - System preference detection with manual toggle
- Keyboard Navigation - Full keyboard support with history, autocomplete, and shortcuts
| Category | Technology |
|---|---|
| Framework | Next.js 15 (App Router, Static Export) |
| UI | React 19, Tailwind CSS 4 |
| Components | @nipsys/lsd, @phosphor-icons/react |
| State | Nanostores |
| i18n | next-intl |
| Decentralized | @waku/sdk, @helia/verified-fetch |
| Testing | Vitest, Testing Library |
| Linting | Biome |
| Git Hooks | Lefthook |
- Node.js >= 22.0.0
- pnpm >= 9
# Clone the repository
git clone https://github.com/nipsysdev/site.git
cd site
# Initialize submodules (for resume PDFs)
git submodule update --init --recursive
# Install dependencies
pnpm install
# Start development server
pnpm devOpen localhost:3000 to view the site.
| Script | Description |
|---|---|
pnpm dev |
Start dev server with Turbopack |
pnpm build |
Production build (static export) |
pnpm serve |
Serve the static output locally |
pnpm test:unit |
Run unit tests |
pnpm test:coverage |
Run tests with coverage report |
pnpm lint |
Lint codebase |
pnpm lint:fix |
Lint and auto-fix issues |
pnpm format |
Format code |
pnpm typecheck |
TypeScript type check |
pnpm analyze |
Build with bundle analyzer |
The site uses a terminal emulator interface. Available commands:
| Command | Description |
|---|---|
welcome |
Display welcome message |
whoami |
About me - bio, badges, GPG fingerprint |
resume |
View/download resume (EN/FR) |
contact |
Contact information and social links |
status |
Self-hosted services health status |
help |
List available commands |
clear |
Clear terminal screen |
build-info |
Build timestamp and deployment info |
| Key | Action |
|---|---|
Enter |
Execute command |
Tab |
Autocomplete |
↑ / ↓ |
Navigate command history |
Ctrl+C |
Cancel current input |
site/
├── src/
│ ├── app/ # Next.js App Router pages
│ │ └── [locale]/ # Internationalized routes (en, fr)
│ ├── components/ # React components
│ │ ├── terminal/ # Terminal emulator
│ │ ├── cmd-outputs/ # Command output components
│ │ └── layout/ # Layout components
│ ├── lib/
│ │ └── dpulse/ # Waku P2P status monitoring
│ ├── stores/ # Nanostores state
│ ├── hooks/ # Custom React hooks
│ ├── i18n/ # Internationalization config
│ ├── constants/ # App constants
│ └── utils/ # Utility functions
├── out/ # Static export output
└── .github/workflows/ # CI/CD pipelines
The site is built as a fully static export using Next.js's output: 'export'
configuration. This enables:
- IPFS/IPNS deployment
- No server-side dependencies
- Fast, cacheable content delivery
The status command connects to the
dpulse system via the Waku P2P network:
- Real-time service health updates via filter protocol
- Historical messages via store protocol
- Ed25519 signature verification for authenticity
- IPFS-hosted service icons via Helia
The site is automatically deployed to IPFS via GitHub Actions:
- On push to main: CI pipeline runs lint, tests, and build
- Static export is published to IPNS
- Pinned to 4EVERLand for availability