learn and share notes on atproto (wip) 馃
malfestio.stormlightlabs.org/
readability
solid
axum
atproto
srs
1# Malfestio
2
3Malfestio is a learning OS: flashcards + notes + lectures + articles, designed for daily study.
4
5Social layer: publish/share/remix learning artifacts; follow curators; discuss.
6
7## Personas
8
9- **Learner**: studies daily; imports content; wants fast "review queue".
10- **Creator**: makes decks/notes; publishes updates; wants feedback + forks.
11- **Curator/Teacher**: bundles content into learning paths; annotates lectures/articles.
12- **Moderator/Community admin**: handles reports, takedowns, spam.
13
14## Principles
15
16- Local-first study experience; offline study must not feel "second-class".
17- Shareable artifacts are portable: Lexicon-defined schemas + stable IDs.
18- Privacy by design: progress + recall history are private unless explicitly
19 shared.
20
21### Data Model
22
23- Note: markdown + structure + citations + links to sources.
24- Card: front/back (+ optional cloze, audio, image, code block).
25- Deck: ordered/clustered cards (+ metadata, tags).
26- Lecture: external URL + outline + timestamps + linked notes/cards.
27- Article: URL + extracted text (readability style heuristics) + highlights +
28 linked notes/cards.
29- Collection/Path: curated bundle of decks + notes + sources.
30
31## System Architecture
32
33### Frontend (SolidJS)
34
35- App shell + router-driven workspaces (Library / Study / Create / Social).
36- Signals as primary state primitive; keep study session state in signals/store.
37
38### Backend (Rust)
39
40- Axum API gateway: REST/XRPC-ish endpoints, tower middleware, typed extractors.
41- Services (logical, not necessarily microservices):
42 - Identity/Auth service (local + optional ATProto OAuth integration)
43 - Content service (notes/cards/decks/sources)
44 - Study service (queue generation + grading + scheduling)
45 - Social service (follows, feeds, comments, notifications)
46 - Search service (indexing + query)
47 - Moderation service (reports, takedowns, rules)
48
49### Storage
50
51- Postgres: canonical app DB (users, private study state, cache of published records).
52- Object storage: images/audio, extracted article snapshots (if you store them).
53- Search index: separate system (Meilisearch/Typesense/ZincSearch-pick one later).
54
55### Eventing
56
57- Internal outbox pattern (DB table) for:
58 - reindex jobs, notification fanout, federation publish steps