Add multi-account support / Rework UI - #22
Conversation
|
Hi, I'll definitely review this in detail after v3.1 is released. Thank you for the work and the new UI looks nice |
|
Hey, |
|
That would be incredibly helpful, thank you. |
|
Glad to help, it's a really great application you have done ! |
Rework UI
- Adopt main's headless CLI runner (AutoRewarder_CLI.py) and OS autostart (HKCU Run on Windows, .desktop on Linux), dropping the in-process daemon scheduler and the standalone windows_startup module. - Per-account schedule schema: advancedScheduling, runDuration, queriesPerHour, queries_pc, queries_mobile. Legacy keys (time/window_hours/queries) are ignored on read. - Settings modal: accordion schedule cards (one expanded at a time) with live inline summary; advancedScheduling sub-toggle gates the duration and rate fields. - settings_manager: atomic write retries on transient Windows PermissionError; read paths tolerate recovery-write failures. - Bump CURRENT_VERSION to v3.1 and the brand sub-header to match. Keeps multi-account architecture, redesigned UI, PC/Mobile run split and per-account schedules from multi_account.
There was a problem hiding this comment.
Pull request overview
This PR adds multi-account support across the app (separate Edge profiles + per-account history/status/schedule) and ships a full GUI redesign to manage accounts and schedules more easily.
Changes:
- Introduces multi-account data layout and account CRUD/migration (
AccountManager, per-accountmeta.json+ schedule). - Refactors core automation wiring to rebuild driver/history/daily-set context per selected account, and updates the headless runner to execute per-account schedules.
- Reworks the GUI into a card-based UI with account picker, account management modal, settings/schedule modal, and updated history window.
Reviewed changes
Copilot reviewed 16 out of 16 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
src/settings_manager.py |
Splits global settings vs per-account meta/schedule, adds safer JSON read/write helpers. |
src/config.py |
Defines multi-account storage layout and per-account path helpers. |
src/account_manager.py |
Adds account index + CRUD + legacy single-account migration. |
src/api.py |
Makes the backend multi-account aware; adds schedule endpoints, account switching, and setup flow updates. |
src/driver_manager.py |
Binds WebDriver to a per-account profile directory; adds mobile UA support and identity-disabling flags. |
src/history.py |
Scopes history manager to a per-account history path and ensures directory creation. |
src/daily_set.py |
Scopes daily-set status tracking to a per-account status path and ensures directory creation. |
src/edge_policy.py |
Adds Windows-only registry policy helper to temporarily disable Edge browser sign-in during setup. |
AutoRewarder_CLI.py |
Updates headless runner to iterate per-account schedules with optional targeting/overrides. |
AutoRewarder.py |
Adjusts entrypoint to delegate --headless runs and updates GUI window sizing/theme. |
GUI/index.html |
New UI layout (account picker, run card, activity feed, modals, empty state). |
GUI/styles.css |
Large UI refresh with a new design system and modal/dropdown styling. |
GUI/script.js |
Implements new UI logic (toasts, modals, account dropdown, scheduling UI, loader). |
GUI/settings.js |
Implements accounts management modal behaviors (rename, setup, delete, add). |
GUI/settings.css |
Deprecates old settings stylesheet in favor of consolidated styles.css. |
GUI/history.html |
Updates history window styling and adds current-account context pill. |
Comments suppressed due to low confidence (1)
src/history.py:56
get_history()tries to remove/replace backup files without guarding againstOSError(e.g., file locked by AV or another process).os.remove(backup_path)/os.replace(...)can raise and break history reads, which should be resilient. Wrap these operations intry/except OSError(similar to the JSON recovery logic insettings_manager).
backup_path = self.history_file + ".backup"
if os.path.exists(backup_path):
os.remove(backup_path)
os.replace(self.history_file, backup_path)
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
Hi @JeromeM, the mobile collection feature and the new settings UI look awesome. I have one technical question: since microsoft tracks touch data on mobile to detect automation, does your implementation simulate touch events to bypass this, or does it still send mouse events? We need to be careful not to trigger their anti-bot systems. Also, one small UI request: could you bring back the green/red color coding for the history log? It makes it much easier to track successes and errors at a glance. Lastly, looking at the diff, this is a huge update. Because the changes are so extensive, it’s going to take me a bit more time to properly review and test everything on my end. I can really see the experience behind this code. It’s awesome to have such skilled developers contributing to the project. Thanks. 🤝 |
|
Thank you for your comment. I will also bring back the color coding for the history. For the touch events, I will take a look to make something more careful for the MS detection system. I'm going back to you as soon as I'm home on thursday. Oh and btw, sorry if my english is not so good, I'm from France :) |
|
Sounds good. Take your time, there's absolutely no rush. And don't worry about your English is absolutely fine. I'm not a native either, I'm from Prague. |
…o 100 search for 100 points. With the scheduler activated, we can't do this daily task with the 99 limit. Update all events on mobile from mouse events to touch events to avoid MS detection.
|
Hey, I've tried fo fix everything ! Now every mobile related moves are touch events to avoid MS detection. Let me know if there is anything else I need to review / refactor, or even do differently ! Have a nice day. |
|
Awesome, thank you for your work. I’m going to pull the branch, do some thorough testing on my end, and dive into the code. I'll ping you if I have any questions comes up. Thanks again for the hard work. Have a great weekend. |
|
Hi @JeromeM, So far, I've tested the UI and it's awesome. Honestly, feels like a masterclass. However, while doing some manual testing, I caught a small bug. When I try to add more than 2 accounts, the scheduled runs in the Settings modal render like this:
|
The Scheduled-runs section broke once 3+ accounts were added: the inner schedule-accounts-list (max-height 360px, flex column) was shrinking every card to fit, chopping headers in half and clipping the inputs of the expanded card. Worse, removing that inner cap made the modal itself grow past the window — the Save / Cancel buttons fell offscreen. Fix the layout in two layers: - Cap modal-box at max-height: 90vh and turn it into a flex column. Header and footer get flex-shrink: 0 so they stay pinned; modal-body takes the remaining space with overflow-y: auto and min-height: 0. Save / Cancel are always reachable, no matter how many accounts. - Drop the schedule-accounts-list inner max-height + overflow. The modal-body now handles scroll, eliminating the nested-scroll setup that was squeezing cards. Also scroll the freshly-expanded card into view (block: 'nearest', 240 ms after click so the max-height transition has settled) so opening a card lower in the list doesn't leave its form clipped below the visible area.
|
Hello, My bad, I didn't test with more than 3 accounts.. |
|
Hi @JeromeM, I've reviewed and tested the code, and everything looks great. I'll go ahead and merge it, add a banner block, update the docs, and release it as v3.2. Thank you again for the amazing work. I really appreciate it! 🤝 |
|
My pleasure, thank you ! |




I've added multi-account support (with scheduler available for each account).
Also reworked the UI to be more "user friendly"