{"id":13638603,"url":"https://github.com/assemblycapital/vita","last_synced_at":"2025-04-19T18:30:44.929Z","repository":{"id":124090270,"uuid":"601374651","full_name":"assemblycapital/vita","owner":"assemblycapital","description":null,"archived":false,"fork":false,"pushed_at":"2024-04-30T20:16:39.000Z","size":276,"stargazers_count":16,"open_issues_count":4,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-11-09T08:40:00.521Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/assemblycapital.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-13T23:37:26.000Z","updated_at":"2024-09-01T23:11:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"4ae6db84-0c8d-4ddd-9d23-3aa6418e5ed9","html_url":"https://github.com/assemblycapital/vita","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/assemblycapital%2Fvita","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/assemblycapital%2Fvita/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/assemblycapital%2Fvita/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/assemblycapital%2Fvita/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/assemblycapital","download_url":"https://codeload.github.com/assemblycapital/vita/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249764718,"owners_count":21322288,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-02T01:00:49.832Z","updated_at":"2025-04-19T18:30:44.600Z","avatar_url":"https://github.com/assemblycapital.png","language":"TypeScript","funding_links":[],"categories":["Applications"],"sub_categories":[],"readme":"# 🛸 vita\n\nkeep track of your app distributions\n\nto get downloads, `:vita` periodically scrys %cs /subs for each desk and caches the results.\n\n`:vita` accepts foreign pokes attesting to activity on a desk.\n`/lib/vita-client.hoon` helps any agent send vita activity pokes.\nit sends a maximum of one poke per day, and allows users to opt-in / opt-out depending on developer preference.\n\n## vita downloads\n\non-init, vita will fetch 'downloader' metrics on all of your published desks and print them out to dojo.\n\n```\nvita: our %basket has 20 subs\nvita: our %noodle has 12 subs\nvita: our %houston has 133 subs\nvita: our %radio has 326 subs\n```\n\nthis tells you how many active urbit ships are signed up for OTAs for each desk.\n\nyou can run this routine whenever you want with `:vita|g`\n\n`:vita` automatically checks `:treaty` for published desks.\n\nto register a different desk (e.g. %kids), do `:vita|g %kids`\n\n```\nvita: our %kids has 0 subs\n\u003e :vita|g %kids\n\u003e=\n```\n\nnow, whenever `:vita` does its full routine, `%kids` will be included.\n\n```\nvita: our %kids has 0 subs\nvita: our %basket has 20 subs\nvita: our %noodle has 12 subs\nvita: our %houston has 133 subs\nvita: our %radio has 326 subs\n\u003e :vita|g\n\u003e=\n```\n\nto unregister a desk: `:vita|d %kids`. WARNING: all data collected on an unregistered desk will be lost.\n\nonce every 24 hours, `:vita` grabs downloads metrics on each registered desk using `.^((set ship) %cs /=mydesk=/subs)`. every time this scry is performed, `:vita` logs the size of the set with a timestamp. `:vita` keeps one copy of the latest full set of downloaders, and a cumulative set of all unique downloaders.\n\nwhen users unsync from your local desk, `latest.downloads` wont go down until your next `|commit` to the desk.\n`cumulative.downloads` only goes up.\n\nto see all cumulative sizes: `=t +vita!total`\n\n```\nvita: %basket has 24 cumulative downloads\nvita: %noodle has 14 cumulative downloads\nvita: %houston has 139 cumulative downloads\nvita: %radio has 359 cumulative downloads\n\u003e =t +vita!total\n```\n\nover time, `:vita` accumulates a `history=(map time [size=@ud set=(unit (set ship))])` for each desk.\n\nto change the interval for automatic collection: `:vita|i ~h8` will change it to 8 hours from the default 24\n\nto turn off the interval: `:vita|i` (no arg)\n\nto enable collection of the full set of downloaders per day (instead of just the size) `:vita|f \u0026`\n\n## vita activity\n\n`:vita` is also capable of collecting daily-active-users.\n\nvita accepts `vita-action+[%activity =desk]` pokes from any source. it logs daily active users by adding users to a `latest=(set ship)`.\nthis set is cleared once a day. vita keeps record of the max size of this set each day in `history.activity`\n\nnow you just need users to poke `:~your-planet/vita \u0026vita-action [%activity %yourdesk]` every time they use your app.\n\n`/lib/vita-client/hoon` has a wrapper agent which does just that.\n\nto use it, copy over `\u003cthis_repo\u003e/vita-client/*` into your app desk, then `/+  vita-client` and wrap your agent with\n\n```hoon\n%-  %-  agent:vita-client\n    ::  data collection on/off by default\n    :-  \u0026\n    ::  @p of your distributor ship\n    ~sampel-palnet\n...\n```\n\nyou will also need to give the `(active:vita-client bowl)` card somewhere in your agent where real user activity can be detected (e.g. on-watch for a frontend subscription path). this card will induce `vita-client` to send activity upstream to the parent `vita`.\n\n`vita-client` is initialized with a boolean (sets collection on/off by default), and the `@p` of your distributor ship (running vita, with the app registered).\n\nusers can turn `vita-client` data collection on/off with `:myagent +mydesk!enable-vita` or `:tenna +mydesk!disable-vita`.\nthis uses some generators packaged with vita-client. the actual poke is just `:myagent \u0026vita-client [%set-enabled |]`\n\n`vita-client` sends a max of one activity poke per-day.\n\n## frontend\n\nthe vita frontend displays the data collected by `:vita` plus some forms for app creation and maintenance. the `:vita-deploy` agent supports app creation and maintenance.\n\n# installation\n\n## install from livenet distribution\n\n`|install ~nodmyn-dosrux %vita`\n\n## install from source\n\n1. create a blank `%vita` desk.\n2. copy in basic app dependencies.\n3. `|mount %vita`\n4. cd `\u003cthis_repo\u003e/vita`\n5. `./install.sh -w \u003cmy_pier\u003e/vita`\n6. `|commit %vita`\n7. `|install our %vita`\n\n## urbit.org grant\n\nhttps://urbit.org/grants/app-metrics\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fassemblycapital%2Fvita","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fassemblycapital%2Fvita","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fassemblycapital%2Fvita/lists"}