Turn jobsite photos into client-ready progress reports

A board of job cards for every site album, with inline captions and a one click assistant that writes the dated progress report and posts it to your project channel.

App
Google PhotosGoogle DocsSlack BotOperationsAI ReportsDocument Processing
PromptCreate

Build me an app my field team opens every afternoon to turn jobsite photos into client-ready progress reports. The users are site supervisors who shoot the photos and one project manager who reviews and sends. Important framing: this app is the console over jobsite photos that an intake automation has already pushed into Google Photos, one album per job. It is not a browser for anyone's personal photo library. The Google Photos connection here only sees albums and media that were created through this platform, so every view and every edit in the app operates on those app-created job albums.

The main screen is a board of job cards, one card per Google Photos album. Load the albums with List Albums and enrich each one with Get Album. Every card shows the album cover image, the photo count, the date range of the photos in that job (earliest to latest capture time), and when the last report went out. Sort the board by most recently photographed job first, meaning the newest photo capture time in the album, not the album creation date. That ordering matters because supervisors want the job they just walked to be at the top when they open the app.

Clicking a job card opens the job detail view: a chronological contact sheet of that album's photos, pulled with Search Media Items filtered to the album id and ordered by capture time, with day headers so the shoot reads as a timeline. Under each thumbnail show the caption and let the supervisor fix it inline, saving with Update Media Item. Photos with no caption should be visually flagged in the contact sheet so the gaps are obvious before a report is generated. From this view the user can also pick a better cover photo for the job, applying it with Update Album.

Misfiled shots are common when someone photographs two sites in one trip, so give the user a way to select one or more photos in the contact sheet and move them into the correct job. Moving means calling Add Media Items to Album on the destination album and Remove Media Items from Album on the current one, then refreshing both jobs' counts and date ranges on the board.

Every job card gets a Generate site report button that kicks off a background agent. The agent reads the album's photos and captions, groups them by day and then by work area (inferring the work area from the captions, for example foundation, framing, electrical rough-in, sitework), and writes up what progress the photos show for each group. It must flag any photo with no caption in a dedicated section of the report so nothing ships half documented, and it should note the flagged count up front rather than burying it.

The agent creates the report as a dated Google Doc using Create Document for the title (something like "Job name, site progress report, date") and then Batch Update Document to lay out the body: a header with the job name and date range, a short overall progress summary, then one section per day with work area subsections and the photo captions as bullets, and finally the uncaptioned photo section. Once the doc is written, the agent posts to the project channel with Slack Bot's Send a Message, including the doc link plus a three line summary of what moved on site. Let the user map each job to its project channel in the app, using List Channels to populate the picker.

The generated doc link has to land back on the job card so the team can reopen the last report without leaving the app. Persist, per job, the last report doc link, the timestamp it was generated, and the Slack channel it was posted to, and render the last report time and link directly on the card. Keep a short report history per job so the project manager can open the previous week's report too. While an agent run is in progress the card should show that state so two supervisors do not kick off the same report twice.

Two technical constraints to respect. First, Google Photos thumbnail URLs expire, so refetch media before rendering rather than caching image URLs in app state or persistence, and refresh them when a view is reopened. Second, albums hold up to 20,000 items, so paginate the contact sheet for large jobs and page through results when the agent reads an album rather than assuming one response covers it.

What does this prompt do?

  • Gives you a board of job cards, one per site album, each showing the cover photo, how many photos are in the job, the date range they were taken, and when the last report went out, sorted so the job you just photographed sits at the top
  • Opens each job as a day by day contact sheet where you fix captions inline, choose a better cover shot, and move photos that got filed to the wrong site into the right job
  • Adds a Generate site report button that hands off to a background assistant: it groups the photos by day and work area, writes a dated Google Doc, and posts the link plus a three line summary to your project channel in Slack
  • Flags any photo that has no caption so a report never goes out half documented, and keeps the last report link on the job card so anyone can reopen it

What do I need to use this?

  • A Google account with Google Photos and Google Docs
  • A Slack workspace, and a project channel for each job you want reports posted to
  • Jobsite photos already arriving in Google Photos as one album per job. This app works with the albums and photos that come in through General Input, not your whole personal photo library, so set up a photo intake automation first if you do not have one
  • Photos captioned by whoever took them, or at least captioned in the app before a report is generated

How can I customize it?

  • Change how the board sorts, for example newest photos first, or jobs that have gone longest without a report
  • Change how the report groups the photos, by day and work area or by trade, floor, or building
  • Set which project channel each job posts to, and how long the summary that goes with the doc link should be

FAQs

Will this show the photos already sitting in my personal Google Photos account?
No. It works with the job albums and photos that arrive through General Input, not your entire personal library. In practice that means your field photos come in through an intake automation and this app is the console you work in on top of them.
How do the photos get into each job album in the first place?
Through a photo intake automation that files incoming site photos into the right job album. There are ready made starter prompts for pulling photos in from Slack, Typeform, Airtable, Google Drive, and Gmail, so pick whichever matches how your crews already send photos in.
What happens to photos nobody captioned?
They get flagged in the contact sheet so you can fix them before sending, and if a report is generated anyway the uncaptioned shots are called out in their own section with a count up front, so the office knows exactly what is undocumented.
Can several supervisors and the project manager use the same board?
Yes. Everyone works from the same board of jobs, sees the same captions and covers, and can open the report history for any job. Cards show when a report is already being generated so two people do not kick off the same one.
How many photos can one job hold?
A job album holds up to 20,000 photos, which is well beyond a typical project. Large jobs load a page at a time in the contact sheet so the board stays fast.

Related templates

Share of voice dashboard for your brand and competitors

See how your brand's news coverage and sentiment stack up against four competitors, then let an assistant write the weekly report for you.

GDELT
Notion
Slack Bot
App
Approval war room for every social post awaiting sign-off

One screen showing every social post waiting on approval, sorted by deadline, so reviewers can approve or reject without leaving the page.

Hootsuite
Slack Bot
App
Turn champion job changes into new pipeline in Attio

Every Monday, find the past champions and closed-won contacts who changed jobs, update Attio, and get the moves worth chasing in Slack.

Boomerang
Attio
Slack Bot
Agentic Task
Collect social post requests and schedule them in Hootsuite

Staff submit what happened, your social manager edits the copy, picks the accounts and puts it on the calendar without a single spreadsheet.

Hootsuite
Slack Bot
General Input Database
App
Voice agent QA review board for your Hume EVI calls

Open one board each morning, see which voice calls went badly, replay the exact moment the caller got frustrated, and file the fix.

Hume
Linear
Slack Bot
App
Clear your Guru verification backlog in one weekly app

A personal queue of every overdue Guru card, sorted by how late it is, with one-click verify, reassign, comment, and an agent that drafts the refresh for you.

Guru
Slack Bot
App

Stop rebuilding the site report by hand every afternoon.

Give your supervisors one screen for every job's photos, and let the report write and send itself.