LUSI (Leveling-Up System Interface) is a technical, RPG-inspired productivity dashboard designed to turn personal growth, habits, and task management into a gamified system.
This version is a Full-Stack Application specifically engineered for Linux servers. It replaces basic localStorage with a centralized, consistent database (server-side JSON) that synchronizes progress across all connected devices (phones, laptops) on your local network.
- Centralized Persistence: All progress is saved to
data.jsonon the server. Opening the app from any device shows the exact same up-to-date state. - Character System: Dynamic leveling and RPG-style rank evolution.
- Custom Stats: Track Health, Mana, Stamina, or any custom attribute.
- Quest Engine: Manage Main Quests, Side Quests, and infinite daily loops.
- Threat Management: Loss of XP for bad habits or system failures.
- Atomic Safety: Uses a temp-write & rename strategy on the server to prevent data corruption during saves.
- History Log: Audit trail of all character actions and stat changes.
- Backend: Node.js (Express) server providing a REST API (
GET /data,POST /data). - Database:
data.jsonfile on the server. It includes a basic locking mechanism (write queue) to handle simultaneous requests from multiple devices. - Frontend: React-based dashboard that handles debounced synchronization with the server.
To deploy this on your local Linux machine (e.g., Raspberry Pi, Home Server, or a PC in /var/www):
- Node.js (v18+)
- npm
If deploying in /var/www/, you must ensure your user has permissions to write files:
# Move to the directory
cd /var/www/lusi-app
# Grant ownership to your user
sudo chown -R $USER:$USER .
chmod -R 755 .# 1. Install dependencies
npm install
# 2. Build the application (Frontend + Backend)
npm run buildModern Production Mode (Recommended):
# This starts the compiled server (dist/server.js) in production mode
npm startAccess from other devices:
- Find your server's local IP (e.g.,
192.168.1.50). - Visit
http://192.168.1.50:3000from any device on your Wi-Fi.
To ensure the app starts automatically when your Linux server boots, create a service file:
/etc/systemd/system/lusi.service:
[Unit]
Description=LUSI RPG Dashboard
After=network.target
[Service]
WorkingDirectory=/var/www/lusi-app
ExecStart=/usr/bin/npm start
Restart=always
Environment=NODE_ENV=production
# You can override the port if needed
Environment=PORT=3000
User=votre-user
[Install]
WantedBy=multi-user.targetThen run:
sudo systemctl daemon-reload && sudo systemctl enable lusi && sudo systemctl start lusi
- Database Consistency: The app uses a 1-second debounce before saving changes. If you make changes on a phone, they will appear on your laptop after a refresh (or vice versa).
- Atomic Write: The server saves data to
data.tmpand then performs an atomicrenametodata.json. This prevents "half-written" files if power is lost. - Backups: Every save creates a
data.json.bakof the previous state. - No LocalStorage: The primary state is never stored in the browser's persistent storage; it is always derived from the server on load.