Giter Club home page Giter Club logo

level's People

Contributors

cas27 avatar davecremins avatar derrickreimer avatar devonestes avatar mitjabezensek avatar mjankowski avatar pradyumna2905 avatar r00k avatar simonrw avatar theevangelista avatar tomsun 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

level's Issues

Implement group memberships

To Do

  • Create a group_memberships join table
  • Automatically establish a membership when a user creates a group

Add featuredMemberships connection to groups

Rather than encoding logic in Elm to determine what users to display in the sidebar of groups, let's push that logic to the server-side and just ask the server for all the featuredMemberships for the group.

Re-architect authentication

To Do

  • Decouple user registration and space creation
    • Step 1: Sign up for a Level user account (email, full name, password)
    • Step 2: Create a new space (or join an existing space)
  • Join users to spaces via a space_users table
  • Remove subdomain routing in favor of path routing

List groups in a space

To Do

  • Add a paginated groups field to spaces
  • Default to ordering by name in ascending order
  • Accept a state argument, in addition to order, to filter by open or closed (default to OPEN)

Ability to invite a user to join a group

To Do

  • Create a group_invitations table
  • Add a connection to the user object to retrieve their pending invitations
  • Ability for the invited user to accept the invitation
  • Ability for the invited user to reject the invitation
  • Ability for the invitee to revoke the invitation

Ability to create a group

Groups belong to spaces. They are the mechanism for organizing:

  • Sub-teams within an organization (e.g. Developers, Marketing)
  • Collections of people interested in a particular topic (e.g. Dad Jokes)

Any member of the space should be allowed to create a group. At a minimum, they require a name and a designation about whether they are "private". Optionally, groups can have a description. Down the line, we might add more personalization options, like an avatar and banner photo.

To Do

  • Create the groups table
  • Add a createGroup GraphQL mutation

Dockerize app

It would make the development experience so much easier without the hassle of installing the environment dependencies (Elixir, PostgreSQL & Node.js) with their correct versions. It would also help a lot with deployment.

Remove usernames from users

We are going to stick with using real names for people. This will also cut down on the number of fields required to get in to the product and get started.

Strip out rooms

This domain logic is all prototype stuff and needs to be rebuilt to fit the latest paradigm in the works.

Add typespecs to Spaces context

Using Elixir's typespecs will have two benefits:

  • Eliminates the need for verbose examples in the @doc string
  • Gets statically analyzed by Dialyzer, which is now a part of the build pipeline

View group page

To Do

  • Add new route for viewing a group
  • Wire up the group links in the sidebar

Post on Groups should display line endings

Currently if a user type on the textarea to post something on a group and type ENTER to feed a new line, it is displayed a single line on the listing of posts.

screenshot-2018-6-11 level

But if a user double feed the line new, it appears as wanted.

The fix should be simple as adding white-space: pre-wrap; to the rendering container

Mixed Elixir version dependencies

In the readme, it is stated that Elixir 1.4.3 or higher is required. There is also a "deploy to heroku" button which attempts to deploy the master branch to, well, heroku. As of a few moments ago when I tried it, deploying failed due to an insufficient Elixir version.

Apparently mix.exs states the version of elixir must be ~> 1.6. Here's the full stacktrace from heroku:

-----> Elixir app detected

-----> Checking Erlang and Elixir versions

       WARNING: elixir_buildpack.config wasn't found in the app

       Using default config from Elixir buildpack

       Will use the following versions:

       * Stack heroku-16

       * Erlang 20.1

       * Elixir 1.5.0 

-----> Will export the following config vars:

DATABASE_URL

LEVEL_HOST

LEVEL_MAILER_HOST

LEVEL_POOL_SIZE

LEVEL_SECRET_KEY_BASE

LEVEL_SMTP_HOST

LEVEL_SMTP_PASSWORD

LEVEL_SMTP_PORT

LEVEL_SMTP_USERNAME

       * MIX_ENV=prod

-----> Stack changed, will rebuild

-----> Fetching Erlang 20.1

-----> Installing Erlang 20.1 (changed)

-----> Fetching Elixir v1.5.0 for OTP 20

-----> Installing Elixir v1.5.0 (changed)

-----> Installing Hex

* creating /app/.mix/archives/hex-0.17.3

-----> Installing rebar

* creating /app/.mix/rebar

* creating /app/.mix/rebar3

-----> Fetching app dependencies with mix

Resolving Hex dependencies...

