Giter Club home page Giter Club logo

retro-board's Introduction

Retrospected

GitHub package.json version Master Build Canary Build Alpha Build

Retrospected is a free AI-powered Real-time Agile Retrospective Board for engineering teams.

 

           

Retrospected.com

Retrospected.com

This project is both an actual product, and also a technology demo using the latest and greatest JavaScript/TypeScript libraries of the month.

It features the following technologies:

Previous versions featured the following libraries:

Documentation 📖

You can browse the documentation here.

Using Retrospected 🚀

You have two ways of running Retrospected:

Want to host Retrospected on your premises? 🖥

You can start an instance of Retrospected in 5 minutes by following the quick-start guide.

This will run a demo version, which you can turn into a fully licenced version by purchasing a Self Hosted licence.

Versions History

Version 5.4.1

  • Add the ability to remove the Cookie Banner (GDPR) on Self-Hosted instances (which is now the case by default)
  • Upgrade dependencies (frontend)

Version 5.4.0

  • Add the concept of a moderator, so the person creating the retro is not necessarily the person moderating it.
  • Upgrade the database to Postgres 16 (latest version)
  • Allow finer-grained timers.
  • Fix an issue with the left-hand-side panel layout (👏 Thanks to @ruandev for the fix)
  • SEO optimizations

Version 5.3.1 (hotfix)

  • 🐛 Adding a group was not working in the previous version. This is now fixed.

Version 5.3.0

  • [⭐️ Self-Hosting] new features:
    • Option to disable data deletion (GDPR)
    • Option to disable "Show Author" globally
  • New retrospective options:
    • Option to restrict editing the title of a session to the moderator
    • Option to restrict ordering and grouping to the moderator
  • When accessing a private session that you don't have access to, it will now show the name of the moderator.
  • Search functionality has been improved: it will now only show matching cards
  • 🐛 Bug fix: when there are too many users connected, the "I'm ready button" would become hidden. This is now fixed.
  • The Agile Coach is now using Chat GPT 4, which is much more powerful
  • A new explanatory video has been added to the marketing website, and the app itself.
  • ⏫ Upgrading dependencies

Version 5.2.2 (hotfix)

  • Improving documentation

Version 5.2.1 (hotfix)

  • Header logo bug fix

Version 5.2.0

  • [⭐️ Self-Hosting] Adding white-labelling customisation options to Self-Hosted instances
  • New page explaining what Self-Hosted is and what it can do for you
  • New callback button on the marketing website

Version 5.1.2 (hotfix)

  • Fix odd bug crashing the side-panel in certain circumstances

Version 5.1.1

  • Add blog pages to the marketing website
  • Rewording on the marketing website
  • Fix an issue on the marketing website where links were not working
  • Add a warning on the app when a user has a pro account but did not add members to their account
  • ⏫ Upgrading dependencies

Version 5.1.0

  • [⭐️ Pro Feature] 🤖 AI Coach, powered by Chat GPT. Limited access to non-paid users.
  • Improve the login workflow
  • Improve the template selection
  • Improve the home page, with search on past retrospectives and nicer button
  • Allow a user to convert their Anonymous account to a regular account and migrate their data
  • Bug fix: fix bug where multiple demos were created

Version 5.0.3

  • 🇩🇪 Adding the German version of our marketing website
  • Self-Hosted: Improve licence checking to avoid being blocking when internet is not available
  • Better support for AD campaigns
  • Redirect regional TLDs (.de, .fr) to .com

Version 5.0.2

  • Simplify management of environment variables on the frontend
  • Add an error 404 page on the marketing site
  • Add Ad-Words tracking on the landing page

Version 5.0.1

  • Add Google Ad-Words tracking on the frontend
  • Fix self-hosted licence checking URL

Version 5.0.0

  • 👩‍💻 Brand new landing page, built with NextJS, separated from the main app. The app is now available at https://app.retrospected.com and the landing page at https://www.retrospected.com.
  • 🇫🇷 / 🇬🇧 Multilingual support for this new landing age (English and French for now), with auto-detection of the user's language.
  • 🚀 Migration from CRA (create-react-app) to Vite, which is much faster and more flexible.
  • 💯 Migration to Google Analytics 4
  • 🏂 Adding a demo mode: one-click to create a demo session, with a demo account.
  • 🖥️ Improved support for self-hosted licence generation

Version 4.19.3 (hotfix)

  • Fix Pro account list

Version 4.19.2

  • Migration to Google Analytics V4

Version 4.19.1

  • Hotfix: Issue with password account creation

Version 4.19.0

  • Feature: Adding the ability to set a timer for a session. This is optional and can be enabled in the settings. (👏 Thanks to @Xyaren for the idea)
  • Feature: Confirm before deleting a post. Avoids accidental deletion of posts. (👏 Thanks to @vadamovsky for the idea)
  • Feature: Allow users to cancel their votes on a specific ticket. This feature can be disabled in the settings. (👏 Thanks to @Xyaren for the idea)
  • Feature: Self-Hosted only: Display the number of logged users (👏 Thanks to @dayByte for the idea)
  • Upgrade to the latest version of TypeORM
  • Convert all backend code to ESM
  • 🇩🇪 German language updates (👏 Thanks to @dayByte for his contribution)

Version 4.18.1 (hotfix)

  • Reinstates the Enter icon on board input on mobiles (👏 Thanks to Hans K. for the idea)

Version 4.18.0

  • 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)
  • ⏫ Upgrade vulnerable dependencies (thanks to dependabot)
  • Fix issues found by code scanning (CodeQL)

