{"id":30578397,"url":"https://github.com/ifvictr/prox","last_synced_at":"2025-08-29T03:13:40.691Z","repository":{"id":42984370,"uuid":"212208759","full_name":"ifvictr/prox","owner":"ifvictr","description":"🙈 Share anonymous confessions in Slack","archived":false,"fork":false,"pushed_at":"2023-02-03T09:25:20.000Z","size":1969,"stargazers_count":28,"open_issues_count":13,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2023-02-27T17:22:44.585Z","etag":null,"topics":["anonymity","slack"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/ifvictr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-10-01T22:09:00.000Z","updated_at":"2021-11-20T01:25:25.000Z","dependencies_parsed_at":"2023-02-04T06:45:26.206Z","dependency_job_id":null,"html_url":"https://github.com/ifvictr/prox","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"purl":"pkg:github/ifvictr/prox","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifvictr%2Fprox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifvictr%2Fprox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifvictr%2Fprox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifvictr%2Fprox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ifvictr","download_url":"https://codeload.github.com/ifvictr/prox/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ifvictr%2Fprox/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272618237,"owners_count":24965406,"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","status":"online","status_checked_at":"2025-08-29T02:00:10.610Z","response_time":87,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["anonymity","slack"],"created_at":"2025-08-29T03:13:39.672Z","updated_at":"2025-08-29T03:13:40.684Z","avatar_url":"https://github.com/ifvictr.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003cimg alt=\"Prox\" width=\"128\" src=\"https://files.ifvictr.com/2020/04/prox.png\" /\u003e\n\u003c/p\u003e\n\u003ch1 align=\"center\"\u003eProx\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n    \u003ci\u003eShare anonymous confessions in Slack.\u003c/i\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003cimg alt=\"Prox DM example\" width=\"1000\" src=\"https://files.ifvictr.com/2020/08/prox_dm.png\" /\u003e\n    \u003cimg alt=\"Prox submission review channel example\" width=\"600\" src=\"https://files.ifvictr.com/2020/08/prox_review.png\" /\u003e\n\u003c/p\u003e\n\n## Deploy\n\n[![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy)\n\n## Setup\n\nProx comprises of three components:\n\n1. The web server for receiving and responding to event payloads from Slack\n2. A **MongoDB database** for saving the current post number, submitted posts, user pseudonyms, etc.\n3. The Slack app itself\n\n### Environment variables\n\nHere are all the variables you need to set up on the server, with hints.\n\n```bash\n# Port to run the server on\nPORT=3000\n\nDATABASE_URL=mongodb://…\n\n# App config. Obtained from the \"Basic Information\" page of your app.\nSLACK_BOT_TOKEN=xoxb-…\nSLACK_SIGNING_SECRET=…\n\n# Slack channels where the app should post to. The review and stream channels are highly recommended to be private channels.\nSLACK_POST_CHANNEL_ID=CXXXXXXXX\nSLACK_REVIEW_CHANNEL_ID=GXXXXXXXX\nSLACK_STREAM_CHANNEL_ID=GXXXXXXXX\n```\n\n### Starting the server\n\n_This section is only relevent to you if you’ve decided to run Prox on a platform other than Heroku._\n\n```bash\ngit clone https://github.com/ifvictr/prox\ncd prox\n\n# Install dependencies\nyarn\n\n# Start Prox in production! This will build the source files and then run them.\nyarn start\n# Or, if you need to run it in development mode instead.\nyarn dev\n```\n\n### Creating the Slack app\n\nFor Prox to work, you’ll need to [register a Slack app](https://api.slack.com/apps) with the appropriate OAuth permissions, event subscriptions, and commands.\n\n#### Interactivity \u0026 Shortcuts\n\nFor the **Request URL** under the **Interactivity** section, enter `http://\u003cYOUR DOMAIN HERE\u003e/slack/events`. This will be used for the app’s buttons.\n\nTo create a shortcut for sending anonymous replies, click **Create New Shortcut** under the **Shortcuts** section. The shortcut should appear **On messages**. Fill out the **Name** (e.g. Send anonymous reply) and **Description** (e.g. Reply to a post anonymously) fields. Enter `reply_send` in the **Callback ID** field.\n\n#### Slash Commands\n\nThe following commands are needed. Enter the same request URL you used in the previous section.\n\n- `/prox`: Learn how to use Prox\n\n#### OAuth \u0026 Permissions\n\nInstall the Slack app to your Slack workspace first.\n\nThe following bot token scopes are required:\n\n- `channels:history`: Used for the 'Send anonymous reply' shortcut.\n- `channels:read`: Used for logging movement events.\n- `chat:write`: Used for sending messages.\n- `chat:write.customize`: Used for sending anonymous replies with pseudonyms and icons that distinguish different repliers.\n- `commands`: Used for `/prox`.\n- `groups:read`: Used for logging movement events.\n- `im:history`: Used for receiving submissions via DMs from users.\n- `im:write`: Used for starting DM channels with users, which can then be used to send anonymous reaction prompts when needed.\n- `reactions:write`: Used for adding anonymous reactions.\n\n#### Event Subscriptions\n\nSubscribe to the following bot events:\n\n- `app_home_opened`\n- `member_joined_channel`\n- `member_left_channel`\n- `message.im`\n\nThe request URL is also the same here.\n\nAfter you’ve followed all the above steps, you should see something like this in the console:\n\n```bash\nStarting Prox…\nListening on port 3000\n```\n\n## License\n\n[MIT License](LICENSE.txt)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fifvictr%2Fprox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fifvictr%2Fprox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fifvictr%2Fprox/lists"}