Skip to content

feat: redesign onboarding as standalone synthwave page#78

Merged
GeiserX merged 3 commits into
mainfrom
feat/onboarding-redesign
May 25, 2026
Merged

feat: redesign onboarding as standalone synthwave page#78
GeiserX merged 3 commits into
mainfrom
feat/onboarding-redesign

Conversation

@GeiserX
Copy link
Copy Markdown
Owner

@GeiserX GeiserX commented May 25, 2026

Summary

  • Rewrites the onboarding page as a standalone synthwave-themed page matching the Desktop app aesthetic
  • Simplified 3-step flow: Welcome → Create Account → Done (launches Setup Wizard)
  • Client-side form validation with fetch-based submission
  • No longer asks about categories or situation — goes straight to account creation then setup wizard

Changes

  • app/templates/onboarding.html: Complete rewrite as standalone page with inline SVG background
  • app/main.py: Route adjustments — redirects to /onboarding when no users, first user goes to /setup
  • README.md: Remove specific earnings claims, remove self-referencing ecosystem entry
  • ROADMAP.md: Re-enable auto-claim daily rewards as active roadmap item

Test plan

  • Fresh deploy (docker compose up -d with clean volumes) → lands on synthwave onboarding
  • Step 1 shows welcome, click Next → Step 2 account creation form
  • Create account with matching passwords → Step 3 "Done" with Launch Setup Wizard button
  • Launch Setup Wizard → redirects to /setup page
  • Existing install with users → /onboarding redirects to /login

Summary by CodeRabbit

  • Documentation

    • Updated earnings FAQ to reflect that earnings vary by location, ISP, device count, and services
    • Reintroduced "Auto-claim daily rewards" feature to the roadmap
  • Improvements

    • Streamlined initial onboarding experience with a clearer 3-step setup flow
    • Enhanced navigation for first-time user authentication and setup processes

Review Change Stack

- Replace multi-step onboarding overlay with standalone page matching
  CashPilot Desktop's synthwave aesthetic
- Unified 3-step flow: Welcome → Create Account → Done (→ Setup Wizard)
- Remove "What's your situation?" step (assume fresh start)
- Remove category selection (users pick services in Setup Wizard)
- Redirect / and /login to /onboarding when no users exist
- Post-registration redirects to /setup directly
- Remove earnings claim from FAQ (varies too much to give a number)
- Remove CashPilot-Desktop from ecosystem table (self-referential)
- Un-defer auto-claim daily rewards on roadmap
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 25, 2026

Warning

Review limit reached

@GeiserX, we couldn't start this review because you've used your available PR reviews for now.

Your plan includes 1 review of capacity. Refill in 40 minutes and 30 seconds.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more review capacity refills, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than trial, open-source, and free plans. In all cases, review capacity refills continuously over time.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 90c3a0fd-7d69-41bb-b501-51ff3b5c9f0f

📥 Commits

Reviewing files that changed from the base of the PR and between ca6feb5 and 3701802.

📒 Files selected for processing (2)
  • app/templates/onboarding.html
  • tests/test_main_routes.py
📝 Walkthrough

Walkthrough

Backend authentication flow and onboarding template refactored to establish a clear first-run sequence: new users land on an onboarding page (3-step form), create an account, then proceed to setup. Documentation updated to reflect broader earnings variability and active roadmap tracking of automated rewards.

Changes

Onboarding Flow Refactor

Layer / File(s) Summary
Backend first-run navigation routes
app/main.py
/login, /register, /onboarding, and / now coordinate entry-point flow: login and dashboard redirect to onboarding on first run, register sends first users to setup, and onboarding gates access by user count rather than auth state.
Onboarding template: 3-step form and client logic
app/templates/onboarding.html
Complete template rebuild: standalone HTML with inline CSS for step visibility, SVG background, registration form with password validation, and client-side fetch-based submission with error parsing and redirect handling.

Product Documentation Updates

Layer / File(s) Summary
FAQ, ecosystem, and roadmap content
README.md, ROADMAP.md
Earnings FAQ now emphasizes variability by location/device; CashPilot-Desktop removed from ecosystem; Auto-claim daily rewards reintroduced as active roadmap task with scope for automation and per-service configuration.

🎯 3 (Moderate) | ⏱️ ~25 minutes

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately reflects the main change: redesigning the onboarding flow as a standalone synthwave-themed page, which is confirmed by the substantial rewrite of onboarding.html and supporting route adjustments in main.py.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/onboarding-redesign

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
app/main.py (1)

