Giter Site home page Giter Site logo

waxpoetic / brotherly Goto Github PK

View Code? Open in Web Editor NEW
2.0 1.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%
philadelphia music video ruby-on-rails

brotherly's Introduction

brother.ly

Build Status Code Climate Test Coverage Issue Count

The official site and content repository for the brother.ly event series in Philadelphia.

Features

  • Episode catalog and streams of past episodes
  • Full video and audio downloads
  • Sliced audio and video episodes of artist performances
  • Artist directory to find performances and information about the people that have played.
  • Administration interface for uploading past episodes and scheduling new events.
  • Calendar of upcoming events in the community powered by Google Calendar

Setup

To install the app on your machine for local development, you'll need [Docker][] installed.

First, clone down the repo:

git clone https://github.com/waxpoetic/brotherly.git
cd brotherly

Set up your $COMPOSE_FILE to read from docker-compose.yml and docker-compose.development.yml. This isn't strictly necessary, but avoids a bunch of -f arguments in your compose commands. We recommend putting this in your .envrc if you use [direnv][]:

export COMPOSE_FILE="docker-compose.yml:docker-compose.development.yml"

Next, build the image and install the database:

docker-compose run --rm web bin/rails db:setup

Now you can start the server and browse to http://localhost:3000 to view the running application!

docker-compose up -d

This includes a minimal amount of data to view all features on the site.

The production data is stored in Heroku, which is also where we deploy all of our apps, so in order to pull down this data you'll need a Heroku account and be authorized on the production server to pull down data.

Run the following command to import our production data:

HEROKU_API_KEY='your-heroku-api-key' bin/rails db:import

Development

Contributions are welcome! This project is released under the BSD License, and issue reports as well as pull requests (with accompanying tests) are accepted as contributions to the site.

To run tests:

bin/rspec

You can also run both Ruby and JS/CSS lint checks at once by running:

bin/rails lint

As stated above, a passing build is required for your contributions to be accepted into the codebase. Failing lint checks might prevent a pull request from being merged, but a maintainer may override this.

Deployment

Run the following command to bump the version, create a new Git tag, and push to GitHub which automatically deploys to Heroku.

bin/rails release

By default, this will bump the patch version of the application.

To bump other parts of the version string, you can specify the type of version to update:

bin/rails release:major
bin/rails release:minor
bin/rails release:patch

All tag pushes to GitHub result in a deployment to the production server at http://brother.ly automatically after a successful CI build. Successful CI builds of the 'master' branch are deployed to http://beta.brother.ly.

Much like the development environment, we use Docker to build the production image and ensure that the exact same code (and its dependencies) are used on production as are used on development.

License

This software is released under the Simplified BSD License. See the BSD-LICENSE file for more details.

brotherly's People

Contributors

avinashgudipati avatar dependabot[bot] avatar jemagee avatar tubbo avatar

Stargazers

 avatar  avatar

Watchers

 avatar

Forkers

project-kotinos

brotherly's Issues

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.

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.

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.

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

"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

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?)

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

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

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

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

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.

[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

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.

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

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

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.