Giter VIP home page Giter VIP logo

waxpoetic / brotherly Goto Github PK

View Code? Open in Web Editor NEW
2.0 2.0 1.0 10.34 MB

A series of expertly curated events, featuring musicians from the Philadelphia area and beyond.

Home Page: http://brother.ly

License: BSD 2-Clause "Simplified" License

Ruby 69.91% JavaScript 4.57% CSS 0.40% HTML 4.30% Dockerfile 0.78% Shell 0.10% SCSS 9.37% Slim 10.58% Haml 0.01%
music philadelphia ruby-on-rails video

brotherly's Introduction

WaxPoeticRecords.com

Build Status

The official site of Wax Poetic Records, an open-source record label from Philadelphia. On the surface, this application powers http://www.waxpoeticrecords.com and serves a speedy and simple marketing site for the label. Powering this front-end is a central repository for all information related to the label, including the artist roster, release catalog, upcoming events, and social media automation features. In addition to the marketing site consuming this backend information, it's also provided as an API to power our various band marketing sites such as http://www.thewonderbars.com and http://www.rnd.club, which are simple front-end apps that call out to this API for information.

Features

  • Artist and Release catalog
  • Automated promotional support for new releases on social media
  • JSON API for powering additional marketing sites
  • Frontend marketing site powered by ES6, Haml and SCSS.
  • Events database and artists CMS powered by Facebook

Feature Roadmap

  • Post new Releases to Twitter, Facebook and Instagram
  • Layout re-design, make it less boring

Development

To develop on this app, you must have the following installed onto your system:

  • Ruby 2.3.0
  • PostgreSQL 9.3 or above
  • PhantomJS

Setup

Clone this repo down:

git clone [email protected]:waxpoetic/waxpoeticrecords.com.git

Install dependencies and stand up the database:

bundle install
rake db:setup

Start the Rails server:

bin/rails server

Running Tests

A passing build is required for all contributions to this repo. Make sure the build passes by running tests on your local machine, and fixing them if they're broken:

bin/rake test

You can also run different suites of tests for faster results:

bin/rake test:units
bin/rake test:features

Deployment

Deployments are performed automatically using Travis CI. All pushes to master will be deployed to the staging server at http://dev.waxpoeticrecords.com, and all tag pushes will result in a deployment to the production site at http://www.waxpoeticrecords.com.

To bump the version number, tag a new release, and deploy it, run the following Rake task:

bin/rake release

You can specify what kind of release you want to deploy:

bin/rake release:patch
bin/rake release:minor
bin/rake release:major

Contributions

We accept contributions in the form of a pull request, and with a passing build that adheres to this README and the CODE OF CONDUCT.

brotherly's People

Contributors

avinashgudipati avatar dependabot[bot] avatar jemagee avatar tubbo avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Forkers

project-kotinos

brotherly's Issues

"undefined method `>=' for nil:NilClass" on home page when new episode is created without ends_at

When an Episode without an ends_at date is viewed, it will cause the following exception due to a comparison between starts_at and ends_at on the Episode record. To resolve this, either validate that an ends_at date occurs or test whether ends_at exists on the Episode before making this comparison.

Check full details on Airbrake: #1620515088365627056

Backtrace:

