learn and share notes on atproto (wip) 馃 malfestio.stormlightlabs.org/
readability solid axum atproto srs
Rust 56.1%
TypeScript 42.8%
PLpgSQL 0.9%
JavaScript 0.1%
HTML 0.1%
CSS 0.1%
21 1 0

Clone this repository

https://tangled.org/desertthunder.dev/malfestio
git@tangled.org:desertthunder.dev/malfestio

For self-hosted knots, clone URLs may differ based on your setup.

README.md

Malfestio#

Malfestio is a learning OS: flashcards + notes + lectures + articles, designed for daily study.

Social layer: publish/share/remix learning artifacts; follow curators; discuss.

Personas#

  • Learner: studies daily; imports content; wants fast "review queue".
  • Creator: makes decks/notes; publishes updates; wants feedback + forks.
  • Curator/Teacher: bundles content into learning paths; annotates lectures/articles.
  • Moderator/Community admin: handles reports, takedowns, spam.

Principles#

  • Local-first study experience; offline study must not feel "second-class".
  • Shareable artifacts are portable: Lexicon-defined schemas + stable IDs.
  • Privacy by design: progress + recall history are private unless explicitly shared.

Data Model#

  • Note: markdown + structure + citations + links to sources.
  • Card: front/back (+ optional cloze, audio, image, code block).
  • Deck: ordered/clustered cards (+ metadata, tags).
  • Lecture: external URL + outline + timestamps + linked notes/cards.
  • Article: URL + extracted text (readability style heuristics) + highlights + linked notes/cards.
  • Collection/Path: curated bundle of decks + notes + sources.

System Architecture#

Frontend (SolidJS)#

  • App shell + router-driven workspaces (Library / Study / Create / Social).
  • Signals as primary state primitive; keep study session state in signals/store.

Backend (Rust)#

  • Axum API gateway: REST/XRPC-ish endpoints, tower middleware, typed extractors.
  • Services (logical, not necessarily microservices):
    • Identity/Auth service (local + optional ATProto OAuth integration)
    • Content service (notes/cards/decks/sources)
    • Study service (queue generation + grading + scheduling)
    • Social service (follows, feeds, comments, notifications)
    • Search service (indexing + query)
    • Moderation service (reports, takedowns, rules)

Storage#

  • Postgres: canonical app DB (users, private study state, cache of published records).
  • Object storage: images/audio, extracted article snapshots (if you store them).
  • Search index: separate system (Meilisearch/Typesense/ZincSearch-pick one later).

Eventing#

  • Internal outbox pattern (DB table) for:
    • reindex jobs, notification fanout, federation publish steps