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