Skip to content
Back to skills

Privateapp

DSecurity

Personal PWA dashboard server with plugin apps. Use when: (1) installing or setting up PrivateApp, (2) starting/stopping/restarting the service, (3) building frontends after changes, (4) adding new app plugins, (5) configuring push notifications. Requires Python 3.9+, Node.js 18+. Runs as systemd user service or launchd plist.

  • 33 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added September 5, 2026
developmentpythonshellbashreactnodefastapigitapifrontendbackend

Works with

  • cli
  • api

Security analysis

D46/100
  • criticalModifies startup scripts or system services for persistence
  • criticalModifies startup scripts or system services for persistence
  • criticalImpersonates system messages to override safety constraints
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro scans all 20 files and shows the line behind each finding

Scanned September 5, 2026

npx -y skills add dvcrn/openclaw-skills-marketplace --skill privateapp --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Privateapp?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Privateapp
[![Security: D β€” Skills Directory](https://www.skillsdirectory.com/api/skills/dvcrn-privateapp/badge)](https://www.skillsdirectory.com/skills/dvcrn-privateapp)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: privateapp
description: "Personal PWA dashboard server with plugin apps. Use when: (1) installing or setting up PrivateApp, (2) starting/stopping/restarting the service, (3) building frontends after changes, (4) adding new app plugins, (5) configuring push notifications. Requires Python 3.9+, Node.js 18+. Runs as systemd user service or launchd plist."
---

# PrivateApp

Personal PWA dashboard β€” FastAPI backend + React/Vite frontend with plugin apps.

## Screenshots

![Home](assets/screenshots/home.png)
![System](assets/screenshots/system.png)
![Files](assets/screenshots/files.png)

## Setup

```bash
# Clone and install (creates venv, builds frontends, sets up systemd/launchd)
git clone https://github.com/camopel/PrivateApp.git ~/Workspace/PrivateApp
cd ~/Workspace/PrivateApp
bash scripts/install.sh [--port 8800]
```

Copy `scripts/config.example.json` β†’ `scripts/config.json` and edit:
```json
{
  "host": "0.0.0.0",
  "port": 8800,
  "data_dir": "~/.local/share/privateapp",
  "file_browser": { "root": "~" },
  "push": { "vapid_email": "you@example.com" }
}
```

## Service Management

```bash
# Linux (systemd user service)
systemctl --user start privateapp
systemctl --user stop privateapp
systemctl --user restart privateapp
systemctl --user status privateapp

# macOS (launchd)
launchctl load ~/Library/LaunchAgents/com.privateapp.server.plist
launchctl unload ~/Library/LaunchAgents/com.privateapp.server.plist

# Manual
.venv/bin/python3 scripts/server.py --host 127.0.0.1 --port 8800
```

## Build Frontends

After any frontend change, rebuild:
```bash
# Build shell (home screen)
cd frontend && npm run build

# Build all app frontends
for app_dir in apps/*/frontend; do
  [ -f "$app_dir/package.json" ] && (cd "$app_dir" && npm install && npm run build)
done

# Or use the install script which builds everything
bash scripts/install.sh
```

Then restart the service.

## Built-in Apps

| App | Shortcode | Description |
|-----|-----------|-------------|
| πŸ“Š System | `sysmon` | CPU, RAM, disk, GPU stats and service health |
| πŸ“ Files | `files` | Browse, preview, and share files |

## Adding a New App

Create `apps/{app-id}/` with:
- `app.json` β€” metadata (id, name, shortcode, icon, description)
- `backend/routes.py` β€” FastAPI router (mounted at `/api/app/{shortcode}/`)
- `frontend/` β€” React SPA (Vite, builds to `frontend/dist/`)

Shortcode must be unique. The app loader auto-discovers on startup.

See the existing apps for reference patterns. Key conventions:
- All routes `async def`, return plain dicts
- Frontend uses CSS custom properties for dark mode
- Input font-size β‰₯ 16px (prevents iOS auto-zoom)
- Every app has a back button linking to `/`

## Push Notifications

Apps can send push via `commons.push_client`:
```python
from commons.push_client import send_push
await send_push(title="Alert", body="Something happened", url="/app/my-app/")
```

## Data

```
~/.local/share/privateapp/
β”œβ”€β”€ privateapp.db       # Settings, preferences, push subscriptions
β”œβ”€β”€ vapid_private.pem   # VAPID signing key
└── vapid_public.txt    # VAPID public key
```

## Key APIs

- `GET /api/apps` β€” list installed apps
- `GET /api/settings/preferences` β€” get preferences (timezone, language, app_order)
- `POST /api/settings/preferences` β€” save preferences
- `POST /api/push/send` β€” send push notification
- `GET /api/push/test` β€” test push

Files in this skill

  • README.md3.2 KB
  • SKILL.md3.3 KB
  • apps/file-browser/app.json279 B
  • apps/file-browser/backend/routes.py4.8 KB
  • apps/file-browser/frontend/index.html711 B
  • apps/file-browser/frontend/package-lock.json56.7 KB
  • apps/file-browser/frontend/package.json455 B
  • apps/file-browser/frontend/src/App.tsx18.9 KB
  • apps/file-browser/frontend/src/env.d.ts82 B
  • apps/file-browser/frontend/src/index.css5.1 KB
  • apps/file-browser/frontend/src/main.tsx232 B
  • apps/file-browser/frontend/tsconfig.json509 B
  • apps/file-browser/frontend/vite.config.ts314 B
  • apps/system-monitor/app.json281 B
  • apps/system-monitor/backend/routes.py11.4 KB
  • apps/system-monitor/frontend/index.html715 B
  • apps/system-monitor/frontend/package-lock.json56.7 KB
  • apps/system-monitor/frontend/package.json457 B
  • apps/system-monitor/frontend/src/App.tsx10.6 KB
  • apps/system-monitor/frontend/src/env.d.ts82 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…