Introducing Rail Sign for Rail Shine
Introducing Rail Sign (formerly ShineCheck) for Rail Shine
In rail maintenance, keeping a clear record of the work matters as much as the work itself. What started out as ShineCheck became, after a naming rethink, what we now call Rail Sign: an app we built to simplify how Rail Shine’s operators record completed jobs on each asset. Here's how we did it, mistakes included. Think of it as a dev diary from the workshop.
The Problem: Documenting Work Done (Without the Hassle)
Rail Shine’s field operators needed a straightforward way to record each job they finished on a given asset. That sounds simple, but the requirements quickly piled up:
The app had to attach photos of the finished work, often several photos for one job.
It had to capture the customer's signature as proof the job was finished.
It had to build a PDF summary of the job, including those photos and the signature.
It had to email that PDF to the customer, with their manager copied in.
It had to file the photos and the PDF in Google Drive, in a folder named after the asset and the job number.
In short, an operator should finish a job and end up with a PDF in the customer's inbox, and the files put away, without typing the same details again.
Early Attempts: Over-Engineering an Automation Rube Goldberg
We started where plenty of people might: AppSheet for the form logic and Google Sheets behind it. To automate the rest, though, we assumed we'd need a paid Google Workspace upgrade just to send emails outside our domain.
To avoid that cost, we patched together a system using Zapier (a tool that connects apps together) and Make. AppSheet fed form data into Google Sheets, Zapier picked that up to create and email a PDF, and Make tried to move the images into a Shared Drive folder. On paper it looked tidy. In practice, it kept failing.
It quickly got out of hand. We had:
Zaps triggering Makes
Makes looping Drive API calls
Credentials and webhooks like spaghetti in a drawer
Photos would go somewhere in Drive, but rarely where we actually wanted them. And email? Half the time it failed silently.
One low point was looping multiple image uploads in Zapier. We built five identical steps in case the operator added five photos. If they only added three, the rest just failed. It worked, badly.
Trial and Error: Dead Ends That Taught Us Something
1. Zapier Loop Hack
Chaining five image steps in Zapier got the job done, but it was brittle and ugly. If the job needed more than five photos, we would have to rebuild the whole chain and maybe even split the automation due to step limits. It was a win we regretted straight away.
2. The Glide Detour
Thinking AppSheet might be the wrong tool, we rebuilt the app in Glide over a weekend. The UI looked great and PDF generation was simpler, but Glide’s Drive control and automation logic were too limited. We bailed.
These misfires weren’t wasted. They gave us a clear view of what we needed, and just how far we had been trying to over-solve a problem that already had a native solution.
The Breakthrough: AppSheet Was Enough All Along
The real shift came when we realised AppSheet could handle all of it natively. We had already got it generating the PDF and sending emails reliably. The mistake was assuming the files had to land in a personal Drive folder.
Here’s what made it work:
PDF generation was already happening in AppSheet from templates. The issue wasn’t generation. It was where the file ended up.
Shared Drive foldering was the missing piece. We found we could set the default AppSheet storage path to a Shared Drive and dynamically generate folder names using formulas like
Asset123-Job456. AppSheet would create the folder if it didn’t exist and save everything there, photos and PDFs included.Emailing external users turned out to be possible. Despite our earlier assumption, AppSheet can email external parties, so long as the app is trusted in Google Admin. No Workspace Enterprise upgrade was needed.
Once those clicked, the complexity fell away:
Operator fills out the Rail Sign form in AppSheet
Submission triggers a bot: generates the PDF, emails it to the customer, and CCs the boss
All files are saved directly into a Google Shared Drive in a dynamically created folder
That was it: one app, no extra services.
Outcome: One app that does the daily job
Rail Sign now runs daily for Rail Shine’s team. Operators hit submit, customers get a polished report, and the office gets clean records in Drive.
Even better, there’s no Zapier subscription, no Make flow to manage, and no Workspace upgrade. Just one AppSheet app doing its job well.
It’s not glamorous, but it works. It’s easy to maintain, and much easier to debug or extend now that everything happens in one place.
Lessons Learned
Don’t assume your primary platform can’t do something. Check first
Every workaround comes with a tax: money, time, or hair loss
We got things wrong early, and that's how we found the simple fix.
Rail Sign does what ShineCheck set out to do, all inside AppSheet. And yes, the founders loved the new name.
Job done.