Auto-fill your Ultimatix timesheet on Windows startup or login. Logs in via EasyAuth, fills 9 hours, verifies, and submits.
- Windows 10/11
- Python 3.12+
- Google Chrome
Open PowerShell, cd into an empty folder where you want SilentSheet to live, then paste:
powershell -ExecutionPolicy Bypass -c "irm https://raw.githubusercontent.com/zpratikpathak/SilentSheet-Ultimatix/home/install.ps1 | iex"That's it. The installer will:
- Download the latest SilentSheet into the current folder
- Check prerequisites (Python, Google Chrome) and offer to install any missing via
winget - Create a virtual environment and install dependencies (
uvis used automatically when available, otherwisepip) - Prompt for your Employee ID, then auto-detect available tasks via EasyAuth
- Pick an auto-run mode: Windows Startup (for daily restart users), Windows Login (for sleep / lid-close users), or disable
- Open the GitHub page when finished
If you already have the project on disk (e.g. via git clone), just run the setup wizard directly from inside the folder:
powershell -ExecutionPolicy Bypass -File .\setup.ps1# With uv
uv run python fill_timesheet.py
# With pip/venv
.\.venv\Scripts\python.exe fill_timesheet.pyuv run python src\setup_startup.py install-startup # Run on boot (Startup folder)
uv run python src\setup_startup.py install-logon # Run on login & unlock (Task Scheduler)
uv run python src\setup_startup.py uninstall-all # Remove all auto-run entriesWindows Startup places a script in the Startup folder -- runs once when you start your laptop. Windows Login creates a Task Scheduler task -- runs on every login and unlock, including after wake from sleep.
.\uninstall.ps1Removes all auto-run entries (Startup folder and Task Scheduler), config, logs, and the virtual environment.
SilentSheet checks GitHub for a newer version every time it runs. When one is available, you'll get a Windows toast titled "SilentSheet Update Available" with an Update Now button:
- Click the toast (or the Update Now button) and SilentSheet handles the rest: it stops any running background process, downloads the latest archive into a temp folder, overwrites the project files, re-runs setup to pick up any new dependencies, and opens the GitHub page when done.
- Your
config.toml,.silentsheet_state.json, and.venv\are never touched — they're gitignored so they aren't in the update archive.
You can also trigger the same flow yourself at any time:
powershell -ExecutionPolicy Bypass -File .\setup.ps1 -Update- Waits for internet connectivity
- Checks if the timesheet was already filled today — exits early if so
- Checks GitHub for a newer version and shows an Update Now toast if one exists
- Opens the Ultimatix timesheet portal in Chrome
- Enters your Employee ID and initiates EasyAuth login
- Shows a toast notification with the EasyAuth number to approve on your phone
- Finds your configured task, fills 9 hours, and clicks Submit
- Refreshes the page and verifies the hours were saved
- If anything goes wrong, the user-facing toast stays short and friendly while a per-incident diagnostic report (with screenshot, page URL, and traceback) is saved to
logs/<datetime>_error.mdfor later inspection
Generated by setup.ps1, or edit config.toml manually:
[employee]
EMPLOYEE_ID = "12345678"
[timesheet]
task_name = "Development"
charge_type = "Billable"See example.config.toml for reference.
├── install.ps1 # One-line bootstrap installer (download + run setup)
├── setup.ps1 # Interactive setup wizard (also handles -Install / -Update)
├── uninstall.ps1 # Clean uninstall
├── fill_timesheet.py # Main automation script (entry point)
├── src/ # Python helper modules
│ ├── scrape_tasks.py # Detect available tasks from the timesheet
│ ├── setup_startup.py # Auto-run install/uninstall (Startup folder & Task Scheduler)
│ └── error_logger.py # Shared diagnostic-report writer used by both Python scripts
├── config.toml # Your config (gitignored)
├── example.config.toml # Config template
├── favicon.ico # App icon for notifications
├── pyproject.toml # Project metadata & dependencies
├── logs/ # Per-incident diagnostic reports + screenshots (gitignored)
└── runtime/ # Generated state, log, and VBS launchers (gitignored)