Skip to content

Latest commit

 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UpToco

A visual computer park management tool. Upload your office floor plan, place machines on it, monitor their online/offline status in real time, and open SSH sessions in one click.

License Python React


Features

  • Floor plan — upload any image (PNG, JPG, SVG…) as your floor background
  • Machine inventory — create machines (PC, server, laptop, printer, switch, router…) with SSH credentials and a custom color
  • Drag & drop — drag machines from the inventory onto the floor plan
  • Real-time status — ICMP ping every 30 s with green/red indicator per machine; results broadcast via WebSocket
  • SSH connection — one click opens a full terminal in the browser (xterm.js); the SSH session runs from the server (password via sshpass, key file supported)
  • Multi-floor — create and switch between floors, each with its own plan
  • Zoom & pan — scroll wheel to zoom (30 %–400 %, centered on cursor), drag the background to pan freely
  • Machine resize — drag the resize handle on any placed machine to scale it
  • Export / Import JSON — full backup and restore of all data

Stack

Layer Technology
Backend Python · FastAPI · aiosqlite (SQLite) · WebSocket
Frontend React 18 · TypeScript · Tailwind CSS · Zustand · Vite

Requirements

  • Python 3.10+
  • Node.js 18+
  • sshpass (optional — required for password-based SSH auth)
sudo apt install sshpass   # Debian / Ubuntu

Installation & run

curl -sSL https://raw.githubusercontent.com/Derbosoft/uptoco/main/get.sh | bash
bash install.sh
bash start.sh

The app is available at http://localhost:8000.

Script Role
curl … | bash Clones the repo and creates local install.sh / start.sh wrappers
bash install.sh Creates the Python venv, installs dependencies, builds the frontend
bash start.sh Fixes permissions if needed, rebuilds the frontend, starts the FastAPI backend

Production (auto-restart on crash + logs)

For a server that should start at boot and recover automatically, install the systemd service instead of running start.sh manually:

bash install-service.sh
sudo systemctl status uptoco     # status
journalctl -u uptoco -f          # live logs
sudo systemctl restart uptoco    # restart

Development mode

# Terminal 1 — backend (hot-reload)
cd backend
../.venv/bin/uvicorn main:app --reload --port 8000

# Terminal 2 — frontend (Vite dev server with proxy to :8000)
cd frontend
npm install
npm run dev        # → http://localhost:5173

Project structure

uptoco/
├── backend/
│   ├── main.py          # FastAPI app — REST API, WebSocket, SSH, static serving
│   ├── requirements.txt
│   ├── uptoco.db        # SQLite database (auto-created on first run)
│   └── uploads/         # Uploaded floor plan images
├── frontend/
│   ├── src/
│   │   ├── components/  # FloorCanvas, Sidebar, TopNav, MachineModal, MachinePopup
│   │   ├── views/       # InventoryView, PlansView
│   │   ├── store.ts     # Zustand global state
│   │   └── types.ts     # Shared TypeScript types
│   └── dist/            # Built frontend (served by FastAPI)
├── get.sh               # Download script (clone repo + create wrappers)
├── install.sh           # Dependency installer + frontend build
├── start.sh             # Permission fix + frontend build + backend start
└── install-service.sh   # Install a systemd service (auto-restart + logs)

Usage

  1. Add a floor — click + Ajouter in the sidebar floor section
  2. Upload a plan — drag an image onto the canvas, or click 🖼 Changer l'image
  3. Add machines — go to the Inventaire view, fill in the SSH credentials and color, save
  4. Place machines — drag a machine from the sidebar onto the floor plan
  5. Navigate — scroll to zoom in/out (centered on cursor), drag the background to pan
  6. Connect via SSH — click a placed machine → Connexion SSH in the popup
  7. Resize a machine — drag the ↘ handle in the bottom-right corner of a machine card
  8. Backup — ⬇ Export downloads a JSON backup; ⬆ Import restores it

SSH authentication

The terminal runs in the browser but the SSH connection is opened from the server, so credentials (key files) must be present on the server, not on the client machine.

Type Requirement
Password sshpass installed on the server (sudo apt install sshpass)
Key file Absolute path, on the server, to the .pem / private key file

Security note: UpToco has no built-in authentication and stores SSH passwords in plain text in uptoco.db. Anyone who can reach the web interface can read every credential and open a root shell on any machine. Run it only on a trusted network, and ideally behind a reverse proxy (e.g. Caddy) that adds a login and HTTPS.

License

MIT

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages