Files
pic/webui
roof e79ee08c63 fix: WireGuard routing, DNS, service access, and UI improvements
- Fix CoreDNS not loading .cell zones (wrong Corefile path, now uses -conf flag)
- Fix WireGuard server address conflict (172.20.0.1/16 overlapped with Docker
  network; changed to 10.0.0.1/24 to eliminate duplicate routes)
- Add SERVERMODE=true and sysctls to WireGuard docker-compose for server mode
- Fix DNS zone file parser to handle 4-field records (name IN type value)
- Add get_dns_records() to NetworkManager; mount data/dns into API container
- Fix peer config endpoint: look up IP/key from registry, use real endpoint
- Add bulk peer statuses endpoint keyed by public_key
- Normalize snake_case API fields to camelCase in WireGuard UI
- Add port check endpoint (checks via live handshake, not unreliable TCP probe)
- Add Caddy virtual hosts for ui/calendar/files/mail .cell domains (HTTP only)
- Fix cell config domain default from cell.local to cell
- Fix Routing Network Config tab (was calling hardcoded localhost:3000)
- Fix DNS records display (record.value not record.ip)
- Move service access guide to top of Dashboard with login hints
- Add /api/routing/setup endpoint

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 12:43:23 -04:00
..
2025-09-12 23:04:52 +03:00
2025-09-12 23:04:52 +03:00
2025-09-13 15:49:32 +03:00
2025-09-12 23:04:52 +03:00
2025-09-13 18:56:00 +03:00
2025-09-13 12:08:28 -05:00
2025-09-12 23:04:52 +03:00
2025-09-13 14:23:31 +03:00
2025-09-12 23:04:52 +03:00
2025-09-12 23:04:52 +03:00

Personal Internet Cell - Web UI

A modern React-based web interface for managing your Personal Internet Cell.

Features

  • Dashboard: Overview of cell status and services
  • Peer Management: Add, remove, and configure WireGuard peers
  • Network Services: DNS, DHCP, and NTP management
  • WireGuard: VPN configuration and status
  • Email Services: Postfix and Dovecot management
  • Calendar Services: Radicale CalDAV/CardDAV management
  • File Storage: WebDAV file storage management
  • Routing: Advanced VPN gateway and routing configuration
  • Logs: System logs and monitoring
  • Settings: Cell configuration and security settings

Tech Stack

  • React 19: Modern React with hooks
  • Vite: Fast build tool and dev server
  • Tailwind CSS: Utility-first CSS framework
  • Lucide React: Beautiful icons
  • React Router: Client-side routing
  • Axios: HTTP client for API communication

Development

Prerequisites

  • Node.js 18+ and npm
  • Personal Internet Cell backend running on port 3000

Setup

  1. Install dependencies:

    bun install
    
  2. Start the development server:

    npm run dev
    
  3. Open your browser to http://localhost:5173

Development Features

  • Hot Reload: Changes reflect immediately
  • API Proxy: Requests to /api/* are proxied to http://localhost:3000
  • TypeScript Support: Full TypeScript support available
  • ESLint: Code linting and formatting

Building for Production

Build

npm run build

This creates a dist/ directory with optimized production files.

Preview

npm run preview

This serves the built files locally for testing.

API Integration

The Web UI communicates with the Personal Internet Cell backend API:

  • Base URL: http://localhost:3000 (development)
  • Health Check: /health
  • API Endpoints: /api/*

Environment Variables

Create a .env file to customize the API URL:

VITE_API_URL=http://localhost:3000

Project Structure

src/
├── components/          # Reusable UI components
│   └── Sidebar.jsx     # Navigation sidebar
├── pages/              # Page components
│   ├── Dashboard.jsx   # Main dashboard
│   ├── Peers.jsx       # Peer management
│   ├── NetworkServices.jsx
│   ├── WireGuard.jsx   # VPN configuration
│   ├── Email.jsx       # Email services
│   ├── Calendar.jsx    # Calendar services
│   ├── Files.jsx       # File storage
│   ├── Routing.jsx     # Routing configuration
│   ├── Logs.jsx        # System logs
│   └── Settings.jsx    # Cell settings
├── services/           # API services
│   └── api.js         # API client and endpoints
├── App.jsx            # Main app component
├── main.jsx           # App entry point
└── index.css          # Global styles

Styling

The Web UI uses Tailwind CSS with custom components:

  • Cards: .card for content containers
  • Buttons: .btn, .btn-primary, .btn-secondary, etc.
  • Inputs: .input for form fields
  • Status Indicators: .status-indicator, .status-online, etc.

Browser Support

  • Chrome 90+
  • Firefox 88+
  • Safari 14+
  • Edge 90+

Contributing

  1. Follow the existing code style
  2. Use TypeScript for new components
  3. Add tests for new features
  4. Update documentation as needed

License

Part of the Personal Internet Cell project.