Version 4.17.0

  • 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.
  • Display the owner of the subscription clearly on the Account Page
  • Upgrading GitHub Actions
  • ⏫ Upgrading dependencies

Version 4.16.3

  • Exposing "tenant", "authorization url" and "token url" for Microsoft OAuth. (👏 Thanks to Frank Becker for the idea)
  • 🇩🇪 German language improvements (👏 Thanks @Tobias G for the PR!)
  • ⏫ Upgrading dependencies

Version 4.16.2

  • 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)

Version 4.16.1

  • Fixed a bug where sessions could not be deleted when there was any chat messages (👏 Thanks Florin Bicher for the report)
  • Update icon
  • Better Slack integration

Version 4.16.0

  • Complete overhaul of the translations. Switching to i18next. Translated all languages using Machine Learning (via Crowdin)
  • Added translations for the Ukrainian language, and a link to provide help for Ukraine 🇺🇦
  • Fix the empty file download when logging using Google OAuth
  • Upgrade the documentation to the latest version of Docusaurus
  • Add more integration tests, covering password accounts and account deletion
  • Added the language picker in the account page, in addition to the side panel

Version 4.15.0

  • Self-Hosting: Improve Admin dashboard for Self-Hosted, allowing the admin to add and delete users
  • Self-Hosting: Add an option to allow self-signed certificates for the SMTP server, for sending emails
  • Fix GDPR account deletion, which did not work when the user had any chat messages
  • Upgrade React typings to v18
  • ⏫ Upgrading all frontend dependencies

Version 4.14.1 (hotfix)

  • Remove CSRF code, causing random issues

