GithubHelp home page GithubHelp logo

parabolinc / parabol Goto Github PK

View Code? Open in Web Editor NEW
1.8K 43.0 319.0 99.34 MB

Free online agile retrospective meeting tool

Home Page: https://www.parabol.co/

License: Other

JavaScript 2.29% CSS 0.43% HTML 0.04% TypeScript 97.17% Shell 0.06% Dockerfile 0.02%
saas realtime kanban nodejs react rethinkdb graphql stripe redis agile

parabol's People

Contributors

87prashant avatar ackernaut avatar acressall avatar adaniels-parabol avatar bartoszjarocki avatar blimmer avatar dan-f avatar dependabot[bot] avatar dschoordsch avatar enriquesanchez avatar github-actions[bot] avatar gitstart avatar gitstart-parabol avatar igorlesnenko avatar jchandler-parabol avatar jimmylv avatar jmtaber129 avatar jordanh avatar mattkrick avatar michaelwagner avatar mwermuth avatar ndey96 avatar nickoferrall avatar nikaiyer avatar parabol-release-bot[bot] avatar rafaelromcar-parabol avatar shapel avatar tghanken avatar tianrunhe avatar tiffanyhan 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

parabol's Issues

Trivial refactor: use __PRODUCTION__ global throughout codebase

Issue - Enhancement

This is a chip-shot, one-pointer mission to clean up a few corners of our code base. This mission depends upon the resolution #44 as a prerequisite.

After the adoption of Meatier, the variable PROD was introduced in a few places. Action has a global __PRODUCTION__ that is provided by its webpack configuration. Your mission, should you choose to accept it, is the following:

  1. Re-factor the code to use the global __PRODUCTION__ instead of PROD
  2. Create a document in docs/ called globals.md that describes all of the globals from the webpack configuration (see webpack/webpack*.js)

Generic login container & route protection redirect.

