Skip to content

Repository files navigation

SilentSheet

SilentSheet

Auto-fill your Ultimatix timesheet on Windows startup or login. Logs in via EasyAuth, fills 9 hours, verifies, and submits.


Requirements

  • Windows 10/11
  • Python 3.12+
  • Google Chrome

Quick Install

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:

  1. Download the latest SilentSheet into the current folder
  2. Check prerequisites (Python, Google Chrome) and offer to install any missing via winget
  3. Create a virtual environment and install dependencies (uv is used automatically when available, otherwise pip)
  4. Prompt for your Employee ID, then auto-detect available tasks via EasyAuth
  5. Pick an auto-run mode: Windows Startup (for daily restart users), Windows Login (for sleep / lid-close users), or disable
  6. Open the GitHub page when finished

Already cloned the repo?

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

Manual Usage

# With uv
uv run python fill_timesheet.py

# With pip/venv
.\.venv\Scripts\python.exe fill_timesheet.py

Auto-Run Management

uv 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 entries

Windows 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

.\uninstall.ps1

Removes all auto-run entries (Startup folder and Task Scheduler), config, logs, and the virtual environment.

Updating

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

How It Works

  1. Waits for internet connectivity
  2. Checks if the timesheet was already filled today — exits early if so
  3. Checks GitHub for a newer version and shows an Update Now toast if one exists
  4. Opens the Ultimatix timesheet portal in Chrome
  5. Enters your Employee ID and initiates EasyAuth login
  6. Shows a toast notification with the EasyAuth number to approve on your phone
  7. Finds your configured task, fills 9 hours, and clicks Submit
  8. Refreshes the page and verifies the hours were saved
  9. 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.md for later inspection

Configuration

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.

Project Structure

├── 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)

About

Auto-fill your Ultimatix timesheet on Windows startup or login. Logs in via EasyAuth, fills 9 hours, verifies, and submits.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages