Cloud operations, building materials
Eight admin portals in one weekly email
Expiring certificates, planned maintenance and retirement notices are scattered across eight portals. A weekly report bundles them — and ownership deliberately comes from a maintained file rather than the directory.
- Year
- 2026
- Services
- Automation
- Area
- Corporate IT
- Role
- In-house, employed
Delivered in an employed role for an internal department, not under an external consulting contract. The organisation is not named.
The situation
The project folder does not document the starting point. No README, no documentation, no meaningful history. What was done before, how often something was missed, or what an expired certificate cost is nowhere in the code.
All that can be derived is what the system replaces: eight sources, each with its own portal view. That this checking was previously manual is plausible — it is not evidenced.
The approach
The service runs as a function on a schedule: early Monday, once a week. A second, key-protected entry point allows a manual run for testing.
An orchestrator first obtains two access tokens through the managed identity — no passwords live in the application. It then calls seven specialised collectors, each of which knows exactly one source and maps its result onto three uniform data structures. Queried are: app registration secrets, certificates and signing certificates; certificates and secrets from the key vault; TLS certificates from the app service; service health events and retirement notices through Resource Graph; message centre announcements; and a public updates feed, filtered by keyword for retirements and breaking changes.
Each collector runs with its own error handling: if a source fails, the error is collected and surfaced in the report as a warning — the email goes out regardless. Findings are graded against thresholds, assigned an owner, and rendered into a self-contained HTML page with summary tiles and three tables.
Where it could have gone the other way
Ownership — “who is responsible for this certificate” — is deliberately not pulled from the directory, but from a hand-maintained file.
The obvious route would have been to read the technical object owners recorded in the directory via the API. The header comment of the relevant module explains why that was rejected: distribution lists and shared mailboxes cannot be recorded as owners there at all — and an owner entry would simultaneously grant rights to manage the credentials.
The decision therefore separates “who do we notify” from “who may change this”, and prevents a notification requirement from silently widening permissions.
The price is named explicitly: the mapping has to be maintained by hand and goes stale if nobody touches it. If the file is missing, the column stays empty and the report runs anyway — a missing entry does not take anything down.
The result
18 modules, around 1,385 lines, the largest of them the HTML renderer. Eight read-only data sources, one delivery path, two entry points plus a local preview script that produces the same report without sending it.
Deliberately reporting only: the system renews nothing, rotates nothing, opens no tickets. Every response is manual.
Limits stated openly, and they are honest: there is no state. Every run starts from zero — no acknowledgement, no “already handled”, no escalation on non-response. The same item appears every week, unchanged, until the problem is fixed. The weekly cadence also means a certificate that becomes critical on Tuesday surfaces on Monday; the warning window softens that, but it is a setting, not a mechanism.
And whether an item is “action required” or “informational” is decided by keyword lists. That will predictably misclassify in both directions — a person still has to read the report, not just the traffic light.
Stack
- Python
- Azure Functions
- Microsoft Graph
- Azure Resource Graph
- Key Vault
- SendGrid
More projects
Group customer service, construction chemicals
2026One contact centre for eleven countries — one platform, not eleven islands
Customer service across eleven countries over voice and SMS, with data from SAP, Salesforce and the product system surfaced directly in the agent workspace. Country differences are configuration, not separate installations.
- Twilio Flex
- Twilio TaskRouter
- Twilio Studio
- SAP
Group compliance, construction chemicals
202610,872 EU declarations of conformity, not copy-paste
New EU packaging regulation required declarations of conformity in 12 languages for around 900 packaging materials. Instead of filling them in one by one, a pipeline generates and files them in a single run.
- Python
- docxtpl / Jinja2
- Microsoft Word COM
- Microsoft Graph API
Sales & inside sales, construction chemicals
2026One orchestrator, three specialist agents for product questions
Instead of one agent with three knowledge sources, a parent agent routes to three specialists — one each for ERP article data, product content and SharePoint documents.
- Microsoft Copilot Studio
- Azure AI Search
- Azure Functions
- SharePoint
A similar process at your company?
30 minutes, free, no sales pitch. You describe what is costing you time — I tell you honestly whether automation is worth it.