UI: contacts view is public
UI: fix buttons in notifications menu
sqlbuilder: fix multiple joins
UI: notification button in mobile footer
Fix psycopg pool connection limits
8 gunicorn threads + 1 task runner max
Add systemd service files
Add 'Show all' and 'Mark all read' to notif menu
Add `Components.get()` to get component by name
Fix checks in `Notification.notify()`
web: set notification seen on get, set all notifications seen via post
also, paginate notifications page
Add test for cached fk objects
models fk properties should cache returned objects
Create notifications for incoming Activities
`db.Notification.notify()` checks activity
activity must pass checks to be notified
sqlbuilder: handle conditions args with list
`where("col IN ?", [1,2])` now renders correctly as `WHERE col IN (?, ?)`
components: rework `hx()` function
now returns `hx-name="value"` from context `{"hx_name":"value"}`
sqlbuilder: fix `Or` and `And`
UI: handle 'follow'
- update actor card
- append to contacts (if not already in contacts page)
- less queries in contacts page
UI: Contacts page list pending contacts if logged in