{"id":13573994,"url":"https://github.com/j4p3/strimpack","last_synced_at":"2025-10-29T13:54:10.278Z","repository":{"id":147063270,"uuid":"131904936","full_name":"j4p3/strimpack","owner":"j4p3","description":"A platform for livestreamers to make a home for their audience.","archived":false,"fork":false,"pushed_at":"2018-05-14T15:23:02.000Z","size":12,"stargazers_count":370,"open_issues_count":0,"forks_count":21,"subscribers_count":9,"default_branch":"master","last_synced_at":"2024-11-05T08:39:28.298Z","etag":null,"topics":["community","create-react-app","discourse","docker","docker-compose","express","react","streaming"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/j4p3.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-05-02T20:54:50.000Z","updated_at":"2024-03-07T23:21:43.000Z","dependencies_parsed_at":null,"dependency_job_id":"84df19b6-6cf1-4d43-a44a-eb16cc30ac2b","html_url":"https://github.com/j4p3/strimpack","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/j4p3%2Fstrimpack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/j4p3%2Fstrimpack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/j4p3%2Fstrimpack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/j4p3%2Fstrimpack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/j4p3","download_url":"https://codeload.github.com/j4p3/strimpack/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247184913,"owners_count":20897854,"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":["community","create-react-app","discourse","docker","docker-compose","express","react","streaming"],"created_at":"2024-08-01T15:00:44.792Z","updated_at":"2025-10-29T13:54:05.231Z","avatar_url":"https://github.com/j4p3.png","language":null,"funding_links":[],"categories":["Others"],"sub_categories":[],"readme":"# Strimpack\n\n*A tool for livestreamers to set up their own site, chat, subscription system, and forum.*\n\n![how fancy](https://s3.amazonaws.com/bonner.jp/strimpack_large.png)\n\n## [live demo](http://strimpack.unqualified.io/)\n\nThis is the central orchestration repo for the project. The applications that are doing the actual work:\n\n* [strimpack-server](https://github.com/j4p3/strimpack-server) webserver producing main website, handling authentication, payments, and client application prerendering\n*  [strimchat](https://github.com/j4p3/strimchat) chatserver for client application\n*  [strimpack web client](https://github.com/j4p3/strimpack-web-client) react app for main site\n\nThe application also uses other open source projects:\n\n*  [discourse](https://github.com/discourse/discourse) forum application\n*  redis\n*  postgresql\n\n\n## usage\n\n**Can I configure this to match the way I want it to be?**\n\nSure. So far you can adjust the following items to suit you:\n\n* Stream title\n* Primary theme color\n* Stream logo\n* Subscription levels\n* Subscription prices\n* Stream location\n\nAnd Discourse, the software powering the forum, has a whole slew of configuration options, too.\n\n**Who made this and why?**\n\n[I made this for fun](https://bonner.jp/work), and because livestreaming seems to be getting popular but it's difficult to stand up a page for it on your own. And because the livestreaming platforms take an egregious chunk of the money people tip streamers, even after they've ground their way to \"partnered\" status. And to learn a bit about Docker Compose while I'm interviewing for jobs. Good grief, interviews are terrible.\n\n**Given that this relies on Twitch's streaming engine, is there anything under the hood that's interesting from a technical perspective?**\n\nThere's a nice separation of server and client in that they share a volume created by docker-compose, rather than being in the same repo. (The server needs access to the client app so that it can render it before delivering the page.) I hate having a frontend single-page-app in the same repo as the server, and that was the solution I found.\n\nIt was also neat investigating and discarding all the options out there for chat servers - I ended up rolling my own because I preferred using websockets, not polling/BOSH.\n\nI was very impressed with React's (finally official) Context API. If you want, you can do a lot of the same state management that you would otherwise require something like Redux, complete with predefined functions to mutate state based on user actions. But as the creators of Redux [have already pointed out](https://medium.com/@dan_abramov/you-might-not-need-redux-be46360cf367), many of the people using Redux don't actually need it - the indirection and the time-travel in particular solve a very broad scope of problems.\n\nIn general, though, the most interesting part of the concept is the idea of an open-source anti-platform as an alternative to big centralized marketplace-style platforms. With a bit of work on the Docker side and some opinionated hosting/DNS choices, this tool could be deployable with a credit card and a click. If you wanted to have the social/shared audience benefits of a platform, you could publish your instance and have a federated network of streamers running on the anti-platform.\n\n**Can I use this if I'm not a programmer?**\n\nSure, but you'll need to be able to follow the steps below:\n\n### setup instructions\n\n1. Get a server. Not a tiny one.\n2. Point a domain name at it. Then point `chat.\u003cyour domain\u003e` and `forum.\u003cyour domain\u003e` at it, too.\n3. SSH into your server.\n4. Install `docker`, `docker-compose`, and `git`.\n5. `git clone https://github.com/j4p3/strimpack-container.git`\n6. `cd strimpack-container`\n7. Create an environment file to suit your application (default will read from `env.local` - details below)\n8. `docker-compose up -d`\n9. Wait a while. You should be able to visit the stream at `\u003cyour domain\u003e` within a minute or two, but the forum will take several minutes to install.\n10. You've got yourself a community website.\n\nIf you'd like to set up something like this, but don't think you'll be able to follow these instructions, feel free to reach out and I'll see if I can help.\n\n### items to note\n\nThe application has lots of external dependencies. In particular, you need:\n\n* Email - valid credentials for sending email via SMTP\n* Stripe - a Stripe account with some Subscription products in it\n* Twitch - a Twitch account with an application registered on their developer console.\n\n### environment variables\n\n```\nSTREAM_TITLE\nSTREAM_CHANNEL\nTHEME_COLOR\n\nTWITCH_CLIENT_ID\nTWITCH_CLIENT_SECRET\nTWITCH_CALLBACK_URI\n\nSTRIPE_PUBLISHABLE_KEY\nSTRIPE_SECRET_KEY\n\nVIRTUAL_HOST\nSTRIMPACK_HOST\nSTRIMCHAT_HOST\nFORUM_HOST\n\nNODE_ENV\n\nSTRIMPACK_PORT\nSTRIMPACK_SESSION_SECRET\n\nSTRIMPACK_DB_USER\nSTRIMPACK_DB_PASSWORD\nSTRIMPACK_DB_NAME\nSTRIMPACK_DB_HOST\nSTRIMPACK_DB_PORT\n\nSTRIMCHAT_PORT\n\nPOSTGRESQL_PASSWORD\n\nDISCOURSE_USERNAME\nDISCOURSE_PASSWORD\nDISCOURSE_EMAIL\nDISCOURSE_SITENAME\nPOSTGRESQL_HOST\nPOSTGRESQL_PORT_NUMBER\nPOSTGRESQL_ROOT_USER\nPOSTGRESQL_ROOT_PASSWORD\nPOSTGRESQL_CLIENT_CREATE_DATABASE_NAME\nPOSTGRESQL_CLIENT_CREATE_DATABASE_USERNAME\nPOSTGRESQL_CLIENT_CREATE_DATABASE_PASSWORD\nDISCOURSE_POSTGRESQL_USERNAME\nDISCOURSE_POSTGRESQL_PASSWORD\nDISCOURSE_POSTGRESQL_NAME\nREDIS_PASSWORD\n\nSMTP_HOST\nSMTP_PORT\nSMTP_USER\nSMTP_PASSWORD\n\nDISCOURSE_HOST\nDISCOURSE_PORT\n```\n\n### help\n\nShoot me a message. This was a bit of a learning project, I'm happy to help you get something up and running. You can find me at [bonner.jp](https://bonner.jp).\n\n### contributing\n\nThere are a million and one things to do here. Contributions are welcome.\n\n*MIT license.*","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fj4p3%2Fstrimpack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fj4p3%2Fstrimpack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fj4p3%2Fstrimpack/lists"}