A household item tracker with Google Sheets as the database and Google Drive for photos. Runs as a static React app on GitHub Pages — no server, no monthly fees.
- Search & filter across all items instantly
- Barcode / QR scanning via phone camera
- Photos stored in your Google Drive
- Locations — rooms, boxes, shelves
- Categories — clothing, tools, electronics, etc.
- Quantity & condition tracking
- Multi-user — share the spreadsheet with your household; each person signs in with their own Google account
- All data lives in YOUR Google Drive (not a third-party service)
- Go to console.cloud.google.com
- Click Select a project → New Project → name it "Home Inventory" → Create
- In the left menu: APIs & Services → Library
- Search and Enable each of these:
- Google Sheets API
- Google Drive API
- APIs & Services → Credentials → Create Credentials → OAuth client ID
- Configure the consent screen first if prompted:
- User type: External
- App name: "Home Inventory"
- Add yourself as a test user
- Application type: Web application
- Name: "Home Inventory"
- Authorized JavaScript origins — add both:
http://localhost:5173(for local development)https://YOUR_GITHUB_USERNAME.github.io(for the deployed app)
- Click Create and copy the Client ID
- Go to sheets.google.com and create a blank spreadsheet
- Name it "Home Inventory"
- Add three sheets (tabs) named exactly:
ItemsCategoriesLocations
- Share the spreadsheet with your household members (Editor access)
- Copy the spreadsheet ID from the URL:
https://docs.google.com/spreadsheets/d/THIS_IS_THE_ID/edit
Edit src/config.js:
export const CONFIG = {
CLIENT_ID: 'your-client-id.apps.googleusercontent.com',
SPREADSHEET_ID: 'your-spreadsheet-id',
};- Push this repo to GitHub
- In your repo: Settings → Pages → Source → GitHub Actions
- Push to
main— the Action will build and deploy automatically - Update
vite.config.jswith your repo name:base: '/your-repo-name/',
- Your app will be live at
https://YOUR_USERNAME.github.io/your-repo-name/
Back in Google Cloud → Credentials → edit your OAuth client:
- Add
https://YOUR_USERNAME.github.io/your-repo-nameto Authorized JavaScript origins
npm install
npm run devOpen http://localhost:5173/home-inventory/ (or whatever your base path is).
| Part | Technology |
|---|---|
| Frontend | React 18 + Vite |
| Hosting | GitHub Pages (free) |
| Auth | Google OAuth 2.0 via GIS library |
| Database | Google Sheets (Items / Categories / Locations tabs) |
| Photo storage | Google Drive folder home-inventory-photos/ |
| Barcode scanning | @zxing/browser — works in any browser with camera access |
Items sheet columns: id, name, category, location, quantity, condition, barcode, photoId, notes, addedBy, addedDate, updatedDate
Categories sheet: id, name
Locations sheet: id, name, type, parentId, description
The app seeds default categories and locations on first run. You can add more directly in the app or in the spreadsheet.
- The person who set up the Google Cloud project shares the spreadsheet (Editor) with other household members
- Each member opens the app and signs in with their own Google account
- The app uses their OAuth token to read/write the shared spreadsheet
- Each item records
addedBy(email) for accountability
Note: Each user must approve the OAuth consent screen on first sign-in. If you're using a test app (not published to Google), add each email as a test user in the Google Cloud consent screen settings.
The easiest way is to edit the Categories and Locations sheets in Google Sheets directly. Column formats must match exactly (see data model above). The app reloads data on each refresh.
| Problem | Fix |
|---|---|
| "Sign-in failed" | Check the Client ID in config.js and that your domain is in Authorized Origins |
| Spreadsheet not found | Check the SPREADSHEET_ID and that you've shared the sheet with your Google account |
| Camera won't open | HTTPS is required; localhost is fine, but must be deployed over HTTPS for barcode scanning |
| Photos not showing | Drive API needs drive.file scope; sign out and sign in again to re-grant permissions |
| 403 on Sheets | Check that Sheets API and Drive API are both enabled in your Google Cloud project |