Skip to content
All projects
creativeweb

i feel therefore i write

A dedicated web platform built to share a curated poetry collection with the world, focusing on emotional resonance and clean presentation. Poems live in Notion, sync daily to Firestore via a Cloudflare Worker cron, and render edge-rendered for fast cold loads.

Screenshot of i feel therefore i write

Tech Stack

Next.js 15, Notion API, Firebase, Cloudflare

Features

  • Notion → Firestore Sync
  • Anonymous Likes
  • Fuzzy Search
  • Edge Rendering

What I Built

  • Wrote a server-only Firestore client for the edge: it mints its own OAuth2 token from the service-account key using Web Crypto and talks to Firestore over REST, because the admin SDK is Node-only and this runs on Workers.

  • Wrote the Cloudflare Worker's scheduled handler that pulls poems out of Notion and syncs them into Firestore, so publishing a poem is a Notion edit and nothing more.

  • Put likes on batched writes with increment, so the displayed count can't drift away from the set of people who actually liked.

  • Built the poem index, the reader, the login flow, and the like button that reconciles optimistically and then settles.

  • Put a shared secret between the Worker's cron and the Next.js deployment - the Worker calls /api/sync with an x-sync-secret header and refuses to run without it, so the sync endpoint cannot be triggered by anyone who finds the URL.