Built 15 Aug 2026 — v3.7: NewsletterPack now drafts the weekly Thursday Batch 1/2 emails directly via the Office 365 Outlook connector's DraftEmail action — bold HTML body built from this week's newsletter items plus a fixed footer, BCC pulled from Branch Contact Groups' BM Groups/BM Memberships SharePoint lists (per-user identity, no shared connection). Requires those two lists added as data sources before pasting. Manual step still required: paste this week's release link into the placeholder in the drafted body, and set the OFFICIAL sensitivity label before sending.
Canvas app tracking ACCT UK policy documents through the release pipeline. V2 is a complete redesign: dominant type-colour card panels, segmented type filter, inline search, owner initials circles, status dots, Newsletter Pack screen, and a new cool-grey palette throughout. Wraps the Policy Proof Tracker SharePoint list with a PolicyLinks child list.
StartScreen in App → StartScreen.Add these in the Data panel before pasting any screen YAML:
Policy Proof TrackerPolicyLinksNo new columns are required for V2. These internal names are used across the YAML — check them in SharePoint list settings if any Patch calls fail.
TrackerType — displays as “Document Type”PublishDate — displays as “Planned Publish Date”ActualPublishedDate — displays as “Published Date”ReadyForRelease — displays as “Approved by Pillar Lead (Ready to Release)”External_x0020_consultation_x002 — displays as “External consultation required”Item_x0020_summary — displays as “Item summary”Title_x0020_for_x0020_Newsletter — displays as “Title for Newsletter”Approved_x0020_For_x0020_Release — displays as “Approved For Release By”Top_x0020_Item — displays as “Top Item” (Yes/No, default No)Paste into App → OnStart in Power Apps Studio. Do not put this inside any screen YAML. Run it once after pasting to populate all collections before using any screen.
colNewsletterUsers in the OnStart block below. No other change is needed anywhere in the app.
// App.OnStart — Policy Tracker V2
// Paste into App → OnStart in Power Apps Studio (not a screen YAML)
// ── State variables ──────────────────────────────────────────────────────────
Set(varSelectedState, "Current");
Set(varShowSearch, false);
Set(varSelectPolicy, "Empty");
Set(varHistoricLimit, 28);
Set(varSelectedDate, Today());
Set(varSelectedItem, Blank());
Set(varSelectedRelease, Blank());
Set(varSelectedLink, Blank());
Set(varShowDuplicateModal, false);
Set(varSaving, false);
Set(varUnsavedChanges, false);
Set(varParentSaved, false);
Set(varLoadingLinks, false);
Set(varFormSaved, false);
Set(varDeletingItem, false);
Set(varSaveMode, "");
Set(varDuplicating, false);
Set(varShowLinkModal, false);
Set(varShowMyEntries, false);
Set(varScrollDate, Blank());
Set(varSourceScreen, "Main");
Set(varDeepLinkHandled, false);
Set(varLoading, false);
Set(gblMorphTimestamp, Text(Now(), "yyyymmddhhmmss"));
// ── V2 additions ─────────────────────────────────────────────────────────────
Set(varTypeFilter, "All");
Set(varSearchText, "");
Set(varNextThursday, DateAdd(Today(), Mod(5 - Weekday(Today()) + 7, 7), "Days"));
// ── Newsletter access list (add rows here to grant access) ───────────────────
ClearCollect(
colNewsletterUsers,
{Email: "allan.hamilton775@mod.gov.uk"},
{Email: "dan.smith391@mod.gov.uk"}
);
// ── Document type colour map (V2 palette) ─────────────────────────────────────
ClearCollect(
colChoiceColors,
ForAll(
Choices('Policy Proof Tracker'.'Document Type'),
{
ChoiceValue: Value,
ColorCode: Switch(
Value,
"📄 MoD Policy", RGBA(28, 32, 48, 1),
"MoD Policy", RGBA(28, 32, 48, 1),
"📄 ACSO", RGBA(20, 60, 140, 1),
"ACSO", RGBA(20, 60, 140, 1),
"📖 Regulation", RGBA(0, 130, 140, 1),
"Regulation", RGBA(0, 130, 140, 1),
"📄 CFSO", RGBA(108, 40, 168, 1),
"CFSO", RGBA(108, 40, 168, 1),
"📄 CFI", RGBA(56, 96, 178, 1),
"CFI", RGBA(56, 96, 178, 1),
"📄 CBN", RGBA(191, 100, 30, 1),
"CBN", RGBA(191, 100, 30, 1),
"📕 SOI", RGBA(180, 50, 40, 1),
"SOI", RGBA(180, 50, 40, 1),
"📑 Internal Document", RGBA(90, 90, 115, 1),
"Internal Document", RGBA(90, 90, 115, 1),
"📗 Manual", RGBA(46, 125, 89, 1),
"Manual", RGBA(46, 125, 89, 1),
"📜 Newsletter Item", RGBA(160, 120, 0, 1),
"Newsletter Item", RGBA(160, 120, 0, 1),
RGBA(150, 150, 150, 1)
)
}
)
);
// ── App theme (V2 forest green palette) ──────────────────────────────────────
Set(
AppTheme,
{
palette: {
themePrimary: RGBA(46, 125, 89, 1),
themeSecondary: RGBA(36, 100, 70, 1),
themeTertiary: RGBA(28, 80, 55, 1),
neutralLight: RGBA(243, 244, 248, 1),
neutralDark: RGBA(28, 32, 48, 1),
white: RGBA(255, 255, 255, 1)
},
semanticColors: {
buttonBackground: RGBA(46, 125, 89, 1),
buttonBackgroundHovered: RGBA(36, 100, 70, 1),
buttonBackgroundPressed: RGBA(28, 80, 55, 1),
buttonText: RGBA(255, 255, 255, 1)
}
}
)
Create a blank screen for each, then paste in the order below. Screens marked V3 (old) still work — paste them while V2 rebuilds are in progress. Replace each one as the V2 version is released.
Full redesign in progress, pasted onto new screens (Main_1, ViewItem_1) rather than overwriting the real Main/ViewItem above — safe to test without risking the live screens. Once happy, delete the old screens and rename these to Main/ViewItem.
Progress control.ModernTabList control and a small live-counts caption underneath. Header and Card controls deliberately NOT used — verified against Microsoft's own docs to be unfit for this app's action-bar and card-click-target patterns.Targeted build guides for changing the existing screens section by section instead of pasting a whole replacement screen.
StartScreen.| Token | RGBA | Use |
|---|---|---|
| Background | RGBA(243, 244, 248, 1) | Screen fill, controls row |
| Card | RGBA(255, 255, 255, 1) | Gallery cards, stat bar |
| Primary green | RGBA(46, 125, 89, 1) | Buttons, active states, Manual type |
| Foreground | RGBA(28, 32, 48, 1) | Primary text, card titles |
| Muted | RGBA(112, 116, 134, 1) | Secondary text, labels, dates |
| Border | RGBA(28, 32, 48, 0.12) | Card borders |
| Type | Colour | RGBA |
|---|---|---|
| MoD Policy | Dark slate | RGBA(28, 32, 48, 1) |
| ACSO | Navy | RGBA(20, 60, 140, 1) |
| Regulation | Teal | RGBA(0, 130, 140, 1) |
| CFSO | Rich purple | RGBA(108, 40, 168, 1) |
| CFI | Steel blue | RGBA(56, 96, 178, 1) |
| CBN | Amber orange | RGBA(191, 100, 30, 1) |
| Manual | Forest green | RGBA(46, 125, 89, 1) |
| Newsletter Item | Gold | RGBA(160, 120, 0, 1) |
| SOI | Terracotta | RGBA(180, 50, 40, 1) |
| Internal Document | Slate grey | RGBA(90, 90, 115, 1) |
| Priority | Type | Notes |
|---|---|---|
| 0 | Top Item | Always first, regardless of type |
| 1 | MoD Policy | |
| 2 | ACSO | |
| 3 | Regulation | |
| 4 | CFSO | |
| 5 | CFI | |
| 6 | CBN | |
| 7 | Manual | |
| 8 | Newsletter Item | |
| 9 | SOI | |
| 10 | Internal Document |
colNewsletterUsers.varTypeFilter, varSearchText, varNextThursday, colNewsletterUsers, and updated type colours.varSelectedRelease, varSelectPolicy, colLinks, etc.) are still initialised. You will not see any errors on paste.
colNewsletterUsers collection in App.OnStart to add or remove users. The button in the Main header is automatically hidden for users not in the list. No other change needed.
Top Item. Main, Overview, and ViewItem V2 still expect a future Yes/No SharePoint column displayed as Top Item, internal name Top_x0020_Item, default No. Add that column before repasting those screens.
Found a problem or need a change? Report it in the issues tracker.