Post Reporter
An admin review app for social posts stored in Google Sheets. Reviewers approve, disapprove, or flag a post with caution, and each decision writes back to the source sheet.
Built with React and Vite, running on Netlify Functions with a Google Sheets API backend. A separate password-protected upload page lets clients add new posts (title, caption, scheduled date, images) straight into the review queue without seeing existing decisions — images upload directly to Cloudinary from the browser via an unsigned upload preset, so no secrets are exposed client-side.
Tech Stack
- Frontend: React 19 + Vite
- Hosting & backend: Netlify, with Netlify Functions handling the server-side logic
- Data store: Google Sheets, read and written via the Google Sheets API
- Media uploads: Cloudinary, using an unsigned upload preset so images go straight from the browser without touching a server secret
- Auth: Password-gated admin and upload views, backed by signed cookies
- Tooling: ESLint
How This Holds Up for a Web Dev Role
Graded against what this project actually had to solve, not a generic checklist:
- Third-party API integration — A-. The Sheets API is the entire database. The app normalizes header variants (
copyvscaption,notevscautionNote) instead of assuming a rigid schema, which is the kind of defensive handling real spreadsheet data demands. - Secrets management — A-. Service account keys, the admin password, and the cookie secret all live in environment variables, never in code. The Cloudinary upload preset is unsigned by design specifically so the client never needs a secret to upload media.
- Access control design — B+. Reviewers and uploaders get separate password gates instead of one shared login, so an upload-only collaborator never sees the review queue or prior decisions.
- Audit trail — B. Every decision writes
updatedAtandupdatedByback to the sheet, giving a lightweight history without standing up a real database or logging service. - Serverless deployment readiness — B+. Build and publish steps are documented end-to-end for Netlify (build command, publish directory, env vars), so a handoff or redeploy doesn't depend on tribal knowledge.
Prentice L. "No More Dead Websites" | Web Acceessbility Evangelist | API
Integration & Automation (REST, GraphQL, Webhooks) | CRM, CMS Systems
Specialist | Shopify Store Developer