RollCall is a mobile web app designed for print shop copy centers. Scan the barcode on a paper roll, enter the quantity on hand, and your inventory Google Sheet updates instantly β no app store, no installs, no cost.
| Welcome Screen | Scanner | Quantity Entry | Sheet Updated |
|---|---|---|---|
![]() |
- π· Barcode scanning β point your iPhone camera at any paper roll and it's identified instantly
- π Live Google Sheet sync β quantities update in real time with π’ OK / π‘ Low / π΄ Order Now status
- π·οΈ Register new barcodes on the spot β unknown rolls show a dropdown to assign and save the barcode automatically for next time
- π Manual select β full paper list always available even without scanning a barcode
- πΎ Stays connected β your Google Sheet URL is saved to your device so setup only happens once
- A smartphone or tablet with a modern browser
- iPhone / iPad β use Safari or the Google app
- Android β use Chrome or the Google app
- A Google account
- 5 minutes for initial setup
RollCall runs entirely in the browser. No app download required.
β οΈ iPhone and iPad users avoid Chrome. Chrome on iOS does not support camera access for web apps.
Make a copy of the RollCall inventory template:
π RollCall Google Sheet Template
Once copied, keep the first sheet tab named Inventory. This is where RollCall will write your quantity updates.
Google Apps Script acts as the bridge between RollCall and your Google Sheet. This is a one-time setup.
- In your Google Sheet, go to Extensions β Apps Script
- Delete any existing code in the editor
- Paste the following script in full:
const SHEET_NAME = "Inventory";
function doPost(e) {
try {
const data = JSON.parse(e.postData.contents);
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName(SHEET_NAME);
const values = sheet.getDataRange().getValues();
for (let r = 0; r < values.length; r++) {
for (let c = 0; c < values[r].length; c++) {
const cell = String(values[r][c]).trim();
const searchName = String(data.name || '').trim();
if (cell === searchName || cell.includes(searchName)) {
sheet.getRange(r + 1, 4).setValue(data.qty);
return ContentService
.createTextOutput(JSON.stringify({ status: "ok", row: r + 1 }))
.setMimeType(ContentService.MimeType.JSON);
}
}
}
return ContentService
.createTextOutput(JSON.stringify({ status: "not_found" }))
.setMimeType(ContentService.MimeType.JSON);
} catch(err) {
return ContentService
.createTextOutput(JSON.stringify({ status: "error", message: err.toString() }))
.setMimeType(ContentService.MimeType.JSON);
}
}- Click Deploy β New deployment
- Configure the deployment as follows:
| Setting | Value |
|---|---|
| Type | Web app |
| Execute as | Me |
| Who has access | Anyone |
- Click Deploy
- Copy the Web app URL β you will need this in Step 3
β οΈ Common mistakes:
- "Execute as" must be set to Me β not "User accessing the web app"
- "Who has access" must be Anyone β not "Anyone with Google account"
- After any future code changes, always select New version when redeploying β saving the script file alone does not update the live URL
- Open RollCall in Safari on your iPhone
- Tap the URL field and paste your Apps Script Web app URL
- Tap Let's Go
- Allow camera access when prompted
Your URL is saved to your device. Every time you open RollCall after this it will go straight to the scanner β no setup needed.
The first time you scan each paper roll, RollCall won't recognize the barcode yet. Here's what to do:
- Scan the barcode on the packaging
- When the New Barcode Scanned screen appears, select the correct paper type from the dropdown
- Tap Register & Set Quantity
- Enter the current quantity and tap Update Google Sheet
From that point on, scanning that roll will identify it automatically. You only need to register each barcode once per device.
| Section | Paper Type | Max Stock |
|---|---|---|
| Blueprint | 20 lb Bond (24") | 4 |
| Blueprint | 20 lb Bond (36") | 4 |
| 24β³ Rolls | Universal Heavyweight | 2 |
| 24β³ Rolls | Super Heavyweight | 2 |
| 24β³ Rolls | Photo Gloss | 2 |
| 24β³ Rolls | Photo Satin | 2 |
| 24β³ Rolls | Matte Polypropylene | 2 |
| 24β³ Rolls | Scrim Vinyl | 2 |
| 36β³ Rolls | Universal Heavyweight | 4 |
| 36β³ Rolls | Super Heavyweight | 4 |
| 36β³ Rolls | Photo Gloss | 4 |
| 36β³ Rolls | Photo Satin | 4 |
| 36β³ Rolls | Matte Polypropylene | 4 |
| 36β³ Rolls | Scrim Vinyl | 4 |
| 30β³ Rolls | Wrapping Paper | 4 |
To add or remove paper types, edit the MASTER_PAPERS array in index.html.
Want to run your own version β for a different store, a different paper lineup, or just your own setup? Fork this repo and host it for free on GitHub Pages.
- Click Fork at the top right of this page
- Go to your forked repo β Settings β Pages
- Under Source, select Deploy from branch
- Set branch to main and folder to / (root)
- Click Save
- Your app will be live at
https://[your-username].github.io/rollcall
No servers. No hosting fees. No maintenance. GitHub Pages is free for public repos.
"Connection error" when updating the sheet
- Confirm Apps Script is deployed with Execute as: Me and Who has access: Anyone
- If you recently edited the script, make sure you deployed a New version β the live URL does not update automatically when you save
Camera won't start
- RollCall must be opened over HTTPS β GitHub Pages handles this automatically
- On iPhone, use Safari β Chrome on iOS does not support camera access for web apps
- If prompted, allow camera permissions. If you previously denied them, go to Settings β Safari β Camera and set it to Allow
Paper shows as "not found" in the sheet
- The paper name sent by the app must match what is in your Google Sheet exactly
- Check for extra spaces, different capitalization, or special characters
Barcodes not saving between sessions
- Make sure you are not using Safari in Private Browsing mode β localStorage does not persist in private tabs
- Clearing browser history or data in Safari will remove saved barcodes and your Apps Script URL
| Component | Technology |
|---|---|
| App | HTML / CSS / JavaScript (single file) |
| Barcode scanning | QuaggaJS |
| Hosting | GitHub Pages (free) |
| Backend | Google Apps Script |
| Database | Google Sheets |
Have an idea for a new feature, a paper type to add, or something that isn't working right for your shop? We'd love to hear from you.
π¬ rollcall.inventory@gmail.com
MIT β free to use, modify, and share.