390-393: ⚡ Quick win

Update route tests to match the new first-run contract.

Lines 392, 583, and 597 changed routing behavior, but provided snippets in tests/test_main_routes.py still assert the old /register and unauthenticated /onboarding expectations.

Suggested test updates
-assert "/register" in resp.headers["location"]
+assert "/onboarding" in resp.headers["location"]

-assert "/register" in resp.headers["location"]
+assert "/onboarding" in resp.headers["location"]

-def test_onboarding_no_auth(self, client):
-    with _no_auth():
-        resp = client.get("/onboarding", follow_redirects=False)
-        assert resp.status_code == 303
+def test_onboarding_no_auth_no_users(self, client):
+    with (
+        _no_auth(),
+        patch("app.main.database.has_any_users", new_callable=AsyncMock, return_value=False),
+    ):
+        resp = client.get("/onboarding", follow_redirects=False)
+        assert resp.status_code == 200
+
+def test_onboarding_redirects_to_login_when_users_exist(self, client):
+    with patch("app.main.database.has_any_users", new_callable=AsyncMock, return_value=True):
+        resp = client.get("/onboarding", follow_redirects=False)
+        assert resp.status_code == 303
+        assert resp.headers["location"] == "/login"

Also applies to: 582-584, 597-598

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@app/main.py` around lines 390 - 393, Tests in tests/test_main_routes.py still
expect the old first-run routing (/register and unauthenticated /onboarding) but
main.py now redirects to "/onboarding" when database.has_any_users() is false
(see RedirectResponse("/onboarding", status_code=303)); update the test
assertions at the cases covering the first run and unauthenticated flows
(previously asserting "/register" and the old onboarding behavior) to assert the
new 303 redirect to "/onboarding" and any changed authentication redirects at
the other affected assertions (those near the previous line references), and
ensure the test setup simulates database.has_any_users() returning False/True as
appropriate to exercise both branches.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@app/templates/onboarding.html`:
- Around line 9-11: The Google Fonts stylesheet link in
app/templates/onboarding.html (the link with href
"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
and the preconnect to fonts.gstatic.com) is render-blocking; change the
stylesheet link to use the async preload pattern by making it rel="preload"
as="style" with an onload handler that sets this.rel='stylesheet', keep the
existing preconnect to fonts.googleapis.com and the crossorigin preconnect to
fonts.gstatic.com, and optionally include a noscript fallback to load the
stylesheet for non-JS clients.

---

Nitpick comments:
In `@app/main.py`:
- Around line 390-393: Tests in tests/test_main_routes.py still expect the old
first-run routing (/register and unauthenticated /onboarding) but main.py now
redirects to "/onboarding" when database.has_any_users() is false (see
RedirectResponse("/onboarding", status_code=303)); update the test assertions at
the cases covering the first run and unauthenticated flows (previously asserting
"/register" and the old onboarding behavior) to assert the new 303 redirect to
"/onboarding" and any changed authentication redirects at the other affected
assertions (those near the previous line references), and ensure the test setup
simulates database.has_any_users() returning False/True as appropriate to
exercise both branches.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: d2637200-4329-4871-aa9c-6c86b1a74b05

📥 Commits

Reviewing files that changed from the base of the PR and between 288e3d6 and ca6feb5.

📒 Files selected for processing (4)
  • README.md
  • ROADMAP.md
  • app/main.py
  • app/templates/onboarding.html

Comment thread app/templates/onboarding.html Outdated
Redirect destination changed from /register to /onboarding.
Onboarding page is now unprotected and requires has_any_users mock.
@codecov
Copy link
Copy Markdown

codecov Bot commented May 25, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 90.99%. Comparing base (288e3d6) to head (3701802).

Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main      #78      +/-   ##
==========================================
- Coverage   91.00%   90.99%   -0.01%     
==========================================
  Files          26       26              
  Lines        2812     2811       -1     
==========================================
- Hits         2559     2558       -1     
  Misses        253      253              
Files with missing lines Coverage Δ
app/main.py 89.81% <100.00%> (-0.01%) ⬇️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@GeiserX GeiserX merged commit f59596c into main May 25, 2026
8 checks passed
@GeiserX GeiserX deleted the feat/onboarding-redesign branch May 25, 2026 12:21
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