case study 02 / 05 · power apps · in use since September 2026

QS Baustelle

Site inspections that keep working offline, with a Word report on one tap

QS Baustelle is a Power Apps canvas app for site inspections on construction sites. It lets inspectors record observations, photos and schedule progress on the phone, with or without signal; when the phone is online the data syncs to SharePoint, and one tap sends a Word report by e-mail. I developed it as a working student at S01 Projektmanagement GmbH, from the first plan to revision 45, based on the supervisor's concept.

Power AppsPower FxPower AutomateSharePointOffice ScriptsPnP PowerShellPower Platform CLI
11Power Automate flows
12app screens, phone layout
9 + 1SharePoint lists plus one document library
45app revisions
Role
development, as a working student at S01 Projektmanagement GmbH: planning, build and release
Concept
the supervisor supplied the concept (two modules, folder tree, naming scheme) and the feedback
Users
site inspectors (Prüfer in the app); project managers and external clients receive the reports
Platform
Power Apps mobile player on phones (portrait); SharePoint and Power Automate in the company's Microsoft 365
Language
German interface and German reports
01 / why it exists

Paper sheets, photos on private phones, reports built by hand

Inspection sheets were printed, filled in and typed in again, so every site inspection (Begehung) was recorded twice. Photos sat on private phones, in e-mails and in chat threads, apart from the finding they belonged to. Reports were assembled by hand: photos exported to a PC and inserted into a Word document one by one.

There was no central, traceable record. Sheets get lost, and construction clients in Germany expect auditable documentation. Sites often have no signal, in basements and tunnels, so capture had to work offline and sync later. The comparison of planned and actual progress per activity of the Terminplan (schedule), called Terminabgleich (schedule review), had no structured place either.

The specification asked for the app to replace the paper sheets. In QS Baustelle an observation, its category, its photos and the schedule progress stay together as records in SharePoint, and the report is built from those records.

Who uses it

Built for site inspectors, who walk a site and often have no signal. Project managers and external clients receive the reports. The supervisor ran the test rounds and the recorded inspections.

What it costs to run

No servers of its own: the app, the lists and the flows all run inside the company's Microsoft 365.

02 / how it works

How an inspection travels from the phone to the Word report

Architecture diagram: QS Baustelle A canvas app on the phone starts inspections and schedule reviews and keeps captured data in a phone store, which writes to SharePoint lists and, through filing flows (numbering, filing media, route export), to the project library. Import flows turn Excel files into rows; report flows build the Word report from lists and library and e-mail it. POWER APPS Canvas app 12 phone screens POWER FX Phone store offline queue SHAREPOINT Lists nine lists of records SHAREPOINT Project library media and reports POWER AUTOMATE Filing flows numbering and filing POWER AUTOMATE Import flows Excel files to rows POWER AUTOMATE Report flows Word report by e-mail EXCEL OFFLINE EVERY 30 S ONE TAP Architecture diagram: QS Baustelle A canvas app on the phone starts inspections and schedule reviews and keeps captured data in a phone store, which writes to SharePoint lists and, through filing flows (numbering, filing media, route export), to the project library. Import flows turn Excel files into rows; report flows build the Word report from lists and library and e-mail it. POWER APPS Canvas app 12 phone screens POWER FX Phone store offline queue SHAREPOINT Lists nine lists of records SHAREPOINT Project library media and reports POWER AUTOMATE Filing flows numbering and filing POWER AUTOMATE Import flows Excel files to rows POWER AUTOMATE Report flows Word report by e-mail EXCEL OFFLINE EVERY 30 S ONE TAP
  1. 1Start onlineThe inspector opens a project and creates the inspection (Begehung) while online. The app gives it the next number in that project.
  2. 2Load the plan EXCELFor a schedule review the Excel schedule is uploaded from the app. A flow files it and reads it with an Office Script, and every lowest-level activity becomes a row of the review. For an inspection, an Excel checklist becomes prepared observations the same way.
  3. 3Capture on site, offline OFFLINEObservations with category and text, photos and schedule progress are saved on the phone and queued, with or without signal.
  4. 4Sync every 30 seconds EVERY 30 SWhen online, the queue writes the records to the lists and sends each photo through a flow into the library. Videos and full-size photos are attached to an upload row and filed by a flow; they need a connection.
  5. 5Number and fileA new observation starts a flow that runs one at a time. It gives the observation its final number and renames and moves its photos and videos into the inspection folder by naming convention.
  6. 6One tap, one report ONE TAPThe report flow reads the records and photos, fills the HTML template, saves the Word file in the inspection folder and e-mails it to the chosen recipient with links to the file and the media folder. The button stays disabled until all media are synced.
03 / data model

Six lists and a project library

