Setu is an internal operations app built with Google Apps Script, Google Sheets, Google Drive, and a TypeScript frontend.
It supports:
- equipment and program requests
- tickets and comments
- roster scheduling
- inventory, programs, home content, and user settings
- email notifications and request images
Browser → Apps Script web app → Google Sheets
├→ Google Drive
└→ MailApp
The backend lives in src/. The frontend lives in frontend/ and is bundled into the HTML files served by Apps Script. Shared types are in shared/types.d.ts.
npm install
npm run devOpen http://localhost:3000. The local app uses an in-memory mock backend, so it does not require a Google account or a configured Sheet.
Useful commands:
npm run typecheck # Type-check backend and frontend
npm run build # Build Apps Script HTML files
npm run pages # Build the public demo siteDeployment is handled by GitHub Actions. Create the following resources first:
- A Google Sheet for app data.
- A Google Apps Script project.
- A web-app deployment that executes as the deploying account. The deploying account is always treated as an administrator.
- A Google Drive folder for uploaded request images.
Add these GitHub Actions secrets:
APPS_SCRIPT_ID— Apps Script project ID.APPS_SCRIPT_DEPLOYMENT_ID— web-app deployment ID.CLASPRC_JSON— the contents of~/.clasprc.jsonafter runningnpx clasp login.
Set these Apps Script properties:
SPREADSHEET_ID— the app’s Google Sheet ID.IMAGES_DRIVE_FOLDER_ID— Drive folder ID for request images.NOTIFICATION_EMAIL— optional address used for notifications.
After configuration, run setupSheets and installTriggers once from the Apps Script editor.
Push a version tag to deploy the app:
git tag v0.1.0
git push origin v0.1.0The deployment workflow type-checks, builds, pushes the Apps Script files, and updates the existing deployment. It can also be run manually from GitHub Actions.
The public demo is built from the mock backend and published at:
https://live-miracles.github.io/setu/
The demo has no access to the production Google Sheet.
Users sign in through the Google Workspace restriction configured on the Apps Script deployment. New users are registered automatically. The deploying account always receives the admin role; other users receive the user role until an administrator changes it.
| Role | Access |
|---|---|
admin |
Everything, including settings and role management |
approver |
All requests, approvals, tickets, scheduling, and read-only users |
viewer |
All requests and standard app sections except Roster |
user |
Own and participant requests; no Roster or Tickets |
Everyone can create equipment and program requests and comment on requests they can see. Participants can be external email addresses and do not need a Setu account.
- Participants and images can only be added when a request is created.