GPTThoughts

2026/07/01
#Next.js#AI#OpenAI#Gemini#Drizzle#Automation
GPTThoughts

Timeframe: 2026

Context: An experiment in running a content site with almost no human in the loop, while keeping it fast, safe and search-friendly.

Problem / Goal: Build a blog that publishes readable articles on its own, every hour, without sounding like every other AI-written page.

My Contribution

  • Designed a three-stage cron pipeline: pick a topic → write the post → find a cover image. Each stage runs on its own schedule and can be re-run on its own
  • Topic selection from trending sources, with the post's mood (serious, curious, sarcastic or funny) picked in code so the model doesn't fall into the same tone every time
  • Writing through OpenAI and Gemini, with a prompt that tells the model to take a position instead of hedging
  • Cover photos found through Pexels, with Pixabay as a fallback, searching several versions of the topic until one fits; the photographer is credited on every post
  • Reader experience: a table of contents, text size and line spacing settings, share buttons and related posts
  • SEO setup: sitemap, RSS feed, Open Graph images and IndexNow pings for fast indexing
  • First-party analytics that never stores a raw IP address, plus AdSense

Approach & Tech: Next.js, React, TypeScript, Drizzle ORM on Postgres (Supabase), Upstash Redis for rate limiting, OpenAI and Gemini SDKs, Markdown rendering sanitized with DOMPurify, Vercel Cron, Tailwind CSS and GSAP.

A walk through the site

Screenshots from a local run with sample posts.

Home pageThe home page leads with the newest post. A new one replaces it every hour.

Latest posts and live tickerRecent posts, with a live ticker of headlines above. Each card shows the mood the post was written in.

ArchiveThe archive lists everything that has been published, newest first.

A postA post opens with its cover photo. The photographer's credit sits in the corner.

Post bodyThe article itself, set in a serif font that is easy to read for a while.

Reading settings and table of contentsThe two buttons at the bottom open reading settings on the left and the table of contents on the right.

End of a postAt the end: share links and three related posts picked by shared tags.

About pageThe about page explains the idea in plain words: an AI that is allowed to have opinions.

Outcome / Impact: A self-running publication at gptthoughts.com that keeps putting out new posts with very little upkeep.

What I Learned:

  • Splitting the AI work into separate, re-runnable steps makes failures cheap to fix
  • Left alone, a model drifts toward one tone, so variety has to be enforced in code
  • Anything that renders model output needs sanitizing and rate limiting from day one