Data model: QS Baustelle A project has many inspections, many schedule reviews and many categories. An inspection has many observations, and each observation has one category. A schedule review has many schedule items. Files in the project library point to their observation, schedule item, inspection or review through plain columns. Projects one per project PK Project code (in every file name) Title Client name, printed in reports Report template per report type Active flag Inspections one per site inspection PK Item ID (SharePoint) FK Project Number per project (QS-###) Date, period, inspector Status (open, closed, exported) Observations many per inspection PK Local ID (made on the phone) FK Inspection FK Category Number (written by a flow) Checkpoint name Categories configuration, not code PK Item ID (SharePoint) Name Colour Active flag, sort order FK Project (empty: all projects) Schedule reviews one per schedule review PK Item ID (SharePoint) FK Project Number per project (T-###) Date and period Status, item count Schedule items write-once rows of a review PK Item ID (SharePoint) FK Schedule review Activity ID Planned start and finish Actual progress 0 to 100, remark Project library photos, videos, reports, templates Project code Inspection or review number Parent: observation or activity ID Media type (photo or video) Report type and status
  • Projects list

    one per project

    • PKProject code (in every file name)
    • Title
    • Client name, printed in reports
    • Report template per report type
    • Active flag
    • 1 project → many inspections
    • 1 project → many schedule reviews
    • 1 project → many categories (empty: all projects)
  • Inspections list

    one per site inspection

    • PKItem ID (SharePoint)
    • FKProject
    • Number per project (QS-###)
    • Date, period, inspector
    • Status (open, closed, exported)
    • 1 inspection → many observations
    • 1 inspection → many report files
  • Observations list

    many per inspection

    • PKLocal ID (made on the phone)
    • FKInspection
    • FKCategory
    • Number (written by a flow)
    • Checkpoint name
    • 1 observation → many photos and videos
  • Categories list

    configuration, not code

    • PKItem ID (SharePoint)
    • Name
    • Colour
    • Active flag, sort order
    • FKProject (empty: all projects)
    • 1 category → many observations
  • Schedule reviews list

    one per schedule review

    • PKItem ID (SharePoint)
    • FKProject
    • Number per project (T-###)
    • Date and period
    • Status, item count
    • 1 schedule review → many schedule items
    • 1 schedule review → many report files
  • Schedule items list

    write-once rows of a review

    • PKItem ID (SharePoint)
    • FKSchedule review
    • Activity ID
    • Planned start and finish
    • Actual progress 0 to 100, remark
    • 1 schedule item (activity) → many photos and videos
  • Project library library

    photos, videos, reports, templates

    • Project code
    • Inspection or review number
    • Parent: observation or activity ID
    • Media type (photo or video)
    • Report type and status

Simplified: 7 of 10 SharePoint objects (6 of the 9 lists plus the library). Left out: the activity master list that the import flow keeps, the upload-request list (a work queue for attachments) and the list behind the route export. Rows are keyed by their SharePoint item ID unless a business key is named. Files in the library point to the record they belong to through plain columns, not lookups. Dashed border: document library or file store.

Categories and templates are data

A new category or report layout is a change in SharePoint, not a new app version. The report flow refers to categories by name, so adding one still needed a flow change once.

Lists can grow

The flows filter on indexed columns, created while the lists were still empty, so the lists can grow past SharePoint's 5,000-item view threshold. The app itself reads at most 2,000 rows of a list.

Numbers per project

Inspection and review numbers are plain numbers per project; the prefixes (QS-, T-) are added only for display, so the next number is the highest plus one.

04 / decisions

Four trade-offs that shaped the build

Offline capture as a queue on the phone

Sites often have no signal, and the built-in offline mode needs Dataverse, which would have made the app premium for every user. So captured records wait in a queue on the phone and are written to SharePoint every 30 seconds when online; a record counts as synced only after the write has succeeded. Trade-off: it works only in the Power Apps mobile player, not in a browser, the phone's storage is limited, and videos and full-size photos still need a connection.

Photos and videos go through flows, not list attachments

A canvas app cannot write attachments from offline data, and a phone video of 50 to 150 MB cannot travel through a flow as text. Photos wait in the queue and a flow files them; full-size photos and videos are attached to an upload row, and a second flow files them on the server. Trade-off: more moving parts (four flows touch media), a connection is needed for full-size photos and videos, and the SharePoint copy of a full-size photo appears after about a minute.

Numbers are assigned on the server, one at a time

The phone gives each observation a local ID, and a flow that handles one record at a time writes the final number, because two phones syncing together produced duplicate numbers when the app numbered observations itself. Inspections and reviews are numbered when they are created online. Trade-off: the final number exists only after sync (photo files carry 000 until the flow renames them), a deleted observation leaves a permanent gap that is accepted for traceability, and numbering happens on creation only.

A living schedule list plus write-once snapshots

Every Excel import updates one master list of activities per project, and creating a schedule review copies the lowest-level activities into rows that later imports never touch, so every past report regenerates unchanged. Trade-off: about 90 to 130 rows are copied per review, three flows (upload, import, snapshot) replace one, and the app reads only the first 2,000 rows of the snapshot list, a known limit that is still open.

05 / my part

What I did

  • Gathered the requirements with the supervisor and ran the feedback rounds from 24 August 2026, each answered by a written plan and a build.
  • Planned the project, put the open questions to the supervisor and decided the technical design (the trade-offs above).
  • Designed the data model on top of the supervisor's concept (two modules, folder tree, naming scheme), then built and migrated it in SharePoint.
  • Built the app, the flows and the backend and released the revisions as versioned builds (numbered app revisions built with the Power Platform CLI, numbered flow packages), each app build error-checked.
  • Tested and fixed faults found in flow runs and field tests, for example an import that reported success while loading no rows, and reports that lost their photos from the second review on.
  • Wrote and delivered the user guides in German and English (version 1.1 of 18 August 2026, for the first build) and a bilingual handbook (2 September 2026).
06 / result

In use since September 2026, at revision 45

Published on 1 September 2026. The plan is dated 4 August 2026, and the first recorded inspection with photos is dated 9 September 2026. The revision counter reached 45 about eleven weeks after the plan, with the last build dated 21 October 2026. In the Word report, photos appear as thumbnails and videos as links. A self-check stops the run if a template field is left unfilled, the report is marked as sent only at the very end, and a failed run mails an error instead. The demo shows the app's screens with a fictional company and invented data.

Open the live demo