On the current deployment to staging (http://action-staging.parabol.co) if you access a meeting route without being logged in (e.g. http://action-staging.parabol.co/meeting/c46c8ce7-9422-4102-af18-608aae5ca133), the application will fail mysteriously.

We'll need to begin by specing a generic login page, make certain to wrap all protected routes in a check to see if a user has authenticated, and redirect users first to the login page before proceeding.

First Pass at Team Settings Page

Checklist:

  • Can add team members
  • Can remove team members
    • Can remove team members (reassigns projects to team leader)
  • Team Creator is default Team Leader
  • Team Leader can give Team Leader permissions to others
  • Team Leader can take away Team Leader permission from other Team Leaders
  • Can edit team name

Add JWT

Both for Falcor and Websockets API requests.

Migrated to inline styles

Mission - Enhancement

We're migrating Action's react containers and components to use inline styles (either Radium or react-look). The enhancement will give us the following advantages:

  • Smaller/optimized client payload
  • Component re-use
  • Easier targeting to react-native for a future mobile app

Meeting Facilitator Promotion added to MeetingLayout

For folks attending a meeting, show who's the facilitator. Allow facilitator to promote another to be the facilitator. Automatically promote another person to be the facilitator if the facilitator leaves the meeting.

Handle 1:M user:socket relationship

User story: I log in, i begin editing a story, and my crappy internet connection fails. or my rickity old computer dies. Or my browser crashes. Or i hit refresh. In all 4 scenarios, the "componentWillUnmount" lifecycle trigger never happens, meaning I'm still in that list of "currentEditors". That means, I can't trust the client to take me off the currentEditors list, it has to come from the server when it receives an unsubscribe. Then, i can take that socketId and remove it from the recently unsubscribed channel. But, ultimately we want names, not ugly socketIds. So, since 1 username has many connections, we'll have to create a separate "Connections" table that links a connection to a userId or userName.

User story to explain: Jan is on her laptop & tablet. she is editing the same field from both (Jan is a freak). The activeLabel just shows "Jan" once. She realizes she's a freak, logs off her tablet & even though she's still editing on her laptop, it says she's no longer a currentEditor.

Refactor: sprint to begin new user journey

Issue - Enhancement

Time to get serious! Let's refactor what we have into a real welcome journey we can use.

Use Cashay!

  • Estimated effort: 2 points ~ 2 days (see CONTRIBUTING.md)
  • Mission: https://goo.gl/jHX918
  • Create new Welcome module, route, and container
  • On successful account creation, send welcome email and redirect to Welcome
  • Create new UserProfile for user, navigate to step 2
  • Create new Team for user
  • Stub out component (can literally say "TBD") for team invitations (see: #59)

For reference:

slack for ios upload

Build graphQL schemas and tables for meetings

Issue - Enhancement

Entities needed:

  • TeamMember Actions
  • TeamMember Projects
  • Meeting Agenda Items
  • Meeting History
  • Meeting Changelog
  • Participants
  • Connections

Items of note:

  • I'm pretty sure we'll want the TeamMember Actions/Projects to live off the user profile since the hot queries (user dashboard) will be grabbing all actions/projects for all teams for a given user.
  • 1:1 relationships usually aren't great for performance, and since each team can only have 1 meeting, we can combine team/meeting/lobby into 1 DB table (maybe explicitly rename it to TeamMeeting), and then break them apart in the GraphQL schema if need be.
  • Agenda items is given its own table for now, but we could bring it into Team later on depending on how hot queries get.

Proposal:
new doc 4_1

This is a predecessor to #74 and mattkrick/cashay#27

New landing page stub designed and implemented

Issue - Enhancement

After our move to Meatier, we've decided to eliminate bootstrap fully from the codebase. The old landing page (hosted at route /) used a combination of bootstrap, tachyons, and custom SCSS to render.

Let's stub out a landing page that only depends on in-line styles. Let's not worry about final design aesthetic or marketing content, but rather establish the patterns for allowing us to develop these in the future.

node dev piping broken

Issue - Bug

@mattkrick:

piping is broken & i'm not sure why. When it auto-restarts, i get EADDRESSINUSE almost always. Also, it only worked in development, and we should be debugging server code in production.

@jordanh:

This has been driving me nuts. Let's create an issue. I suspect it's because the SC worker process isn't exiting.

I want to track this down either via a git bisect and a test script or adding a hook on exit that looks at node's run queue.

Fix linting errors after Meatier migration

Issue - Bug

After migrating to Meatier, nearly 200 linting errors were introduced, not surprisingly, since Meatier used the rules from xo.

To complete this mission, reduce the number of linting errors to 0. Please use the latest version of eslint, >=v2.7.0.

  • OS: OSX 10.11.4
  • Node version: v5.10.1
  • NPM version: 3.8.6
  • RethinkDB version: rethinkdb 2.2.5 (CLANG 7.0.2 (clang-700.1.81))
  • Estimated effort: 8 points ~ less than two weeks (see CONTRIBUTING.md)
  • Link to mission spec: https://goo.gl/ESjhWB

Unit tests for AppInfo reducer

Mission summary

This mission will establish the basic pattern for unit testing all redux action creators and reducers. It’s especially vital to establish this pattern for mocking interactions with the Falcor API.

Estimated Size

5 points ~ five to seven days

Mission Spec

Read mission spec here

Landing Page Unit Tests

Let's establish a pattern for how to unit test actual page loads. Let's use PhantomJS or similar.

  1. Landing page renders /
  2. Can click Get Started and pop-up the auth0

auth token handling in preparation for socketization

Issue - Enhancement

Cashay is ready to test for subs, but before we support subs, we need to come up with a good pattern for sharing the auth token between socketCluster, cashay, redux, and localStorage/localForage/reduxNativeStorage.

Auth tokens are tricky beasts because they don't live in the database, although they do come from the server. I'm not sure whether it's considered local state or domain state because it can't be generated on the client, but it can be invalidated on the client (ie validate expiration). In our particular case, we don't need it to come from our GraphQL server, but in doing so, we establish a pattern that does not depend on auth0.

So, assuming the authToken comes from our GraphQL server, we have a few options:

  • Cashay (persist automatically using redux-persist)
    • Cons: requires application-specific redux-persist transform, application-specific AuthEngine for socketCluster, and adding localOnly option to cashay
  • Cashay + persist manually (outside of redux)
    • Cons: requires __CLIENT__ conditionals for SSR, the token is stored in 2 locations (redux, local state), requires application-specific logic to expire/refresh each location
  • Fetch + persist manually (outside of redux)
    • Cons: requires __CLIENT__ conditionals for SSR, authToken is handled outside of GraphQL, lots of code to rewrite when we switch to localForage or reactive native storage
  • Fetch + put in redux (persist automatically using redux-persist)
    • Cons: requires application-specific redux-persist transform, AuthEngine for socketCluster, authToken is handled outside of GraphQL

The options in bold are the ones that I think suck the least, but none are great.
@jordanh any strong feelings or possible alternatives?

@Mentions in cards generate notifications

Original title: @Mentions in Meetings generate new notifications

  • When a card gets updated & it has a @Matt mention, I should get a notification saying I've been mentioned in a card

TBD:

  • How to throttle? Add @matt remove @matt add @matt
  • Should it trigger a notification from card updates during a meeting if the mentioned person is checked-in?

Use auth0 refreshToken to keep a user logged in during a meeting

Issue - Enhancement

It would be a stinky user experience of a user's JWT authentication token expired during a meeting. Instead we could:

  • Request a refreshToken on behalf of the user when they log in
  • If the JWT expires, and the user is attending a meeting, request a new JWT for them instead of asking them to reauthenticate
  • Estimated effort: 5 points (see CONTRIBUTING.md)

RFC Add roles to JWT

Issue - Enhancement

It makes sense to keep team-based permissions out of the JWT to keep it lightweight, but we should add in some app-level permissions.
I'm proposing a rol field inside the JWT (protocol is to keep a field limited to 3 chars). By default, it will not be included. But if it is, it could have the following values:

  • su: superuser. can visit the /graphql page and email templates that @ackernaut is setting up. Can query and mutate entities that do not belong to it. Given to parabol employees. Certain sensitive items, like the inviteToken are still hidden via graphql & require direct DB access.

By including this in the token, we don't have to hit the database to check for admin privileges on every single query. This is useful for a query like getTeamById where we only want to return a value if the person is a member of that team OR if they are a parabol employee.

By using su as the value, we save 2 characters compared to using true, plus it allows us to add in more roles later, for instance, maybe certain employees can only view credit card info...

Estimated effort: 1 point (see CONTRIBUTING.md)

New relic or datadog integration

Mission summary

Cloud monitoring of our production infrastructure is essential. In past applications we used New Relic, but we're also open to trying Datadog.

Estimated Size

5 points ~ five to seven days

Mission Spec

Read mission spec here

New 'Mission-oriented' Issue Template

Mission - Enhancement

We've got an issue template now from Meatier, but we should iterate upon this template to make it easier for the community to jump into our development groove: mission creation -> spec (& bid) -> design (&bid) -> (assign &) build -> review -> merge

Unit tests for falcor-saddle

Mission summary

falcor-saddle is a dependency of Action's. It's the little Falcor router helper that greatly reduces the repetitive code we'd need to write to stitch Falcor and RethinkDB together. falcor-saddle is in need of a suite of unit tests, and, perhaps a few small fixes as those unit tests are created.

Estimated Size

8 points ~ Less than two weeks

Mission Spec

Read mission spec here

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.