IndieWeb
Loves NixOS, IndieWeb, coffee and hamburgers.
Comment by ~vikanezrimaya on ~vikanezrimaya/kittybox
REPORTED
RESOLVED IMPLEMENTEDComment by ~vikanezrimaya on ~vikanezrimaya/kittybox
Postgres also has a good search functionality, including full-text search. See https://fireburn.ru/posts/kittybox-postgres-experiment-1 for details.
Ticket created by ~vikanezrimaya on ~vikanezrimaya/kittybox
Ticket created by ~vikanezrimaya on ~vikanezrimaya/kittybox
#Firehose
Fetches feeds, parses them and dumps their contents into the database.
May be a good idea to use process boundaries to isolate it, though as Rust is memory-safe, merits of such isolation are not clear.
#Queries
Users own feeds. Feeds reference posts saved in the database. Post key may be UID/URL or a UUID (not sure which would be better).
Since JF2 is a simpler format, some fields like publishing date may be reified into database columns for easier querying. However, the schema isn't yet clear in my head.
#Goodies
#Show like/bookmark/repost status via database integration
See Kittybox Postgres experiment #2 for more info.
Will need a method on
Storage
trait and passingStorage
to the Microsub query subsystem.#Virtual feeds
Instead of being real feeds in the database, these feeds might be curated by an algorithm.
(I wonder how hard it is to stuff a WASM runtime into Kittybox to allow executing custom code for building these feeds...)
#Crawler
Might be interesting to build a crawler system that uses MF2 metadata to build a social graph and create a feed of "friends-of-friends". (Virtual feeds support might be useful)
Ticket created by ~vikanezrimaya on ~vikanezrimaya/kittybox
Workflow:
- Authorization page sends request to send a push notification
- Heavily rate-limit this endpoint to prevent abuse
- Should only be available if there is a push notification endpoint on file (Kittybox Companion for Android should implement this)
- Use UnifiedPush to send a push notification to a device already logged in
- Device shows an authentication prompt
- Should contain all data related to this authorization
- No validation should be necessary: all data was already validated by the authorization endpoint and is trusted
- If accepted, device pings the Authorization Endpoint with an OAuth2 token scoped to
kittybox:authenticate_other_devices
(scope name subject to bikeshedding)- Authorization page long-polls (or receives by other means) the result and sends the authorization code to the redirect URI
feature added by ~vikanezrimaya on ~vikanezrimaya/kittybox
Ticket created by ~vikanezrimaya on ~vikanezrimaya/kittybox
Arbitrary post operations in a safe manner.
trait Storage { type Transaction: Transaction; /// Begin a new atomic transaction. async fn begin(&self) -> Self::Transaction; } trait Transaction: Storage { type PostGuard: TxnPostGuard; /// Commit the transaction. async fn commit(self) -> Result<()>; /// Rollback the transaction explicitly. /// /// Preferably, this would also happen on Drop. async fn rollback(self); /// Check a post out of the storage to update it. async fn get_for_update(&self, url: &str) -> Result<Self::PostGuard>; /// Finish an update of a post, atomically updating it. async fn finish_update(&self, guard: Self::PostGuard) -> Result<()>; } trait TxnPostGuard: DerefMut<serde_json::Value> {}
Ticket created by ~vikanezrimaya on ~vikanezrimaya/kittybox
~vikanezrimaya assigned ~vikanezrimaya to #9 on ~vikanezrimaya/kittybox