Giter Site home page Giter Site logo

seatshare / seatshare-rails Goto Github PK

View Code? Open in Web Editor NEW
2.0 4.0 1.0 3.25 MB

๐ŸŽŸ Primary SeatShare application in Ruby on Rails.

Home Page: https://www.myseatshare.com

License: MIT License

Ruby 84.52% CoffeeScript 0.64% JavaScript 0.11% CSS 0.83% HTML 13.75% Dockerfile 0.14%
rails seatgeek seatshare ruby season-tickets ticket-groups

seatshare-rails's Introduction

SeatShare Build Status

This project allows a group of people to manage a pool of tickets to events. The most common use case is to share season tickets to a sports team.

Installation

Please see the complete installation instructions in the wiki.

Getting started with the application

When you first launch the application (http://localhost:3000/), you will be presented with the marketing site. Click Create Account in the upper right and follow the instructions. If you are using MailCatcher, you can retrieve any emailed details via http://localhost:1080.

Once you have installed the application, the next step is to create a group. You will be prompted to select a registered entity and provide a group name. You will be taken to your group page.

The group will not have any events yet. You need to use the /admin route to log into the backend to create events. The default credentials for the admin section (upon install) are:

Using the automated test runner and livereload

This project uses Guard to automatically run the test suite as you develop. It also watches views and assets and will trigger livereload in your browser as you develop the app's front-end. All you need to do to use these features is run guard from the project root once you have completed the installation instructions linked above.

seatshare-rails's People

Contributors

bval avatar dependabot-preview[bot] avatar dependabot[bot] avatar rjfryman avatar slyeargin avatar stephenyeargin avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Forkers

freerobby

seatshare-rails's Issues

Epic: Integrate with StubHub API to list tickets

In reviewing the StubHub API, it appears to be rather robust and provides a couple of features that we do not have right now within our tool, namely:

  • Ability to verify a barcode is valid via multiple sources
  • Verification of seat location information
  • A marketplace to sell tickets that have not yet been requested in the group
  • Possible fallback data source for event updates when XML Team malfunctions

I am predicting this could be a rather involved process and may prompt us to consider alternative approaches. My thoughts are on a few possible phases of this:


Phase 1 - Connect to your StubHub account within SeatShare to show your current listings

  • Estimated time: 12 hours
  • Optional feature for users that also have StubHub accounts
  • Gets us baseline connectivity via an OAuth endpoint and storage of relevant per-user credentials
  • Value add for those user to remind them which tickets they put on StubHub while looking at their listings
  • Should just show as a sidebar item on all group index pages as a table of current listings; wouldn't be attached to SeatShare data

Phase 2 - Connect the event/ticket ID in SeatShare to the event/ticket ID in StubHub

  • Estimated Time: 30 hours
  • Tickets that are also listed on StubHub can retrieve the ticket status (sold, pricing, etc.)
  • Alerts other users that the ticket is available, but also listed elsewhere
  • Updates the ticket status in SeatShare when sold automatically

Phase 3 - Create a listing for a ticket on StubHub

  • Estimated Time: 10 hours
  • Quick access to use the attached PDF or provided Barcode to create a listing on StubHub with fixed/market price
  • Monitors ticket status and updates SeatShare with data

There are some risks:

  • Negative brand association with StubHub if we approach teams later on (they like their own marketplaces that lack APIs), so we may not want to promote it or make available for all teams
  • Possible costs for increased API usage quotas (10 requests / minute is their "bronze" level, which is really, really slow).
  • Users may not want the interface cluttered with third-party UI elements if they do not intend to use them

And possible rewards:

  • Affiliate program may come into play for signing up new users, etc.
  • May be able to partner with StubHub's API group for beta access to new features

Improve testing framework

  • Rspec?

Currently using the built-in Test::Unit and Test::Integration stacks, which work fine (but have proven to not be as comprehensive as previously thought). As testing is going to be a lynchpin for long-term maintenance of the platform, it would be best to get this right soon.

Stretch-goal: Hook into an automated build service to update the ci-status flag on commits as they are posted.

Epic: Re-construct app in AngularJS

A massive task that will have several subtasks.

Objective is to build an API layer that simply passes around an auth token to verify that the JavaScript "app" still has access to the underlying Rails application. Doing so will free the application up to be used in a mobile development framework, such as Ionic.

Goals would be:

  • Preserve the user experience (where appropriate)
  • Maintain complete feature parity with current view-based Rails application
  • Implement a JavaScript testing framework to replace current integration tests

The mobile application itself, if built, would be assigned to a different milestone.

/cc @BrandonValentine

Stephen doesn't know how to run tests on his branches

๐Ÿ”ฅ Brandon's fixing ๐Ÿผ

  1) Failure:
