{"id":38421264,"url":"https://github.com/alveusgg/extension","last_synced_at":"2026-01-17T04:14:41.864Z","repository":{"id":46823119,"uuid":"454882535","full_name":"alveusgg/extension","owner":"alveusgg","description":"Twitch extension for Alveus Sanctuary, allowing stream viewers to learn more about the ambassadors at the sanctuary.","archived":false,"fork":false,"pushed_at":"2026-01-14T02:49:07.000Z","size":223622,"stargazers_count":105,"open_issues_count":8,"forks_count":34,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-01-14T05:51:16.707Z","etag":null,"topics":["alveus","alveus-animals","alveus-sanctuary","ambassadors","animals","hacktoberfest","maya","maya-higa","twitch","twitch-extension"],"latest_commit_sha":null,"homepage":"https://www.twitch.tv/AlveusSanctuary","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alveusgg.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":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":null,"patreon":null,"open_collective":null,"ko_fi":"abdullahmorrison","tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2022-02-02T18:03:06.000Z","updated_at":"2026-01-14T02:49:09.000Z","dependencies_parsed_at":"2023-10-11T00:53:48.419Z","dependency_job_id":"c6fc6bda-8d9d-4796-a1a7-e0021561a56e","html_url":"https://github.com/alveusgg/extension","commit_stats":null,"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"purl":"pkg:github/alveusgg/extension","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alveusgg%2Fextension","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alveusgg%2Fextension/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alveusgg%2Fextension/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alveusgg%2Fextension/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alveusgg","download_url":"https://codeload.github.com/alveusgg/extension/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alveusgg%2Fextension/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28494569,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T02:39:23.645Z","status":"ssl_error","status_checked_at":"2026-01-17T02:34:19.649Z","response_time":85,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["alveus","alveus-animals","alveus-sanctuary","ambassadors","animals","hacktoberfest","maya","maya-higa","twitch","twitch-extension"],"created_at":"2026-01-17T04:14:38.900Z","updated_at":"2026-01-17T04:14:41.847Z","avatar_url":"https://github.com/alveusgg.png","language":"TypeScript","funding_links":["https://ko-fi.com/abdullahmorrison"],"categories":[],"sub_categories":[],"readme":"# The Alveus Twitch Extension\n\nTwitch extension for [Alveus Sanctuary](https://www.alveussanctuary.org), allowing stream viewers to learn more about the ambassadors at the sanctuary.\n\n## Demo\n\n### Overlay\n\nhttps://user-images.githubusercontent.com/49528805/229294979-1cf91fc2-420a-43ec-95c4-78c06d4ec99d.mp4\n\n### Panel\n\nhttps://user-images.githubusercontent.com/49528805/229295136-675313d2-54e4-4758-a42c-76961c4d2e66.mp4\n\n### Mobile\n\nhttps://user-images.githubusercontent.com/49528805/229295376-6490d0a5-5f01-456b-8509-6e551ce82f1c.mp4\n\n## Local Set Up\n\n1. Install Node.js (see `engines` in `package.json` for the required versions), or use `fnm`/`nvm` to install the correct version of Node.js, and use `corepack enable` to use PNPM.\n2. Authenticate with the GitHub Package Registry: `npm login --auth-type=legacy --registry=https://npm.pkg.github.com`\n   1. Use your GitHub username (lowercase) as the username when prompted\n   2. Create a [GitHub personal access token (classic)](https://github.com/settings/tokens/new) with the `read:packages` scope and use it as the password when prompted\n3. Install dependencies for the project with `pnpm install --frozen-lockfile`\n4. Head up to https://dev.twitch.tv/console/extensions/create and create a new extension.\n   You will need to create a new version: Select `Panel`, `Mobile` and `Video - Fullscreen` for the extension type. Leave all other settings as they are.\n5. Copy the `.env.sample` file to `.env` (which sets `REACT_APP_CHAT_COMMANDS_PRIVILEGED_USERS` and `REACT_APP_DEFAULT_CHANNEL_NAMES`)\n6. Copy the `.env.development.sample` file to `.env.development`. You may add a channel and user to test chat commands here (e.g. `REACT_APP_CHAT_COMMANDS_TEST_CHANNEL=testuser` and `REACT_APP_CHAT_COMMANDS_PRIVILEGED_USERS=testuser`)\n7. Start the development server with `pnpm dev`\n\nIf you're using VSCode, add `\"typescript.tsdk\": \"node_modules/typescript/lib\"` to `.vscode/settings.json` to ensure you're using the correct TypeScript version.\n\nThere are two ways to run the extension. You can either add it to a channel on Twitch, or access the web pages for the panel/overlay directly.\n\n### Running via Twitch\n\nIf you're using Chrome, enable `allow invalid certificates for resources loaded from localhost`: [`chrome://flags/#allow-insecure-localhost`](chrome://flags/#allow-insecure-localhost).\nIf using Firefox, once you have started the development server, you will want to navigate to [`https://localhost:8080`](https://localhost:8080), click advanced and select accept the risk.\n\nTo test the overlay directly on Twitch, you will need to be live on Twitch with the extension installed.\nThe panel for the extension can be tested on Twitch while offline, as this is displayed on the channel page.\n\nUnder the `Status` tab of the extension version, scroll to the bottom and click on `View on Twitch and Install`. Install the extension on your channel and activate it.\n\nIf you are wanting to test the overlay, activate it for your overlay slot. Once activated, started broadcasting and the extension should be visible.\nIf you are testing the panel, make sure to activate the extension for a panel slot. You should then be able to see in on the channel about page.\n\nIf you want to use an alternate account, add the account to `Testing Account Allowlist` under the `Access` tab of the extension version and install the extension on that account.\n\nNeed a quick script to broadcast a test livestream? `curl` + `ffmpeg` have you covered:\n\n```bash\n#!/bin/bash\n\nKEY=\"your_stream_key_here\"\n\nURL=$(curl -sS \"https://ingest.twitch.tv/ingests\" \\\n  | jq .ingests\\[0].url_template -r \\\n  | sed \"s/{stream_key}/$KEY/\")\n\n# Thanks to https://github.com/BarryCarlyon/twitch_misc/blob/main/extensions/test_stream/generic.sh\nffmpeg -re \\\n  -f lavfi -i testsrc2=size=960x540 \\\n  -f lavfi -i aevalsrc=\"sin(0*2*PI*t)\" \\\n  -vcodec libx264 \\\n  -r 30 -g 30 \\\n  -preset fast -vb 1000k -pix_fmt rgb24 \\\n  -pix_fmt yuv420p \\\n  -f flv \\\n  $URL\n```\n\n### Running without Twitch\n\nIf you just want to test out the overlay, or the panel, locally without Twitch, you can do so by directly opening the pages in a browser. After all, Twitch overlays and panels are just embedded web apps.\n\nThe panel is available at [localhost:8080/panel.html](https://localhost:8080/panel.html) and the overlay is available at [localhost:8080/video_overlay.html](https://localhost:8080/video_overlay.html) while the development server is running.\n\n## Chatbot Commands\n\n`![ambassador]`: displays the card of the corresponding ambassador\n\n- Note: `[ambassador]` is the first name of any ambassador (Ex: !nilla = Nilla Wafer, !snork = Snork)\n\n`!welcome`: displays the Alveus introduction section\n\n`!refresh`: updates the overlay and panel with the latest ambassador data\n\n- Note: Only `REACT_APP_CHAT_COMMANDS_PRIVILEGED_USERS` have permission to run this command\n\n## Contribute\n\nContributions are always welcome! If you have any ideas, suggestions, fixes, feel free to contribute. Make sure to discuss what you plan to work on either as an issue or in the discussion page. You can also throw in any ideas at all in the discussion page. You can contribute to the codebase by going through the following steps:\n\n1. Fork this repo\n2. Create a branch: `git checkout -b youruserame/your-feature`\n3. Make some changes\n4. Test your changes\n5. Push your branch and open a Pull Request\n\n\u003cb\u003e\\*Note:\u003c/b\u003e All contributions must be possible for all displays (Overlay \u0026 Panel) and responsive to their different sizes (including mobile).\n\n## User Data\n\nWhen using the extension, the extension will create an anonymous connection to the current Twitch channel's chat, as well as a few other Alveus-related Twitch channels. This is to allow the extension to listen for commands run by moderators to trigger popups in the overlay. The extension does not store any messages from chat.\n\nWhen using the extension, it will create a local storage entry in your browser to store the last section of the overlay that you accessed, and any preferences you set (such as disabling the mod-triggered popups). This is to allow the extension to remember your preferences between sessions. The data stored in local storage is not shared with anyone and does not include any personal information.\n\nAs a moderator, you can grant the extension access to your identity. This gives the extension information about your Twitch account, including your role in the current Twitch channel chat. This is used to determine if you are a moderator or broadcaster, and if so, shows you the chat commands in the extension to trigger the popups. The extension does not store any information about your Twitch account.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falveusgg%2Fextension","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falveusgg%2Fextension","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falveusgg%2Fextension/lists"}