- Connect up to a Redis server, configured with disk persistence (check Heroku offering configs)
- Write script to dump contents of JSON file into Redis
- Display a Redis entry at
GET /proposals/:id
- Show Title, Abstract, Long Description, Notes for Committee prominently;
- Hide everything else like travel support under JS pointy clicky fold
- Update a proposal's Title, Abstract, Long Description, or Notes For
Committee at
POST /proposals/:id
- Display list of all proposals by title at
GET /proposals
- Indicate that a proposal has been modified with a
*
appended to its title atGET /proposals
-- descope if too annoying - Find a Node library to handle user authentication -- (Ended up choosing Passport)
- Set up basic auth for Admin
and Revieweruser types; everyone has same privileges for MVP - Add auth checks to all existing endpoints
- Create Review model:
- Reviewer
- Proposal
- Rating (1-5)
- Discard (Bool)
- Internal Notes (string)
- Add ability to add a review, at
POST /proposals/:id/review
- Persist reviews in Redis only
-
Compute running average on a Proposal, add to Proposal model, update every time a Review is added/updated/deletedDescoping this, because it's easier and more maintainable to write a query than to maintain a running average - Edit a review
- Delete a review
-
Mark a proposal asGoing to descope for now; a low average rating is sufficient to show rejection, for MVP (start with hard-coding to 2)Rejected
if it receives N number ofDiscard
votes - Display all reviews for a proposal at
GET /proposals/:id/reviews
- Add ability for Admin to assign proposals to certain Reviewers
- Don't let the same person review a talk twice
- A logged-in reviewer should see a visual separation at
GET /
so that proposals assigned to them to review are at the top, and other proposals are below - Add visual separation between proposals that have been reviewed, and
proposals pending review, on
GET /
-
Randomize the order in which assigned reviews show up on the dashboardRedis fetching is weird and random enough - Build an Admin view of the state of all proposals:
- Completely rated proposals ordered from highest to lowest average score
- Discarded proposals visually separated
- Proposals pending reviews visually separated, and names of assigned Reviewers
- Some visual indication of proposals with large deltas between reviews ("Controversial"?)
- Dotted line to show cut-off point for top N proposals (start with hard-coding 25)
- Add validation for required fields for reviews
- Do some CSS...
- Don't show 'New Review' form at bottom of
GET /proposal/:id
if a user has already submitted a review - Implement Discard logic: If a talk receives two discard votes, it should be removed from further assignments with visual separation
- Configurable discard threshold
- Tiered privileges: Admin and Reviewer. Don't show "Edit Proposal" to reviewer
- Tidy up JavaScript styles - use ES6 lambdas consistently
- Convert callbacks within routes to top-level pure functions and move into shared helper, esp the "getAverage" function
- Add (better) error checking for Redis-side errors
- Clean up route logic
- Maybe split out some duplicated views into reusable components
- Implement that pattern where response object is pre-seeded with user
- Add authentication to seeding and assignment endpoints
- Check if Papercall export preserves linebreaks; if so, find NPM library to render markdown with linebreaks for proposal fields
- Users should only have one role type. We can create multiple user accounts and give people the credentials if they need to swap between Admin and Reviewer
- Discard threshold and cut-off point should be configurable eventually
Set up Heroku Redis backups for every 1h during Feb 20-27Be a hacker and manually runredis-dump
from my computer once a day
- Change Redis data model from string to hash for proposals and reviews
Memoize expensive Redis queries- done partially. On further exploration,redis.keys
is the only concerning query (at a certain scale), and we actually want to do fresh pulls for things like the rankings page. It's partly implemented but can use a lot of improvement.