EventTest#test_new_event_has_attributes [/Users/stephen/Sites/seatshare-rails/test/models/event_test.rb:20]:
new event date/time string matches


  2) Error:
GroupFlowTest#test_create_a_group:
TypeError: no implicit conversion of DateTime into String
    lib/soda_schedule_import.rb:24:in `parse'
    lib/soda_schedule_import.rb:24:in `run'
    app/models/entity.rb:28:in `retrive_schedule'
    app/controllers/groups_controller.rb:35:in `create'
    test/integration/group_flow_test.rb:12:in `block in <class:GroupFlowTest>'

Ticket view breaks when an attachment is available.

๐Ÿ”ฅ

App 28855 stdout: Started GET "/groups/1/event-5/ticket-157" for 207.191.177.153 at 2014-09-12 18:08:34 +0000
App 28855 stdout: Processing by TicketsController#edit as HTML
App 28855 stdout:   Parameters: {"group_id"=>"1", "event_id"=>"5", "id"=>"157"}
App 28855 stdout:   Rendered tickets/_event.html.erb (0.9ms)
App 28855 stdout:   Rendered tickets/edit.html.erb within layouts/two-column (7.8ms)
App 28855 stdout: Completed 500 Internal Server Error in 21ms
App 28855 stdout: 
App 28855 stdout: ActionView::Template::Error (undefined method `download_path' for #<TicketFile:0x007fea6fb07230>):
App 28855 stdout:     49:         <% for file in @ticket.ticket_files %>
App 28855 stdout:     50:         <tr>
App 28855 stdout:     51:           <td>
App 28855 stdout:     52:             <%= link_to raw('<span class="glyphicon glyphicon-save"></span> ') + file.file_name, file.download_path %>
App 28855 stdout:     53:             <br /><small>Uploaded <%= file.created_at %></small>
App 28855 stdout:     54:           </td>
App 28855 stdout:     55:           <td><a href="#" class="btn btn-sm btn-danger confirm"><span class="glyphicon glyphicon-trash"></span></a></td>
App 28855 stdout:   app/views/tickets/edit.html.erb:52:in `block (2 levels) in _app_views_tickets_edit_html_erb__3559556998676375171_70322441223980'
App 28855 stdout:   app/views/tickets/edit.html.erb:49:in `block in _app_views_tickets_edit_html_erb__3559556998676375171_70322441223980'
App 28855 stdout:   app/views/tickets/edit.html.erb:3:in `_app_views_tickets_edit_html_erb__3559556998676375171_70322441223980'
App 28855 stdout: 
App 28855 stdout: 

Weekly emails failed again

๐Ÿ”ฅ

[START] 2014-10-06T09:00:10+00:00
Sending Weekly Reminders for events between 2014-10-06 05:00:00 UTC and 2014-10-07 05:00:05 UTC
- No events for Work a Little, Ball a Lot
- No events for Belmont Men's Basketball
- No events for Geeks Watching Hockey
Done!
[END] 2014-10-06T09:00:10+00:00

in send_reminders.rake

    start_time = Date.today.beginning_of_day.utc
    end_time = Date.today.end_of_day.utc + 6

Intermittent test failures because of timezones

Now if that subject didn't scare you completely away from this ticket ...

Something in the test runner is allowing a Timezone to be set to Eastern even if the user should be default to Central. This manifests itself in two tests in particular:

  • TicketNotifierTest#test_ticket_assigned_to_user [/Users/stephen/Sites/seatshare-rails/test/mailers/ticket_notifier_test.rb:17]:
  • TicketNotifierTest#test_ticket_requested_from_user [/Users/stephen/Sites/seatshare-rails/test/mailers/ticket_notifier_test.rb:33]:

The relevant bits:

[...]
<td>Nashville Predators vs. St. Louis Blues : Saturday, October 26, 2013 - 3:00 pm EDT</td>
[...]
to include "<td>Nashville Predators vs. St. Louis Blues : Saturday, October 26, 2013 - 2:00 pm CDT</td>".

To reproduce:

  1. Run the test suite
  2. Run it again
  3. Keep running it until you hit the failure

I'm not sure if it's because Test::Unit is prone to running the tests in an arbitrary order and something is getting reset between tests or what.

Expand user profile

  • cell phone number (for potential SMS integration)
  • privacy settings for email/phone

Ideas to think about

  • PayPal address
  • Bitcoin address (that still a thing?)

Auto-populate group creation if from /teams

This piggy-backs off of #43, but it would be a good idea to have the user signup workflow modified a bit if they provide a entity.import_key as a query string. Would be handled the same way as the invite_code query string is (in that it bypasses the welcome screen in favor of an actionable, pre-poulated form (in this case groups/new)

  1. User visits team page
  2. User clicks on a team name
  3. User is redirected to a sign-up form that includes the import_key (or some other ID)
  4. After completing the sign-up form, the user is immediately redirected to the 'Create Group' route
  5. The form is pre-populated with the desired entity ID.

Locate a source of team logo images for use on the site

The app, in general, is very text heavy right now. Access to team logos would definitely improve the experience. We should ask XMLTeam whether they can provide them or look for another source of them (or even present some Google image results and have the person adding the group pick a relevant image). Making a note of this here so someone can look into it eventually.

SODA files are removed on deploy

  • used to prevent double download on accident / keep what is paid for
  • currently stored in /tmp
  • that folder retired on deploy
  • should read/write to S3
  • already lost one document

Log file is empty

The file, /u/apps/seatshare_production/shared/logs/production.log Is zero bytes.

  • owned by deploy:deploy
  • tried www-data
  • tried opening up permissions
  • restarted nginx after each try

No easy way to log/debug production errors.

Add a season ticket calculator

screen shot 2014-09-30 at 10 01 27 pm

This is a quick-hit utility for a visitor to see what kind of investment he or she would need to make in a ticket pool to receive a share of the tickets. The first phase of this would not actually interact with the user account at all (does not require a login to use).

I've got a work-in-progress branch that contains the layout and some light coffeescript work to automate the first half of the form. The bottom half is not complete/buggy.

Long term vision for this page would be to improve the UI/UX to be a little less cookie-cutter. Eventually, this concept will make its way into the application as an option when setting up a ticket group for the new season.

/cc @slyeargin

GroupUser model needs love

This particular model (which primarily functions as a join table) is a bit of a mess. It handles the role that a User has relative to a Group as well as managing their subscriptions to the daily/weekly emails. There are a handful of raw SQL queries that are done to manage this relationship, so I know it's sub-standard.

Feature: 'ping/poke' owner of ticket during trade to nudge them to complete

@kzettel yesterday made a passing comment... something along the lines of 'I was getting a bit worried there for a second if the trade would go through... it'd be nice to have some ability to poke the ticket owner to see if they could ack the trade'

So, some thoughts:

  • As a user, I should be able to request an update via notification, so that I can get mai tickets.
  • As a ticket owner, I should be able to receive an SMS to my mobile device, so that I can get updates on new trades or pokes, so that I can sell mai tickets.
  • As a ticket owner, I should only be able to be poked at most 1 time / hour (this number is arbitrary, but a starting point), so that I don't get flooded with update requests
  • As a ticket owner, I should be able to approve a trade via SMS, so that I do not have to log into the website.

These are just a few thoughts, and I'm just now looking at the code so I have no concept of the LOE required here. Thoughts/comments/whatever appreciated.

Group messaging

  • wasn't used hardly at all in previous version
  • advertised on the home page (should be replaced there)
  • can still see how it would be a good idea to reach all members (if an admin)

Notifications model and index view

Currently ticket requests and other types of notifications are not modeled or stored anywhere. This will make doing true push notifications tricky. We need some way to model and store these, and acknowledge them / delete them when they have been viewed.

It would also be nice to have an index view of read / unread notifications that link to the relevant ticket or whatever they concern so you can login to the app and see what requires your attention.

Evaluate mailcatcher dependency

We should either remove the dependency on mailcatcher or add it to the Gemfile and make guard auto-start it so nobody has to think about it as an extra step.

I vote for removing the dependency altogether, as ActionMailer without an SMTP server will actually just echo the contents of the email directly into the development log.

Move repository to @seatshare organization on GitHub

  • Would be nice to manage permissions/deployments through the organization
  • Not quite ready to pony up for a Bronze plan (10 repos at $25/month) -- wonder if they offer "Aluminum"?
  • Blocker: Find a way to make ๐Ÿ’ต to pay for such extravagance

SSL handshake issue on Heroku

The bug that won't die. My local machine can navigate the trust chain, but something is odd about soda.xmlteam.com:443 where it won't behave properly on any production server.

openssl s_client -connect soda.xmlteam.com:443 -debug

Sack Trace

2014-07-17T05:44:32.445836+00:00 app[web.1]: Started POST "/admin/events/import_soda" for 162.196.34.99 at 2014-07-17 05:44:32 +0000
2014-07-17T05:44:32.445845+00:00 app[web.1]: Started POST "/admin/events/import_soda" for 162.196.34.99 at 2014-07-17 05:44:32 +0000
2014-07-17T05:44:32.561438+00:00 app[web.1]: Processing by Admin::EventsController#import_soda as HTML
2014-07-17T05:44:32.561449+00:00 app[web.1]: Processing by Admin::EventsController#import_soda as HTML
2014-07-17T05:44:32.561473+00:00 app[web.1]:   Parameters: {"utf8"=>"โœ“", "authenticity_token"=>"R5W3UnMbh5SSPBWzhZ1ogUoOOQNLGgBvw80SKg2MC98=", "start_datetime"=>"2014-07-17 02:23:21 +0000", "end_datetime"=>"2015-07-17 02:23:21 +0000", "team_id"=>["l.nhl.com-t.19", "l.nfl.com-t.11"], "commit"=>"Import Schedules"}
2014-07-17T05:44:32.561486+00:00 app[web.1]:   Parameters: {"utf8"=>"โœ“", "authenticity_token"=>"R5W3UnMbh5SSPBWzhZ1ogUoOOQNLGgBvw80SKg2MC98=", "start_datetime"=>"2014-07-17 02:23:21 +0000", "end_datetime"=>"2015-07-17 02:23:21 +0000", "team_id"=>["l.nhl.com-t.19", "l.nfl.com-t.11"], "commit"=>"Import Schedules"}
2014-07-17T05:44:32.758206+00:00 heroku[router]: at=info method=POST path="/admin/events/import_soda" host=heroku.seatsha.re request_id=9e0d7648-5294-4340-bfdf-3422b3df15f7 fwd="162.196.34.99" dyno=web.1 connect=0ms service=316ms status=500 bytes=1497
2014-07-17T05:44:32.754802+00:00 app[web.1]: Completed 500 Internal Server Error in 193ms
2014-07-17T05:44:32.754813+00:00 app[web.1]: Completed 500 Internal Server Error in 193ms
2014-07-17T05:44:32.756310+00:00 app[web.1]: 
2014-07-17T05:44:32.756313+00:00 app[web.1]: OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: (null)):
2014-07-17T05:44:32.756315+00:00 app[web.1]:   app/admin/event.rb:59:in `block (3 levels) in <top (required)>'
2014-07-17T05:44:32.756316+00:00 app[web.1]:   app/admin/event.rb:54:in `each'
2014-07-17T05:44:32.756318+00:00 app[web.1]:   app/admin/event.rb:54:in `block (2 levels) in <top (required)>'
2014-07-17T05:44:32.756326+00:00 app[web.1]: 
2014-07-17T05:44:32.756328+00:00 app[web.1]: 
2014-07-17T05:44:32.756332+00:00 app[web.1]: 
2014-07-17T05:44:32.756335+00:00 app[web.1]:   app/admin/event.rb:59:in `block (3 levels) in <top (required)>'
2014-07-17T05:44:32.756334+00:00 app[web.1]: OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: (null)):
2014-07-17T05:44:32.756337+00:00 app[web.1]:   app/admin/event.rb:54:in `each'
2014-07-17T05:44:32.756338+00:00 app[web.1]:   app/admin/event.rb:54:in `block (2 levels) in <top (required)>'
2014-07-17T05:44:32.756340+00:00 app[web.1]: 
2014-07-17T05:44:32.756341+00:00 app[web.1]: 

Local output (good)

New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 52318BEAB0F39160879B072FF471DBF5A67841F6E76FA28147BA6892916987FA
    Session-ID-ctx: 
    Master-Key: DBAC662F6DA1660368D791450F8218DD34CAD5C1402BD69E27FC9E97A74FD719A5CE8A5986860E89E9415638450695D5
    Key-Arg   : None
    Start Time: 1405619020
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

Heroku instance (broke)

New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : DHE-RSA-AES256-SHA
    Session-ID: 355A62AF60A607796AEED96AB56F1D8646F9DE24DA1209308308CE38AA5F40EF
    Session-ID-ctx: 
    Master-Key: 9402923C6B40E925C6C7122081A9E93923A76708FD59D983CB0D20A61FEA9A76493385BDA89C26D4543A2E73B0007749
    Key-Arg   : None
    Start Time: 1405619166
    Timeout   : 300 (sec)
    Verify return code: 20 (unable to get local issuer certificate)

Linode instance (broke)

New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : DHE-RSA-AES256-GCM-SHA384
    Session-ID: 7ED2C858059CBB78411C6A35D35BF156B81CDC4A2F453541A54CC9069AAF1C4B
    Session-ID-ctx: 
    Master-Key: BD4041EAFBF25E3721D862AF0D8E8A791F535F122A3FF2C0DBE828AF0E9FFB50AA70E53924A7B19DCBB733D2C231AE89
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - 95 8f dc ba a3 d9 0c 96-30 8f eb b2 b4 16 75 52   ........0.....uR
    0010 - 74 2a 92 84 79 01 91 ea-d7 3f 75 36 01 87 af 15   t*..y....?u6....
    0020 - 7d f1 0d 7e 0c 85 ca 66-fa 18 a3 3d 39 e5 f1 fb   }..~...f...=9...
    0030 - 96 d7 f8 8b 4c 73 02 19-a0 0f 61 cc 17 25 6c 7b   ....Ls....a..%l{
    0040 - 6a d1 71 7a 70 25 85 89-46 fe d4 b7 0a 55 fc 90   j.qzp%..F....U..
    0050 - 44 9e 98 06 7d 81 74 4d-8e 26 7b a9 87 fb 93 de   D...}.tM.&{.....
    0060 - d3 f4 fe 29 68 5f ef 1c-44 a0 de eb 18 63 7d 5c   ...)h_..D....c}\
    0070 - bd ed 97 50 70 7a c1 dc-66 ce b7 66 c0 c2 d0 51   ...Ppz..f..f...Q
    0080 - e1 7e 14 75 9e 5c 10 28-a0 49 d6 5f d4 4c 14 48   .~.u.\.(.I._.L.H
    0090 - 72 fd 6f 21 44 3d 1d 59-28 c9 f1 18 ee c7 37 3a   r.o!D=.Y(.....7:
    00a0 - e5 e8 52 1b a0 d8 ea 6b-6b 6c 44 a6 48 b9 17 e3   ..R....kklD.H...
    00b0 - 95 d2 de 51 9e c3 90 ff-17 c1 9e aa 49 de 3f 5b   ...Q........I.?[

    Start Time: 1405619075
    Timeout   : 300 (sec)
    Verify return code: 20 (unable to get local issuer certificate)

Integrate with XML Team

Reference: http://showcase.xmlteam.com/index.php/samples/showfixtures/0/all/sportsnetwork.com/starter-set

Let's use this to populate Entity and Events. We can pay $50 or so (minimum account balance) for all the data we'll need (it'll cost us about $3.75 per conference to get the schedule in a parse-able and update-on-insert format). Sucky part is that it will be XML. Good news is there is a fuck ton of ways to parse XML.

  • Review the schema for what's available
  • Determine the need for schema updates for update keys
  • Update the schema (by figuring out what from the XML maps into the database)
  • Replace the JSON importer feature (because it would be obsolete)
    • Connect to the API to facilitate manual pulls (rather than uploads)
    • Use open-uri to grab the remote data (refactored into a gem)
    • Store all the response documents (hey, this shit is expensive!**)
    • Add Nokogiri to the gem set (and use it for the parsing) (refactored into a gem)
    • Each event will have a team identifier. Look up the import_key for Entity. If no match, skip (or optionally create said entity)
    • Each event will have a unique identifier. Use this to update existing record if it exists, or create the new event.
    • Have a manual re-upload option (stretch goal)

General: Keep in mind we will probably want to expand on this API, and may eventually plug in a different source.

** but really rather cheap.

Weekly reminders bombed this morning

๐Ÿ”ฅ At least it's pre-season. I'll fix it tonight and get them out.

[START] 2014-09-22T09:00:05+00:00
Sending Weekly Reminders for events between 2014-09-22 and 2014-10-05
- Sending Stephen Yeargin ([email protected]) for Geeks Watching Hockey
  Rendered schedule_notifier/daily_schedule.html.erb within layouts/email (26.7ms)
rake aborted!
ActionView::Template::Error: No route matches {:action=>"show", :controller=>"tickets", :event_id=>44, :group_id=>1, :id=>47}
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/actionpack-4.1.5/lib/action_dispatch/journey/formatter.rb:39:in `generate'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/actionpack-4.1.5/lib/action_dispatch/routing/route_set.rb:599:in `generate'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/actionpack-4.1.5/lib/action_dispatch/routing/route_set.rb:629:in `generate'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/actionpack-4.1.5/lib/action_dispatch/routing/route_set.rb:665:in `url_for'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/actionpack-4.1.5/lib/action_dispatch/routing/url_for.rb:155:in `url_for'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/actionview-4.1.5/lib/action_view/routing_url_for.rb:83:in `url_for'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/turbolinks-2.2.2/lib/turbolinks/xhr_url_for.rb:12:in `url_for_with_xhr_referer'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/actionview-4.1.5/lib/action_view/helpers/url_helper.rb:181:in `link_to'
/u/apps/seatshare_production/releases/20140921154153/app/views/schedule_notifier/daily_schedule.html.erb:55:in `block (2 levels) in _app_views_schedule_notifier
_daily_schedule_html_erb__3053939143128314732_70177474944220'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/activerecord-4.1.5/lib/active_record/relation/delegation.rb:46:in `each'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/activerecord-4.1.5/lib/active_record/relation/delegation.rb:46:in `each'
/u/apps/seatshare_production/releases/20140921154153/app/views/schedule_notifier/daily_schedule.html.erb:52:in `block in _app_views_schedule_notifier_daily_sche
dule_html_erb__3053939143128314732_70177474944220'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/activerecord-4.1.5/lib/active_record/relation/delegation.rb:46:in `each'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/activerecord-4.1.5/lib/active_record/relation/delegation.rb:46:in `each'
/u/apps/seatshare_production/releases/20140921154153/app/views/schedule_notifier/daily_schedule.html.erb:21:in `_app_views_schedule_notifier_daily_schedule_html
_erb__3053939143128314732_70177474944220'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/actionview-4.1.5/lib/action_view/template.rb:145:in `block in render'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/activesupport-4.1.5/lib/active_support/notifications.rb:159:in `block in instrument'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/activesupport-4.1.5/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/activesupport-4.1.5/lib/active_support/notifications.rb:159:in `instrument'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/actionview-4.1.5/lib/action_view/template.rb:339:in `instrument'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/actionview-4.1.5/lib/action_view/template.rb:143:in `render'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/actionview-4.1.5/lib/action_view/renderer/template_renderer.rb:55:in `block (2 levels) in render_temp
late'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/actionview-4.1.5/lib/action_view/renderer/abstract_renderer.rb:38:in `block in instrument'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/activesupport-4.1.5/lib/active_support/notifications.rb:159:in `block in instrument'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/activesupport-4.1.5/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/u/apps/seatshare_production/shared/bundle/ruby/2.1.0/gems/activesupport-4.1.5/lib/active_support/notifications.rb:159:in `instrument'

Task: Upgrade add-on for Postgres

  • Going to guess that we'll blow through the 10,000 row limit by mid-season (with as many entities, tickets and log entries as we'll have).
  • Upgrade to next-level of Postgres for Heroku (if hosting remains unchanged)

Cost

Hobby Basic (10 million rows) - $9/mo.

Create group page isn't compelling

So, we have only had one user who ever just wandered in off the Internet and signed up for an account. Here's the transcript for his activity:

screen shot 2014-10-10 at 4 12 21 pm

He got the welcome page post-signup, then clicked through to "create group", then went back to the welcome page (apparently a few times). Then viewed his profile (presumably, to either cancel his account or to see what all was stored with his login) and never came back. I sent him a follow-up email (which it says he opened), but never got a response.

So, my thought is that he got lost on the Create Group page

screen shot 2014-10-10 at 4 11 14 pm

The welcome page is fairly self-explanatory, and really only gives you two paths:

screen shot 2014-10-10 at 4 17 26 pm

I think we can do a few things with the create group page:

  • Not default to the BC Lions
  • Not call it an 'Entity' (I still have this dream of it not just being sports team, but it may just be easier to accept that fate)
  • Make it less form-heavy -or- give them the opportunity to automatically create group invitations immediately

This is really the second most conversion point for the first phase of the application: get folks to sign up and create or join a group. If you don't do that, you won't have much reason to come back to the site.

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.