Insights
Notes from the work, with the commands.
Each article is written from project practice: concrete steps, PowerShell and Graph commands, the mistakes I see most often, and a checklist at the end. No client names, no filler.
Making 1,000-page PDFs accessible with AI: what worked and what did not
Lessons from building DokAudit: rules first, a local layout model, an LLM only for uncertain pages, a cross-check against the page image and a cost budget.
Email authenticationDMARC for Singapore companies: what Cyber Essentials asks for, and how to reach p=reject
What CSA Cyber Essentials (2025) clause A.4.4 says about SPF, DKIM and DMARC, and a step-by-step path to p=reject that does not break legitimate mail.
Email securityBusiness email compromise in practice: what DMARC stops, what it does not, and what Defender for Office 365 adds
DMARC stops exact-domain spoofing. Lookalike domains, display names and compromised vendor mailboxes need Defender for Office 365 and a payment process.
ExchangeDecommissioning the last Exchange server: what has to move first
Before the last Exchange server goes: find every SMTP sender, move relays to Graph or a connector, plan recipient management and clean up hybrid and DNS.
IdentityRolling out Conditional Access in phases without locking anyone out
Break-glass accounts first, then report-only, sign-in logs and What If, then rings from admins to everyone. With Graph PowerShell for export and rollback.
IdentityApp registrations with least privilege: Graph permissions, scoped access, certificates and review
App registrations are the side door of a tenant. Pick narrow Graph permissions, scope mailbox and site access, use certificates instead of secrets, review regularly.
ComplianceMAS Notice FSM-N06 and Microsoft 365: admin accounts, MFA and patching evidence
How the six cyber hygiene practices of MAS Notice FSM-N06 map to Microsoft 365, Entra ID and Intune, and how to collect evidence by script. Not legal advice.
Data governanceCopilot readiness: find and fix oversharing in SharePoint and Teams before you switch Copilot on
Copilot only shows what users can already open. That makes old oversharing visible. How to find broadly shared sites, teams and links, and what to change first.
Email securityMTA-STS and TLS-RPT: enforcing encrypted mail transport, step by step
SMTP falls back to plain text when TLS fails. MTA-STS tells senders not to, TLS-RPT tells you when it happens. Policy file, DNS records, testing and enforce mode.
BackupMicrosoft 365 backup: what Microsoft does and does not cover, and how to test a restore
Retention is not backup. The built-in recovery windows of Microsoft 365, what a backup must add, configuration backup, and a restore test you can repeat.
ExchangeMessage trace and mail flow troubleshooting in Exchange Online, with real cases
A repeatable way to find out why a message went missing: Get-MessageTraceV2, header analysis, connectors and NDR codes, with anonymised cases from projects.
EndpointMoving devices from on-premises AD to Entra ID join with Intune and Autopilot
There is no switch from domain join to Entra ID join. The two real paths, the prerequisites, Autopilot and ESP pitfalls, and keeping access to file servers.
Automation · AIAI agents with a human in the loop: how I automate admin work without giving an AI the keys
Scoped tools, short-lived tokens, switches that default to off, and a log of every call: the patterns I use to let AI and automation work on Microsoft 365.
Questions about one of these topics?
Write to me. If it is a role in Singapore or a project where this matters, all the better.