Technical challenges
Three challenges shaped the system. First, evolving the data source without losing consistency: it started with Google Sheets/Apps Script because that was lightweight and fast, but the website moved to PostgreSQL once administration, moderation, and data-safety requirements grew. Second, keeping one content model coherent across two structurally different clients — server-rendered Next.js on the web and Flutter on mobile — without duplicating business rules until they drift. Third, turning truthfulness and privacy into system rules: project status must reflect reality, client identity stays private unless explicitly cleared, approximate progress stays visibly approximate, and a Review can be published only when its status, visibility, and consent are all valid.
How I approached it
The architecture separates data access so each client can be developed and tested independently while keeping a common public data contract. The Next.js website now reads content from PostgreSQL through its own transport/repository layers and manages changes through an authenticated Admin area; local and preview environments are prevented from connecting to the production database. Flutter still uses its HTTP transport to the Apps Script/Google Sheets path, and both clients can run against fixture data during development. Reviews deliberately separate intake from publication: Google Form/Apps Script receives submissions as pending, while the website publishes a Review only after moderation and documented consent in Admin. This reflects the system's evolution from its original Sheets/Apps Script architecture to a PostgreSQL CMS for the web without implying that mobile has already migrated or that the two data stores synchronize automatically.
Impact
The system now manages 15 real projects across professional, freelance, and personal work. Public portfolio content comes from real project records rather than fictional filler; even this portfolio's own case study is held to the same rules for status, privacy, and what information is safe to publish.
