An IRC replacement for the modern age
Python JavaScript
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
static
templates
.gitignore
README.md
sockityak.py

README.md

Sockityak

Trying out README driven development.

A replacement for IRC, meant for ADI consumption

APPNAME = Sockityak; subject to changes

STORIES

1.) Bob is a normal college student at Columbia, who is also interested in computer science (this makes him highly abnormal, but nevermind). He wants to talk about some programming things once in a while, but the main avenue for connecting the ADI executive board (e-board) is through IRC, which no one is on, or the committee list-serv, which isn't an informal conversation thing. When APPNAME comes out, he tries it out: after finding the general chat conversation not to his fancy, he tries to talk about something else: this thread of conversation is forked, and eventually some ADI members find his thread after getting notifications of his new channel, and they have a nice real-time conversation.

2.) John is an ADI e-board member: he doesn't know what the community members want, so he asks them on APPNAME. Since APPNAME has become a hangout for the Columbia tech community, he gets responses within a day (a reasonable amount of time!) and even strikes up an hour of furious debate. He gets the feedback from the people that care most, especially outside of the e-board.

3.) Nathan is bored, and wants to talk. He logs on to APPNAME, and makes a meme-thread. Everyone has fun posting silly pictures of each other, and many lols are had.

GOALS

  • Provide a highly asynchronous chat
  • Interval digests
  • Tiered notifications
  • Twitter-like conventions (@ (mention), # (tag))
  • Some extensions to the twitter conventions (!@ (immediate notify), ## (channel), @##channel:line (reply to line), @# (notify tag watchers), )
  • Autocomplete EVERYTHING
  • Add in a +1/like infrastructure
  • XMPP integration (digests/notifications)
  • smart digests (new tags, @, highly voted treated specially, both new topics and watched topics)
  • IRC integration (single channel)
  • rate-limiting
  • ban-hammer: channel and org-wide
  • forking model
  • NLP to determine whether a user would want to know about this update
  • NLP to determine topic name
  • Voting system for topic changes, merges(?)
  • Ensure University association for chat
  • Possibly access control (users against orgs/threads)
  • Possibly organization separation
  • Learn tornado and redis and mongodb

TODO

  • X Get Redis running
  • X Get Python+Redis working (apt-get install python-redis)
  • X Get Tornado running (pip install tornado, ubuntu current is 1.2)
  • X Get Tornado+Redis running (simple updates)
  • X Get AJAX-y Tornado+Redis running
  • X Get real time chat
  • X Add channels
  • X switch to json format in chat data
    • X define an extensible json schema (if you consider "type"/"message")
  • X Add auth (google oauth, or facebook oauth. or both)
    • X remake redis sessions
  • X Switch to mongodb (except sessions, pubsub)
  • X check sessions are still valid after each message
  • Probably clean up the styles right about here
    • front page
    • X channel list
    • X channel
    • settings
  • who's in the room list? / past participants (sadd, srem)
  • X Add title-page notification
    • X Add audio notifications
    • easy mute?
  • Add email notifications
    • add "watch" mechanism
    • once per message, if you're not already connected
    • digest (hourly)
    • digest (daily, weekly, hourly)
  • Parse out @ and #
    • get XMPP working
    • !@ - direct notification (marked digest, email, XMPP, text)
    • lots of if-this-then-that functionality
  • redis-based rate-limiting

USING

  • Tornado
  • Redis
  • MongoDB
  • asyncmongo
  • websockets
  • jQuery
  • backbone.js

CONCERNS

  • Grove.io?
    • Still based on IRC
    • Does not seem to have tiered notifications
    • No NLP fanciness
    • No forking model
    • Not voting system
    • Won't learn Tornado unless I build APPNAME