Version 4.14.0

  • Upgrade to React 18
  • Replace icons by emoji for columns headers (fully customisable)
  • Self-Hosting: Adding SMTP support for self-hosting, in addition to SendGrid. 👏 Thanks @dayByte for the idea. (#365).
  • Self-Hosting: Simplification of SendGrid setup, by removing the need of creating email templates. They are now hardcoded.
  • Self-Hosting: Improving email templates
  • Improving Text and Markdown exports on Summary Mode. 👏 Thanks Jakob J for the idea. (#384).

Version 4.13.0

  • Adding the option of paying for Retrospected Pro annually, getting one month free in the process
  • Update prices, especially for USD
  • Make the integration tests less brittle by using specific attributes
  • Upgrade (finally!) to React-Router v6.
  • Self-Hosting: Allow an administrator to disable Anonymous Logins (to force users to use regular accounts).

Version 4.12.1 (hotfix)

  • Adding users to a Pro Team subscription wasn't working anymore, because of Webpack 5.

Version 4.12.0

  • Changing naming convention for the database. All fields and tables are now snake_case.
  • Simplified the configuration of TypeORM, removed the generation of ormconfig.json.
  • Added Integration tests using Cypress to catch Docker-specific errors and have some basic smoke tests.
  • Upgrade to react-scripts (Create React App) 5.0.0
  • Upgrade jQuery (for the marketing / home page), to 3.6.0 for security reasons
  • ⏫ Upgrading dependencies

Version 4.11.5 (hotfix)

  • Making secure cookies an optional setting, as they won't work unless it is hosted on HTTPS.

Version 4.11.4 (hotfix)

  • Fixing a migration issue when installing from scratch

Version 4.11.3 (hotfix)

  • Adding hardcoded licence for a specific self-hosted client.

Version 4.11.2 (hotfix)

  • Encrypt chat messages on encrypted sessions
  • Ensure long chat messages are displayed across multiple lines

Version 4.11.1 (hotfix)

  • 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.

Version 4.11.0

  • Adding a chat functionality. Send messages to your colleagues without having to use Slack or any other external tool!
  • Add the author (when the "Show Author" option is enabled) in the summary panel. 👏 Thanks @hmlkao for the idea. (#336).
  • Deprecate Yarn Workspaces to limit dependency sharing
  • ⏫ Upgrade most dependencies for security reasons
  • Upgrade Nginx image to fix security issues
  • Force secure cookies on production
  • Add Trivy vulnerability scanner on CI

Version 4.10.0

  • Add better GDPR compliance, with the right to be forgotten: allows a user to delete all of their data
  • Add the ability for users to signal if they are done with their posts, to help the moderator
  • ⏫ Upgrading dependencies

Version 4.9.0

  • Brand new documentation website.
  • Migrate all docker images from antoinejaussoin/retro-board-* to retrospected/*.
  • Allowing Self-Hosted instances to use SendGrid for email recovery
  • 🐛 The Unlimited subscription domain check was not accepting valid domains such as .ventures or .agency.

Version 4.8.0

  • Upgrade to MUI 5.0 (ex Material UI)
  • Migration from Styled Components to Emotion (for compatibility reasons with MUI)
  • Add hard-coded self-hosting licence mechanism for companies with restricted internet access
  • ⏫ Upgrading dependencies

Version 4.7.2

  • Replacing Google OAuth passport library, to try and reduce Google OAuth errors on production
  • Added a script to make bumping versions easier
  • ⏫ Upgrading dependencies

Version 4.7.1 (hotfix)

  • 🐛 Fixed a bug highlighted by Sentry, where anonymous account without a password would trigger an exception.

Version 4.7.0

  • 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.
  • CSRF protection
  • Significant performance improvements on retrieving past sessions (10x to 100x)
  • Add the ability for anonymous users to delete the boards they created under certain conditions (#229).
  • ⏫ Upgrading dependencies

Version 4.6.1

  • Fixing a typo. 👏 Thanks Chad S.! (#296)

Version 4.6.0

  • Support OKTA for authentication
  • Speeding up the migration on production (using transpiled JavaScript instead of TypeScript via ts-node)
  • Making email checks for Pro Team subscriptions case-insensitive. 👏 Thanks Nico! (#287)

Version 4.5.0

  • Adding the ability to self-host Retrospected in a very easy way.
  • Change the default order for new posts. New posts are now (by default) appearing at the top of the column. 👏 Thanks @konrad44 for the idea. (#272)
  • Upgrade containers from Node 15 to Node 16
  • Spelling fixes on home page cards
  • ⏫ Upgrading dependencies

Version 4.4.0

  • 🐛 Fixed a bug where the export button on the summary page was hidden by the participants bar. 👏 Thanks @hieuwu for pointing this out. (#262)
  • Added the ability to collapse groups (hidding their content). 👏 Thanks to Sultan S. for the suggestion. (#263)
  • Added the possibility for deployements where the backend has a single instance (no replicas) to not use Redis with Socket.IO.
  • Fixed a bug that would trigger the rate limiting when adding posts to groups, triggering a disconnection
  • ⏫ Upgrading dependencies

Version 4.3.0

  • Add the ability to restrict the number of posts per user on a given session (as an option).
  • Rename some folders in the repository to more sensible names
  • Prevent the UI from sending more than 100 Sentry errors, to avoid spamming Sentry.

Version 4.2.2

  • Add a better check for self-hosted licences.
  • ⏫ Upgrading dependencies

Version 4.2.1

  • Search now also works with the author's name, if the author is displayed. 👏 Thanks @ayxos for pointing this out. (#202)
  • Replacing the reducer logic with Recoil for global state management.
  • Adding the possibility of creating a post by clicking on the 'return' icon (⮐) instead of hitting "Enter". 👏 Thanks to @do606 for pointing out that Enter doesn't always seem to work (#246).
  • Re-adding the ability of creating a post by hitting Enter on a numeric pad. 👏 Thanks again to @do606 for that.
  • ⏫ Upgrading dependencies

Version 4.2.0

  • Add a page explaining how local encryption works
  • Re-introducing rate limiting, both for the REST API and the Websocket connections, in Node and Nginx
  • Reduce the quantity of data sent over WebSockets (for instance, only sending post ID instead of whole post when voting)
  • Reduce the number of SQL queries on the backend, simplifying the backend logic
  • Return an error message to the UI if a Websocket message doesn't succeed
  • Improve websocket reconnection logic
  • Upgrading to Socket.IO 4.0
  • ⏫ Upgrading dependencies
  • 🐛 The participants footer was sometimes hidden by the blur overlay of a post. 👏 Thanks @Pajinell for pointing this out. (#240)
  • 👏 Thanks to @cindyccook for pointing out reliability issues (#232).

Version 4.1.4 (hotfix)

  • 🐛 Language loading issues

Version 4.1.3 (hotfix)

  • 🐛 New users were wrongly added with a quota of 0

Version 4.1.2 (hotfix)

  • 🐛 Fixed a bug with local storage

Version 4.1.1 (hotfix)

  • 🐛 Fixed a bug where Slack OAuth was disabled

Version 4.1.0

  • Adding a 30-day trial
  • Adding Microsoft OAuth 2.0
  • Code splitting: all pages have their own bundle now, for a faster first-load experience
  • Removing all import React from 'react'; imports, as they are now redundant.
  • Introducing Recoil.js (as an experiment)
  • Limiting the number of posts to 50 for free accounts

Version 4.0.5

  • 🐛 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.

Version 4.0.4

  • 🐛 Fixed a bug where adding an action was changing ownership of the post to the person adding the action. 👏 Thanks @botactic! (#209)
  • Use TypeORM transactions for every database interactions, fixing some random races conditions.
  • Improving multi-arch support
  • Improving API calls and Sentry

Version 4.0.3

  • 🐛 Fixed a bug where groups couldn't be deleted if you didn't create them in the first place.

Version 4.0.2

  • 🚨 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.

Version 4.0.1

  • Added the list of participants to the bottom of the screen 🧑‍💻
  • Added a notification on connection or disconnection of participants 🟢 🔴
  • Update OAuth photo on every login
  • Replaced GitHub OAuth library by a more recent version, to avoid deprecated GitHub API.
  • 🐛 Fixed a bug where the author of a new session wasn't registered as a participant
  • 🐛 Fixed a bug where online participants were not showing

Version 4.0.0

  • [⭐️ Pro Feature] Encrypted Sessions: full client-side encryption of your data
  • [⭐️ Pro Feature] Private Sessions: ensure only your colleagues can access your session
  • Full support for password-based accounts
  • Slack Authentication (OAuth) 🔑
  • Replacing Travis by GitHub Actions for CI and Deployment 🚀
  • New Freemium model
  • Adding dynamic HTML title for better browser experience. 👏 Thanks @sam-pires! (#167)
  • Adding a search functionality to find the needle in your haystack. 👏 Thanks @ayxos for the suggestion! (#171)
  • Improving the Post component to hide up/down votes when they are disabled. Also got rid of the "flippable" panel, all actions are now visible directly. 👏 Thanks @Xyaren for pointing this out. (#150)
  • Automatic Backend code linting, and CI linting
  • ⏫ Upgrade to TypeScript 4
  • ⏫ Upgrade to React 17
  • ⏫ Upgrade to Create-React-App 4
  • ⏫ Upgrade to Socket.IO 3.0
  • 👏 A big thanks to @wooddar for beta-testing and his great feedback!

Version 3.2.3

  • Fixed a bug with GitHub authentication, where the display name was not set (#165). 👏 Thanks @hieuwu!

Version 3.2.2

  • 🐛 Fixed a bug where any user editing the name of the session would become owner of the session.

Version 3.2.1

Version 3.2.0

  • 🇮🇹 Improved Italian translation (👏 Thanks @mventuri)
  • Ability to delete sessions, if you are authenticated and you are the author of the session (#116)
  • Allow changing the default language for new users via environement variables (#135)
  • Allow a moderator to blur cards written by others, to keep everything hidden until the end of the retrospective (#100)
  • Complete redesign of the Custom Session settings modal
  • Ability to modify session settings once the game has started. This is only available to the session moderator (author) (#92).
  • 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).
  • ⏫ Dependencies update

Version 3.1.1

  • 🇳🇱 Improved Dutch translation (👏 Thanks @jghaanstra)
  • ⏫ Dependencies update

Version 3.1.0

  • Multi-architecture support! Hello Rasperry Pi 🍇 🎉! And Apple Silicon 🍎
  • Docker images are automatically compatible with ARM (arm64, v6, v7, v8)

Version 3.0.3

Version 3.0.2

  • Adding privacy policy, terms and conditions, GDPR support
  • 🐛 Fix various bugs reported by Sentry

Version 3.0.1

  • Improvements on the landing page experience
  • SEO

Version 3.0.0

  • Brand new landing page, and much improved look and feel 🎉
  • Authentication using your favourite social media account:
    • GitHub
    • Google
    • Twitter
    • ...more coming!
  • Ability to re-order posts by drag-and-drop 🚀
  • Ability to group posts together
  • Save your custom session settings as a default template
  • Giphy support 😃
  • Improved homepage dashboard 📈

Version 2.2.4

  • 🇷🇺 Russian Translation improvements (👏 Thanks @regmagik)
  • Fixing logout button translation
  • Adding fetch polyfill for IE
  • ⏫ Upgrading dependencies

Version 2.2.3

  • 🇮🇹 Italian Translation (👏 Thanks @mventuri)
  • Re-enabling source maps for Sentry
  • ⏫ Upgrading dependencies

Version 2.2.2

  • Allowing a user to disable voting (by setting the max number of votes to 0) (👏 Thanks @imranismail)
  • Fixing an issue with Docker and Yarn's installation
  • ⏫ Upgrading dependencies

Version 2.2.1

  • Adding Sentry support for the backend
  • Making Google Analytics and Sentry configurable at run-time (as in Docker run-time)
  • Adding Copy to clipboard compatibility for more browsers
  • Preventing the app from crashing when cookies are disabled on Firefox
  • Handling disconnections better by not reconnecting automatically and displaying a message instead.

Version 2.2.0

  • Kubernetes configs. Deploy Retrospected to the cloud! ☁️ 🚀 ☸️
  • Making the backend scalable by making SocketIO use Redis to communicate between instances. This is disabled by default and is only useful for Kubernetes deployments.
  • The backend hostname is now configurable on the nginx config on the frontend.
  • Replaced all occurences of withRouter by useHistory and useParams
  • Added CI/CD support with Travis
  • Auto-deployment of Docker images to Docker Hub
  • Changing the UX related to Summary Mode
  • Added the ability to copy the content of the session in the clipboard, both in Markdown format and Rich Text
  • Added Error Boundaries to improve the user experience if the app crashes
  • Added support for Sentry.io (error logging)
  • Fixed an issue where multiline content was not displayed properly for anyone except the author
  • Fixed an issue where a post couldn't be deleted if it had votes attached to it
  • Issue 56 - Fixed an issue where new users who were not persisted yet couldn't vote (👏 Thanks @dkistner)

Version 2.1.4

  • 🇩🇪 German Translation (👏 Thanks @PaulBrandt)
  • 🐛 Bugfix: First post was sometimes not saved on regular sessions

Version 2.1.3

  • IE fix: the previous polyfill didn't quite work with IE9 to IE11.

Version 2.1.2

  • Older browser support (IE11, somewhat works with IE10 and IE9).
  • Adding an "outdated browser" warning
  • Adding a remaining votes counter when using a maximum number of votes rule.
  • Changing how Editable Labels work: they now only fire onChange on blur or Enter, minimizing the amount of traffic over the socket
  • Removing the REACT_APP_DEBUG environment variable (using NODE_ENV instead).
  • Adding a loading spinner while loading the game now that we can't predict which number of columns are going to appear on screen.
  • Making sure index.html is not cached by Nginx on production
  • Removing .map files on production

Version 2.1.1

  • MS Windows support/fixes (👏 Thanks @srraf).
  • PR-48 - Fixed a word-wrapping issue when we have only one (long) post (👏 Thanks @manicmaniac).
  • Fixes a possible race-condition issue with "vote" syncing.

Version 2.1.0

  • Adding full customisation of columns and rules:
    • You can now create a board with 1 to 5 columns
    • You can allow a user to vote for his own posts
    • You can allow multiple votes on the same post
    • You can limit the number of up and down votes
    • You can choose to display the name of the author, and the name of the persons who vote
  • Your language selection is now remembered between sessions
  • Various UI fixes:
    • Login modal improvements
    • Editable label improvements
  • Various Docker improvements
  • ⏫ Upgraded dependencies
  • 👏 Special thanks to @jesusabp, @zalexki and @jfritz for their inputs and ideas!

Version 2.0.4

  • ⏫ Upgraded dependencies
  • Allows multi-line posts and comments (use the shift key to add a new line) (👏 Thanks @andyk314)
  • Re-adding Hot Reload, which now works great with TypeScript and Create-React-App.

Version 2.0.3

  • ⏫ Upgraded dependencies
  • Fixed an issue with Docker eating too much space with its unlimited log size. Log is now limited to 50mb.

Version 2.0.2

  • 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.
  • 🐛 Bugfix: In certain conditions, some race-condition would store a post with a null session ID (so the post was lost forever).
  • 🐛 Bugfix: Disabled the Web Worker, as it's not working properly when loading a game directly (and not loading the homepage).

Version 2.0.1

  • Adding support for Postgres migrations
  • Adding created/updated fields on Post and Session
  • 🐛 Bugfix: Summary mode wasn't ordered by votes anymore. (👏 Thanks @cindyccook)

Version 2.0.0

  • Complete rewrite
  • TypeScript
  • React Hooks
  • @testing-library/react
  • New component library (MaterialUI)
  • Docker-friendly

Version 1.0.1

  • 🇯🇵 Japanese Translation (👏 Thanks @sat0yu)
  • Simplified the ESLint configuration
  • Introducing Prettier (yarn format)
  • ⏫ Upgrading to Babel 7

Version 1.0.0

  • React 16
  • Webpack 4 (for previous versions of webpack, see below)
  • Using @bionikspoon/react-toolbox instead of the original react-toolbox, as the project is no longer maintained and doesn't work with React 16.
  • ⏫ Upgraded all the other dependencies, everything should be up-to-date
  • Improved the home screen

Version 0.10.0

  • Webpack 3 (for Webpack 2, look at version 0.9.0)
  • Converting entire project to 2-space indentation
  • ⏫ Upgrade other dependencies
  • 🇵🇱 Polish Translation (👏 Thanks @olaf-cichocki)
  • 🇦🇪 Arabic Translation (👏 Thanks @FrenchTechLead)
  • Improved the loading screen

Version 0.9.0

  • Webpack 2 (for Webpack 1, look at version 0.8.1 and older)
  • React 15.5 (which needs the new prop-types module, among other things)
  • React Router 4 (completely different way of doing the routing)
  • Move the structure of the project to a modular structure
  • ⏫ Upgraded all the other dependencies to the latest versions, except react-toolbox

Version 0.8.1

  • Hotfix (ESLint errors on production build)

Version 0.8.0

  • Using redux-saga-testing to test sagas
  • 🇹🇼🇨🇳 Chinese (Traditional and Simplified) Translation (👏 Thanks @aqutw)
  • Using Yarn
  • ⏫ Updating dependencies
  • Fixing some Spanish translation mistakes (👏 Thanks @MrPolymath)
  • 🐛 Fixed a bug where the Vote buttons would allow a user to vote multiple times (on the UI only)

Version 0.7.0

  • Good test coverage, using Jest
  • 🇷🇺 Russian Translation (👏 Thanks @vectart)
  • 🇪🇸 Spanish Translation (👏 Thanks @andresin87)
  • Replacing PNG flags by SVG/CSS versions
  • Using react-hot-loader 3.0.0 (beta2) for Hot reloading
  • Fixing a few mobile/responsive issues

Version 0.6.1

  • React-toolbox 1.0.0
  • Debugging instructions

Version 0.6.0

  • Added the ability to edit existing posts inline (posts you wrote)
  • Adding a new Invite button to simplify and explain how to invite other people
  • Removing the snackbar
  • Removing ES7 decorators, as they are not standard yet
  • Removing hash on CSS and JS on production (not necessary since we have the version number)

Version 0.5.2

  • 🐛 Fixed a bug on the anti-spam when if using a proxy (nginx for instance), the wrong ip was used
  • 🐛 Fixed a bug where the linting would fail if the default configuration was used (👏 Thanks @veselignome)

Version 0.5.1

  • Full support of ESLint, based on AirBnB rules
  • Adding an anti-spam for SocketIO, because someone is having fun crashing my server (thanks!)

Version 0.5.0

  • Adding the possibility to join a previously joined session quickly (👏 Thanks @Sonaryr)
  • Performance improvement on title edit (Also thanks to @Sonaryr 👏)
  • New Logo!
  • Added Favicons

Version 0.4.1

  • Updated the screenshot on the readme
  • package.json version updated properly this time

Version 0.4.0

  • Improved the "Create Session" page, allows a user to create a session with a custom name
  • Ability to edit that session name in real-time (by anyone)
  • Added a "Summary Mode": this gives a summary of a current session, allowing a user to copy-paste the entire content easily
  • New shorter session IDs
  • New look-and-feel (new colours)
  • Using reselect to create memoized selectors
  • Improving performance by using shouldComponentUpdate via a custom base Component
  • Updated to the brand new React 15
  • Improving Windows support by allowing Windows users to use the same commands as *nix users
  • 🇳🇱 Internationalisation: added Dutch to the list of supported languages (👏 Thanks @Sonaryr)

Version 0.3.0

  • Adding support for more robust databases (NeDB, by default, in process, and MongoDB)
  • Change to the Like / Unlike logic: a user can now only vote once, and not for his own posts
  • Change to the Like / Unlike logic: like and unlikes counts are separated
  • Adding ES7 decorators, more readable than the previous curry-ed functions
  • Better support for Windows
  • 🇧🇷 Internationalisation: added Brazilian Portuguese to the list of supported languages (👏 Thanks @renancouto)

Version 0.2.0

  • Using redux-saga instead of redux-thunk
  • Persistence: Simple persistence to disk (no database needed)
  • Support for Google Analytics (with precise events monitoring)
  • Ability to logout, and to leave a session
  • Improve the reliability of the clients list (currently connected users)
  • Fix issues when the web fonts can't load (firewall blocking for example)
  • 🇬🇧 🇫🇷 🇭🇺 Internationalisation: support for English, French and Hungarian (👏 Thanks @iaretiga)

Version 0.1.1

  • Minor visual tweaks
  • Better console logs, server side
  • Big clean up of un-used files and old libs

Version 0.1.0

  • First production version
  • Basic functionalities are there and working
  • Login
  • Creating a session
  • Joining a session
  • Adding new posts
  • Like / Unlike posts
  • Ability to delete our own posts
  • List of connected users
  • No persistence (yet)

Frequently Asked Questions

What if I want to name my session so I can remember easily how to come back to it?

You can actually change the session ID in the URL with anything you like: for example www.retrospected.com/game/hello_world

Try not to take a too common name though, to avoid anyone else finding your session by chance.

Thanks 👏

Many thanks to the following contributors who helped translating the app:

If you are a native speaker of another language, please don't hesitate to make a pull request to add a translation.

Special thanks to @andresin87 for pointing the flag-icons package to me, it replaces the PNG flags in a neater way.

Another special thanks to Browserstack, as they allow me to test this project in other browsers.

Thanks to UnDraw for some of the illustrations.

Please make your PRs from the develop branch, not master.

retro-board's People

Contributors

andreslucas avatar andy14312 avatar antoinejaussoin avatar aqutw avatar around-the-app avatar daybyte avatar dependabot[bot] avatar dslike avatar frenchtechlead avatar hieuwu avatar iaretiga avatar jghaanstra avatar manicmaniac avatar mrpolymath avatar mventuri avatar olaf-cichocki avatar paulbrandt avatar renancouto avatar ruandev avatar sat0yu avatar sonaryr avatar vectart avatar xyaren avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

retro-board's Issues

Adding a picture to a customized column

Sometimes as a facilitator, I'd love to customize a column to give a session a theme or better feel. Let's say a session is hard and I'd like to make people feel relaxed by showing them goofy stuff. The team I work with on a daily basis loves cats and I am not able to add any cats pics. It makes them super sad.

Show user name of creator on the card

Hey, nice job !

What do you think about adding the name of the card creator on it ?
I would see it in the bottom right of the card for normal view and at the beginning of the line for summary.
This also can be an option on the side perhaps ?

Cannot create retro session using default docker-compose.yml

I do not know why it is failing
It is a docker-compose instance running the docker-compose yml with Gauth

DevTools failed to load SourceMap: Could not load content for https://retro-dev03.aatkit.com/marketing/js/bootstrap.min.js.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE
create:1 Failed to load resource: the server responded with a status of 504 (Gateway Time-out)
index.ts:26 Uncaught (in promise) Error: Could not create a session
    at index.ts:26
    at s (runtime.js:45)
    at Generator._invoke (runtime.js:274)
    at Generator.forEach.e.<computed> [as next] (runtime.js:97)
    at r (asyncToGenerator.js:3)
    at u (asyncToGenerator.js:25)

Also looks like the app cannot get the SourceMap

Any suggestion? thx in advance

App Redirecting During Active Session

We have been using your amazing product for a few months now but it started redirecting to the home screen in the past 2 weeks. Is there a user limit or do we need to clear our cache?

Possibility to define sub-location

I have multiple docker containers behind a single Nginx webserver. A sublocation is redirecting to retro-board docker container

    location /retro {
        proxy_pass http://127.0.0.1:4000;
    }

My problem is all the static files try to fetch from '/' and not from '/retro' I have tried changing BASE_URL on the docker-compose.yml

    BASE_URL: http://my-site.com/retro

but it does not work. Any ideas?

Customizing already created session

At the moment, there is not option to customize the session one has already created. At the moment if you have created a session you can't do the following things:

  • Change the text of your question
  • Change number of columns
  • Change an icon next to the textbox
  • Change the number of likes / dislikes

What do you think of it @antoinejaussoin ?

Feature request: Customized Number of Columns

As a retrospective facilitator, I want to define the number of columns shown in my board in order to be able to play different kinds of Restrospective's formats.
E.g.:
"went-well, Didn't-Go-Well" (2 columns ),
"Start, Stop, Continue" ( 3 columns ),
"Liked, Learned, Lacked, & Longed For" ( 4 columns ),
Sailboat: "anchor, cargo, islands, winds, rocks" ( 5 columns ).

(Maybe the number of cols could be changed for the same Retro session showing/hiding the selected columns)
image

Kubernetes Backend Pod Fails: Error: secret option required for sessions

Using retro-board-backend:v3, retro-board-frontend:v3 from dockerhub for Docker compose and Kubernetes.

The Kubernetes Backend Pod does not startup corretly:

yarn run v1.22.0
$ yarn migrate && cd ./retro-board-server/dist/src && node index.js
$ cd retro-board-server && yarn migrate && cd ..
$ ts-node ./src/init.ts && ts-node ../node_modules/typeorm/cli.js migration:run
Creating ormconfig.json before migrations
query: SELECT * FROM "information_schema"."tables" WHERE "table_schema" = current_schema() AND "table_name" = 'migrations'
query: SELECT * FROM "migrations" "migrations" ORDER BY "id" DESC
No migrations are pending
Wed, 08 Apr 2020 05:06:15 GMT express-session deprecated req.secret; provide secret option at index.js:103:50
Warning: connect.session() MemoryStore is not
designed for a production environment, as it will leak
memory, and will not scale past a single process.
💻 Using Postgres database
Server started on port 3201, environment: production
(node:29) UnhandledPromiseRejectionWarning: TypeError: OAuthStrategy requires a consumerKey option
at Strategy.OAuthStrategy (/usr/src/backend/node_modules/passport-oauth1/lib/strategy.js:83:37)
at new Strategy (/usr/src/backend/node_modules/passport-twitter/lib/strategy.js:53:17)
at Object.default (/usr/src/backend/retro-board-server/dist/src/auth/passport.js:87:28)
at /usr/src/backend/retro-board-server/dist/src/index.js:138:23
at processTicksAndRejections (internal/process/task_queues.js:97:5)
(node:29) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
(node:29) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Error: secret option required for sessions
at session (/usr/src/backend/node_modules/express-session/index.js:200:12)
at Layer.handle [as handle_request] (/usr/src/backend/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/usr/src/backend/node_modules/express/lib/router/index.js:317:13)
at /usr/src/backend/node_modules/express/lib/router/index.js:284:7
at Function.process_params (/usr/src/backend/node_modules/express/lib/router/index.js:335:12)
at next (/usr/src/backend/node_modules/express/lib/router/index.js:275:10)
at urlencodedParser (/usr/src/backend/node_modules/body-parser/lib/types/urlencoded.js:91:7)
at Layer.handle [as handle_request] (/usr/src/backend/node_modules/express/lib/router/layer.js:95:5)
at trim_prefix (/usr/src/backend/node_modules/express/lib/router/index.js:317:13)
at /usr/src/backend/node_modules/express/lib/router/index.js:284:7
Error: secret option required for sessions

Same with Docker compose:

backend_1 | 💻 Using Postgres database
backend_1 | Server started on port 3201, environment: production
backend_1 | (node:27) UnhandledPromiseRejectionWarning: TypeError: OAuthStrategy requires a consumerKey option
backend_1 | at Strategy.OAuthStrategy (/usr/src/backend/node_modules/passport-oauth1/lib/strategy.js:83:37)
backend_1 | at new Strategy (/usr/src/backend/node_modules/passport-twitter/lib/strategy.js:53:17)
backend_1 | at Object.default (/usr/src/backend/retro-board-server/dist/src/auth/passport.js:87:28)
backend_1 | at /usr/src/backend/retro-board-server/dist/src/index.js:138:23
backend_1 | at processTicksAndRejections (internal/process/task_queues.js:97:5)
backend_1 | (node:27) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1)
backend_1 | (node:27) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
retro-board_frontend_1 exited with code 2

doesn't work on windows/mac

trying to get a working example running but having different errors on windows and linux.

i tried cloning and then running yarn followed by yarn start

results on mac/windows:

$ yarn start
yarn run v1.17.3
$ yarn build-common && yarn start-server & yarn start-ui
$ cd retro-board-common && yarn build && cd ..
$ rm -rf dist && ../node_modules/typescript/bin/tsc --build
'..\node_modules\typescript\bin\tsc' is not recognized as an internal or external command,
operable program or batch file.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
$ yarn build-common && cd retro-board-app && yarn start
$ cd retro-board-common && yarn build && cd ..
$ rm -rf dist && ../node_modules/typescript/bin/tsc --build
'..\node_modules\typescript\bin\tsc' is not recognized as an internal or external command,
operable program or batch file.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

it does work on Linux!

Votes are not stored

First of all thanks for sharing this project. Pretty awesome and helpful.

I have found an issue, where it seems that the up and down votes of people which don't add an item to the board are not stored.

Steps to reproduce

  1. Add a new board and add a item to the board
  2. Access as another user the board (e.g. via another browser)
  3. Up or down vote the item
  4. Refresh the page. The vote information seems to be gone

Btw: I found another thing, but I do not know if the behaviour is by intention or a bug. A user can't re-vote. That means a user is no able to remove it's own votes and distribute them once more.

Not able to like on Particular task

When I add a task and after that, if I thumbs-up then it doesn't work so please just give me the understanding of the code. I would like to help.

Session title

I love the idea about this project and would love to introduce it in our team(s), but I sometimes work on different teams and therefor I need to do more than 1 retro.
Being able to differentiate them would become easier if the sessions are titled.

Running in Docker Container

Bonjour,

Just a question regarding running your great retro-board project in a Docker container.
I have allowed me to make a fork of your project and have put a Dockerfile for building a docker image and running it.
https://github.com/ultimatemanu/retro-board

If you are interested you can of course pick-up the Dockerfile and dockerignore files and copy them to your master. You will find a small doc in the readme file of the fork.

Thanks again and cheers

Emmanuel Comba

Ability to group items together into consolidated topics

Many time in Retrospectives especially for large teams is to group common comments together into similar topic areas, then talking about the all up topic. It would be great to add an ability for whomever is running the retro able to create group topic cards and then drag and drop comments into group topic

Disabling downvoting

From the looks of it this isn't too hard to achieve considering maxDownvote is nullable. What do you think @antoinejaussoin ?

My organization needs this and I can contribute this feature.

Being able to use your own saved template that you can use for future sessions

At the moment, there are four wonderful options to choose from the built-in templates:

  1. Well / Not well
  2. Start / Stop / Continue
  3. Four LS
  4. Sailboat (my fav <3 )

What if I would like to save the template I'm about to customize and use it for future sessions? I can't do that at the moment. What would be also great for future users is that they can also have a look at other peoples templates available for either a) people from a certain domain (in a company) b) for public so I can see that this issue has a big potential when it comes to adding new features in regards to customization of a template or creating a one from scratch.

Deleting boards

Deleting boards would be useful for organizing and also important for GDPR compliance. 😄

Privacy Policy

Provide support for (and on retrospected.com provide one) a Privacy Policy, and perhaps also Terms of Use, to be authored, linked.

Unable to login

Due to recent changes I am no longer to login using the button

Idea: Allow addition of actions to the retro

As a team we discuss all the retro items and create actions off them on the board. Since the board is persistent , it would be great to be able to add the actions we decided directly to the board somewhere as a record of what we're going to do off the back of those retro items.

Might be usefull to be able to cancel a session

Hello,
So far i see no option for a contributor to delete a session, even if it is in the past.
The only otpion is to rename it in order to identify
Would it be possible to include this option in a future release?
Have a good evening

High server memory usage (800MB+)

Hi,

I tried deploying a retro-board instance from master branch on Heroku, but running into very high memory usage, which causes Heroku to stop the app.

2020-03-23T19:11:35.288519+00:00 app[web.1]: 
2020-03-23T19:11:35.665809+00:00 heroku[web.1]: State changed from starting to up
2020-03-23T19:11:54.800447+00:00 heroku[web.1]: Process running mem=734M(143.5%)
2020-03-23T19:11:54.800866+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2020-03-23T19:11:54.652933+00:00 app[web.1]: 🟟  Using NeDB database
2020-03-23T19:11:54.685103+00:00 app[web.1]: Server started on port 8081, environment: production
2020-03-23T19:12:14.736187+00:00 heroku[web.1]: Process running mem=806M(157.5%)
2020-03-23T19:12:14.736187+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2020-03-23T19:12:34.548326+00:00 heroku[web.1]: Process running mem=846M(164.7%)
2020-03-23T19:12:34.548407+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2020-03-23T19:12:54.773739+00:00 heroku[web.1]: Process running mem=839M(163.9%)
2020-03-23T19:12:54.774043+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2020-03-23T19:13:14.433852+00:00 heroku[web.1]: Process running mem=852M(165.7%)
2020-03-23T19:13:14.433981+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)
2020-03-23T19:13:34.498495+00:00 heroku[web.1]: Process running mem=862M(168.4%)
2020-03-23T19:13:34.498630+00:00 heroku[web.1]: Error R14 (Memory quota exceeded)

Lost previously entered retrospectives

Hi there,

My colleague Kevin recently logged into his retrospected.com and observed his previous retrospective details her recorded (three in total) disappeared.

Is there any possible way of retrieving them?

Thanks

lint -> build

I had lint error when started build/lint tasks. Fixed it by changing lint task in package.json

replaced this
"lint": "eslint --ext .js --ext .jsx ."

with this
"lint": "eslint --ext .js --ext .jsx"

Seems like DOT was the issue (active directory ?)

Just taught I should tell you about this.

Btw, I really like the way you organized code structure.

Actions missing from export

Actions (the most important part of the retro output!) are missing from the export features - both markdown and rich text...

Help with install...

I followed your instructions to install, but when I run npm run build I see the following error. Any thoughts?

npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! [email protected] lint: eslint --ext .js --ext .jsx .`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] lint script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2018-09-12T17_51_01_714Z-debug.log
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] build: cross-env npm run lint && cross-env npm run build-server && cross-env NODE_ENV=production webpack --config webpack.prod.config.js --progress --colors
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] build script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2018-09-12T17_51_01_748Z-debug.log`

Integration with giphy

I think it would be much fun to integrate retro board with Giphy, so that you can add something funny to the card you create.

For sure, at the beginning, there should be a limited numbers of gifs you can add, so that there's not too much load or chaos.

Any thoughts? 👍

Feature request: self-voting

As a retrospective facilitator, I want everyone to be able to self-vote on their issues that they submitted, so that we can implement a traditional dot-voting approach.

Dot-voting example: everyone gets two votes, and they can use it on any item. they can use two votes on one item or vote on two separate items.

UI/UX re-design

Hello there :-)

Me and my colleagues from Polidea were talking about the visual look of the retro board. We are super happy to jump in and work on the following aspects:

  1. Branding (logotype / colours etc.)
  2. User Experience research (user testing, user interviews) + design
  3. User Interface design

I have only worked with Apache open source projects, so I'm not really sure how to address it here @antoinejaussoin and if there's room for a discussion for more people on the possible design proposals or it has to be confirmed by you @antoinejaussoin, please let me know.

There is another project that is worth looking at called Parabol that I used myself as Project Manager and it was super smooth to carry out the retrospective session with it. That's why, I thought we can make the Retro Board even better looking and more easy-to-use.

What are your thoughts?

Refresh Page when language change

Hi,
that is not realy a issue but i don't understand how you manage the strings from each component(mounted) to refresh when the language is changed.
When i change the language, changes only appear when i skip to next page. I think that's because my component is already mounted and the translate function is no longer call. So my strings stay the same.
I saw in you code flow( connect(...) translate (...)). What that mean? That the only thing i don't use in my project
...
MyComponent.defaultProps= {
strings:{
...
}
};
function select(state){
return {currentLanguage: state.lang};
};
const decorator = connect(select)(MyComponent);
export default translate('MyComponent')(decorator);

The question is how recall translate for a mounted component when the language change so that we get the new strings?

I'm new with react and redux.

Thx for your help.

Feature request: re-ordering of ideas/issues

As a retrospective facilitator, I want to be able to re-order the items on the board and have team members see the ordering change, so that my team can have a better visual indicator of similar issues.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.