/app/app/decorators/episode_decorator.rb:123:in autoplay?
/app/app/decorators/episode_decorator.rb:116:in video_tag_options
/app/app/decorators/episode_decorator.rb:17:in video_tag
/app/app/views/episodes/_details.html.haml:10:in block (2 levels) in _app_views_episodes__details_html_haml___950854650944893955_70084323534700
/gems/actionview-4.2.5/lib/action_view/helpers/cache_helper.rb:190:in write_fragment_for
/gems/actionview-4.2.5/lib/action_view/helpers/cache_helper.rb:179:in fragment_for
/gems/actionview-4.2.5/lib/action_view/helpers/cache_helper.rb:115:in cache
/app/app/views/episodes/_details.html.haml:5:in block in _app_views_episodes__details_html_haml___950854650944893955_70084323534700
/gems/actionview-4.2.5/lib/action_view/helpers/cache_helper.rb:190:in write_fragment_for
/gems/actionview-4.2.5/lib/action_view/helpers/cache_helper.rb:179:in fragment_for
/gems/actionview-4.2.5/lib/action_view/helpers/cache_helper.rb:115:in cache
/app/app/views/episodes/_details.html.haml:1:in _app_views_episodes__details_html_haml___950854650944893955_70084323534700
/gems/actionview-4.2.5/lib/action_view/template.rb:145:in block in render
/gems/activesupport-4.2.5/lib/active_support/notifications.rb:164:in block in instrument
/gems/activesupport-4.2.5/lib/active_support/notifications/instrumenter.rb:20:in instrument
/gems/activesupport-4.2.5/lib/active_support/notifications.rb:164:in instrument
/gems/actionview-4.2.5/lib/action_view/template.rb:333:in instrument
/gems/actionview-4.2.5/lib/action_view/template.rb:143:in render
/gems/actionview-4.2.5/lib/action_view/renderer/partial_renderer.rb:339:in render_partial
/gems/actionview-4.2.5/lib/action_view/renderer/partial_renderer.rb:310:in block in render
/gems/actionview-4.2.5/lib/action_view/renderer/abstract_renderer.rb:39:in block in instrument
/gems/activesupport-4.2.5/lib/active_support/notifications.rb:164:in block in instrument
/gems/activesupport-4.2.5/lib/active_support/notifications/instrumenter.rb:20:in instrument
/gems/activesupport-4.2.5/lib/active_support/notifications.rb:164:in instrument
/gems/actionview-4.2.5/lib/action_view/renderer/abstract_renderer.rb:39:in instrument
/gems/actionview-4.2.5/lib/action_view/renderer/partial_renderer.rb:309:in render
/gems/actionview-4.2.5/lib/action_view/renderer/renderer.rb:47:in render_partial
/gems/actionview-4.2.5/lib/action_view/helpers/rendering_helper.rb:35:in render
/gems/haml-4.0.7/lib/haml/helpers/action_view_mods.rb:10:in block in render_with_haml
/gems/haml-4.0.7/lib/haml/helpers.rb:89:in non_haml
/gems/haml-4.0.7/lib/haml/helpers/action_view_mods.rb:10:in render_with_haml
/app/app/views/episodes/current.html.haml:2:in block in _app_views_episodes_current_html_haml___3925692127238033081_70084319853760
/gems/actionview-4.2.5/lib/action_view/helpers/cache_helper.rb:190:in write_fragment_for
/gems/actionview-4.2.5/lib/action_view/helpers/cache_helper.rb:179:in fragment_for
/gems/actionview-4.2.5/lib/action_view/helpers/cache_helper.rb:115:in cache
/app/app/views/episodes/current.html.haml:1:in _app_views_episodes_current_html_haml___3925692127238033081_70084319853760
/gems/actionview-4.2.5/lib/action_view/template.rb:145:in block in render
/gems/activesupport-4.2.5/lib/active_support/notifications.rb:164:in block in instrument
/gems/activesupport-4.2.5/lib/active_support/notifications/instrumenter.rb:20:in instrument
/gems/activesupport-4.2.5/lib/active_support/notifications.rb:164:in instrument
/gems/actionview-4.2.5/lib/action_view/template.rb:333:in instrument
/gems/actionview-4.2.5/lib/action_view/template.rb:143:in render
/gems/actionview-4.2.5/lib/action_view/renderer/template_renderer.rb:54:in block (2 levels) in render_template
/gems/actionview-4.2.5/lib/action_view/renderer/abstract_renderer.rb:39:in block in instrument
/gems/activesupport-4.2.5/lib/active_support/notifications.rb:164:in block in instrument
/gems/activesupport-4.2.5/lib/active_support/notifications/instrumenter.rb:20:in instrument
/gems/activesupport-4.2.5/lib/active_support/notifications.rb:164:in instrument
/gems/actionview-4.2.5/lib/action_view/renderer/abstract_renderer.rb:39:in instrument
/gems/actionview-4.2.5/lib/action_view/renderer/template_renderer.rb:53:in block in render_template
/gems/actionview-4.2.5/lib/action_view/renderer/template_renderer.rb:61:in render_with_layout
/gems/actionview-4.2.5/lib/action_view/renderer/template_renderer.rb:52:in render_template
/gems/actionview-4.2.5/lib/action_view/renderer/template_renderer.rb:14:in render
/gems/actionview-4.2.5/lib/action_view/renderer/renderer.rb:42:in render_template
/gems/actionview-4.2.5/lib/action_view/renderer/renderer.rb:23:in render
/gems/actionview-4.2.5/lib/action_view/rendering.rb:100:in _render_template
/gems/actionpack-4.2.5/lib/action_controller/metal/streaming.rb:217:in _render_template
/gems/actionview-4.2.5/lib/action_view/rendering.rb:83:in render_to_body
/gems/actionpack-4.2.5/lib/action_controller/metal/rendering.rb:32:in render_to_body
/gems/actionpack-4.2.5/lib/action_controller/metal/renderers.rb:37:in render_to_body
/gems/actionpack-4.2.5/lib/abstract_controller/rendering.rb:25:in render
/gems/actionpack-4.2.5/lib/action_controller/metal/rendering.rb:16:in render
/gems/actionpack-4.2.5/lib/action_controller/metal/instrumentation.rb:44:in block (2 levels) in render
/gems/activesupport-4.2.5/lib/active_support/core_ext/benchmark.rb:12:in block in ms
/app/vendor/ruby-2.2.2/lib/ruby/2.2.0/benchmark.rb:303:in realtime
/gems/activesupport-4.2.5/lib/active_support/core_ext/benchmark.rb:12:in ms
/gems/actionpack-4.2.5/lib/action_controller/metal/instrumentation.rb:44:in block in render
/gems/actionpack-4.2.5/lib/action_controller/metal/instrumentation.rb:87:in cleanup_view_runtime
/gems/activerecord-4.2.5/lib/active_record/railties/controller_runtime.rb:25:in cleanup_view_runtime
/gems/actionpack-4.2.5/lib/action_controller/metal/instrumentation.rb:43:in render
[GEM_ROOT]/bundler/gems/turbolinks-ad583843fdaa/lib/turbolinks/redirection.rb:39:in render
/gems/responders-2.1.1/lib/action_controller/responder.rb:236:in default_render
/gems/responders-2.1.1/lib/action_controller/responder.rb:170:in to_html
/gems/responders-2.1.1/lib/responders/flash_responder.rb:107:in to_html
/gems/responders-2.1.1/lib/action_controller/responder.rb:163:in respond
/gems/responders-2.1.1/lib/action_controller/responder.rb:156:in call
/gems/responders-2.1.1/lib/action_controller/respond_with.rb:205:in respond_with
/app/app/controllers/episodes_controller.rb:13:in current
/gems/actionpack-4.2.5/lib/action_controller/metal/implicit_render.rb:4:in send_action
/gems/actionpack-4.2.5/lib/abstract_controller/base.rb:198:in process_action
/gems/actionpack-4.2.5/lib/action_controller/metal/rendering.rb:10:in process_action
/gems/actionpack-4.2.5/lib/abstract_controller/callbacks.rb:20:in block in process_action
/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:117:in call
/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:117:in call
/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:555:in block (2 levels) in compile
/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:505:in call
/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:505:in call
/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:92:in __run_callbacks__
/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:778:in _run_process_action_callbacks
/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:81:in run_callbacks
/gems/actionpack-4.2.5/lib/abstract_controller/callbacks.rb:19:in process_action
/gems/actionpack-4.2.5/lib/action_controller/metal/rescue.rb:29:in process_action
/gems/actionpack-4.2.5/lib/action_controller/metal/instrumentation.rb:32:in block in process_action
/gems/activesupport-4.2.5/lib/active_support/notifications.rb:164:in block in instrument
/gems/activesupport-4.2.5/lib/active_support/notifications/instrumenter.rb:20:in instrument
/gems/activesupport-4.2.5/lib/active_support/notifications.rb:164:in instrument
/gems/actionpack-4.2.5/lib/action_controller/metal/instrumentation.rb:30:in process_action
/gems/actionpack-4.2.5/lib/action_controller/metal/params_wrapper.rb:250:in process_action
/gems/activerecord-4.2.5/lib/active_record/railties/controller_runtime.rb:18:in process_action
/gems/actionpack-4.2.5/lib/abstract_controller/base.rb:137:in process
/gems/actionview-4.2.5/lib/action_view/rendering.rb:30:in process
/gems/actionpack-4.2.5/lib/action_controller/metal.rb:196:in dispatch
/gems/actionpack-4.2.5/lib/action_controller/metal/rack_delegation.rb:13:in dispatch
/gems/actionpack-4.2.5/lib/action_controller/metal.rb:237:in block in action
/gems/actionpack-4.2.5/lib/action_dispatch/routing/route_set.rb:76:in call
/gems/actionpack-4.2.5/lib/action_dispatch/routing/route_set.rb:76:in dispatch
/gems/actionpack-4.2.5/lib/action_dispatch/routing/route_set.rb:45:in serve
/gems/actionpack-4.2.5/lib/action_dispatch/journey/router.rb:43:in block in serve
/gems/actionpack-4.2.5/lib/action_dispatch/journey/router.rb:30:in each
/gems/actionpack-4.2.5/lib/action_dispatch/journey/router.rb:30:in serve
/gems/actionpack-4.2.5/lib/action_dispatch/routing/route_set.rb:817:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/rack/agent_hooks.rb:30:in traced_call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/rack/browser_monitoring.rb:32:in traced_call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/warden-1.2.4/lib/warden/manager.rb:35:in block in call
/gems/warden-1.2.4/lib/warden/manager.rb:34:in catch
/gems/warden-1.2.4/lib/warden/manager.rb:34:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/rack-1.6.4/lib/rack/etag.rb:24:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/rack-1.6.4/lib/rack/conditionalget.rb:25:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/rack-1.6.4/lib/rack/head.rb:13:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/actionpack-4.2.5/lib/action_dispatch/middleware/params_parser.rb:27:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/actionpack-4.2.5/lib/action_dispatch/middleware/flash.rb:260:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/rack-1.6.4/lib/rack/session/abstract/id.rb:225:in context
/gems/rack-1.6.4/lib/rack/session/abstract/id.rb:220:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/actionpack-4.2.5/lib/action_dispatch/middleware/cookies.rb:560:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/activerecord-4.2.5/lib/active_record/query_cache.rb:36:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract/connection_pool.rb:653:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/actionpack-4.2.5/lib/action_dispatch/middleware/callbacks.rb:29:in block in call
/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:88:in __run_callbacks__
/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:778:in _run_call_callbacks
/gems/activesupport-4.2.5/lib/active_support/callbacks.rb:81:in run_callbacks
/gems/actionpack-4.2.5/lib/action_dispatch/middleware/callbacks.rb:27:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/actionpack-4.2.5/lib/action_dispatch/middleware/remote_ip.rb:78:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/airbrake-5.0.1/lib/airbrake/rack/middleware.rb:22:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/actionpack-4.2.5/lib/action_dispatch/middleware/debug_exceptions.rb:17:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/actionpack-4.2.5/lib/action_dispatch/middleware/show_exceptions.rb:30:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/railties-4.2.5/lib/rails/rack/logger.rb:38:in call_app
/gems/railties-4.2.5/lib/rails/rack/logger.rb:20:in block in call
/gems/activesupport-4.2.5/lib/active_support/tagged_logging.rb:68:in block in tagged
/gems/activesupport-4.2.5/lib/active_support/tagged_logging.rb:26:in tagged
/gems/activesupport-4.2.5/lib/active_support/tagged_logging.rb:68:in tagged
/gems/railties-4.2.5/lib/rails/rack/logger.rb:20:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/request_store-1.2.1/lib/request_store/middleware.rb:8:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/actionpack-4.2.5/lib/action_dispatch/middleware/request_id.rb:21:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/rack-1.6.4/lib/rack/methodoverride.rb:22:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/rack-1.6.4/lib/rack/runtime.rb:18:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/rack-cache-1.5.1/lib/rack/cache/context.rb:140:in forward
/gems/rack-cache-1.5.1/lib/rack/cache/context.rb:147:in pass
/gems/rack-cache-1.5.1/lib/rack/cache/context.rb:176:in rescue in lookup
/gems/rack-cache-1.5.1/lib/rack/cache/context.rb:172:in lookup
/gems/rack-cache-1.5.1/lib/rack/cache/context.rb:66:in call!
/gems/rack-cache-1.5.1/lib/rack/cache/context.rb:51:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/actionpack-4.2.5/lib/action_dispatch/middleware/static.rb:116:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/font_assets-0.1.12/lib/font_assets/middleware.rb:29:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/rack-1.6.4/lib/rack/sendfile.rb:113:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/librato-rack-0.6.0/lib/librato/rack.rb:94:in process_request
/gems/librato-rack-0.6.0/lib/librato/rack.rb:64:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/railties-4.2.5/lib/rails/engine.rb:518:in call
/gems/railties-4.2.5/lib/rails/application.rb:165:in call
/gems/newrelic_rpm-3.14.1.311/lib/new_relic/agent/instrumentation/middleware_tracing.rb:79:in call
/gems/rack-1.6.4/lib/rack/content_length.rb:15:in call
/gems/puma-2.15.3/lib/puma/server.rb:541:in handle_request
/gems/puma-2.15.3/lib/puma/server.rb:388:in process_client
/gems/puma-2.15.3/lib/puma/server.rb:270:in block in run
/gems/puma-2.15.3/lib/puma/thread_pool.rb:106:in call
/gems/puma-2.15.3/lib/puma/thread_pool.rb:106:in block in spawn_thread

