Longhand Medium-Style Blogging Platform Template

A Medium-style blogging platform where anyone can publish: a write-in-place editor, For you and Following feeds, claps, threaded responses, highlights, and follows. Ships with 24 stories by 8 fictional writers.

Opens in Layerwise on your computer. New to Layerwise? Download the app first.

Category
Creators
Tags
Blogging, Publishing, Writing, Community
Updated
Nov 7, 2026
Requires
Layerwise 0.7.0+
longhand.layerwise.site

Build your own version of Longhand

Publish and read the way you would on Medium. Writers work in a write-in-place editor with a floating toolbar, a plus menu for images, code, dividers, and embeds, Markdown shortcuts, and autosave. A publish dialog sets the cover, description, and up to five topics, and edits to a published story stay private until the writer chooses Update. Anyone can read the For you feed, topic pages, and author profiles and search stories, people, and topics without an account. Signed-in readers also get a Following feed and a reading list, can clap up to 50 times per story, reply in threaded responses, highlight passages, and follow writers and topics. Writers get notifications, emails they can turn off, and 30 days of views, reads, and claps. Admins review reader reports and choose staff picks. The server rebuilds story content from a whitelist, ranks the feed on each request, rate limits public actions, and counts views without storing IP addresses. Includes a landing page, 24 stories by 8 fictional writers, and a Try the editor page that needs no account. Built with Layerwise, React, TanStack Start, and Tiptap.

Use Longhand to run a publishing site with many writers, such as a community magazine, a club journal, or a Medium-style platform for one field. Read the 24 sample stories without an account and choose Try the editor to draft in the browser, then sign up to publish, clap, respond, and follow.

What the template includes

  • A landing page, For you and Following feeds, topic pages sorted by Popular or Latest, author profiles, search across stories, people, and topics, and 24 sample stories by 8 fictional writers.
  • A write-in-place editor with a floating toolbar, a plus menu for images, code, dividers, and embeds, Markdown shortcuts, autosave, a publish dialog with a cover and up to five topics, and private edits to a published story until Update.
  • Claps from 1 to 50 per reader, threaded responses, highlights with a shared top highlight, follows, a reading list, notifications, 30-day writer stats, follower and response emails, reports and staff picks for admins, and rate limits on public actions.

The template opens as a local project you can change through the conversation or the code editor. You can inspect the source for this template version before choosing how to extend it.

Copy it and make one useful change

  1. Install Layerwise and sign in. Choose Use this template, select a team and project name in the app, then choose Copy to Layerwise. Wait for setup and the local preview to finish.
  2. Start in src/brand.config.ts, which holds the name, copy, colors, fonts, and ten topics. Then replace the Markdown stories in scripts/seed/stories and run pnpm seed:build before your first publish, because it is safe only until the seed migration has run in production. A new kind of block must be added to the whitelist in src/lib/story-doc.ts, or the server removes it on save.
  3. Ask for the change in the project conversation. This prompt is a starting point; adjust it to describe your intended result.
    Starter prompt
    Let admins act on reports. On the Reports page, add Unpublish story to reports about a story and Remove response to reports about a response. Both are admin-only and checked on the server. Unpublishing returns the story to the writer’s drafts. A removed response follows the same rules as one its author deleted, with the text “This response was removed by a moderator.” Either action marks the report resolved. Keep Resolve, Dismiss, and Reopen.

Check the result before publishing

  • Sign up, choose Write, add a title and a paragraph, wait for Saved, then choose Publish and Publish now. Edit the story from Your stories; the list should show Unpublished edits, and a signed-out window should keep the old text until you choose Update and Update story.
  • In a second account, open the story, hold the clap button until it shows Max, select a sentence and choose Highlight, then choose Follow. After a reload the sentence should show Top highlight · 1 reader, and the first account’s Notifications should list all three. If the first account verified its email, the follower email should appear under Email in Local.
  • Set your row’s role to admin in the user table under Database, then reload. Report the story from the second account with Report story, and it should appear under Reports with Resolve and Dismiss. Choose Make staff pick on the new account’s story; the toast should confirm it, but the Staff picks sidebar should not list it, because the account is younger than 30 days.

Local and published apps use separate databases, so sign up and set your admin role again after publishing, and the first publish puts the sample stories and their 44 fictional accounts on the live site. Resolving a report only changes its status, and the story or response stays up until you add the actions in the prompt above. Newsletters and digests are not included, because Layerwise Email is for transactional mail. RSS, paid memberships, scheduled publishing, and writer-created topics are not included either.

Use the local preview controls to test the affected path. When it works, publish a release and repeat the check at the live URL. For saved records or accounts, read about the separate Local and Online databases.

Step-by-step guide

See all