Turn jobsite photos into client-ready progress reports

By General Input

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.

Integrations

  • Google Photos
  • Google Docs
  • Slack Bot

Type

App

Categories

  • Operations

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.

Related prompts

Explore more prompts
A brand asset library your marketing team actually searchesTurn Mailjet email clicks into ranked HubSpot follow-upsClean out the Looker dashboards and Looks nobody opensLiveKit live operations console for room moderationWake up dormant Keap leads with a researched reasonLiveChat coverage board for planning next week's shiftsPhone routing control panel for LiveKit voice agentsA searchable RFP answer library your bid team drafts fromLinkedIn Ads budget pacing dashboard for every client accountGive your team Looker numbers without buying more seats