sweetroll 
A powerful engine for your personal website.
- lets you publish many kinds of content
- notes (microblog posts), articles (big blog posts), replies, reposts, likes, quotations, bookmarks, reviews…
- supports categories, tags, full text search, content warnings, photos (with Exif metadata display), videos, audio files, private posts (drafts), automatic offline in-browser caching (ServiceWorkers), color theme customization
- lets you talk to other IndieWeb-style websites by sending and receiving Webmentions (including Salmentions for threaded conversations)
- lets you use Micropub to edit your site (post, update, delete, undelete)
- has a media endpoint for file uploads that optimizes images, extracts Exif metadata, and works on AWS Lambda + S3
- lets you use Markdown for post text, with nice code highlighting and math rendering
- the included admin panel (micro-panel) itself uses Micropub
- sends WebSub (formerly PubSubHubbub) notifications on new posts (for readers)
- uses Granary to provide content as Atom, ActivityStreams 2.0 and JSON Feed (with WebSub notifications too)
- represents all the things as Microformats2 objects
- uses PostgreSQL with the mf2sql schema for storage
- consists of services written in Haskell and Node.js
I'm running it on my website.
Usage
Installing Sweetroll on a server requires some UNIX sysadmin skills. If you can't do it, ask your friends for help or check out other IndieWeb projects: some of them have hosted versions, some run on shared PHP hosting.
Running on a server
Set up a Postgres database with the mf2sql schema.
Copy the binary to the server (using scp, usually).
Create a user account on the server (for example, sweetroll).
And configure your favorite service management program (don't forget to replace everything with your values!) to run Sweetroll as that user!
Here's an example for runit:
#!/bin/sh
umask g+w
export SWEETROLL_HTTPS_WORKS=True # this means HTTPS is *working*! i.e. you have it set up on your reverse proxy!
export SWEETROLL_DOMAIN=unrelenting.technology # your actual domain!
export SWEETROLL_SECRET="GENERATE YOUR LONG PSEUDORANDOM VALUE!...2MGy9ZkKgzexRpd7vl8"
exec chpst -u sweetroll /home/sweetroll/.local/bin/sweetroll
--protocol=unix --socket=/var/run/sweetroll/sock \
# or: --protocol=http --port=3030 \
2>&1TODO same for frontend
(Use something like head -c 1024 < /dev/random | openssl dgst -sha512 to get the random value for the secret. No, not dynamically in the script. Copy and paste the value into the script. Otherwise you'll be logged out on every restart.)
TODO
- frontend
- webhooks (e.g. pushover notifications) on new/updated mentions, config in
site-settings
- webhooks (e.g. pushover notifications) on new/updated mentions, config in
- micropub
- draft flag → draft tag and private acl
- syndication to other micropub endpoints e.g. for silo.pub
- webmention
- link removal webmentions
- reverify/refetch to update user profiles and stuff
- moderation tools
- different modes in config: allow all (except blocked), allow known good domains (e.g. domains replied to), premoderate all, turn off webmention
- blocking domains
- sharing block lists
- deduplicate syndicated replies
- vouch
- private webmention
License
This is free and unencumbered software released into the public domain.
For more information, please refer to the UNLICENSE file or unlicense.org.