Dependency resolution completed:

  absinthe 1.4.5

  absinthe_phoenix 1.4.0

  absinthe_plug 1.4.0

  bamboo 0.8.0

  bamboo_smtp 1.4.0

  base64url 0.0.1

  certifi 2.0.0

  combine 0.9.6

  comeonin 3.0.2

  connection 1.0.4

  cowboy 1.1.2

  cowlib 1.0.2

  dataloader 1.0.0

  db_connection 1.1.3

  decimal 1.4.1

  earmark 1.2.4

  ecto 2.2.8

  elixir_make 0.4.0

  ex_doc 0.18.1

  gen_smtp 0.12.0

  gettext 0.13.1

  hackney 1.11.0

  idna 5.1.0

  joken 1.5.0

  jose 1.8.4

  metrics 1.0.1

  mime 1.2.0

  mimerl 1.0.2

  phoenix 1.3.2

  phoenix_ecto 3.2.3

  phoenix_html 2.10.5

  phoenix_pubsub 1.0.2

  plug 1.5.0

  poison 3.1.0

  poolboy 1.5.1

  postgrex 0.13.5

  ranch 1.3.2

  ssl_verify_fun 1.1.1

  timex 3.1.15

  tzdata 0.5.12

  unicode_util_compat 0.3.1

* Getting phoenix (Hex package)

* Getting phoenix_pubsub (Hex package)

* Getting phoenix_ecto (Hex package)

* Getting postgrex (Hex package)

* Getting phoenix_html (Hex package)

* Getting gettext (Hex package)

* Getting cowboy (Hex package)

* Getting comeonin (Hex package)

* Getting timex (Hex package)

* Getting ex_doc (Hex package)

* Getting absinthe (Hex package)

* Getting absinthe_plug (Hex package)

* Getting absinthe_phoenix (Hex package)

* Getting dataloader (Hex package)

* Getting joken (Hex package)

* Getting bamboo (Hex package)

* Getting bamboo_smtp (Hex package)

* Getting gen_smtp (Hex package)

* Getting hackney (Hex package)

* Getting plug (Hex package)

* Getting poison (Hex package)

* Getting mime (Hex package)

* Getting certifi (Hex package)

* Getting idna (Hex package)

* Getting metrics (Hex package)

* Getting mimerl (Hex package)

* Getting ssl_verify_fun (Hex package)

* Getting unicode_util_compat (Hex package)

* Getting jose (Hex package)

* Getting base64url (Hex package)

* Getting decimal (Hex package)

* Getting earmark (Hex package)

* Getting combine (Hex package)

* Getting tzdata (Hex package)

* Getting elixir_make (Hex package)

* Getting cowlib (Hex package)

* Getting ranch (Hex package)

* Getting connection (Hex package)

* Getting db_connection (Hex package)

* Getting ecto (Hex package)

* Getting poolboy (Hex package)

-----> Copying hex from /app/.mix/archives/hex-0.17.3

-----> Compiling

** (Mix) You're trying to run :level on Elixir v1.5.0 but it has declared in its mix.exs file it supports only Elixir ~> 1.6

 !     Push rejected, failed to compile Elixir app.

 !     Push failed

Render posts in groups

Follow-on from #64

  • Render posts in groups on initial page load
  • Render posts in-realtime as they are created
  • Parse them as markdown

Accessibility

I urge you to integrate accessibility for people with disabilities in your interface. You have a golden opportunity to make it happen from the start, rather than have to retrofit it in later on.

People with disabilities have very little options for accessible communication platforms. This would be a fantastic tool.

Consider items such as:

  • All interactive elements can be reached and activated via keyboard
  • Focus is visible on all interactive elements
  • Color contrasts are good
  • Text can be resized to 200% without breaking
  • Screen readers can parse the information and announce everything
  • etc

Thank you

Ability to join a space by sharing a URL

During guided setup, the plan is to present the user with a "magic link" that can be shared around with colleagues (dare I say, posted in Slack?) to quickly join a space.

To Do

  • Create an open_invitations table to store the token and state
    • These can be "revoked" by the space owner at any time
  • Add an allow_open_invitations boolean to spaces, non-nullable, default to true
    • When false, then signing up via an open invitation should be disallowed
  • Auto-generate an open invitation when the space is created

Blank index page

Just installed level in development following the README. Everything went smoothly except when visiting http://localhost:4000 you just get a blank page. There were no errors, just no content. It took me a while to figure out what to do next.

It would be helpful to either have a message with a link to sign up in https://github.com/levelhq/level/blob/master/lib/level_web/templates/page/index.html.eex or just a redirect to sign up in the controller. Just thought this may help others who are setting it up locally.

Require Elixir ~> 1.6

CI is failing after adding the mix format verification.

  • Upgrade the Docker image used in Circle to 1.6.4
  • Update the mix config to require ~> 1.6

Instance setup wizard

When a new Level instance is created, the user needs to perform a few setup steps:

  • Create a user account
    • Designate the user as an instance super admin
  • Configure user policies
    • Allow open registration
    • Allow users to create spaces
  • ...?

The settings and wizard state should be stored in an instances table. The first (and only) record should be seeded upon creation of the database.

Fix CSRF verification on reservation form in production

Requests started getting rejected once we cut over to level.app. (It seemed to work fine on level-prod.herokuapp.com). I temporarily disabled protection here: 5d1df27

This is currently low risk since signups / authenticated sessions are disabled in prod right now.

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.