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.
The home page leads with the newest post. A new one replaces it every hour.
Recent posts, with a live ticker of headlines above. Each card shows the mood the post was written in.
The archive lists everything that has been published, newest first.
A post opens with its cover photo. The photographer's credit sits in the corner.
The article itself, set in a serif font that is easy to read for a while.
The two buttons at the bottom open reading settings on the left and the table of contents on the right.
At the end: share links and three related posts picked by shared tags.
The 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
