prose.sh

A blog platform for hackers


# Features

  • Github flavor markdown
  • Custom domains
  • Looks great on any device
  • Bring your own editor
  • You control the source files
  • Terminal workflow with no installation
  • Public-key based authentication
  • Use sftp to manage blog
  • No ads, zero browser-based tracking
  • No attempt to identify users
  • No platform lock-in
  • No javascript
  • Subscriptions via RSS
  • Minimalist design
  • 100% open source

# You control the source files

Create posts using your favorite editor in plain text files.

~/blog/hello-world.md

 1# hello world!
 2
 3This is my first blog post.
 4
 5Check out some resources:
 6
 7- [pico.sh](https://pico.sh)
 8- [antoniomika](https://antoniomika.me)
 9- [bower.sh](https://bower.sh)
10
11Cya!

# Publish your posts with one command

When your post is ready to be published, copy the file to our server with a familiar command:

1rsync ~/blog/* prose.sh:/

We'll either create or update the posts for you.

# Terminal workflow without installation

Since we are leveraging tools you already have on your computer (ssh and rsync), there is nothing to install.

This provides the convenience of a web app, but from inside your terminal!

# Upload images for your blog

We also support image uploading. Simply upload your images alongside your markdown files and then reference them from root /:

1---
2title: hello world!
3---
4
5![profile pic](/profile.jpg)
1rsync ~/blog/*.jpg prose.sh:/

When you upload an image to prose, we make it web optimized (e.g. strip exif, convert to webp, and reduce filesize). We also support an image manipulation API!

# Metadata

We support adding frontmatter to the top of your markdown posts. A frontmatter looks like the following:

1---
2title: some title!
3description: this is a great description
4date: 2022-06-28
5tags: feature, announcement
6image: og_image.jpg
7card: summary # or summary_large_image
8draft: true
9---

# How can I add a footer to all of my posts?

We have a special file _footer.md that will be appended to every single blog post.

There is nothing that differentiates itself from the rest of the post so it's up to you to style it. For convenience we added an id to the containing element post-footer.

# How can I customize my blog page?

There's a special file you can upload _readme.md which will allow users to add a bio and links to their blog landing page.

 1---
 2title: some title!
 3description: this is a great description
 4nav:
 5  - google: https://google.com
 6  - site: https://some.site
 7image: og_image.jpg
 8card: summary # or summary_large_image
 9favicon: favicon.ico
10aliases:
11  - 2023/03/10/my-post
12layout: aside # or default
13---

# How can I change the theme of my blog?

There's a special file you can upload _styles.css which will allow users to add a CSS file to their page. It will be the final CSS file loaded on the page so it will overwrite whatever styles have previously been added. We've also added a couple of convenience id's attached to the body element for the blog and post pages.

 1/* _styles.css */
 2#post {
 3    color: green;
 4}
 5
 6#blog {
 7    color: tomato;
 8}
 9
10header {}
11main {}
12footer {}
13article {}

Further we add the post slug as a class on the body element. So if you upload a file called barrel.md then the body element will have:

1<body id="post" class="barrel"></body>

# How can I change the layout of my blog?

Inside the _readme.md metadata file, there's a variable layout option that will change the layout of your blog index page.

1---
2layout: aside # or default
3---

# How can I change the default 404 page?

Upload a _404.md which is formatted just like all the other posts.

1---
2title: Not found
3description: Where are you going?
4---
5
6This page doesn't exist.

# Ready to join pico?

Create an account using only your SSH key.

Get Started
<< PREV
imgs.sh
NEXT >>
pastes.sh
Home
Sitemap
Getting started
How it works
File uploads
Custom domains
pgs.sh
tuns.sh
imgs.sh
prose.sh
pastes.sh
feeds.sh
pico+
Images
IRC
API Tokens
FAQ
Lab
Plain text lists
About us
Abuse
Operations
Privacy policy
Join