mirror of
https://git.alemi.dev/guestbook.rs.git
synced 2024-11-14 04:19:21 +01:00
78 lines
3.2 KiB
Markdown
78 lines
3.2 KiB
Markdown
|
# guestbook.rs
|
||
|
a super simple guestbook to deploy on your site: just grab the binary and run it, or configure it to your liking
|
||
|
|
||
|
see it in action (with a custom frontend) [here, at the bottom](https://alemi.dev/), or try an in-memory temporary version [here](https://guestbook.alemi.dev/)
|
||
|
|
||
|
# why
|
||
|
i love small web and i want to give a way to whoever visits my site to leave a mark. cooking something to do that is very easy, but after connecting my third bare form i decided i needed something more convenient.
|
||
|
|
||
|
# deploy
|
||
|
## all-in-one
|
||
|
`guestbook.rs` can be easily deployed without anything else: just grab (or compile) the default binary and run it:
|
||
|
$ guestbook serve
|
||
|
|
||
|
it will create a sqlite database (`guestbook.db`) in current directory and start serving its frontend on http://localhost:37812/ and its backend on http://localhost:37812/api
|
||
|
|
||
|
all comments will be public and will only be logged on console
|
||
|
|
||
|
## simple configuration
|
||
|
it's possible to configure frontend style, extra notifiers and page overrides with a `.toml` config file
|
||
|
|
||
|
if no config file is provided, the implicit default will be used (view it with `guestbook config` or redirect it to file and start editing)
|
||
|
|
||
|
a custom config file can be specified with `-c / --config` CLI argument
|
||
|
|
||
|
### overrides
|
||
|
by default each user is given full control on each page (except for the `date` field). this can be changed with overrides.
|
||
|
|
||
|
as an example, you may want to review posts before showing them publicly.
|
||
|
|
||
|
add following section to your `config.toml`:
|
||
|
[overrides]
|
||
|
public = false
|
||
|
|
||
|
and each incoming page will be forced to be private (until you make it public manually with `guestbook review`)
|
||
|
|
||
|
## modular configuration
|
||
|
`guestbook.rs` just works, but can also be deeply customized
|
||
|
|
||
|
by default all supported sql drivers are included, but it's possible to only compile your desired driver by enabling only that feature (`sqlite`, `postgres`, `mysql`)
|
||
|
|
||
|
all notifiers are bundled, but just like db drivers it's possible to only include some (`email`, `telegram`)
|
||
|
|
||
|
the integrated frontend is not necessary, and can be excluded by disabling the `web` feature. serve your favorite page and just use the `/api` endpoint for fetching pages.
|
||
|
|
||
|
### making your own frontend
|
||
|
the JS file used by the builtin frontend is available here:
|
||
|
https://cdn.alemi.dev/guestbook/0.2.0.js
|
||
|
|
||
|
this provides a plain JS (+jsdoc! check type hints) module exporting one function to hook the automatic infinite scroll fetcher
|
||
|
|
||
|
you can also manage things with your framework of choice, just `GET /api?offset=x&limit=y` to receive a list of public pages
|
||
|
class GuestbookPage {
|
||
|
id: number
|
||
|
author: string
|
||
|
contact: string | undefined
|
||
|
url: string | undefined
|
||
|
avatar: string
|
||
|
body: string,
|
||
|
date: Date,
|
||
|
}
|
||
|
|
||
|
inserting a new page can be done with either a `POST` (+form) or a `PUT` (+json) request on `/api` endpoint
|
||
|
class GuestbookInsertion {
|
||
|
body: string,
|
||
|
author: string | undefined,
|
||
|
contact: string | undefined,
|
||
|
public: boolean | undefined,
|
||
|
date: Date | undefined,
|
||
|
}
|
||
|
|
||
|
|
||
|
# future work
|
||
|
due to the modular structure of notifiers, i plan to add many more notifiers for various services, such as
|
||
|
* matrix
|
||
|
* mastodon/pleroma
|
||
|
* discord
|
||
|
* ??? open to ideas (:
|