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.
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?
How do the photos get into each job album in the first place?
What happens to photos nobody captioned?
Can several supervisors and the project manager use the same board?
How many photos can one job hold?
Related templates
See how your brand's news coverage and sentiment stack up against four competitors, then let an assistant write the weekly report for you.
One screen showing every social post waiting on approval, sorted by deadline, so reviewers can approve or reject without leaving the page.
Every Monday, find the past champions and closed-won contacts who changed jobs, update Attio, and get the moves worth chasing in Slack.
Staff submit what happened, your social manager edits the copy, picks the accounts and puts it on the calendar without a single spreadsheet.
Open one board each morning, see which voice calls went badly, replay the exact moment the caller got frustrated, and file the fix.
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.
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.