RailBlog
alphine
HOBBYOP

22 days ago

Description: One-service blog: Next.js + Payload CMS embedded + Postgres.

Category: Blogs

Full feature breakdown:

Stack: Next.js 15 (App Router) · Payload CMS 3 embedded (not a separate service) · Postgres via @payloadcms/db-postgres · Lexical rich text editor · @payloadcms/plugin-seo · anime.js for motion

Why one service: Payload CMS 3 mounts directly into Next.js's own route tree — the admin panel (/admin), the content API (REST/GraphQL/Local API), and the public blog all run in the same process. Content queries use Payload's in-process Local API (payload.find(...)), not an HTTP round trip to itself. One Railway service, one Postgres plugin — no second app or API URL to keep in sync.

Collections: posts (title, slug, excerpt, Lexical rich-text body, hero image, categories, publish/draft workflow via Payload versions, per-post SEO fields), categories, media (uploads persisted to a Railway Volume so they survive redeploys), users (Payload's auth collection for /admin login), pages (a flexible page builder for About/Contact-style pages).

Live publishing: Publishing a post fires an afterChange hook that calls Next's revalidatePath for that post and the /posts index — content goes live within seconds, no full rebuild.

SEO & feeds: Auto-generated /posts-sitemap.xml and /pages-sitemap.xml (published content only), /robots.txt linking both, and an RSS 2.0 feed at /rss.xml — all built through the Local API.

Posting dashboard (/dashboard): A lightweight, animated alternative to the full /admin editor for quick posts — title, excerpt, plain-text body, category chips, Draft/Published toggle. Writes through the same posts collection and revalidation hook as the full editor. Not a replacement — no rich-text formatting here, so anything needing headings/embeds/images still goes through /admin. Built with anime.js for the entrance animation and publish-success sequence; the same library drives the staggered reveal grid on the public blog index.

Why it matters competitively: Railway's Blogs category is dominated by Ghost (~3,600 deploys across near-identical listings). The only "modern stack" alternatives (Next.js + headless WordPress/Strapi) need 2-3 separate services — more complex than Ghost, not less. RailBlog is one app, one database, one deploy.

License: LGPL-3.0-or-later — free, no paid tier, monetized only via Railway's template kickback program.

Live demo: railblog.up.railway.app

Recent updates: added the /dashboard posting flow, anime.js entrance animations, and published TEMPLATE.md for Template Hub submission.

URL: https://railway.com/deploy/railblog

0 Replies

Welcome!

Sign in to your Railway account to join the conversation.

Loading...