Google Sheets acts as the relational database for this application. Instead of complex SQL servers, the "PortfolioData" sheet serves as the backend storage.
Function: Stores weekly logs, dates, titles, and metadata.
Logic: Every row represents a unique "Case File" (Journal Entry). The system automatically groups rows by "Week Number" to create multi-page booklets dynamically.
Why it works: It allows for instant content updates. To add a new blog post, I simply type in a cell, change the status, and the website updates in real-time.
Google Apps Script (GAS) serves as the middleware and API controller. It bridges the gap between the raw data in Google Sheets and the visual interface.
Function: It runs a server-side script (doGet) that fetches data from the sheet, filters out drafts, and structures the data into JSON objects.
Data Transformation: It handles "dirty data" automatically—specifically, it converts standard Google Drive sharing links into usable web-image sources programmatically.
Google Sites acts as the container and hosting wrapper.
Function: It provides the domain management (hansifies.site), SSL security, and the main navigation structure.
Embed Method: The custom web app is embedded as a secure iframe, allowing custom code to run safely within the Google Sites infrastructure.
I enter a new weekly report into Google Sheets. a
Apps Script detects the request, fetches the row, and converts the image links.
The JavaScript on the website receives the data and dynamically draws a new "Manila Folder" on the desk.
The user sees the new entry instantly on Google Sites.