{"id":15437295,"url":"https://github.com/victorb/pine","last_synced_at":"2025-04-28T15:30:22.168Z","repository":{"id":148376959,"uuid":"108628841","full_name":"victorb/pine","owner":"victorb","description":"Vine clone over IPFS","archived":false,"fork":false,"pushed_at":"2017-12-18T11:45:47.000Z","size":15626,"stargazers_count":3,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-30T10:51:10.482Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/victorb.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":"2017-10-28T07:26:17.000Z","updated_at":"2018-12-19T20:31:42.000Z","dependencies_parsed_at":"2023-05-19T22:30:24.148Z","dependency_job_id":null,"html_url":"https://github.com/victorb/pine","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/victorb%2Fpine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/victorb%2Fpine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/victorb%2Fpine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/victorb%2Fpine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/victorb","download_url":"https://codeload.github.com/victorb/pine/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251338471,"owners_count":21573563,"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-10-01T18:56:17.199Z","updated_at":"2025-04-28T15:30:22.150Z","avatar_url":"https://github.com/victorb.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# pine\n\u003e vine clone over IPFS\n\n![Demo of Pine](pine-demo.gif)\n\n## How to run\n\nRequires nodejs version 9.0.0 or higher and yarn\n\n- Clone the repository\n- Run `yarn` to install the dependencies (or `npm install` if you use npm)\n- Run the `dev` command to serve frontend via either yarn or npm\n  - `yarn dev` OR `npm run dev`\n- Run the caching server via either yarn or npm\n  - `yarn start` OR `npm start`\n\nNow you should be able to see the application on localhost:8080\n\nNavigating to the website, you should see the start page, showing\na \"Record new Pine\" in the bottom, and a permission dialog asking\nfor permission to access your camera. Accept that. Also, open up the\nbrowser's javascript console, so you can see any potential errors (\ncurrently doesn't handle errors very good)\n\nThen click on \"Record new Pine\" to go to the recording screen.\n\nOnce on the recording screen, click and hold down on the camera\noutput to begin recording. You should see a progress-bar in the\nbottom. Make sure to release the mouse before it fills up, as each\nrecording can only be ~6 seconds long.\n\nOnce you let go, press the \"Publish\" button and you should be able\nto see a preview of your recording. If you're happy with it, click\n\"Publish\" in the top-right, and your recording will be published\non IPFS. You can see the link being printed in your browser's\nconsole.\n\n## open problems\n\n- How to keep track of \"loops\"\n- How to keep track of all publishes?\n- Help seed everyones content\n\n## ux\n\nStarts with full page with listing of videos\n\nButton in bottom for recording\n\nRecording screen shows video in fullscreen with\nprogress meter in the bottom\n\nOnce recorded something, show button in top right\nto publish video\n\nPublish video takes you to the preview screen which\nreplays the video for you\n\nPublish page shows button in the bottom for actually\npublishing the video\n\nOnce published, it shows you the submission in\nthe browser\n\n## data structures\n\n### list of videos\n\n----------------\n\nUpon opening, a peer should send `GET_VIDEOS_HEAD` message on `PINE` topic via\npubsub. Online peers will respond with `SEND_VIDEOS_HEAD` which is a hash of\nthe latest version that peer have seen of the list of videos. The peer who\nrequested the list will take the first seen message and fetch the list from that.\n\nA list of videos looks like this:\n\n```\n[{\n  title: 'Look, a funny cat!',\n  video: '/ipfs/Qkamlfknawleknfal',\n  created_at: '2017-10-08T16:05:42.023Z'\n}]\n```\n\nIt will also be possible to run `Hoster` nodes to listen and respond to queries\nin case no other peers are online.\n\n### view-count\n\nView counts are maintained by super-nodes who are permissioned to increment the\nview counters.\n\nWhen normal nodes first starts, the request the latest head of the counting with\nsending a `GET_VIEWS` message on topic `PINE` upon the super-nodes responds with\na `SEND_VIEWS` message containing the data-structure for the views.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvictorb%2Fpine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvictorb%2Fpine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvictorb%2Fpine/lists"}