Thoughts started with a simple question: what if a social platform respected its users? No algorithmic noise, no dark patterns — just a distraction-free space where thoughts and images speak for themselves. We wanted to build something we'd actually want to use.
Building a production-grade social platform end-to-end — authentication, post creation, cloud storage, live hosting with SSL — in under 12 weeks. Every decision mattered: database schema, API design, UI components, deployment pipeline.
We committed to a dark, editorial design language. Every page — from login to feed — follows the same visual system: dark backgrounds, sharp typography, clean card layouts. No feature bloat, no compromises on performance. The stack was chosen deliberately: Next.js 15 for full-stack React, PostgreSQL for relational integrity, Backblaze for cost-effective object storage, and Hetzner + Nginx for battle-tested hosting.
The main page renders a scrollable feed of posts in a clean card layout. Each card surfaces the post title, description, author handle, and image if provided — no noise, no ads, just content. Rounded corners, subtle borders, and hover states make browsing feel fluid and intentional.
Posts are fetched server-side via Next.js for fast initial loads, then hydrated on the client for instant interactivity. Images are served from Backblaze via CDN-cached URLs.
Registration collects name, email, and password. Each user is assigned a unique ID on creation. Passwords are hashed server-side — never stored in plain text. After login, a JWT is stored in localStorage for seamless auto-login on return visits.
Users can log out at any time, and a password change flow requires verifying the current password before updating. All auth pages follow the same dark design system for visual consistency.
The post creation interface strips everything non-essential. Users provide a title, description, optional image, and tags. The image upload connects directly to Backblaze B2 via the S3 API — no intermediary storage on the server, no file-size headaches.
Tags are implemented as a flexible tagging system stored in a separate relational table, allowing posts to be filtered and discovered by topic. The interface uses icon-based controls instead of text buttons for a cleaner, more modern feel.
When a user opens a post, the full image expands front-and-center with a comment panel docked to the right. This keeps the primary content in focus while keeping discussion accessible — a layout pattern borrowed from the best parts of modern creative platforms.
Comments are fetched per-post and displayed in chronological order. The panel scrolls independently of the image, so long discussions never push the media out of view.
Thoughts runs on a production Hetzner server with a real domain, real SSL, real monitoring. When a user at xyz.com makes a request, it flows through Cloudflare's edge network to Nginx on our VPS, which forwards to the Next.js process, which queries Azure PostgreSQL and fetches images from Backblaze — all in under 200ms.
Uptime Kuma watches the domain, server, database, and storage in real time. If anything drops, an email fires within minutes. This isn't a localhost demo — it's a production system built with the care that production demands.