# Trof
# roadmap
- refactor
- fix bugs in qualia (complete QA for the first release)
- make csvs schemaless
- move all schema to sidecar files in /props/prop/sidecar.json
- prop type folder can have multiple sidecar.json for props of the same type
- teach csvs clients to construct schema from reading /props and /pairs
- add interface for editing schema files
- add select for root data
- add sidebar for bulk edit
- add sidebar for bulk view
# storage
## private storage
- deduplicated storage of metadata
- files stored exactly how they were uploaded
- bowls: text files with lists of urls to series of items
- optionally pijul backend instead of git
## public storage
- example: telegram, medium, insta, mastodon, activitypub, twitter, vkontakte, facebook, tumblr, qq, weibo
- example: blogs run with horn and hosted at domains
- example: RSS storage
- public git repo
- directory with digital files, content addressable, called by their hashes
- optionally names follow multiformats, with file format encoded in the id before the content hash
- directory with sidecar metadata files, called by hashes of digital files
- directory with feeds that link to digital files, optionally wrapped in horn viewer URLs
- ATOM, RSS 1, RSS 2, NFT, RDF, OWL
- alternative storage at aws buckets, gun, csvs, static server, perkeep, redis
- trof is open for third-party aggregation of public feeds for the purposes of recommendations and social networks
# interface
## (top) header
- search bar with queries for filtering items
- metadata to filter entities by
- dropdown for root entity
- if chosen "repo", overview shows all repos
- if chosen ""
- dropdown for group metadata
- dropdown for overview type
## (left) overview
### itinerary overview
- an itinerary (timeline) of filtered items
- button to add a new item
- button to select item profile
- the sidebar includes an uploader interface
### graph overview (TBA)
- tree as a series view
- taken from csvs or gedcom
- optionally exported to gedcom
- optionally tree editing
### gallery overview (TBA)
### listing overview (TBA)
### pdf overview
- iframe with latex pdf
## (right) profile
### single repo view
- toolbar
- edit button
- delete button
- git sync
- zip download
- form
- link to query of repo as source
- repo name
- repo stats
### single repo edit
- toolbar
- revert button
- save button
- form
- repo name input
- repo cache location input
### single event view
- toolbar
- edit button
- delete button
- form
- event metadata
- asset view
### single event edit
- toolbar
- revert button
- save button
- metadata dropdown
- form
- metadata inputs (dates, authors, tags etc.)
- upload input for assets
### bulk event view
- toolbar
- edit button
- delete button
- form
- all common and unique metadata
### bulk edit view
- toolbar
- save button
- revert button
- metadata dropdown
- form
- input field for assigning metadata to all chosen events
### single import tag view
- toolbar
- edit button
- delete button
- form
- tag name label
- import source label
- import type label
- import date label
- number of events with import tag
### single import tag edit
- toolbar
- save button
- revert button
- metadata dropdown
- form
- tag name input
- import type select
- import source input field
- dialog for configuring import
### single export tag view
- toolbar
- edit button
- delete button
- sync button
- form
- tag name
- export type label
- export destination label
- authentication key
- last export date
- autosync status
- number of events with export tag
### single export tag view
- toolbar
- save button
- revert button
- metadata dropdown
- form
- tag name input
- export type select
- export destination input
- dialog for configuring channel
- credential input
- autosync checkbox
# libraries
## git
- class with wrapper calls around isogit
## latex
- render as PDF with mustache-like templates
## import
-
## export
- publishes items with a channel tag to a public storage, idempotently
- optionally shows whether a chosen item has been published to public storage
- channel tag is a type of metadata
- example: RSS
- reads all items with channel tag "RSS feed 1"
- generates feed files to RSS readers and saves to a public git repo
- builds digital files, hashes, uploads to public git repo
- uploads metadata sidecar files to public git repo
- can generate ATOM, RSS 1, RSS 2, NFT, RDF, OWL
- each item in feed.xml points to either static.mywebsite.com/uniquehash (for raw files) or post.mywebsite.com/uniquehash (for html renders)
- might duplicate HTML from file in the description? some RSS readers read only description? https://netstalking-live.github.io/feed.xml
- example: Telegram channel
- example: GEDCOM
- example: csvs subrepo
# project name
trof (trough [trôf, trŏf])

## meaning
1. a. A long, narrow, generally shallow receptacle for holding water or feed for animals.
b. Any of various similar containers for domestic or industrial use, such as kneading or washing.
2. A gutter under the edge of a roof for carrying off rainwater.
3. A long, narrow depression, as between waves or ridges.
4. A low point in a business cycle or on a statistical graph.
5. Meteorology An elongated region of relatively low atmospheric pressure, often associated with a front.
6. Physics A minimum point in a wave or an alternating signal.
## etymology
Old English trog "wooden vessel, tray, hollow vessel, canoe," from Proto-Germanic *trugaz (source also of Old Frisian, Old Saxon, Old Norse trog, Middle Dutch troch, Dutch trog, Old High German troc, German trog), from PIE *dru-ko-, from root *deru- "be firm, solid, steadfast," with specialized senses "wood, tree" and derivatives referring to objects made of wood. Originally pronounced in English with a hard -gh- (as in Scottish loch); pronunciation shifted to "-ff," but spelling remained.
## namesakes
https://github.com/internetarchive/trough
https://github.com/wooorm/trough
https://www.troughapp.com
https://en.wikipedia.org/wiki/Troff
# bin
## 1
- ability to save foreign urls into bowl (music from other authors, files, posts, etc.)
## 2
- git collaboration could enable freelance data annotators - user uploads file, annotator with access to the private repo adds transcription, they get paid somehow
## 3
### сценарий 1
- ты добавляешь пять событий руками
- ты добавляешь тег канала, авторизуешься с платформой публикации
- ты выделяешь свои пять событий и присваиваешь им тег канала
- жмякаешь "опубликовать"
### сценарий 2
- ты жмякаешь "импорт", указываешь откуда взять события. Тебе показывают как будет выглядеть импорт и какой ему будет присвоен тег импорта.
- ты добавляешь тег канала, авторизуешься с платформой публикации
- ты выделяешь свои события по тегу импорта и присваиваешь им тег канала
- жмякаешь "опубликовать"