# 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=`; `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//` → `{project, items: [{id, kind, ref, data_ct, data_iv, created_at, updated_at}]}` - `POST /projects//` `{data_ct, data_iv, base_iv}` and/or `{archived}` / `{position}` - `POST /projects//delete/` - `POST /projects//items/add/` `{kind, ref?, data_ct, data_iv}` → `{item, existing}` - `POST /projects/items//` `{data_ct, data_iv, base_iv}` → `{item}` (409 `{item}` when stale) - `POST /projects/items//delete/` - `GET /projects/doi/?q=` → `{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.