diora-web/docs/projects.md
mrwnslz e5a170838b
Some checks failed
Test / e2e (push) Waiting to run
Build and push Docker image / build (push) Successful in 15s
Test / test (push) Has been cancelled
Projekte mit Preset Forschung: Quellen (Paper per DOI, Bücher, Folgen mit Zeitmarke, Artikel), Zitierschlüssel, BibTeX/CSL-Export, Markdown-Notizen mit [@key]; Ende-zu-Ende-verschlüsselt. Navigation: Projekte als Tab am Handy, Suche als Lupe; sw v141
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 20:14:17 +02:00

3.8 KiB
Raw Blame History

Projekte

Projects of a preset: the first is Forschung (a research project: sources, citations, notes; Radar and Schreiben follow). In the navigation (nav.js, section and group projekte, flag side): a tab beside Home · Lesen · Hören on a phone, at the foot of the sidebar and of the wide bar above Suche · Abos & Quellen. The search moved out of the phone's tab bar: a magnifier in the bar on top (suche is a footer section; the apps' section bars show it).

End-to-end encrypted

Like the books (docs/library.md): a project's data ({name, description}) and every item's data are AES-GCM blobs with the user's key (32-crypto.js, iv hex, ciphertext base64). The server stores them and knows only: a project exists, its preset, archived, and what an item points to — kind + ref (a book's, episode's or article's id, never its title).

Items

kind ref data
paper – {key, csl, note, doi} (CSL-JSON from doi.org)
book book id {key, csl, note, type} (CSL from the book's meta)
episode episode id {key, csl, note, podcast, feed, position} (position: seconds, "ab 12:34")
article feeds item id {key, csl, note}
note – {title, body (Markdown), folder}

A book, episode or article is in a project once (adding again answers existing: true). key is the citation key for [@key] / [@key, S. 12] in notes: first author's family name (or the podcast's), year, first word of the title — unique in the project, editable.

Notes: Markdown (headings, lists, quotes, bold/italic, links); the view shows citations as "(Amodio & Jost 2007, S. 3)" and a list of the works cited. Saved as one types (0.9 s). Export: BibTeX and CSL-JSON of the sources (all or the chosen kind).

Linking from elsewhere

DioraProjects.link(kind, ref, info) opens the sheet "Mit Projekt verknüpfen" (the projects, the ones it is in ticked, + Neues Projekt). Called from the book sheet (library, apps), the article reader (◇ in its bar), the episode sheet and the player (apps, native-podcast.js). DioraProjects.of(kind, ref) → [{id, name}] the projects it's in; onChange(fn) after changes.

Desktop: a window of its own

The project's menu (⋯) has "In neuem Fenster öffnen" when dioraDesktop.openWindow is there: the desktop opens the page with ?project=<id>; projects.js then shows only that project (html.prj-solo hides the navigation and the dock).

Writing and conflicts

Every write sends base_iv (the IV it changed). Changed elsewhere since: 409 with the current state. A note's text then goes beside it as a copy "(Konflikt)"; other data reloads.

API (signed in)

  • GET /projects/ → {projects: [{id, preset, data_ct, data_iv, archived, position, items, …}], links: [{project, kind, ref}], presets}
  • POST /projects/create/ {preset, data_ct, data_iv} → {project}
  • GET /projects/<id>/ → {project, items: [{id, kind, ref, data_ct, data_iv, created_at, updated_at}]}
  • POST /projects/<id>/ {data_ct, data_iv, base_iv} and/or {archived} / {position}
  • POST /projects/<id>/delete/
  • POST /projects/<id>/items/add/ {kind, ref?, data_ct, data_iv} → {item, existing}
  • POST /projects/items/<id>/ {data_ct, data_iv, base_iv} → {item} (409 {item} when stale)
  • POST /projects/items/<id>/delete/
  • GET /projects/doi/?q=<DOI | doi.org link | arXiv link or id> → {doi, csl} — fetched from doi.org (Crossref, DataCite …) as CSL-JSON, cached a week, nothing else kept.

Next

Radar (the weekly digests and new papers with lesen / später / verwerfen / → Quellen; who fetches the papers is open), papers as books (a paper's PDF into the library, its highlights into the project's notes), Schreiben (drafts with the bibliography in a citation style), the projects in the search, more presets.