[Airbrake] undefined method `[]' for nil:NilClass

Airbrake error: #7704
Airbrake project: brotherly

Error type: NoMethodError
Error message: undefined method []' for nil:NilClass**Where:**searches#show**Occurred at:** May 02, 2016 01:31:51 UTC **First seen at:** Feb 27, 2016 15:51:00 UTC **Occurrences:** 3 (0 since last deploy on`)

URL: http://www.brother.ly/search
File: /app/app/controllers/searches_controller.rb

Backtrace:

/app/app/controllers/searches_controller.rb:3:in block in <class:SearchesController>
/gems/decent_exposure-2.3.2/lib/decent_exposure/strategizer.rb:38:in instance_exec
/gems/decent_exposure-2.3.2/lib/decent_exposure/strategizer.rb:38:in call
/gems/decent_exposure-2.3.2/lib/decent_exposure/expose.rb:54:in block in define_exposure_methods
...
Caused by NoMethodError: undefined method `upcase' for nil:NilClass

Add automatically-generated sitemap XML

Sitemaps are used by Google and other search engines to figure out what pages need to be updated and when. The app should automatically generate these sitemap and notify search engines when it has been regenerated, and should do so in the background. We can accomplish this by installing SitemapGenerator and running it whenever an Artist or Episode record has been added/removed.

Add artists and performances using the new episode form

When creating a new episode, it's typical that we are not re-using old artists, but rather entering entirely new artist and performance records into the database. This poses a problem for Administrate's default form interface, in which it's assumed that those associations already exist. Artist information as well as their respective performance times should be editable within the episode form, and Episode records should accept nested attributes for both Artist and Performance associations.

  • Ensure Episodes can accept nested attributes for Artists and Performances
  • Mock-up form layout
  • Customize admin episodes form to implement new layout
  • QA and ensure new records can be saved without failure

Subscriber confirmation refreshes the page

When a new subscriber form is submitted, the page is refreshed and displays a badly formatted message. This message should be modified to look better when rendered inside a layout (for users who have JS turned off), but should also not refresh the page upon new subscriber form submission.

  • Center new subscriber message when rendered with layout
  • Override default form submission event to render new subscriber confirmation message within the modal
  • Ensure the modal can be closed afterward. (Automatic close?)

YouTube videos auto-play twice in home page slideshow

After deploying the home page slideshow, we noticed that a current YouTube live stream would play twice when auto-playing, and with the current <iframe> solution we have no control over playing or pausing the video when the slideshow gets to the slide with a current event on it.

We need to implement this solution and use the JavaScript Player API to control live streams from YouTube.

View individual artist performances

Each performance recording by an artist on a given episode will be extracted from the main file and given special pages on http://brother.ly, so that artists can directly link their performances from elsewhere on the Web. Although this implementation is pretty straightforward, there's still some questions regarding creating the best URL routing scheme for this feature. Ideally, a performance URL would look something like http://brother.ly/performances/some-artist-at-brotherly-xxx, but this may be a bit too long even if it's human readable. Perhaps we could use http://brother.ly/episodes/one/performances/some-artist as an alternative.

From a SEO perspective, it seems a better choice to have a URL with less "tiers". Performance pages are likely going to be hit the most, given they're the easiest things to share, so we want to make sure that we're deploying a feature that is optimized both for direct Web searches and sharing over social media networks like Twitter and Facebook.

  • Mock up layout for performance pages
  • Implement in performance show views
  • Slice existing video and audio recordings into performances
  • Create data migration to batch-upload content to the staging server
  • After QA, run the batch upload on production after deployment of v2.1.0

Block public access to staging server

The staging server should be protected, both from crawling search engines and accidental social media shares. To do this, we will implement HTTP Basic Auth on the staging server, with a repo-stored username and password. In addition, the public/robots.txt file will be removed and dynamically generated via a Rails route. This is to block all spiders from crawling http://beta.brother.ly, but allow crawling of the production site.

Tasks

  • Implement Rack::Auth::Basic middleware with username brotherly and password l0v3 on the staging server
  • Create controller for rendering current robots.txt file as text/plain
  • Update robots.txt route to block all spiders when requested from the staging server

Allow episode admin form to also create/update associated artists and set times

The episode forms currently have the ability to assign performances and artists by way of a multi-select <input> tag. However, this forces the administrator to have to add their data in three different areas before finally submitting the whole thing. It would be better if the administrator could add all of this information in at the same time, thereby allowing one form and one push of a button to synchronize data across all social media, and create events in Eventbrite and on YouTube.

Refactor promoter framework to use listeners under the hood

After the pub/sub system mentioned in #6 is implemented, refactor Brotherly::Promoter to be a listener, so that all app/promoters will automatically become built on top of the listener infrastructure. This should remove all the extraneous "registration" code we use to allow for iteration over every promoter. Instead of doing that, we'll be leveraging Wisper to do that "registration" for us, and in the process run our code in separate background processes, which should be a performance improvement over the original architecture.

Upgrade to Rails 5

Now that it's out, we'll need this to complete #24 and get all the nice ActiveRecord speed benefits.

Tasks

  • Replace draper with makeover
  • Upgrade ControllerResources
  • Upgrade gems and run Rails upgrade tasks
  • Fix any broken tests

Support native video streaming

Due to ongoing issues regarding YouTube's blocking of our content after the live stream, archive videos will be served from the

  • Transcode videos to .m3u8 format using the proper AWS pipeline for HLS video
  • Play videos on the website using VideoJS

Mobile-First Redesign

A common criticism amongst our live stream watchers is how ugly the site looks on a mobile browser. Re-design the front-end of the site "Mobile-First" so that mobile users can get a better experience and desktop users have less cluttered information to deal with. This might also require a change in CSS framework, moving from Foundation to Bourbon.

carousel style issue

there is a declaration for
.slick-slide{
height:100%
}

that seems to be screwing up the display of the carousel.
screen shot 2017-03-13 at 10 15 17 am

Slideshow loses event bindings after page change

It doesn't seem like the slick-slider is getting re-bound when turbolinks clicks off of a page.

Looks great. I like the new approach. I'm having trouble getting the slideshow to resize right. Like it's out of scale on my laptop, monitor, and phone. Also, I noticed that when I hit the back button to go back to the homepage, the slideshow won't let me click through it.

Add native chat interface

Although we'll have live chat on most of the services that we integrate with, it would be nice to host our own implementation of a live chat, as we'll have more control over its look and feel as well as its longevity. An efficient implementation of a chat system requires some kind of WebSocket interface to the browser, which is why this issue will require an upgrade to Rails 5.

Tasks:

  • Upgrade Rails to latest 5.0.0 release
  • Implement ActionCable channel for live chat
  • Only show live chat when an episode is currently broadcasting
  • Create UI for live chat interface next to the episode

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.