The same run produced all three deliverables: the Excel sheet, the PDF report and the e-mail, with no manual step.
The challenge
Many teams lose hours every week to the same routine: copying numbers into a spreadsheet, building a report, exporting a PDF and e-mailing it to someone. It is slow, and one missed step means a wrong report.
The solution
I built a plugin-driven automation platform in Python. You describe the routine once as a workflow of Excel, PDF, e-mail, HTTP API and file steps, and the engine runs it on a schedule, from the command line or through a REST API.
One run, three deliverables
The images show a real run of a weekly sales report workflow:
Excel: the sales sheet was written, then read back and validated before anything else used it.
PDF: a titled report was rendered from the same numbers.
E-mail: the summary was sent with the PDF attached by path, with no manual step.
A workflow is a short JSON file. Real runs show the safety net: a failed step rolls back, and files can't escape the workspace.
How it works
Plugins: file, Excel, PDF, HTTP, transform and e-mail steps behind one interface. A new automation is a new plugin, not a core change.
Data flow: any step can use an earlier result, such as the week number or the summary text.
Conditions: a step can run only when a rule is true, checked by a restricted parser, never eval.
Retries and timeouts: per step, plus a circuit breaker for outside calls.
Rollback: when a step fails, completed file writes and moves are undone in reverse order. In the real run shown, two steps were rolled back.
Sandbox: every file step is confined to the workspace, so a path like ../../outside.txt is refused.
17 REST API endpoints, 81 passing tests at 92% coverage, and security and quality checks on every change
API and quality
A secure REST API with 17 endpoints and interactive docs lets your own apps create, run and audit workflows. The same engine powers the command-line tool.
Security: Argon2id passwords, JWT access and refresh tokens with revocation, roles, rate limiting, hardened headers and an audit log.
Observability: structured JSON logs with a correlation id and a Prometheus metrics endpoint.
Quality: 81 automated tests at 92% coverage, with ruff, mypy, bandit and pip-audit in CI. The build fails if coverage drops below 90%.
Tech stack: Python, FastAPI, async SQLAlchemy, SQLite or PostgreSQL, Redis and Docker.