{"id":13601332,"url":"https://github.com/antoinejaussoin/retro-board","last_synced_at":"2025-10-25T05:03:50.676Z","repository":{"id":6235937,"uuid":"53737182","full_name":"antoinejaussoin/retro-board","owner":"antoinejaussoin","description":"Agile Retrospective Board","archived":false,"fork":false,"pushed_at":"2024-11-07T19:47:22.000Z","size":92834,"stargazers_count":793,"open_issues_count":18,"forks_count":195,"subscribers_count":27,"default_branch":"develop","last_synced_at":"2025-04-13T19:49:56.542Z","etag":null,"topics":["agile","ai","arm","chat-gpt","chatgpt","docker","docker-compose","hooks","internationalisation","multiarch","multilingual","postgres","react","reactjs","retrospective","socket-io","translation","typescript","vite","yarn"],"latest_commit_sha":null,"homepage":"https://www.retrospected.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/antoinejaussoin.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":"2016-03-12T14:59:31.000Z","updated_at":"2025-03-27T14:59:38.000Z","dependencies_parsed_at":"2024-09-14T00:16:49.922Z","dependency_job_id":"05848bbf-1463-45cc-9738-4387b217142d","html_url":"https://github.com/antoinejaussoin/retro-board","commit_stats":{"total_commits":871,"total_committers":31,"mean_commits":"28.096774193548388","dds":0.5797933409873708,"last_synced_commit":"581b6301bfeba5090a56f54b657cebd48a0ed2e5"},"previous_names":[],"tags_count":103,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antoinejaussoin%2Fretro-board","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antoinejaussoin%2Fretro-board/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antoinejaussoin%2Fretro-board/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/antoinejaussoin%2Fretro-board/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/antoinejaussoin","download_url":"https://codeload.github.com/antoinejaussoin/retro-board/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254243358,"owners_count":22038046,"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":["agile","ai","arm","chat-gpt","chatgpt","docker","docker-compose","hooks","internationalisation","multiarch","multilingual","postgres","react","reactjs","retrospective","socket-io","translation","typescript","vite","yarn"],"created_at":"2024-08-01T18:01:00.659Z","updated_at":"2025-10-25T05:03:50.594Z","avatar_url":"https://github.com/antoinejaussoin.png","language":"TypeScript","funding_links":[],"categories":["🤖 AI \u0026 Machine Learning","ChatGPT-based applications","typescript","chatgpt","ai"],"sub_categories":["Other sdk/libraries"],"readme":"# Retrospected\n\n![GitHub package.json version](https://img.shields.io/github/package-json/v/antoinejaussoin/retro-board)\n[![Master Build](https://github.com/antoinejaussoin/retro-board/actions/workflows/master.yml/badge.svg)](https://github.com/antoinejaussoin/retro-board/actions/workflows/master.yml)\n[![Canary Build](https://github.com/antoinejaussoin/retro-board/actions/workflows/canary.yml/badge.svg)](https://github.com/antoinejaussoin/retro-board/actions/workflows/canary.yml)\n[![Alpha Build](https://github.com/antoinejaussoin/retro-board/actions/workflows/alpha.yml/badge.svg)](https://github.com/antoinejaussoin/retro-board/actions/workflows/alpha.yml)\n\n[Retrospected](http://www.retrospected.com) is a free AI-powered Real-time Agile Retrospective Board for engineering teams.\n\n\u0026nbsp;\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./content/logos/react.png\" height=\"65\"\u003e\n  \u0026nbsp;\n  \u003cimg src=\"./content/logos/ts.png\" height=\"65\"\u003e\n  \u0026nbsp;\n  \u003cimg src=\"./content/logos/docker.png\" height=\"65\"\u003e\n  \u0026nbsp;\n  \u003cimg src=\"./content/logos/k8s.svg\" height=\"65\"\u003e\n  \u0026nbsp;\n  \u003cimg src=\"./content/logos/socketio.png\" height=\"65\"\u003e\n  \u0026nbsp;\n  \u003cimg src=\"./content/logos/vite.png\" height=\"65\"\u003e\n  \u0026nbsp;\n  \u003cimg src=\"./content/logos/chatgpt.png\" height=\"65\"\u003e\n\u003c/p\u003e\n\n![Retrospected.com](/content/screenshot-v5.png?raw=true 'Retrospected.com')\n\n![Retrospected.com](/content/full-color.png?raw=true 'Retrospected.com')\n\nThis project is both an actual product, and also a technology demo using the latest and greatest JavaScript/TypeScript libraries of the month.\n\nIt features the following technologies:\n\n- [React 18](https://github.com/facebook/react)\n- [React Hooks](https://reactjs.org/docs/hooks-intro.html)\n- [React Router 6](https://reactrouter.com/)\n- [TypeScript 4.9](https://www.typescriptlang.org/)\n- [Recoil.js](https://recoiljs.org), as the global state management library\n- [Socket IO](http://socket.io)\n- [Vite](https://vitejs.dev/), as the bundler\n- [MUI 5](https://mui.com) for our components (previously known as Material-UI)\n- [Material UI design](https://www.google.com/design/spec/material-design/introduction.html)\n- [Emotion](https://emotion.sh/docs/introduction)\n- [Multilingual](https://stackoverflow.com/questions/33413880/react-redux-and-multilingual-internationalization-apps-architecture) / Internationalization\n- [Postgres](https://www.postgresql.org/)\n- [Node 18 (LTS)](https://nodejs.org/en/)\n- [Passport](http://www.passportjs.org/) for seamless OAuth authentication with:\n  - Google\n  - Twitter\n  - GitHub\n  - Slack\n  - Microsoft\n  - Okta\n- [Giphy](https://giphy.com/) because adding a bit of fun to your retro can't hurt!\n- [React Beautiful DND](https://github.com/atlassian/react-beautiful-dnd) to allow re-ordering and grouping by drag-and-drop\n- [Vitest](https://vitest.dev), for Unit Testing\n- [React Testing Library](https://testing-library.com/docs/react-testing-library/intro), for Integration Tests\n- [Yarn](https://yarnpkg.com/en/), replacing NPM\n- [Docker](https://docker.com), for easy deployment\n- [Kubernetes](https://kubernetes.io/), to scale Retrospected for its 10M+ users (not)\n- [GitHub Actions](https://github.com/features/actions), for Continuous Integration and Deployment (CI/CD)\n- [Multi-Architecture](https://github.com/docker/buildx/), for automatic compatibility with ARM-based servers\n- [Stripe](https://stripe.com/), for our payment solution\n- [Docusaurus](http://docusaurus.io/), for our documentation\n- [NextJS](https://nextjs.org/), for our landing page\n- [ChatGPT](https://openai.com/blog/chatgpt), powering our AI agile coach\n- [Biome](https://biomejs.dev), for linting and formatting, all in one beautiful package\n\nPrevious versions featured the following libraries:\n\n- ~~[Webpack 5](https://github.com/webpack/webpack) (See older versions for Webpack 1, 2 and 3)~~\n- ~~[Create React App 5](https://create-react-app.dev/docs/getting-started/)~~\n- ~~[Jest](https://facebook.github.io/jest) for Unit Testing~~\n- ~~[Redux](https://github.com/reactjs/redux)~~\n- ~~[CSS Modules](https://github.com/css-modules/css-modules)~~\n- ~~[redux-saga](https://github.com/yelouafi/redux-saga)~~\n- ~~[reselect](https://github.com/reactjs/reselect)~~\n- ~~[ESLint](http://eslint.org/) for JS and JSX~~\n\n## Documentation 📖\n\nYou can browse the documentation [here](https://docs.retrospected.com).\n\n## Using Retrospected 🚀\n\nYou have two ways of running Retrospected:\n\n- Using the public version, at [www.retrospected.com](https://app.retrospected.com)\n- Host Retrospected [on your premises](https://docs.retrospected.com/docs/self-hosting/quick-start)\n\n## Want to host Retrospected on your premises? 🖥\n\nYou can start an instance of Retrospected in 5 minutes by following the [quick-start guide](https://docs.retrospected.com/docs/self-hosting/quick-start).\n\nThis will run a demo version, which you can turn into a fully licenced version by purchasing a [Self Hosted licence](https://app.retrospected.com/subscribe?product=self-hosted).\n\n## Versions History\n\n### Version 5.5.2\n\n- Fix integration tests by adding a health check so that the frontend does not start before the backend is ready\n- Remove Trivy from the CI pipeline, as it was just not working at all\n\n### Version 5.5.1\n\n- Hardcode a licence for the Ministère de l'intérieur (France) for their self-hosted instance\n\n### Version 5.5.0\n\n- Migrate from ESLint and Pretter to Biome, a single tool for linting, formatting and more\n- Upgrade dependencies across the board\n- Fix an issue with running the backend in development mode with ts-node and recent versions of Node\n\n### Version 5.4.1\n\n- Add the ability to remove the Cookie Banner (GDPR) on Self-Hosted instances (which is now the case by default)\n- Upgrade dependencies (frontend)\n\n### Version 5.4.0\n\n- Add the concept of a moderator, so the person creating the retro is not necessarily the person moderating it.\n- Upgrade the database to Postgres 16 (latest version)\n- Allow finer-grained timers.\n- Fix an issue with the left-hand-side panel layout (👏 Thanks to [@ruandev](https://github.com/ruandev) for the fix)\n- SEO optimizations\n\n### Version 5.3.1 (hotfix)\n\n- 🐛 Adding a group was not working in the previous version. This is now fixed.\n\n### Version 5.3.0\n\n- [⭐️ Self-Hosting] new features:\n  - Option to disable data deletion (GDPR)\n  - Option to disable \"Show Author\" globally\n- New retrospective options:\n  - Option to restrict editing the title of a session to the moderator\n  - Option to restrict ordering and grouping to the moderator\n- When accessing a private session that you don't have access to, it will now show the name of the moderator.\n- Search functionality has been improved: it will now only show matching cards\n- 🐛 Bug fix: when there are too many users connected, the \"I'm ready button\" would become hidden. This is now fixed.\n- The Agile Coach is now using Chat GPT 4, which is much more powerful\n- A new explanatory video has been added to the marketing website, and the app itself.\n- ⏫ Upgrading dependencies\n\n### Version 5.2.2 (hotfix)\n\n- Improving documentation\n\n### Version 5.2.1 (hotfix)\n\n- Header logo bug fix\n\n### Version 5.2.0\n\n- [⭐️ Self-Hosting] Adding [white-labelling customisation](https://docs.retrospected.com/docs/self-hosting/white-labelling) options to Self-Hosted instances\n- New page explaining what Self-Hosted is and what it can do for you\n- New callback button on the marketing website\n\n### Version 5.1.2 (hotfix)\n\n- Fix odd bug crashing the side-panel in certain circumstances\n\n### Version 5.1.1\n\n- Add blog pages to the marketing website\n- Rewording on the marketing website\n- Fix an issue on the marketing website where links were not working\n- Add a warning on the app when a user has a pro account but did not add members to their account\n- ⏫ Upgrading dependencies\n\n### Version 5.1.0\n\n- [⭐️ Pro Feature] 🤖 AI Coach, powered by Chat GPT. Limited access to non-paid users.\n- Improve the login workflow\n- Improve the template selection\n- Improve the home page, with search on past retrospectives and nicer button\n- Allow a user to convert their Anonymous account to a regular account and migrate their data\n- Bug fix: fix bug where multiple demos were created\n\n### Version 5.0.3\n\n- 🇩🇪 Adding the German version of our marketing website\n- Self-Hosted: Improve licence checking to avoid being blocking when internet is not available\n- Better support for AD campaigns\n- Redirect regional TLDs (.de, .fr) to .com\n\n### Version 5.0.2\n\n- Simplify management of environment variables on the frontend\n- Add an error 404 page on the marketing site\n- Add Ad-Words tracking on the landing page\n\n### Version 5.0.1\n\n- Add Google Ad-Words tracking on the frontend\n- Fix self-hosted licence checking URL\n\n### Version 5.0.0\n\n- 👩‍💻 Brand new landing page, built with NextJS, separated from the main app. The app is now available at [https://app.retrospected.com](https://app.retrospected.com) and the landing page at [https://www.retrospected.com](https://www.retrospected.com).\n- 🇫🇷 / 🇬🇧 Multilingual support for this new landing age (English and French for now), with auto-detection of the user's language.\n- 🚀 Migration from CRA (create-react-app) to Vite, which is much faster and more flexible.\n- 💯 Migration to Google Analytics 4\n- 🏂 Adding a demo mode: one-click to create a demo session, with a demo account.\n- 🖥️ Improved support for self-hosted licence generation\n\n### Version 4.19.3 (hotfix)\n\n- Fix Pro account list\n\n### Version 4.19.2\n\n- Migration to Google Analytics V4\n\n### Version 4.19.1\n\n- Hotfix: Issue with password account creation\n\n### Version 4.19.0\n\n- Feature: Adding the ability to set a timer for a session. This is optional and can be enabled in the settings. (👏 Thanks to [@Xyaren](https://github.com/Xyaren) for the idea)\n- Feature: Confirm before deleting a post. Avoids accidental deletion of posts. (👏 Thanks to [@vadamovsky](https://github.com/vadamovsky) for the idea)\n- Feature: Allow users to cancel their votes on a specific ticket. This feature can be disabled in the settings. (👏 Thanks to [@Xyaren](https://github.com/Xyaren) for the idea)\n- Feature: Self-Hosted only: Display the number of logged users (👏 Thanks to [@dayByte](https://github.com/dayByte) for the idea)\n- Upgrade to the latest version of TypeORM\n- Convert all backend code to ESM\n- 🇩🇪 German language updates (👏 Thanks to [@dayByte](https://github.com/dayByte) for his contribution)\n\n### Version 4.18.1 (hotfix)\n\n- Reinstates the Enter icon on board input on mobiles (👏 Thanks to Hans K. for the idea)\n\n### Version 4.18.0\n\n- Self-Hosted: Adding the ability to merge users (migrating their data into another user). This is only available for self-hosted instances, through the Administration panel (👏 Thanks to Frank Becker for the idea)\n- ⏫ Upgrade vulnerable dependencies (thanks to dependabot)\n- Fix issues found by code scanning (CodeQL)\n\n### Version 4.17.0\n\n- Adding the ability to set administrators for a Pro subscription. An administrator can add and remove users from the Pro subscription, and be independent from the owner (who manages payments). Useful for resellers.\n- Display the owner of the subscription clearly on the Account Page\n- Upgrading GitHub Actions\n- ⏫ Upgrading dependencies\n\n### Version 4.16.3\n\n- Exposing \"tenant\", \"authorization url\" and \"token url\" for Microsoft OAuth. (👏 Thanks to Frank Becker for the idea)\n- 🇩🇪 German language improvements (👏 Thanks [@Tobias G](https://github.com/Xyaren) for the PR!)\n- ⏫ Upgrading dependencies\n\n### Version 4.16.2\n\n- Fixed a bug where sessions a user participated in did not show up on their homepage. (👏 Thanks a bunch to Frank Becker for reporting the issue and helping find the problem)\n\n### Version 4.16.1\n\n- Fixed a bug where sessions could not be deleted when there was any chat messages (👏 Thanks Florin Bicher for the report)\n- Update icon\n- Better Slack integration\n\n### Version 4.16.0\n\n- Complete overhaul of the translations. Switching to [i18next](https://www.i18next.com). Translated all languages using Machine Learning (via Crowdin)\n- Added translations for the Ukrainian language, and a link to provide help for [Ukraine 🇺🇦](https://www.gov.uk/government/news/ukraine-what-you-can-do-to-help)\n- Fix the empty file download when logging using Google OAuth\n- Upgrade the documentation to the latest version of Docusaurus\n- Add more integration tests, covering password accounts and account deletion\n- Added the language picker in the account page, in addition to the side panel\n\n### Version 4.15.0\n\n- **Self-Hosting**: Improve Admin dashboard for Self-Hosted, allowing the admin to add and delete users\n- **Self-Hosting**: Add an option to allow self-signed certificates for the SMTP server, for sending emails\n- Fix GDPR account deletion, which did not work when the user had any chat messages\n- Upgrade React typings to v18\n- ⏫ Upgrading all frontend dependencies\n\n### Version 4.14.1 (hotfix)\n\n- Remove CSRF code, causing random issues\n\n### Version 4.14.0\n\n- Upgrade to React 18\n- Replace icons by emoji for columns headers (fully customisable)\n- **Self-Hosting**: Adding SMTP support for self-hosting, in addition to SendGrid. 👏 Thanks [@dayByte](https://github.com/dayByte) for the idea. ([#365](https://github.com/antoinejaussoin/retro-board/issues/365)).\n- **Self-Hosting**: Simplification of SendGrid setup, by removing the need of creating email templates. They are now hardcoded.\n- **Self-Hosting**: Improving email templates\n- Improving Text and Markdown exports on Summary Mode. 👏 Thanks Jakob J for the idea. ([#384](https://github.com/antoinejaussoin/retro-board/issues/384)).\n\n### Version 4.13.0\n\n- Adding the option of paying for Retrospected Pro annually, getting one month free in the process\n- Update prices, especially for USD\n- Make the integration tests less brittle by using specific attributes\n- Upgrade (finally!) to React-Router v6.\n- **Self-Hosting**: Allow an administrator to disable Anonymous Logins (to force users to use regular accounts).\n\n### Version 4.12.1 (hotfix)\n\n- Adding users to a Pro Team subscription wasn't working anymore, because of Webpack 5.\n\n### Version 4.12.0\n\n- Changing naming convention for the database. All fields and tables are now `snake_case`.\n- Simplified the configuration of TypeORM, removed the generation of `ormconfig.json`.\n- Added Integration tests using Cypress to catch Docker-specific errors and have some basic smoke tests.\n- Upgrade to `react-scripts` (Create React App) 5.0.0\n- Upgrade jQuery (for the marketing / home page), to 3.6.0 for security reasons\n- ⏫ Upgrading dependencies\n\n### Version 4.11.5 (hotfix)\n\n- Making secure cookies an optional setting, as they won't work unless it is hosted on HTTPS.\n\n### Version 4.11.4 (hotfix)\n\n- Fixing a migration issue when installing from scratch\n\n### Version 4.11.3 (hotfix)\n\n- Adding hardcoded licence for a specific self-hosted client.\n\n### Version 4.11.2 (hotfix)\n\n- Encrypt chat messages on encrypted sessions\n- Ensure long chat messages are displayed across multiple lines\n\n### Version 4.11.1 (hotfix)\n\n- Reverting the migration from react-scripts (create-react-app) 5.0.0 to 4.0.3. The new version includes Webpack 5, which causes issues with polyfills. The issue should be fixed in 5.0.1 which is not available yet.\n\n### Version 4.11.0\n\n- Adding a chat functionality. Send messages to your colleagues without having to use Slack or any other external tool!\n- Add the author (when the \"Show Author\" option is enabled) in the summary panel. 👏 Thanks [@hmlkao](https://github.com/hmlkao) for the idea. ([#336](https://github.com/antoinejaussoin/retro-board/issues/336)).\n- Deprecate Yarn Workspaces to limit dependency sharing\n- ⏫ Upgrade most dependencies for security reasons\n- Upgrade Nginx image to fix security issues\n- Force secure cookies on production\n- Add Trivy vulnerability scanner on CI\n\n### Version 4.10.0\n\n- Add better GDPR compliance, with the right to be forgotten: allows a user to delete all of their data\n- Add the ability for users to signal if they are done with their posts, to help the moderator\n- ⏫ Upgrading dependencies\n\n### Version 4.9.0\n\n- Brand new [documentation website](https://docs.retrospected.com).\n- Migrate all docker images from `antoinejaussoin/retro-board-*` to `retrospected/*`.\n- Allowing Self-Hosted instances to use SendGrid for email recovery\n- 🐛 The Unlimited subscription domain check was not accepting valid domains such as `.ventures` or `.agency`.\n\n### Version 4.8.0\n\n- Upgrade to MUI 5.0 (ex Material UI)\n- Migration from Styled Components to Emotion (for compatibility reasons with MUI)\n- Add hard-coded self-hosting licence mechanism for companies with restricted internet access\n- ⏫ Upgrading dependencies\n\n### Version 4.7.2\n\n- Replacing Google OAuth passport library, to try and reduce Google OAuth errors on production\n- Added a script to make bumping versions easier\n- ⏫ Upgrading dependencies\n\n### Version 4.7.1 (hotfix)\n\n- 🐛 Fixed a bug highlighted by Sentry, where anonymous account without a password would trigger an exception.\n\n### Version 4.7.0\n\n- Account Federation: all accounts with the same email address are now a unique account (sharing sessions, etc.). If you owned multiple accounts with the same email address (for instance one via Google OAuth and another via GitHub), they will be merged into a single account.\n- CSRF protection\n- Significant performance improvements on retrieving past sessions (10x to 100x)\n- Add the ability for anonymous users to delete the boards they created under certain conditions ([#229](https://github.com/antoinejaussoin/retro-board/issues/229)).\n- ⏫ Upgrading dependencies\n\n### Version 4.6.1\n\n- Fixing a typo. 👏 Thanks Chad S.! ([#296](https://github.com/antoinejaussoin/retro-board/issues/296))\n\n### Version 4.6.0\n\n- Support OKTA for authentication\n- Speeding up the migration on production (using transpiled JavaScript instead of TypeScript via ts-node)\n- Making email checks for Pro Team subscriptions case-insensitive. 👏 Thanks Nico! ([#287](https://github.com/antoinejaussoin/retro-board/issues/287))\n\n### Version 4.5.0\n\n- Adding the ability to self-host Retrospected in a very easy way.\n- Change the default order for new posts. New posts are now (by default) appearing at the top of the column. 👏 Thanks [@konrad44](https://github.com/konrad44) for the idea. ([#272](https://github.com/antoinejaussoin/retro-board/issues/272))\n- Upgrade containers from Node 15 to Node 16\n- Spelling fixes on home page cards\n- ⏫ Upgrading dependencies\n\n### Version 4.4.0\n\n- 🐛 Fixed a bug where the export button on the summary page was hidden by the participants bar. 👏 Thanks [@hieuwu](https://github.com/hieuwu) for pointing this out. ([#262](https://github.com/antoinejaussoin/retro-board/issues/262))\n- Added the ability to collapse groups (hidding their content). 👏 Thanks to Sultan S. for the suggestion. ([#263](https://github.com/antoinejaussoin/retro-board/issues/263))\n- Added the possibility for deployements where the backend has a single instance (no replicas) to not use Redis with Socket.IO.\n- Fixed a bug that would trigger the rate limiting when adding posts to groups, triggering a disconnection\n- ⏫ Upgrading dependencies\n\n### Version 4.3.0\n\n- Add the ability to restrict the number of posts per user on a given session (as an option).\n- Rename some folders in the repository to more sensible names\n- Prevent the UI from sending more than 100 Sentry errors, to avoid spamming Sentry.\n\n### Version 4.2.2\n\n- Add a better check for self-hosted licences.\n- ⏫ Upgrading dependencies\n\n### Version 4.2.1\n\n- Search now also works with the author's name, if the author is displayed. 👏 Thanks [@ayxos](https://github.com/ayxos) for pointing this out. ([#202](https://github.com/antoinejaussoin/retro-board/issues/202))\n- Replacing the reducer logic with Recoil for global state management.\n- Adding the possibility of creating a post by clicking on the 'return' icon (⮐) instead of hitting \"Enter\". 👏 Thanks to [@do606](https://github.com/do606) for pointing out that Enter doesn't always seem to work ([#246](https://github.com/antoinejaussoin/retro-board/issues/246)).\n- Re-adding the ability of creating a post by hitting Enter on a numeric pad. 👏 Thanks again to [@do606](https://github.com/do606) for that.\n- ⏫ Upgrading dependencies\n\n### Version 4.2.0\n\n- Add a page explaining how local encryption works\n- Re-introducing rate limiting, both for the REST API and the Websocket connections, in Node and Nginx\n- Reduce the quantity of data sent over WebSockets (for instance, only sending post ID instead of whole post when voting)\n- Reduce the number of SQL queries on the backend, simplifying the backend logic\n- Return an error message to the UI if a Websocket message doesn't succeed\n- Improve websocket reconnection logic\n- Upgrading to Socket.IO 4.0\n- ⏫ Upgrading dependencies\n- 🐛 The participants footer was sometimes hidden by the blur overlay of a post. 👏 Thanks [@Pajinell](https://github.com/Pajinell) for pointing this out. ([#240](https://github.com/antoinejaussoin/retro-board/issues/240))\n- 👏 Thanks to [@cindyccook](https://github.com/cindyccook) for pointing out reliability issues ([#232](https://github.com/antoinejaussoin/retro-board/issues/232)).\n\n### Version 4.1.4 (hotfix)\n\n- 🐛 Language loading issues\n\n### Version 4.1.3 (hotfix)\n\n- 🐛 New users were wrongly added with a quota of 0\n\n### Version 4.1.2 (hotfix)\n\n- 🐛 Fixed a bug with local storage\n\n### Version 4.1.1 (hotfix)\n\n- 🐛 Fixed a bug where Slack OAuth was disabled\n\n### Version 4.1.0\n\n- Adding a 30-day trial\n- Adding Microsoft OAuth 2.0\n- Code splitting: all pages have their own bundle now, for a faster first-load experience\n- Removing all `import React from 'react';` imports, as they are now redundant.\n- Introducing Recoil.js (as an experiment)\n- Limiting the number of posts to 50 for free accounts\n\n### Version 4.0.5\n\n- 🐛 Fixed a bug whereby adding multiple cards on a single group wouldn't work correctly (only the first card would be persisted in that group). 👏 Thanks to Daniel N. for reporting this by email.\n\n### Version 4.0.4\n\n- 🐛 Fixed a bug where adding an action was changing ownership of the post to the person adding the action. 👏 Thanks [@botactic](https://github.com/botactic)! ([#209](https://github.com/antoinejaussoin/retro-board/issues/209))\n- Use TypeORM transactions for every database interactions, fixing some random races conditions.\n- Improving multi-arch support\n- Improving API calls and Sentry\n\n### Version 4.0.3\n\n- 🐛 Fixed a bug where groups couldn't be deleted if you didn't create them in the first place.\n\n### Version 4.0.2\n\n- 🚨 Emergency fix, for a serious bug that made it seem like a lot of people were participant to your session. This was never the case, it was displaying every non-logged in people as spectators to your session erroneously.\n\n### Version 4.0.1\n\n- Added the list of participants to the bottom of the screen 🧑‍💻\n- Added a notification on connection or disconnection of participants 🟢 🔴\n- Update OAuth photo on every login\n- Replaced GitHub OAuth library by a more recent version, to avoid deprecated GitHub API.\n- 🐛 Fixed a bug where the author of a new session wasn't registered as a participant\n- 🐛 Fixed a bug where online participants were not showing\n\n### Version 4.0.0\n\n- [⭐️ Pro Feature] Encrypted Sessions: full client-side encryption of your data\n- [⭐️ Pro Feature] Private Sessions: ensure only your colleagues can access your session\n- Full support for password-based accounts\n- Slack Authentication (OAuth) 🔑\n- Replacing Travis by GitHub Actions for CI and Deployment 🚀\n- New Freemium model\n- Adding dynamic HTML title for better browser experience. 👏 Thanks [@sam-pires](https://github.com/sam-pires)! ([#167](https://github.com/antoinejaussoin/retro-board/issues/167))\n- Adding a search functionality to find the needle in your haystack. 👏 Thanks [@ayxos](https://github.com/ayxos) for the suggestion! ([#171](https://github.com/antoinejaussoin/retro-board/issues/171))\n- Improving the Post component to hide up/down votes when they are disabled. Also got rid of the \"flippable\" panel,\n  all actions are now visible directly. 👏 Thanks [@Xyaren](https://github.com/Xyaren) for pointing this out. ([#150](https://github.com/antoinejaussoin/retro-board/issues/150))\n- Automatic Backend code linting, and CI linting\n- ⏫ Upgrade to TypeScript 4\n- ⏫ Upgrade to React 17\n- ⏫ Upgrade to Create-React-App 4\n- ⏫ Upgrade to Socket.IO 3.0\n- 👏 A big thanks to [@wooddar](https://github.com/wooddar) for beta-testing and his great feedback!\n\n### Version 3.2.3\n\n- Fixed a bug with GitHub authentication, where the display name was not set ([#165](https://github.com/antoinejaussoin/retro-board/pull/165)). 👏 Thanks [@hieuwu](https://github.com/hieuwu)!\n\n### Version 3.2.2\n\n- 🐛 Fixed a bug where any user editing the name of the session would become owner of the session.\n\n### Version 3.2.1\n\n- 🐛 Fixed a serious bug under Firefox, where users could not see the content of the post ([#154](https://github.com/antoinejaussoin/retro-board/issues/154), [#148](https://github.com/antoinejaussoin/retro-board/issues/148)). 👏 Thanks to all people who reported this ([@Xyaren](https://github.com/Xyaren), [@dallasgutauckis](https://github.com/dallasgutauckis), [@courtney-thwaites](https://github.com/courtney-thwaites)).\n\n### Version 3.2.0\n\n- 🇮🇹 Improved Italian translation (👏 Thanks [@mventuri](https://github.com/mventuri))\n- Ability to delete sessions, if you are authenticated and you are the author of the session ([#116](https://github.com/antoinejaussoin/retro-board/issues/116))\n- Allow changing the default language for new users via environement variables ([#135](https://github.com/antoinejaussoin/retro-board/issues/135))\n- Allow a moderator to blur cards written by others, to keep everything hidden until the end of the retrospective ([#100](https://github.com/antoinejaussoin/retro-board/issues/100))\n- Complete redesign of the Custom Session settings modal\n- Ability to modify session settings once the game has started. This is only available to the session moderator (author) ([#92](https://github.com/antoinejaussoin/retro-board/issues/92)).\n- Ability to display past sessions for Anonymous users. This is limited to viewing past sessions on the same browser, any login to a different browser will create a different anonymous account, for safety reasons ([#112](https://github.com/antoinejaussoin/retro-board/issues/112)).\n- ⏫ Dependencies update\n\n### Version 3.1.1\n\n- 🇳🇱 Improved Dutch translation (👏 Thanks [@jghaanstra](https://github.com/jghaanstra))\n- ⏫ Dependencies update\n\n### Version 3.1.0\n\n- Multi-architecture support! Hello Rasperry Pi 🍇 🎉! And Apple Silicon 🍎\n- Docker images are automatically compatible with ARM (arm64, v6, v7, v8)\n\n### Version 3.0.3\n\n- 🐛 Bug fix: [Issue 121](https://github.com/antoinejaussoin/retro-board/issues/121), [Issue 123](https://github.com/antoinejaussoin/retro-board/issues/123)\n- ⏫ Dependencies update\n\n### Version 3.0.2\n\n- Adding privacy policy, terms and conditions, GDPR support\n- 🐛 Fix various bugs reported by Sentry\n\n### Version 3.0.1\n\n- Improvements on the landing page experience\n- SEO\n\n### Version 3.0.0\n\n- Brand new landing page, and much improved look and feel 🎉\n- Authentication using your favourite social media account:\n  - GitHub\n  - Google\n  - Twitter\n  - ...more coming!\n- Ability to re-order posts by drag-and-drop 🚀\n- Ability to group posts together\n- Save your custom session settings as a default template\n- Giphy support 😃\n- Improved homepage dashboard 📈\n\n### Version 2.2.4\n\n- 🇷🇺 Russian Translation improvements (👏 Thanks [@regmagik](https://github.com/regmagik))\n- Fixing logout button translation\n- Adding fetch polyfill for IE\n- ⏫ Upgrading dependencies\n\n### Version 2.2.3\n\n- 🇮🇹 Italian Translation (👏 Thanks [@mventuri](https://github.com/mventuri))\n- Re-enabling source maps for Sentry\n- ⏫ Upgrading dependencies\n\n### Version 2.2.2\n\n- Allowing a user to disable voting (by setting the max number of votes to 0) (👏 Thanks [@imranismail](https://github.com/imranismail))\n- Fixing an issue with Docker and Yarn's installation\n- ⏫ Upgrading dependencies\n\n### Version 2.2.1\n\n- Adding Sentry support for the backend\n- Making Google Analytics and Sentry configurable at run-time (as in Docker run-time)\n- Adding Copy to clipboard compatibility for more browsers\n- Preventing the app from crashing when cookies are disabled on Firefox\n- Handling disconnections better by not reconnecting automatically and displaying a message instead.\n\n### Version 2.2.0\n\n- Kubernetes configs. Deploy Retrospected to the cloud! ☁️ 🚀 ☸️\n- Making the backend scalable by making SocketIO use Redis to communicate between instances. This is disabled by default\n  and is only useful for Kubernetes deployments.\n- The backend hostname is now configurable on the nginx config on the frontend.\n- Replaced all occurences of `withRouter` by `useHistory` and `useParams`\n- Added CI/CD support with Travis\n- Auto-deployment of Docker images to Docker Hub\n- Changing the UX related to Summary Mode\n- Added the ability to copy the content of the session in the clipboard, both in Markdown format and Rich Text\n- Added Error Boundaries to improve the user experience if the app crashes\n- Added support for Sentry.io (error logging)\n- Fixed an issue where multiline content was not displayed properly for anyone except the author\n- Fixed an issue where a post couldn't be deleted if it had votes attached to it\n- [Issue 56](https://github.com/antoinejaussoin/retro-board/issues/56) - Fixed an issue where new users who were not persisted yet couldn't vote (👏 Thanks [@dkistner](https://github.com/dkistner))\n\n### Version 2.1.4\n\n- 🇩🇪 German Translation (👏 Thanks [@PaulBrandt](https://github.com/PaulBrandt))\n- 🐛 Bugfix: First post was sometimes not saved on regular sessions\n\n### Version 2.1.3\n\n- IE fix: the previous polyfill didn't quite work with IE9 to IE11.\n\n### Version 2.1.2\n\n- Older browser support (IE11, somewhat works with IE10 and IE9).\n- Adding an \"outdated browser\" warning\n- Adding a remaining votes counter when using a maximum number of votes rule.\n- Changing how Editable Labels work: they now only fire onChange on blur or Enter, minimizing the amount of traffic over the socket\n- Removing the REACT_APP_DEBUG environment variable (using NODE_ENV instead).\n- Adding a loading spinner while loading the game now that we can't predict which number of columns are going to appear on screen.\n- Making sure index.html is not cached by Nginx on production\n- Removing .map files on production\n\n### Version 2.1.1\n\n- MS Windows support/fixes (👏 Thanks [@srraf](https://github.com/srraf)).\n- [PR-48](https://github.com/antoinejaussoin/retro-board/pull/48) - Fixed a word-wrapping issue when we have only one (long) post (👏 Thanks [@manicmaniac](https://github.com/manicmaniac)).\n- Fixes a possible race-condition issue with \"vote\" syncing.\n\n### Version 2.1.0\n\n- Adding full customisation of columns and rules:\n  - You can now create a board with 1 to 5 columns\n  - You can allow a user to vote for his own posts\n  - You can allow multiple votes on the same post\n  - You can limit the number of up and down votes\n  - You can choose to display the name of the author, and the name of the persons who vote\n- Your language selection is now remembered between sessions\n- Various UI fixes:\n  - Login modal improvements\n  - Editable label improvements\n- Various Docker improvements\n- ⏫ Upgraded dependencies\n- 👏 Special thanks to [@jesusabp](https://github.com/jesusabp), [@zalexki](https://github.com/zalexki) and [@jfritz](https://github.com/jfritz) for their inputs and ideas!\n\n### Version 2.0.4\n\n- ⏫ Upgraded dependencies\n- Allows multi-line posts and comments (use the shift key to add a new line) (👏 Thanks [@andyk314](https://github.com/andyk314))\n- Re-adding Hot Reload, which now works great with TypeScript and Create-React-App.\n\n### Version 2.0.3\n\n- ⏫ Upgraded dependencies\n- Fixed an issue with Docker eating too much space with its unlimited log size. Log is now limited to 50mb.\n\n### Version 2.0.2\n\n- Added an \"Action\" field on each Post: this allows the user to define a list of actions that need doing in the next sprint, and allows displaying this list in the Summary Mode.\n- 🐛 Bugfix: In certain conditions, some race-condition would store a post with a null session ID (so the post was lost forever).\n- 🐛 Bugfix: Disabled the Web Worker, as it's not working properly when loading a game directly (and not loading the homepage).\n\n### Version 2.0.1\n\n- Adding support for Postgres migrations\n- Adding created/updated fields on Post and Session\n- 🐛 Bugfix: Summary mode wasn't ordered by votes anymore. (👏 Thanks [@cindyccook](https://github.com/cindyccook))\n\n### Version 2.0.0\n\n- Complete rewrite\n- TypeScript\n- React Hooks\n- @testing-library/react\n- New component library (MaterialUI)\n- Docker-friendly\n\n### Version 1.0.1\n\n- 🇯🇵 Japanese Translation (👏 Thanks [@sat0yu](https://github.com/sat0yu))\n- Simplified the ESLint configuration\n- Introducing Prettier (`yarn format`)\n- ⏫ Upgrading to Babel 7\n\n### Version 1.0.0\n\n- React 16\n- Webpack 4 (for previous versions of webpack, see below)\n- Using [@bionikspoon/react-toolbox](https://github.com/bionikspoon/react-toolbox) instead of the original `react-toolbox`, as the project is no longer maintained and doesn't work with React 16.\n- ⏫ Upgraded all the other dependencies, everything should be up-to-date\n- Improved the home screen\n\n### Version 0.10.0\n\n- Webpack 3 (for Webpack 2, look at version 0.9.0)\n- Converting entire project to 2-space indentation\n- ⏫ Upgrade other dependencies\n- 🇵🇱 Polish Translation (👏 Thanks [@olaf-cichocki](https://github.com/olaf-cichocki))\n- 🇦🇪 Arabic Translation (👏 Thanks [@FrenchTechLead](https://github.com/FrenchTechLead))\n- Improved the loading screen\n\n### Version 0.9.0\n\n- Webpack 2 (for Webpack 1, look at version 0.8.1 and older)\n- React 15.5 (which needs the new `prop-types` module, among other things)\n- React Router 4 (completely different way of doing the routing)\n- Move the structure of the project to a modular structure\n- ⏫ Upgraded all the other dependencies to the latest versions, except `react-toolbox`\n\n### Version 0.8.1\n\n- Hotfix (ESLint errors on production build)\n\n### Version 0.8.0\n\n- Using [redux-saga-testing](https://github.com/antoinejaussoin/redux-saga-testing) to test sagas\n- 🇹🇼🇨🇳 Chinese (Traditional and Simplified) Translation (👏 Thanks [@aqutw](https://github.com/aqutw))\n- Using [Yarn](https://yarnpkg.com/en/)\n- ⏫ Updating dependencies\n- Fixing some Spanish translation mistakes (👏 Thanks @MrPolymath)\n- 🐛 Fixed a bug where the Vote buttons would allow a user to vote multiple times (on the UI only)\n\n### Version 0.7.0\n\n- Good test coverage, using Jest\n- 🇷🇺 Russian Translation (👏 Thanks [@vectart](https://github.com/vectart))\n- 🇪🇸 Spanish Translation (👏 Thanks [@andresin87](https://github.com/andresin87))\n- Replacing PNG flags by SVG/CSS versions\n- Using `react-hot-loader` 3.0.0 (beta2) for Hot reloading\n- Fixing a few mobile/responsive issues\n\n### Version 0.6.1\n\n- React-toolbox 1.0.0\n- Debugging instructions\n\n### Version 0.6.0\n\n- Added the ability to edit existing posts inline (posts you wrote)\n- Adding a new Invite button to simplify and explain how to invite other people\n- Removing the snackbar\n- Removing ES7 decorators, as they are not standard yet\n- Removing hash on CSS and JS on production (not necessary since we have the version number)\n\n### Version 0.5.2\n\n- 🐛 Fixed a bug on the anti-spam when if using a proxy (nginx for instance), the wrong ip was used\n- 🐛 Fixed a bug where the linting would fail if the default configuration was used (👏 Thanks @veselignome)\n\n### Version 0.5.1\n\n- Full support of [ESLint](http://eslint.org/), based on [AirBnB rules](https://github.com/airbnb/javascript)\n- Adding an anti-spam for SocketIO, because someone is having fun crashing my server (thanks!)\n\n### Version 0.5.0\n\n- Adding the possibility to join a previously joined session quickly (👏 Thanks [@Sonaryr](https://github.com/Sonaryr))\n- Performance improvement on title edit (Also thanks to @Sonaryr 👏)\n- New Logo!\n- Added Favicons\n\n### Version 0.4.1\n\n- Updated the screenshot on the readme\n- package.json version updated properly this time\n\n### Version 0.4.0\n\n- Improved the \"Create Session\" page, allows a user to create a session with a custom name\n- Ability to edit that session name in real-time (by anyone)\n- Added a \"Summary Mode\": this gives a summary of a current session, allowing a user to copy-paste the entire content easily\n- New shorter session IDs\n- New look-and-feel (new colours)\n- Using [reselect](https://github.com/reactjs/reselect) to create memoized selectors\n- Improving performance by using `shouldComponentUpdate` via a custom base [Component](app/Component.jsx)\n- Updated to the brand new React 15\n- Improving Windows support by allowing Windows users to use the same commands as \\*nix users\n- 🇳🇱 Internationalisation: added Dutch to the list of supported languages (👏 Thanks [@Sonaryr](https://github.com/Sonaryr))\n\n### Version 0.3.0\n\n- Adding support for more robust databases (NeDB, by default, in process, and MongoDB)\n- Change to the Like / Unlike logic: a user can now only vote once, and not for his own posts\n- Change to the Like / Unlike logic: like and unlikes counts are separated\n- Adding ES7 decorators, more readable than the previous curry-ed functions\n- Better support for Windows\n- 🇧🇷 Internationalisation: added Brazilian Portuguese to the list of supported languages (👏 Thanks [@renancouto](https://github.com/renancouto))\n\n### Version 0.2.0\n\n- Using `redux-saga` instead of `redux-thunk`\n- Persistence: Simple persistence to disk (no database needed)\n- Support for Google Analytics (with precise events monitoring)\n- Ability to logout, and to leave a session\n- Improve the reliability of the clients list (currently connected users)\n- Fix issues when the web fonts can't load (firewall blocking for example)\n- 🇬🇧 🇫🇷 🇭🇺 Internationalisation: support for English, French and Hungarian (👏 Thanks [@iaretiga](https://github.com/iaretiga))\n\n### Version 0.1.1\n\n- Minor visual tweaks\n- Better console logs, server side\n- Big clean up of un-used files and old libs\n\n### Version 0.1.0\n\n- First production version\n- Basic functionalities are there and working\n- Login\n- Creating a session\n- Joining a session\n- Adding new posts\n- Like / Unlike posts\n- Ability to delete our own posts\n- List of connected users\n- No persistence (yet)\n\n## Frequently Asked Questions\n\n#### What if I want to name my session so I can remember easily how to come back to it?\n\nYou can actually change the session ID in the URL with anything you like: for example [www.retrospected.com/game/hello_world](http://www.retrospected.com/game/hello_world)\n\nTry not to take a too common name though, to avoid anyone else finding your session by chance.\n\n## Thanks 👏\n\nMany thanks to the following contributors who helped translating the app:\n\n- Hungarian: [@iaretiga](https://github.com/iaretiga)\n- Portuguese (Brazilian): [@renancouto](https://github.com/renancouto)\n- Dutch: [@Sonaryr](https://github.com/Sonaryr), [@jghaanstra](https://github.com/jghaanstra)\n- Russian: [@vectart](https://github.com/vectart), [@regmagik](https://github.com/regmagik)\n- Spanish: [@andresin87](https://github.com/andresin87)\n- Chinese: [@aqutw](https://github.com/aqutw)\n- Polish: [@olaf-cichocki](https://github.com/olaf-cichocki)\n- Arabic: [@FrenchTechLead](https://github.com/FrenchTechLead)\n- Japanese: [@sat0yu](https://github.com/sat0yu)\n- German: [@PaulBrandt](https://github.com/PaulBrandt), [@dayByte](https://github.com/dayByte)\n- Italian: [@mventuri](https://github.com/mventuri)\n\nIf you are a native speaker of another language, please don't hesitate to make a pull request to add a translation.\n\nSpecial thanks to [@andresin87](https://github.com/andresin87) for pointing the `flag-icons` package to me, it replaces the PNG flags in a neater way.\n\nAnother special thanks to Browserstack, as they allow me to test this project in other browsers.\n\nThanks to [UnDraw](https://undraw.co/) for some of the illustrations.\n\n\u003ca href=\"https://www.browserstack.com/\"\u003e\u003cimg src=\"./content/browserstack.png\" width=\"300\" height=\"65\"\u003e\u003c/a\u003e\n\nPlease make your PRs from the **develop** branch, not **master**.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantoinejaussoin%2Fretro-board","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fantoinejaussoin%2Fretro-board","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fantoinejaussoin%2Fretro-board/lists"}