diff --git a/public/llms.txt b/public/llms.txt
deleted file mode 100644
index 30f1a1d..0000000
--- a/public/llms.txt
+++ /dev/null
@@ -1,10 +0,0 @@
-# decipher.ms
-
-> Independent Microsoft advisory practice run by a former Microsoft Principal Engineer. Straight answers on M365, Azure, Dynamics, and Copilot — with no reseller incentives.
-
-decipher.ms helps companies make better Microsoft decisions. Services include expert calls, written second opinions, and in-depth technical briefs on licensing and product strategy. Founded by Pedro Paulo Vezza Campos, former Tech Lead on the Microsoft 365 Substrate AI Platform.
-
-## Pages
-
-- [Home](/): Overview of services, pricing, approach, and how to request a briefing.
-- [About](/about): Background on founder Pedro Paulo Vezza Campos, his Microsoft career, and areas of expertise.
diff --git a/public/sitemap.xml b/public/sitemap.xml
deleted file mode 100644
index bb84a27..0000000
--- a/public/sitemap.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- https://decipher.ms/
- weekly
- 1.0
-
-
- https://decipher.ms/about
- monthly
- 0.8
-
-
diff --git a/src/assets/briefs/dataverse-security/access-levels-key.webp b/src/assets/briefs/dataverse-security/access-levels-key.webp
new file mode 100644
index 0000000..ff4a659
Binary files /dev/null and b/src/assets/briefs/dataverse-security/access-levels-key.webp differ
diff --git a/src/assets/briefs/dataverse-security/append-vs-append-to.webp b/src/assets/briefs/dataverse-security/append-vs-append-to.webp
new file mode 100644
index 0000000..5bb325f
Binary files /dev/null and b/src/assets/briefs/dataverse-security/append-vs-append-to.webp differ
diff --git a/src/assets/briefs/dataverse-security/building-blocks.webp b/src/assets/briefs/dataverse-security/building-blocks.webp
new file mode 100644
index 0000000..f7f4cc1
Binary files /dev/null and b/src/assets/briefs/dataverse-security/building-blocks.webp differ
diff --git a/src/assets/briefs/dataverse-security/inherited-security-roles.webp b/src/assets/briefs/dataverse-security/inherited-security-roles.webp
new file mode 100644
index 0000000..681e8d3
Binary files /dev/null and b/src/assets/briefs/dataverse-security/inherited-security-roles.webp differ
diff --git a/src/assets/briefs/dataverse-security/objectives.webp b/src/assets/briefs/dataverse-security/objectives.webp
new file mode 100644
index 0000000..5df7e23
Binary files /dev/null and b/src/assets/briefs/dataverse-security/objectives.webp differ
diff --git a/src/assets/briefs/dataverse-security/owning-vs-access-teams.webp b/src/assets/briefs/dataverse-security/owning-vs-access-teams.webp
new file mode 100644
index 0000000..71a5cde
Binary files /dev/null and b/src/assets/briefs/dataverse-security/owning-vs-access-teams.webp differ
diff --git a/src/assets/briefs/dataverse-security/user-team-privilege-rollup.webp b/src/assets/briefs/dataverse-security/user-team-privilege-rollup.webp
new file mode 100644
index 0000000..b46cbf2
Binary files /dev/null and b/src/assets/briefs/dataverse-security/user-team-privilege-rollup.webp differ
diff --git a/src/components/BriefingForm.astro b/src/components/BriefingForm.astro
index 43c445b..64ca0d5 100644
--- a/src/components/BriefingForm.astro
+++ b/src/components/BriefingForm.astro
@@ -1,5 +1,9 @@
---
-const ENGAGEMENT_OPTIONS = [
+import type { EngagementKey } from "@/lib/engagements";
+
+// Values are typed against the canonical EngagementKey so a renamed tier fails
+// to compile here instead of silently mismatching the server validation.
+const ENGAGEMENT_OPTIONS: { value: EngagementKey; label: string }[] = [
{ value: "expert-call", label: "Expert Call — 30-min call, $500" },
{ value: "second-opinion", label: "Second Opinion — short brief, $2,000" },
{ value: "technical-brief", label: "Technical Brief — in-depth brief, $3,500" },
@@ -90,8 +94,13 @@ const errorClass = "mt-2 text-xs text-accent font-bold";