Skip to content

v1 release prep: docs, zero-state, error handling, defaults#4

Merged
proofofprints merged 1 commit into
mainfrom
v1-release-prep
Apr 12, 2026
Merged

v1 release prep: docs, zero-state, error handling, defaults#4
proofofprints merged 1 commit into
mainfrom
v1-release-prep

Conversation

@proofofprints
Copy link
Copy Markdown
Collaborator

Summary

Addresses the blockers and top high-priority items from the v1 readiness audit. Every change is localized polish — no architectural or functional changes to core data flow. 8 targeted fixes across 7 files, +127/-29.

This is the last PR I'm planning before cutting a v1 tag and handing builds to external testers.

What this fixes

Blockers (docs + stale copy)

  • README Quick Start — the old instructions pointed testers at a "Monitoring" tab that was deleted in the mobile miners refactor. Rewritten to use the current ASIC Miners → Add Device flow, plus a new Mobile Miners subsection covering the pairing code flow.
  • README config paths — the old README said `%APPDATA%/com.proofofprints.popmanager/` for all Windows data, but in reality most operational state (miners, alerts, mobile miners, pool profiles, SMTP, etc.) lives in `%LOCALAPPDATA%\PoPManager\. Only preferences/history/uptime go to \%APPDATA%\`. Testers trying to back up their setup would have missed half their data. Now documents both directories with a per-file inventory.
  • Settings → About "Supported Hardware" line — hardcoded "Iceriver KS0 / KS0 Pro / KS0 Ultra" despite the app supporting the full Iceriver KS0-KS5, Whatsminer M50/M56/M60/M66, and Antminer S19/S21 range. Testers with Antminers or Whatsminers would have seen that line and assumed their hardware was unsupported.
  • New "First Launch on Windows" README section — covers the two things every first-time tester will ask about:
    • Windows SmartScreen "unrecognized app" warning (expected until code signing lands)
    • Windows Defender Firewall prompt for the optional mobile telemetry listener

High-priority first-impression fixes

  • Dashboard zero-state welcome card — on a fresh install with no miners, the dashboard used to render 7 zero-value stat cards above a tiny empty-state hint. Now short-circuits to a full-viewport welcome card with "Add ASIC Miner" / "Add Mobile Miner" CTAs when both counts are zero. The existing inner "No miners found" hint is preserved for the asymmetric case (ASIC empty, mobile present or vice versa).

  • Replace `window.alert()` with inline error banners — four call sites in the removal flows (`MinerList.tsx:986`, `MobileMinerDetail.tsx:126`, `MobileMinerList.tsx:711, 754`) used native browser `alert()` dialogs which look unprofessional on Windows. Now each confirmation modal has a red-tinted error banner that appears if the Tauri command rejects. MobileMinerList gets two separate error states (single-device and bulk) so each modal shows its own scoped error.

  • Downgrade poll-cycle logs to debug — `info("Poll cycle start")` and `info("Poll cycle complete")` in Dashboard.tsx were firing every 45 seconds at info level. Testers opening `popmanager.log` from Settings → Troubleshooting would see a wall of poll-cycle spam drowning out real errors. Now logged at debug level so they only appear when users bump log level to debug.

  • Mobile miner server defaults to `enabled: false` — fresh installs no longer auto-open port 8787 or trigger a Windows Firewall prompt for users who have no interest in mobile miners. The Settings → Mobile Miner Server toggle remains in place so users who want mobile support can opt in with one click. Existing installs with `mobile_server_config.json` already on disk are unaffected (this is intentional — no migration).

What this does NOT fix (deferred to v1.1 post-tester-feedback)

These are in the "nice to have" tier of the audit and intentionally left for after the first round of external feedback:

  • Window size/position persistence (requires `tauri-plugin-window-state` dependency)
  • Dead `src/pages/Miners.tsx` file (not imported anywhere, but deletion is scope creep)
  • Config import/export
  • Keyboard shortcuts
  • Pools/Mobile Miners screenshots in `docs/screenshots/`
  • Fleet Uptime (24h) hiding until 1h of samples collected
  • Cargo.lock committing decision

Also deferred:

  • Code signing — still the Certum Open Source Code Signing path after the repo goes public, ~$30/year, ~1-2 weeks for validation and token shipping. Tracked but not blocking v1.

Verification

  • `npx tsc --noEmit` — clean, no errors, no output
  • `cargo check` — clean, only 8 pre-existing dead-code warnings in `miner.rs` (unrelated to this change)
  • Manual: clean install on a Windows machine without `%LOCALAPPDATA%\PoPManager\` → confirm welcome card renders with both CTAs
  • Manual: click "Add ASIC Miner" CTA → verify routing to /miners and the Add Device panel opens cleanly
  • Manual: click "Add Mobile Miner" CTA → verify routing to /mobile-miners (will show empty state since mobile server is now disabled by default)
  • Manual: Settings → Mobile Miner Server → flip enable toggle → verify server starts, pairing code displays, firewall prompt appears
  • Manual: force a remove operation to fail (e.g. by deleting the target device file while the modal is open) → verify inline error banner appears instead of native alert
  • Manual: check `popmanager.log` after 5 minutes of normal polling → confirm no "Poll cycle start" lines at info level
  • Manual: verify Settings → About shows the full supported hardware list

After merge: v1.0.0 release process

Once this lands, the v1 cut looks like:

  1. Merge this PR
  2. Flip repo to public on GitHub
  3. `git tag v1.0.0 && git push --tags`
  4. Build MSI via `npm run tauri build` on a clean Windows machine
  5. Create GitHub release with the MSI attached
  6. Upload a `latest.json` manifest pointing at the release asset so the in-app updater works
  7. Do one clean-install smoke test on a second Windows machine before handing out the link
  8. DM the first tester

Files changed

```
README.md | +43 -7
src-tauri/src/commands/mobile_miner.rs | +2 -2
src/pages/Dashboard.tsx | +45 -2
src/pages/MinerList.tsx | +9 -1
src/pages/MobileMinerDetail.tsx | +11 -3
src/pages/MobileMinerList.tsx | +23 -6
src/pages/Settings.tsx | +1 -1
7 files changed, 127 insertions(+), 29 deletions(-)
```

Addresses the blocker and high-priority items from the v1 readiness
audit. All changes are localized polish fixes — no architectural or
functional changes to core data flow.

Documentation (README.md):
- Rewrite Quick Start to use ASIC Miners → Add Device flow
  (the old Monitoring tab no longer exists) and add a Mobile
  Miners subsection covering the pairing code flow
- Fix Configuration section to correctly split %LOCALAPPDATA% vs
  %APPDATA% on Windows with a per-file inventory so users can back
  up the right directories
- New "First Launch on Windows" section covering Windows SmartScreen
  unrecognized-app warning (expected until code signing lands) and
  the Windows Defender Firewall prompt for the optional mobile
  telemetry listener

Accurate hardware list (Settings → About):
- Replace "Iceriver KS0 / KS0 Pro / KS0 Ultra" with the full
  supported fleet: Iceriver KS0-KS5, Whatsminer M50/M56/M60/M66,
  Antminer S19/S21 — prevents testers with Antminer/Whatsminer
  hardware from quitting thinking their gear isn't supported

Dashboard zero-state (Dashboard.tsx):
- When both ASIC and mobile counts are zero, short-circuit the
  dashboard content with a full-viewport welcome card instead of
  rendering 7 zero-value stat cards above a tiny empty-state hint
- Welcome card has "Add ASIC Miner" and "Add Mobile Miner" CTAs
  routing to the respective pages, plus a pointer to Settings →
  About for docs and GitHub link
- Existing "No miners found" inner hint preserved — it still
  handles the asymmetric case where ASIC list is empty but mobile
  miners exist

Error handling (MinerList.tsx, MobileMinerList.tsx, MobileMinerDetail.tsx):
- Replace four window.alert() calls with inline red-tinted banners
  inside the existing confirmation modals so failed remove
  operations surface cleanly in-app instead of triggering native
  Windows alert dialogs
- MobileMinerList gets two separate error states (single-device
  and bulk) so each modal shows its own scoped error

Logging noise (Dashboard.tsx):
- Downgrade "Poll cycle start" and "Poll cycle complete" log lines
  from info to debug so testers opening popmanager.log can find
  real errors instead of wading through poll spam

Mobile server default (mobile_miner.rs):
- Flip default_enabled and MobileServerConfig::default from true
  to false. Fresh installs no longer auto-open port 8787 or
  trigger a Windows Firewall prompt. Users who want mobile miner
  support opt in via Settings → Mobile Miner Server. Existing
  installs with mobile_server_config.json on disk are unaffected.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant