- Add per-user activity logging to AdminBin: every RESTORE_* action
writes to /var/log/gniza/cpanel-<user>.log with action details and
gniza command output
- New logs.live.cgi CGI with paginated activity list and detail view
- WHM logs.cgi now shows cpanel-*.log files with Owner column and
structured activity entry viewer with expandable command output
- Add Logs nav item to cPanel plugin, update install.sh
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The WHM setup wizard handles all configuration (SSH, S3, GDrive),
making the interactive CLI init wizard redundant.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Info, warn, and error always go to the log file. Debug messages
are only written to the file when LOG_LEVEL is set to debug,
preventing verbose output in logs at higher levels.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
LOG_LEVEL was gating both file and console output, causing empty
log files when set to error/warn. Now the log file always captures
everything while LOG_LEVEL only controls stderr verbosity.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Only show per-run gniza-*.log files in the logs page. Cron wrapper
logs (cron-*.log) are redundant with the structured per-run logs
and just accumulate noise. They remain accessible via direct URL.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add [TYPE:SYSBACKUP] marker to sysbackup log output. The logs page
detects this in the first 5 lines and displays "System" badge instead
of "Backup".
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Each of the 6 stat cards now has a contextual SVG icon in the top-right
corner: users, shield-check, upload, server, clock, and file-text.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Desktop (lg+) shows horizontal menu links. Smaller screens show
a dropdown hamburger button with the same navigation items.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Target servers don't need SSH keys — use public HTTP endpoint
for unauthenticated clone during install.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Target servers won't have the gitea SSH alias, so use the direct
SSH URL with the public IP for remote installs.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace hardcoded 192.168.100.100 addresses with gitea SSH alias
from ~/.ssh/config across CLAUDE.md, README.md, and install.sh.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The gniza stats command is now automatically scheduled when
install_schedules() runs, tagged as # gniza:_stats so it is
managed alongside backup schedules (installed/removed together).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
DaisyUI stat components have internal styles that conflict when used
as standalone grid items, causing vertical overlap. Switch to plain
card components with manual typography classes instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove stat-figure emoji icons that caused content overflow and
switch from fixed grid-cols-3 to responsive grid-cols-2 sm:grid-cols-3.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add 6 stat cards to the WHM dashboard showing cPanel accounts, backed up
accounts, total snapshots, remotes, schedules, and last backup status.
Remote-dependent stats are collected via `gniza stats` CLI command and
cached in stats.json, with a manual Refresh button on the dashboard.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Enhance the remotes table with AJAX-loaded disk usage info (SSH via df,
S3/GDrive via rclone about) and server-side schedule assignment counts
with tooltip showing schedule names.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace tabs-box with navbar component: logo+text in navbar-start,
menu links in navbar-end. Remove all inline styles, use only
Tailwind/DaisyUI classes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Regenerated icon at 256x256 with transparency for crisp rendering.
Added cpapi2 Branding gensprites call for all cPanel users during
install so sprites update immediately.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Reverts SVG approach (cPanel sprites don't support SVG) and
regenerates PNG at higher resolution from the SVG source.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace old logo SVG with gniza.svg and render the icon alongside
"GNIZA Backup" text where "Backup" uses the icon's orange (#f47216).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Place the SVG icon next to the tab bar in a flex row instead of
rendering it as a separate centered block above the navigation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Uncheck and disable the toggle when switching to Selective so
the value cannot carry through to the confirmation step.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use hidden class toggle instead of inline style.display, since
Tailwind CSS is built with the important flag.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The WHM restore page now populates the account dropdown dynamically
from the selected remote, making terminated/removed accounts visible
and restorable. Accounts not on the local server show "(terminated)".
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>