Git Product home page Git Product logo

spacetalk's Introduction

SpaceTalk is an open-source chat app built with Meteor.

Note: SpaceTalk is beta software. Most of it should work but it's still a little unpolished and you'll probably find some bugs. Use at your own risk :)

We Need Your Help!

A lot of work has already gone into SpaceTalk, but it needs that final push to reach its full potential.

So if you'd like to be part of the project, please check out the roadmap and issues to see if there's anything you can help with.

Features

Currently Implemented

  • Teams (group users into separate teams)
  • Channels (each group contains multiple channels)
    • Remove/edit channels
    • Pinned items
    • Channel purpose (description)
  • Users
    • Gravatar for profile pictures
    • Online status
    • Self sign up
  • Messages
    • Emoji, Markdown support
    • Edit & trash your own messages
    • Direct Messaging between users
    • Indication of user typing
    • Rich embeds via https://iframely.com/

On The Way

  • Pinned messages
  • Better notifications
  • Packages structure (for extensibility)
  • See the roadmap for more and get involved with bringing these features to life

Prerequisites

Style Guide & Naming Conventions

  • We're following Meteor Style Guide
  • Template names: <template name="camelCase"></template>
  • Route names: dashed-case/routing-perhaps
  • File names: dashed-case.html, dashed-case.js
  • Custom HTML id / class naming convention: <div id="dashed-case"></div> however class names preferred instead of using ids <div class="some-custom-class"></div>

Getting started

Fork the repository with the top right button and clone your fork:

git clone https://github.com/YOURGITHUBUSERNAME/SpaceTalk.git

Add the remote source to your local clone:

git remote add upstream https://github.com/SpaceTalk/SpaceTalk.git

Start the app:

cd SpaceTalk
meteor run --settings=settings.json

To update your clone do a pull:

git pull upstream master

Commit your changes to your fork, and create Pull Request with github helper

Guidelines for reviewing Pull Requests

  1. Code follows the Meteor Style Guide
  2. Code doesn’t break things (The app can still run)

Libraries

This project is in flux at the moment, these are the currently agreed upon client side libraries:

Packages

This project is in flux at the moment, these are the currently used Meteor packages:

  • markdown
  • reactive-var
  • accounts-password
  • momentjs:moment
  • fourseven:scss
  • copleykj:jquery-autosize
  • tmeasday:gravatar
  • meteorhacks:flow-layout
  • meteorhacks:flow-router
  • peerlibrary:blaze-components
  • mizzao:user-status
  • todda00:friendly-slugs
  • useraccounts:core
  • arillo:flow-router-helpers
  • seriousm:emoji-continued
  • mrt:tiny-scrollbar
  • jquery
  • kevohagan:sweetalert
  • fortawesome:fontawesome
  • aldeed:autoform
  • useraccounts:unstyled
  • dburles:collection-helpers
  • iframely:oembed
  • matb33:collection-hooks
  • qnub:emojione
  • mquandalle:jquery-textcomplete
  • ogourment:settings
  • tmeasday:presence

Disclaimer

This code was part of a Meteor Workshop that took place on the 14th of May 2015 in Gothenburg, Sweden.

