GithubHelp home page GithubHelp logo

birdyard's Introduction

birdyard's People

Contributors

robotnoises avatar waffle-iron avatar

Stargazers

 avatar

Watchers

 avatar

birdyard's Issues

User profile

A User can view basic information about a User.

  1. If the profile is their own, it should be editable
  2. If the profile is another user's, they should only be able to see items that are made explicitly public by that user.

Delete Account

A user should be able to delete their account.

Note: we should sign-out first, then delete.

Search

A User should be able to perform a search for rooms based on

  • The room title
  • The room originator
  • Tag? (No concept of this yet)

Track user presence

*Be able to see if a user is on the site

  • Get a running count of users onlline

Create a room

User's should be able create a room, which is:

  1. A Title
  2. A User's display name & handle
  3. A Score (calculated based on up/downvotes)
  4. A link to a node

A node must also be created. This node is just link any other node except its origin is an empty string.

{
  title: 'Some title',
  displayName: 'The User's Display Name',
  handle: '@user_twitter_handle',
  score: 0,
  nodeId: 'firebasePushId'
}

This will be displayed the main room digest locations of Bebop.

Trophy

Top comments (most favorites above some arbitrary threshold) are recognized by getting a trophy. The total # of trophies a user gets should be something that can be recalled later-on in the user's profile.

Static pages

Need some static pages for the following:

  1. 404 errors
  2. Old-browser redirects

Notifications

A User should be generally aware of their replies. They shouldn't be notified of every single reply, but they should be notified for each comment of theirs that has at least one new repy to it.

Notifications should only display to the user if they are:

  1. New (some arbitrary period)
  2. Unread

The # of unread notifications should be displayed as a number that overlays the notification icon.
Notifications should be displayed in a list when the user clicks the notification icon.
Clicking a notification should take them to the parent comment, which is owned by the User.

Favorites

Summary

A user should be able to mark a comment as "favorite."

They cannot favorite their own comment.

They can only favorite a comment once.

Clicking a "star" that has already been favorited will un-favorite it.

Storage

A favorite will be stored in three places:

  1. It will be added to an array in nodes/{nodeId}/favorites
  2. It will be added to an array in nodes/{nodeId}/children/{childId}/favorites
  3. It will be added to the user's stash (session-only) for quick retrieval of favorites

Retrieval

  • When a node is loaded, the first place we should look is in the User's stash (sessionstorage). This will speed-up the process of displaying favorites.
  • An asynchronous task will also fetch favorites from Firebase.

Infiniscroll on rooms list

An arbitrary # of rooms, sorted by score, should be displayed on initial page load. As the User scrolls to the bottom, more rooms should display.

Edit a comment

A User should be able to edit or delete their comments.

Insert link to comment

A user should be able to easily insert a link to another comment without leaving their current context.

  • Click Link to Comment button
  • Get a quick list of recently visited links
  • Choose comment to link

The link should be displayed differently than standard Markdown-driven links.

Ads

Not sure what to do about this yet...

Responsive/Mobile

Site is somewhat there already, just need to add a collapsible menu.

Private rooms

Just like a regular room, but password protected.

Helpers for Markdown formatting

Click a button to insert markdown.

For youtube vids, present a modal that will create a preview image url from the video url. This will be its own Issue

Admin dashbord

  • Search for Users
  • Ban/Lock Users
  • Promote Users to admin
  • Get a list of flagged posts
  • Delete Posts
  • Broadcast (Show a system-wide banner)
  • Stats
    • Total # of users

Rate limiting

To prevent Spam/Bots as well as to keep the conversation thoughtful, Bebop should enforce a dead period of arbitrary length (maybe like 15 3 seconds) during which the user can not submit a new reply.

  1. There should be a visual indicator of this dead period on the client-side. If the user chooses to reply within the dead period, a countdown will be displayed on the dialog in a meaningful way.
  2. Firebase security should rules be configured to invalidate any newData that is submitted during the dead period.

List of worker tasks

Here's a running list of worker tasks...

  1. Clean-up old data.... notifications
  2. Validate stored objects with two-way relationships nodes
  3. Calculate room "score" (based on time and # of replies)
  4. Monitor/lock/ban accounts engaging in abusive activity... mostly a spam filter for accounts posting way too frequently Move to a new Issue for a later Milestone
  5. Garbage collector for dead rooms (score below some threshold)

Markdown

I'd like to support markdown in some capacity. Not sure if I want the full-blown feature set or a lighter flavor.

Will likely use the angular-markdown directive.

Up/Down vote rooms

  • By default, a user will upvote their own room.
  • A user can only vote on a room once (they can change their mind)

Indicator for no messages

Need some sort of indicator for when a node has no child nodes.

The user should be able to click the object, which should at least place the user's cursor in the textarea to add a message/reply.

UI Overhaul

Needs a ton of polish, most notably:

  • Pick an aesthetic and go with it (flat? depth?) flat.
  • Finish notifications style
  • Design rooms list containers
  • Design comment container
  • Smaller avatar/logo
  • Move reply bar/window to bottom Decided to keep it up top.
  • Auto-scroll on feature overflow
  • New icons Stuck with font awesome

First time authenticating

Add a flag to the user object that indicates whether or not this is the user's first time signing in.

When an onAuth event fires, check for the flag. If it is false or undefined, redirect the user to their profile page, giving them the option to update Their "display name" and what they want public/private. There should be a callback to whatever the original page was when they are finished.

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.