Files
pic/webui
roof 33d255f089
Unit Tests / test (push) Successful in 7m26s
feat: TLS certificate management in Vault page
Adds live cert status, one-click ACME renewal, and custom cert upload
directly to the Vault page so users never need to touch Caddy config.

Backend:
- CaddyManager.get_cert_status() now returns domain, domain_mode, and
  cert_type so the UI can render the right controls without a separate
  identity fetch
- CaddyManager.renew_cert() reloads Caddy and invalidates the status
  cache; the frontend polls until the cert turns valid
- CaddyManager.upload_custom_cert() validates PEM, writes cert+key to
  the shared config/caddy/certs/ volume, updates identity (cert_type=custom),
  and regenerates the Caddyfile so Caddy references the new paths
- LAN-mode Caddyfile switches from /etc/caddy/internal/ to the shared
  certs dir automatically when cert_type=custom is set
- ddns_api default no longer includes /api/v1 — the plugin appends it;
  legacy /api/v1 suffix is stripped at write time to keep the Caddyfile clean
- POST /api/caddy/cert-renew and POST /api/caddy/custom-cert routes added

Frontend:
- TLSPanel component at the top of Vault.jsx shows status badge
  (valid/expiring-soon/expired/pending/internal) with domain and expiry
- Renew button visible only for ACME modes; spins during the API call
  then polls GET /api/caddy/cert-status every 10 s until valid
- Upload Custom Cert opens a modal with PEM text areas; works for all modes
- caddyAPI.renewCert() and uploadCustomCert() added to api.js

Tests: 22 new tests across 5 classes covering enriched status,
renew_cert guards, upload_custom_cert validation/writes/persistence,
custom-cert Caddyfile path selection, and ddns_api suffix stripping.
All 2093 existing tests continue to pass.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-08 12:53:42 -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-12 23:04:52 +03:00
2025-09-13 14:23:31 +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.