/ code / NEXTUP.md
NEXTUP.md
  1  # NEXTUP
  2  
  3  The main focus is [DearDiary's NEXTUP.md](./apps/DearDiary/NEXTUP.md)
  4  
  5  Here we have more high level goals with a concentration on `foundframeimpl`
  6  covering as many bases as possible as quickly as possible. Because that's the
  7  focal point of the [circular](../CIRCULARI.TY.md) [spirali.ty](../O19.md) of the
  8  [o19](https://github.com/mnzaki/o19).
  9  
 10  # Doing
 11  
 12  - pkb support in `foundframeimpl`
 13    - write to local files in `$HOME/pkb/${DIRECTORY}/some_path/some_file.ext` structure
 14      - on mobile devices: somewhere that the user can access easily, not inside
 15        app data dirs
 16    - `Directory` is a high level categorization of knowledge along an arbitrary
 17      axis, like
 18      - "screenrecs"
 19      - "screenshots"
 20      - "notes"
 21      - "memes"
 22      - "music"
 23      - "pomodoro"
 24    - User is free to add arbitrary data to arbirary paths in a directory
 25      - media is stored as `.mln` files
 26      - DB records (any non-media `StreamChunk` or even a `Stream` entry) are stored as json
 27        files
 28        - tagged with a `__dbType` property, then all fields at root level
 29          recursively
 30        - printed with spaces
 31        - stored with filenames `<creation> <title?>.js.md` to be accidentally
 32          readable in UIs
 33          - basically we reformat the json into a broken quine
 34            - first line prints the input json, but reformated in the preceding
 35              lines to also be correct markdown
 36              - and by "correct markdown" I mean minimally
 37                - basically when at a JSON property that is known to be markdown
 38                  (or is just multiparagraph or other simple heurists) then print
 39                  it out in the generated code with no indentation, and with the
 40                  preceding opening quote on a separate line above.
 41              - similarly for JSON properties that hold a URL, print it out with
 42                empty lines around it and place it at column 0 so it's clear
 43    - User must create directories carefully though
 44      - choose a short name
 45      - write a description of at least 16 chars
 46      - pick an optional emoji, color
 47    - `Directory` also has related `StreamChunkHeuristics`
 48      - these are user defined heuristics for whether a given `StreamChunk` should
 49        go to a given `Directory`
 50      - The philosophy is to never do things automatically for the user, but always
 51        have it one tap away to incorporate the system's knowledge rather than the
 52        system acting unchecked. The PKB is a very personal thing, it's in the
 53        name, *Personal* Knowledge Base. So in the case of adding an incoming
 54        `StreamChunk` to the appropriate `Directory`, we provide commands to guess
 55        the chunk, and the UI doesn't autotag.
 56        - the system does not force, but only guides
 57      - `Directories` of course map to FS dirs, and their metadata should go into
 58        a file in them, `.pkb.meta.json`, which is normally hidden in all UIs
 59    - So high level, current pkb features required to establish a transparent
 60      workflow between a laptop and a mobile phone by syncing PKB contents which
 61      themselves will be links to media and data, and are always (any device type)
 62      stored as a local filesystem are:
 63      - CRUD a `Directory`
 64      - CRUD a `StreamChunkHeuristic`
 65      - Injest a `StreamChunk` with target `Directory` and `path`, as a new
 66        `Entry`
 67        - no injesting without targets, we won't guess for you automatically
 68      - RUD an entry
 69    - Clearly knowledge of `StreamChunks` is now needed in `foundframeimpl` and I
 70      think that's apropos.
 71  
 72  # TODO
 73  
 74  - mln support in `foundframeimpl`
 75  
 76  - 2-phase loading of rust core
 77    - phase-1 minimal parts of core tauri, no plugins no deps
 78  
 79  - 2 different storage spaces:
 80    - shortterm
 81        - total size limited
 82        - LeastRecentlyUsed expiry algorithm applied when over-capacity
 83        - looser default publication restrictions
 84        - not redundantly stored much
 85    - longterm
 86      - no total size limit
 87      - private by default
 88      - redundantly stored
 89  
 90  - `android-activities` flutter based package for easy modular screens
 91  - `ios-activities` later
 92  
 93  
 94  - A thank you screen for supporting the cause
 95    - from a "help us, stay?" page
 96  
 97  
 98  - "Notify Seen" button on content by other people
 99    - long tap to get options:
100        - "always `notify seen` for this person"
101        - "turn on autonotify seen"
102    - on tap -> person.service.
103  
104  
105  ## Social Studies
106  
107  
108  - notify seen
109  
110  - contract to not be able to see certain media or posts until a given future date.
111    - implemented as the feature "keep it from me"
112      - applicable on any `StreamChunk`
113      - packs (compress and encrypt using newly minted keys) and uploads the
114        chosen chunks to a target peer, and gives them they keys and the release
115        date, then deletes everything from the local device.
116  
117  
118  # Laaaaaaaaaaaaater
119  
120  - Stream Feature: hide this chunk
121    - takes it to "hidden stream" which is accessible from a menu button
122      - in hidden stream, a more dangerous looking privacy button says, "secret
123        this chunk"
124        - it moves the chunk to encrypted storage
125          - encrypted storage is accessible from a high friction UI with optional
126            plausible deniability features and obscurement
127  
128  - Pokédex Skin
129    - `DearDiary` but UI is Pokédex
130  
131  - When `ForegroundLayer` fills screen, show a "capture camera" icon button in the
132    same bottom corner as the devices natural/builtin "back" button
133      - important detail; try to make an educated guess about whether back button
134        exists and is left or right, and if no information then guess based on
135        default system language being RTL or LTR
136