Back to Portfolio
SCHOOL PROJECT

Teams Broadcast System

I built this Power Platform tool to help teachers, students, and organizational leaders send one announcement to 20+ Microsoft Teams channels at once, with a clear record of where it went.

Last updated: 26/06/2026

Plain-English view, built for everyone Full technical detail
20+
channels reached at once
1
click to send everywhere
3
Power Platform services wired together
100%
of sends tracked and searchable

How a broadcast flows

Broadcast pipeline
1 User a teacher, student or director, on any device
2 Power Apps canvas app select channels, compose, and a guard against double sends
3 Fetch flow Power Automate on app open, lists every Team and channel
4 Broadcast flow apply to each posts the message per channel
5 Microsoft Teams Teams connector message delivered and confirmed in over 20 channels
6 Dataverse audit table per-channel delivery status

Each send returns success or failure per channel, so a failed post is visible instead of silently lost. During development it runs against real Teams with dedicated test channels - no school channel ever gets spammed.

What it does

Pick every channel at once

Tick all the channels you want in one list instead of opening 20 conversations one by one.

Write once, send everywhere

Type your subject and message a single time, then broadcast it to every selected channel with one click.

Watch it land live

A clear status shows each message going out and confirms exactly which channels received it.

Keep a searchable history

Every broadcast is logged with who sent what, when, and where - searchable any time you need proof.

The Problem

Sending the same message to 20+ Teams channels manually is tedious. You have to open each one, copy-paste, and hope you didn't forget any. There's no way to track what was sent where.

I flipped that around: select all channels at once, write the message once, and send it everywhere with one click, while keeping a complete log of each destination.

Teams Broadcast main interface

Main broadcast interface: channel selection, message composition, and real-time sending status. Uses real Teams with test channels to avoid spamming school channels during development.

Under the hood

Three Power Platform services, cleanly split into UI, logic, and data layers - plus the native Teams connector for delivery.

Power Apps - Canvas frontend

Canvas AppPower FxCollectionsState machineValidation
  • Single-screen UX: channel multi-select, a subject line, and a rich message body live on one canvas, with input validation before anything can be sent.
  • Explicit state machine: idle → sending → success/error drives every button and indicator, so the UI always reflects what the backend is actually doing.
  • Duplicate-send guard: the send button locks while a broadcast is in flight, preventing the classic double-click that would post everything twice.

Power Automate - Two cloud flows

Cloud FlowsTeams connectorApply to eachRespond to appError handling
  • Fetch flow: on app open (or "Refresh channels") it pulls every Team and channel the user can access and hands the list back to Power Apps.
  • Broadcast flow: an apply to each loop posts the message to every selected channel through the native Teams connector.
  • Per-channel results: each post returns success or failure individually, so a single failed channel never blocks the rest of the broadcast.

Dataverse - Audit store

DataverseTablesTimestampsSearchRelationships
  • Every broadcast recorded: subject, body, sender, timestamp, target channels, and the per-channel delivery status are written on each send.
  • Searchable history: the log screen lets you search and filter past broadcasts, turning "did it actually go out?" into a one-second lookup.

Microsoft Teams - Delivery

Teams connectorMicrosoft 365Channel postsNative API
  • Native connector, no custom code: messages are posted through Microsoft's own Teams connector, so delivery and permissions follow the tenant's existing rules.
  • Confirmed delivery: the connector's response feeds straight back into the status indicator and the Dataverse audit trail.

Why I built it

01

A teacher mentioned how much of a chore it was to send the same announcement to 20+ Teams channels by hand - open each one, copy, paste, repeat, and still wonder if one got missed. It was a real, boring problem begging for automation.

02

I chose Power Platform on purpose: it's the low-code stack the school and many organizations already run on. The challenge was to treat it like real engineering - separate UI, logic, and data layers, proper state management, and an audit trail from day one.

03

The result is a tool teachers, students, project leads, and directors can all use to push consistent messaging across many channels - and a graded project that proves low-code can still be built like a product.

Broadcast logs interface

Broadcast logs: complete history with search, filters, and per-channel delivery status

Lessons learned

Low-code ≠ low-quality

With real design patterns - layered architecture and clean state - low-code tools can absolutely be production-grade.

State management is everything

For async sends, a clear idle/sending/success/error model is what keeps the UI honest and prevents double posts.

Work around the platform

Premium features and quirky conventions forced creative workarounds without letting the UX suffer for it.

Feedback beats guessing

Users need clear status at every step. Without it they re-click, panic, and lose trust in the tool.

Project Info

Solo school project presented in January 2026. Graded exercise using Power Platform to solve a real organizational problem.

Presentation

View the project presentation slides used during the graded demonstration.

Download Presentation (PDF)