rivaltree's Introduction
rivaltree's People
rivaltree's Issues
Interface in brackets/teams to add and remove teams
- Probably add option in
instant-input
component for deletion - Button to add new team? Maybe bonus empty team is always there
- Need to notify user that changes to teams will cause complete reset of ongoing bracket
- Requires API changes. Doesn't handle
POST
requests yet
Embedded widget
Live updating widget for single bracket views
Use web sockets? Either djwebsockets
or django-websocket-redis
.
django-websocket-redis
seems more resilient against increased traffic from how it handles threads but djwebsockets
is much easier to get set up since it doesn't need Redis.
However, django-websocket-redis
is fairly simple after that. The example code only requires publishing messages.
Client settings
Edit username, email address, password, etc.
Page titles
What are we doing with page titles?
- Improve
pageStatus
service to hook into aroute
property - Use
ember-cli-document-title
- Use
https://github.com/kimroen/ember-cli-document-title
Cannot create brackets of less than three teams
If has_round_robin=True
, then winners
ends up empty.
if has_round_robin=False
, then you get an IndexError
after make_games()
.
Internal Server Error: /api/brackets/
Traceback (most recent call last):
File "/mockenoff/rivaltree/env/lib/python3.4/site-packages/django/core/handlers/base.py", line 149, in get_response
response = self.process_exception_by_middleware(e, request)
File "/mockenoff/rivaltree/env/lib/python3.4/site-packages/django/core/handlers/base.py", line 147, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/mockenoff/rivaltree/env/lib/python3.4/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
return view_func(*args, **kwargs)
File "/mockenoff/rivaltree/apps/bracketr/views.py", line 120, in brackets
bracket.make_games()
File "/mockenoff/rivaltree/apps/bracketr/models.py", line 148, in make_games
games['losers'], saves = self.make_losers_bracket(games['winners'], save=True)
File "/mockenoff/rivaltree/apps/bracketr/models.py", line 262, in make_losers_bracket
last_seed = winners[-1][0]['team2']['seed']
IndexError: list index out of range
POST method for brackets
Fill out bracket creation in API for when someone POST
s to /brackets/
.
Hosted view
Probably just use the embedded widget inside a static Django view
View counts
Track view counts on each bracket.
Implement through direct update on bracket models with incremented counts. Could be problematic down the road with regards to write throughput.
Might be better to cache quick view increments in Redis (already using that for API retrieval caching) and then have a job running to aggregate visitor logs or push Redis counts to the database for long term.
Validation for header_path
Need to validate header_path
(or any image path, really) attributes before save or throw ValidationError
.
Swiss format
Allow Swiss-style brackets.
Missing graphics
- real logo
- favicon
Tags for brackets
Allow users to tag their brackets with the sport or game being played, etc.
Add error feedback to instant-input component
Should either highlight or display error message from the API.
Only buffer winners/losers in embed if within two columns
Otherwise it has the potential to expand far too wide, mostly with winners since losers expands exponentially.
Embed WebSocket server must fetch bracket on PUB
Instead of rerouting information directly from whatever source sends the PUB
signal (it'll be the dashboard), the WebSocket embed server should ACK
the PUB
and then retrieve the bracket model.
This is to avoid packet manipulation if someone manages to decipher the message structure.
Ideally, the Ember dashboard would save via the API, the API would cache, and the embed server would retrieve from the cache.
Email templates
Need email templates for the various things that need emails.
- Welcome
- Confirmation
- Lost password
- Trending/featured bracket
- App updates
Update user greeting on index
It'd be nice to update the title greeting to something with the username. Probably not necessary.
https://github.com/mockenoff/rivaltree/blob/develop/tourf/app/pods/index/route.js#L11
Separate feature for premium users
Bracket customization, tournament/team image uploads, etc.
Microdata markup on static pages
- Twitter - https://dev.twitter.com/cards/overview
- Facebook - https://developers.facebook.com/docs/sharing/webmasters
- JSON-LD - http://json-ld.org/
- Microdata - https://schema.org/docs/gs.html
Helpful links:
Featured or trending brackets
- Gallery of brackets
- Featured brackets on main page
-
/trending/
API endpoint
Two-stage, World Cup-style brackets
Groups compete separately and then proceed to final stage.
S3 for user uploads
Right now we're just using stock ImageField
for Django models.
Seems like django-storages
could be useful. Maybe django-s3direct
.
Also this blog post regarding migrating static and media files to S3 and this one that is a bit more recent.
Might be nice to set up a production and a development bucket or only use S3 for production and development goes to a local upload directory.
Break new brackets into separate route
New brackets should go into a /brackets/new/
nested route. This view will walk the user through creating a bracket and then forward to /brackets/id/
upon save.
This means that you can only reach brackets.view
if the phase
is above 1
.
Basic infrastructure
- EC2 web
- EC2 MySQL
- EC2 Redis
- S3 media buckets (tied to #19)
- R53 DNS routing
ELB necessary? Might leave that for later.
It's worth noting that aiming for ~$20 a month through AWS is the ideal, putting it on par with what would be preferable on DigitalOcean or Heroku. The AWS calculator is useful for this.
Allow multiple widgets on a single page
Web sockets don't allow multiple connections to the same port because, well, duh. Using the facility
option with django-websocket-redis
makes it a lot easier to silo off messages, but it can't support multiple bracket updates on a single connection.
The solution will most likely involve doing independent group tracking per client within Redis on the JunctionView
request methods.
Staging environment
Set up a staging AWS environment.
Tie breaking
How to handle tie breaking?
- Wins vs. tied participants
- Game/set wins
- Points scored
- Match wins
- Game/set win percentage
- Points difference
- Media-Buchholz system
Allow manager to adjust how ties are broken?
Comprehensive bracket view
The winner_loser
bracket should display attached to the winner
bracket in double elimination tournaments.
Error feedback on bracket creation
New bracket walkthrough
When in phase=1
, there should be a nice walkthrough on what the next steps are.
Use class-based views
Using class-based views should help clarify processing intent in Django views.
Static pages
Static pages need to attract new users.
- main page (only need to get images)
- about page
- contact page
- featured brackets
- sign-up (with upsell?)
- login
- password reset
- solo generator
- legal
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google โค๏ธ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.