We used it to build a chat application in 25 steps (https://slides.com/timbrandin/meteor-slack) – it was originally designed to look a little bit like Slack.

But it was solely made do demonstrate the efficiency and simple nature of Meteor applications.

Credits

Thanks to @timbrandin who created this material for a Meteor workshop.

License

Note that SpaceTalk is distributed under the MIT License.


Copyright © 2015 Tim Brandin & SpaceTalk

spacetalk's People

Contributors

adamdawkins avatar anbuselvan avatar dmitrijs-balcers avatar guidouil avatar idanwe avatar jonearley avatar kevincharm avatar lb- avatar mpowaga avatar nabiltntn avatar queso avatar rclai avatar samwightt avatar timbrandin avatar wulfmeister 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

spacetalk's Issues

What format should the 'event' variable take in client events

I've noticed a few different versions of the event variable already:

We've got:

function (e) { ... }

function (event) {...}

function (event, template) { ... } // admittedly me, and probably not common or necessary

The Meteor Style Guide doesn't give a preference here, but it should be consistent.

Integration of flow:router

Because iron:router is starting to lose the hearts of the meteor developers because it's not being maintained frequently enough we're thinking of using flow:router as our routing option

Error while running SpaceTalk on windows. No windows compatible build for fourseven:[email protected].

After starting up the app encountered with the following error

[[[[[ C:\Users\dmitrijsbalcers\Documents\GitHub\SpaceTalk ]]]]]

=> Started proxy.
=> Started MongoDB.
=> Errors prevented startup:

   While checking for fourseven:[email protected]:
   error: No compatible binary build found for this package. Contact the
   package author and ask them to publish it for your platform.

=> Your application has errors. Waiting for file change.

The version of the package should be changed to the 3.1.1. At the moment, I cannot apply the fix due to an issue described here - #28

Remove channels

As a user
I want to be able to delete a channel
so that it doesn't exist anymore.

Spec:

  • Any user can delete any channel
  • Warning should appear before deleting a channel
  • All messages associated with a channel get deleted as well.

Trello Card

nice up the home page

They current homepage doesnt look that attracting as it should be.. Let's make it somehwat nicer

Adding EditorConfig

we need some sort of generic way of forcing people to code in the right style.. I say implementing editorconfig. What do you guys say?

# EditorConfig helps developers define and maintain consistent
# coding styles between different editors and IDEs
# editorconfig.org

root = true


[*]

# Change these settings to your own preference
indent_style = space
indent_size = 2

# We recommend you to keep these unchanged
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false

Adding tests

Ill start of making some simple test for the most basic functionalitities in SpaceTalk using jasmine

Need more channel name logic checks and processing

You can insert a channel with the names:

hello world
hello           world
hello                           world

And in the front-end they'll all show up as:

hello world
hello world
hello world

When inserting, we need to do:

channelName.replace(/\s{2,}/g, ' ').toLowerCase().trim();

Generate Error Messages on the Client

Trello card: https://trello.com/c/ehJfaysD/65-re-style-sweet-alerts-to-conform-to-space-talk-core-design

To conform to the Meteor style guide (and for future i18n) it is better to generate error messages on the client as per this guide: https://github.com/meteor/meteor/wiki/Meteor-Style-Guide#generate-error-messages-on-the-client-not-on-the-server

Right: In the event of failure, the server returns a symbolic error code, 'no-such-user', 'site-not-found', or 'access-denied'. The client then looks up that error code in a table to get an appropriate message and displays it to the user.

Use a Modular CSS Methodology for all custom CSS (e.g. BEM, SMACSS)

I think CSS is probably more different between personal developers than any other language; so we could do with some stricter guidelines on custom styling. Especially when it comes to the maintainability of the CSS going forwards.

Any rules are better than no rules to some extent, but I'd suggest we use BEM:

  • It's got clearly defined rules
  • All rules are on classes so specificity stays under control
  • It plays great with SCSS
  • Developers could write classes to perform actions without needing to look them up in the CSS.

e.g. We currently have this.

  <aside class="channel-info channel-info-out">
    <span class="title">
      Channel info
      <i data-action="display-channel-info" class="fa fa-times channel-info-exit"></i>
    </span>
    <div class="aside-section channel-accordion">
      <ul class="scroll">
        <li>
          <input type="checkbox" checked>
          <i class="fa fa-caret-down"></i>
          <h2><i class="fa fa-info-circle icon icon-about"></i> About this channel</h2>
          <p>About this channel to be here</p>
        </li>
        <li>
          <input type="checkbox" checked>
          <i class="fa fa-caret-down"></i>
          <h2><i class="fa fa-thumb-tack icon icon-pinned"></i> Pinned items</h2>
          <p>Pinned items content to be here</p>
        </li>
        <li>
          <input type="checkbox" checked>
          <i class="fa fa-caret-down"></i>
          <h2><i class="fa fa-user icon icon-members"></i> Members</h2>
          <p>Members content to be here</p>
        </li>
      </ul>
    </div>
  </aside>

Combined with a lot of styling based on element names, or nested styles. I'll point out some of the potential problem areas.

(I should point out, this is actually a nice pure-CSS solution for the info panel written by @nabiltntn, it's just the naming conventions and scalability that may need addressing).

.channel-info .title {} // .title could be used elsewhere, so this may not do what is expected
.channel-info .channel-accordion ul li {} // I actually tried to add another ul here for other reasons, heavily affected by this CSS

/* we're restricted to using a p element here */
.channel-info .channel-accordion {
 ul li input[type=checkbox]:checked ~ p {
       margin-top: 0;
       max-height: 0;
       opacity: 0;
      transform: translate(0, 50%);
     }
}

In BEM, we'd have something more like this:

  <aside class="channel-info channel-info--out">
    <span class="channel-info__title">
      Channel info
      <i data-action="display-channel-info" class="fa fa-times channel-info-exit"></i>
    </span>
    <div class="channel-info__section channel-accordion">
      <ul class="scroll">
        <li class="channel-accordion__list-item">
          <input type="checkbox" checked>
          <i class="fa fa-caret-down"></i>
          <h2><i class="fa fa-info-circle icon icon-about"></i> About this channel</h2>
          <p class="channel-accordion__list-item-content">About this channel to be here</p>
        </li>
      </ul>
    </div>
  </aside>

and the classes used here make the CSS become markup agnostic.

// Blocks
.channel-info {}
.channel-accordion {}

// elements
.channel-info__title {}
.channel-info__section {}

.channel-accordion__list-item {}
.channel-accordion__list-item-content {}

// modifiers (or 'states')
.channel-info--out {}
.channel-footer--full {}
.channel-content--full {}

Lastly, using a pre-defined method would give us a great reference point to pass on to people trying to skin their own version; add new features; submit changes, etc.

Add direct message channels

We need direct message channels that can be created by either of the two users involved and always be the same channel.

Get @mitar's feedback on Blaze Components usage

@mitar, it would be great if you share with us your opinions/feedback/answer questions about how we've been using Blaze Components.

Contributors, feel free to ask questions and share concerns about the usage of Blaze Components.

Add detail to readme project style specifics

Anyone can delete a channel

https://github.com/SpaceTalk/SpaceTalk/blob/fe586b12f9226379f1ab7c9b5b44b0a520f50b6d/server/methods/channels/remove.js

Also are we using methods or minimongo + meteor.allow rules @timbrandin @dstollie .

https://trello.com/c/PbRfcm5M/66-use-methods-or-minimongo-for-writes-or-both-depending-on-use-case

In addition should we use matb33:collection-hooks to be deleting messages when channels are deleted?

I would rather use minimongo to delete it and use meteor.allow rules to first check if this user can delete this channel than checking in the method.

Right after cloning the project into Windows environment, a lot of files are being marked as deleted.

Right after cloning the project into Windows environment, a lot of files are being marked as deleted.

I presume that there might be some conflict in the way, where different environments set up the directory structure?

C:\Users\dmitrijsbalcers\Documents\GitHub\SpaceTalk>git status
On branch develop
Your branch is up-to-date with 'origin/develop'.

Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        deleted:    packages/useraccounts:core/.editorconfig
        deleted:    packages/useraccounts:core/.gitignore
        deleted:    packages/useraccounts:core/.jshintignore
        deleted:    packages/useraccounts:core/.jshintrc
        deleted:    packages/useraccounts:core/.travis.yml
        deleted:    packages/useraccounts:core/Guide.md
        deleted:    packages/useraccounts:core/History.md
        deleted:    packages/useraccounts:core/LICENSE.md
        deleted:    packages/useraccounts:core/README.md
        deleted:    packages/useraccounts:core/lib/client.js
        deleted:    packages/useraccounts:core/lib/core.js
        deleted:    packages/useraccounts:core/lib/field.js
        deleted:    packages/useraccounts:core/lib/methods.js
        deleted:    packages/useraccounts:core/lib/server.js
        deleted:    packages/useraccounts:core/lib/templates_helpers/at_error.js
        deleted:    packages/useraccounts:core/lib/templates_helpers/at_form.js
        deleted:    packages/useraccounts:core/lib/templates_helpers/at_input.js
        deleted:    packages/useraccounts:core/lib/templates_helpers/at_message.js
        deleted:    packages/useraccounts:core/lib/templates_helpers/at_nav_button.js
        deleted:    packages/useraccounts:core/lib/templates_helpers/at_oauth.js
        deleted:    packages/useraccounts:core/lib/templates_helpers/at_pwd_form.js
        deleted:    packages/useraccounts:core/lib/templates_helpers/at_pwd_form_btn.js
        deleted:    packages/useraccounts:core/lib/templates_helpers/at_pwd_link.js
        deleted:    packages/useraccounts:core/lib/templates_helpers/at_reCaptcha.js
        deleted:    packages/useraccounts:core/lib/templates_helpers/at_result.js
        deleted:    packages/useraccounts:core/lib/templates_helpers/at_sep.js
        deleted:    packages/useraccounts:core/lib/templates_helpers/at_signin_link.js
        deleted:    packages/useraccounts:core/lib/templates_helpers/at_signup_link.js
        deleted:    packages/useraccounts:core/lib/templates_helpers/at_social.js
        deleted:    packages/useraccounts:core/lib/templates_helpers/at_terms_link.js
        deleted:    packages/useraccounts:core/lib/templates_helpers/at_title.js
        deleted:    packages/useraccounts:core/lib/utils.js
        deleted:    packages/useraccounts:core/package.js
        deleted:    packages/useraccounts:core/tests/tests.js

Any suggestions how to solve this?

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.