{"id":15944157,"url":"https://github.com/dimasmith/together","last_synced_at":"2026-01-12T07:28:37.488Z","repository":{"id":57108496,"uuid":"41937785","full_name":"dimasmith/together","owner":"dimasmith","description":null,"archived":false,"fork":false,"pushed_at":"2015-10-21T16:45:15.000Z","size":469,"stargazers_count":0,"open_issues_count":8,"forks_count":1,"subscribers_count":2,"default_branch":"dev","last_synced_at":"2025-09-25T21:49:50.204Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/dimasmith.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}},"created_at":"2015-09-04T21:07:59.000Z","updated_at":"2015-09-04T21:09:02.000Z","dependencies_parsed_at":"2022-08-21T04:30:33.491Z","dependency_job_id":null,"html_url":"https://github.com/dimasmith/together","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/dimasmith/together","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimasmith%2Ftogether","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimasmith%2Ftogether/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimasmith%2Ftogether/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimasmith%2Ftogether/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dimasmith","download_url":"https://codeload.github.com/dimasmith/together/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dimasmith%2Ftogether/sbom","scorecard":{"id":343225,"data":{"date":"2025-08-11","repo":{"name":"github.com/dimasmith/together","commit":"b196e3b93f0410ff07432b086cf252fc245f429c"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/12 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 24 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T06:27:46.218Z","repository_id":57108496,"created_at":"2025-08-18T06:27:46.218Z","updated_at":"2025-08-18T06:27:46.218Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28336518,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T06:09:07.588Z","status":"ssl_error","status_checked_at":"2026-01-12T06:05:18.301Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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-07T08:21:26.378Z","updated_at":"2026-01-12T07:28:37.475Z","avatar_url":"https://github.com/dimasmith.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.org/dimasmith/together.svg?branch=dev)](https://travis-ci.org/dimasmith/together)\n[![Dependency Status](https://david-dm.org/dimasmith/together.svg)](https://david-dm.org/dimasmith/together)\n[![devDependency Status](https://david-dm.org/dimasmith/together/dev-status.svg)](https://david-dm.org/dimasmith/together#info=devDependencies)\n\nTogether\n========\n\nApplication for simultaneous photo viewing.\n\nAll actions made by any of viewers (like going to next photo or open photo list page)\nare immediately duplicated in browsers of all other viewers.\n\n# Using\n\n## Motivation\n\nOnce a friend of mine vent to long vacation. He wanted to share some photos and comment on some of those.\nWe started a skype conversation with screen sharing but video quality was pretty bad.\nThis application allows to show all photos from directory and synchronize actions of viewers.\nSay when friend goes to next photo the same photo is shown to me. So he can tell me about that photo on\nskype without having issues with video quality. I can also go to any photo that is interesting for me\nand ask him to tell about that one. My actions will be synchronized to him as well.\n\nPlease note I'm not considering this as a serious application, more like playground to learn\njavascript and node.js.\n\n## Installation\n\n`npm install @dimasmith/together`\n\n## Running\n\nCommand line client is provided for package.\nNote that in order to serve properly you need to run\nit either from installed module directory\n(`node_modules/@dimasmith/together`) or specify this directory\nas `--cwd` parameter. This annoyance is scheduled to be fixed in upcoming versions.\n\nAssuming you are in `node_modules/@dimasmith/together`. Start application with\n```bash\ntogether \u003cpath-to-dir-with-photos\u003e\n```\nOpen [http://localhost:8000](http://localhost:8000)\n\nYou may change server port using `-p` parameter.\n\nUse `together -h` to see all configuration options.\n\n# Development\n\nApplication consists of two bundles. Client bundle with all code served in browser and server\nside code that provides serving photos and communication.\n\nBundles are built with webpack.\n\n* client bundle -\u003e `dist/client.bundle.js`\n* server bundle -\u003e `cli.js`\n\nBoth bundles are using some common code placed in `common` directory.\n\n## Notable libraries and approaches\n\nClient side utilize [redux](https://www.npmjs.com/package/redux) for state management.\nView layer is made with [ampersand](http://ampersandjs.com/).\n[sass](http://sass-lang.com/) and [jade](http://jade-lang.com/) used for\nstyling and templating respectively. CSS is intended to follow [BEM](https://en.bem.info/).\n\n[Express](http://expressjs.com/) used on server side covered with webpack dev server\nfor development mode.\n\nClient-server communication made using websockets backed by [Socket.io](http://socket.io/)\n\n## Code layout\n\n* `client` -\u003e all client code that is delivered into browser\n* `server` -\u003e server side code compiled into cli runner\n* `common` -\u003e packages used by both client and server. Mostly communication related\n* `assets` -\u003e for static assets like images\n\n## Code style\n\nCode style is checked with [eslint](http://eslint.org) using preset for\n[Airbnb](https://github.com/airbnb/javascript) code style.\n\nEslint also does static analysis of code.\n\nAll code is transpilled using [babel](http://babeljs.io/). ES2015 features used.\n\n## Tests\n\nSeveral test are available. Using [mocha](https://mochajs.org/) + [chai](http://chaijs.com/)\nUse `npm test` to run it.\n\n## Preparation\n\nClone repository using `git clone https://github.com/dimasmith/together.git`\n\nInstall all necessary modules with `npm install`\n\n## Add sample photos\n\nCreate directory `photos` inside source (it is added to `.gitignore`).\nAdd some photos you want to work with.\n\nYou may also create symlink instead of placing directory.\n\n## Starting\n\n`npm start` will start server wrapped by [webpack dev server](http://webpack.github.io/docs/webpack-dev-server.html).\nDev server is set to recompile client code once you changed any file.\n\nDev server is accessible on [http://localhost:9000](http://localhost:9000) (you can change\nport by setting `DEV_SERVER_PORT` environment variable)\n\nNormal server is available on [http://localhost:8000](http://localhost:8000)\n\n## Compilation\n\nCode compiled for production is packed in slightly different manner. Most notable things\nare minification of images and uglifying javascripts so bundle is much smaller.\n\nTo check compiled code you need to build client bundle using `npm run-script compile`.\nThen start your development server as usual with `npm start` and go to\n[http://localhost:8000](http://localhost:8000) It will serve precompiled scripts.\nJust the same way command line client will do.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimasmith%2Ftogether","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdimasmith%2Ftogether","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdimasmith%2Ftogether/lists"}