Commit Graph

14 Commits

Author SHA1 Message Date
shuki
325020338d Replace stat components with card-based layout for stats grid
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>
2026-03-05 05:30:21 +02:00
shuki
46edee9dc2 Fix stats cards overlap and make grid responsive
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>
2026-03-05 05:26:54 +02:00
shuki
7404e88cd9 Add dashboard stats cards with cached remote data
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>
2026-03-05 05:23:40 +02:00
shuki
7083efcc05 Add background job execution for restore and live status dashboard
- Runner.pm: extract _validate()/_build_cmd_line(), add run_async() that
  forks a detached child via setsid() to run commands in background
- restore.cgi: handle_step4() builds commands array and uses run_async()
  instead of blocking synchronous execution, redirects to logs.cgi
- logs.cgi: add auto-refresh JS (10s list view, 5s file view with
  auto-scroll) that polls index.cgi?action=status while gniza is running
- index.cgi: add live status card with AJAX polling and JSON endpoint
- Cron/schedule: redirect cron output to /dev/null (gniza has own logs)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 18:07:09 +02:00
shuki
f9326390d7 Convert all anchor buttons to button elements for consistent sizing
WHM styles override <a> tag padding, making anchor-based buttons
larger than native buttons. Using <button> elements everywhere
ensures uniform button sizing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 05:50:11 +02:00
shuki
58748b3df8 Add 'Add New' buttons to dashboard Remotes and Schedules cards
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 05:38:48 +02:00
shuki
f19609423f Rename display text to GNIZA Backup Manager across all WHM pages
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 05:37:26 +02:00
shuki
3805b87300 Use bg-white for card backgrounds across all WHM pages
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 05:34:34 +02:00
shuki
70423cdf67 Fix column header: Remote Destination(s)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 05:10:23 +02:00
shuki
bf0464a81c Fix column header: Remote Destinations (plural)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 05:10:05 +02:00
shuki
92c3428f89 Add Remote Destination column to Active Cron Schedules table
Split cron_to_human() to return timing and remotes separately.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 05:08:45 +02:00
shuki
db1b10ffb3 Reorder dashboard cards: Remotes, Schedules, Overview
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 05:07:43 +02:00
shuki
e6ac3dfe25 Show human-readable schedule timing on dashboard
Replace raw cron entries with descriptions like "Every hour, to rasp"
or "Daily at 02:00, all remotes". Add cron_to_human() to Cron.pm.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 05:07:05 +02:00
shuki
1459bd1b8b Initial commit: gniza backup & disaster recovery CLI + WHM plugin
Full-featured cPanel backup tool with SSH, S3, and Google Drive support.
Includes WHM plugin with Tailwind/DaisyUI UI, multi-remote management,
decoupled schedules, and account restore workflows.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 02:39:39 +02:00