A personal website / #indieweb engine with curved swords. Curved! Swords!
JavaScript Haskell HTML CSS Shell
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
example-feeds
indieweb-algorithms @ 833d940
indieweb-components @ 8cdd062
mf2sql @ ddb9383
micro-panel @ f3f2442
sweetroll-be
sweetroll-fe
sweetroll-mu
sweetroll-node-common
.editorconfig
.gitignore
.gitmodules
.mailmap
.tmuxp.yaml
CODE_OF_CONDUCT.md
README.md
UNLICENSE
nginx.conf
sweetroll-site.nginx.conf

README.md

sweetroll unlicense

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>&1

TODO 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
  • 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.