GithubHelp home page GithubHelp logo

rogerdodger / writeoff Goto Github PK

View Code? Open in Web Editor NEW
11.0 11.0 5.0 4.13 MB

Web application for fiction writing contests

Home Page: https://writeoff.me

License: Other

Makefile 0.19% Perl 64.59% C 10.22% CSS 0.07% JavaScript 11.03% Shell 0.87% SCSS 13.04%

writeoff's People

Contributors

groaninggreyagony avatar kazunekit avatar rogerdodger avatar vantanev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

writeoff's Issues

Request: Add comment statistics to Art gallery pages

During the review/judging period, often Writeoff veterans will encourage participants to add reviews to the pieces with the least feedback. This is easy for stories, because in the fic gallery page, the number of comments and the number of unique commenters are visible at a glance. In order to check those statistics for art submissions, however, someone has to click on each piece one by one and scroll down to the comments section.

This could obviously be fixed by using a story-style display instead of a gallery-style display for art, but that seems inelegant. Instead I'd like to propose adding a simple parenthetical section on a line underneath each piece's title:

🖼
Submission Name
(👥 2, 💬 6)

This should be a relatively simple addition with high return on effort, as participants can much more easily track where comments are needed.

Redfine criteria for "Avoided detection" (mask) award

("Theory" is the set of one user's guesses.)

The intention of the award is to reward participants who successfully avoided detection.

Previously, it was simply dealt out to any entry that received no correct guesses against it. This was bad for a number of reasons:

  • Most people got it inadvertently, since no one made any guesses against them
  • Popular authors had very little chance of getting it, despite their best efforts, since so many guesses were made against them across the board
  • If someone decided to guess a particular artist for every entry, they couldn't possibly achieve the award

In fact, the mask was dealt out to so many entries, that there were more of them given out than ribbons!

With that considered, I'm brainstorming ways to bring the mask back such that it can fulfil its original purpose (encouraging people to mask their identity). Some constraints I am thinking of:

  1. Should only be dealt out to a few participants per event (potentially none)
  2. Should only be dealt out to participants that people were looking for (i.e., the entry's artist needs to have had a number of wrong guesses them made elsewhere)
  3. An entry can still get the award if a correct guess is made against it if that guess is in a theory that made a lot of wrong guesses for that artist also

Can these constraints all be met in a non-abusable way?

(If this problem is solved, all old masks will of course be revoked.)

Replace all user-facing strings with references to lang files

For example, instead of:

$c->detach('/forbidden', [ "You are not the admin" ]);

Use:

$c->detach('/forbidden', [ $c->string('notAdmin') ]);

Then, in lang/en/strings.yml:

notAdmin: You are not the admin

Once this is comprehensively done throughout the code, it will be possible to add support for other languages.

Visualise guesses in a cleaner way

There are as I see it two primary use-cases for the guess data:

  • Artists want to see how well people are guessing their stories
  • Participants in general want to see what stories were easiest to guess, and who guessed them

As it stands, the data is just shown as a huge table, and it's very ugly.

On top of that, the first use case is not being met well. Artists who receive more guesses against them are also more likely to have correct guesses made against them. The best example of this is Cold_in_Gardez, who receives more guesses than any other artist. Even though there's always some people that guess which he wrote, there are also many more that guess him for other stories too.

The visualisation should show how well the author avoided (or failed to avoid) detection, with consideration for how many people were looking for him/her.

Event listings should be clearly separated between active and recent events

Given #33 and my answer to it having been referenced multiple times now, the current listing behaviour is obviously confusing.

Clearer behaviour would be:

  • Active events are visually grouped and sorted by creation date
  • Recent events are visually grouped and sorted by last post date
  • Active events are those that are not yet finished or finished within the last 48 hours
  • Recent events are those that are not active but were posted in within the last 2 months

Paging is not currently needed here, since this is typically 5-8 events

Add language to format and genre

Currently, the format and genre names are localised from the lang files.

However, this is inappropriate given that it makes new formats and genres not really data, but code. (That is, it makes creating new ones impossible without writing more code.)

More sensible would be the formats and genres having a specified language, such that the names and descriptions don't need to be localised (rather, a new format/genre for the target language would be created).

Front page doesn't display same events as event archive

I noticed the "No Turning Back" event was missing from the site front as I was trying to double-check that I'd created FIMFiction folders for everything, and I'm not sure why it's gone — I thought it displayed the chronologically most recent events?

The ones currently displayed on the site front:
The Other Side · FiM Short Story · 18 May 2018
Message in a Bottle · Original Short Story · 27 Apr 2018
Just Like Old Times · FiM Minific · 7 Apr 2018
Last Call · Original Minific · 17 Mar 2018
The Next Generation · Original Polished Story · 13 Feb 2018
Long Story Short · Original Minific · 23 Dec 2017

All recent events, from the archives page:
The Other Side · FiM Short Story · 18 May 2018
Message in a Bottle · Original Short Story · 27 Apr 2018
Just Like Old Times · FiM Minific · 7 Apr 2018
Last Call · Original Minific · 17 Mar 2018
No Turning Back · FiM Short Story · 23 Feb 2018
The Next Generation · Original Polished Story · 13 Feb 2018
Under the Surface · Original Short Story · 2 Feb 2018
Lie Me a River · FiM Minific · 13 Jan 2018
Long Story Short · Original Minific · 23 Dec 2017

Create new scoreboard for art competitions

Currently, the scoring for art entries counts toward the same scoreboard that that round's writing period qualifies for. This is highly suboptimal for a number of reasons.

  1. Art entries for minifics and short stories count for different numbers of points despite taking the same amount of effort.

  2. Scoreboards have previously measured skill in a specific area (writing ponyfic/original fic, at a specific wordcount length), and counting points for activities which are not that skill dilutes that.

  3. Individuals who are consistently good at art entries should be rewarded with recognition for that skill, rather than having those contributions diluted by ranking them against authors.

Proposed change:
– Create a third Scoreboard class for Art entries.
– Shift all medals and points from the Art portion of multi-round events into the new scoreboard.
– Remove those medals and points from their current location and recalculate scores accordingly.

Art scoreboard scores should decay only when an art round occurs, and should not contribute to the score decay of writing rounds (though typically there's a writing event attached to the art event, and that should cause writing-score decay as normal).

Mortarboard award

Deal a mortarboard award out to the best performing entry by an entrant who hasn't already received a mortarboard for this genre and format.

Retroactively apply to previous events.

Allow users to change page size

Current page size is always 100 posts per page. For some users and contexts this is too many.

Should allow users to choose page sizes of 10/25/50/100.

Use localStorage for pageCache

A GET to a certain url should return a consistent result. Currently, paged threads without an explicit page go to the page it thinks the user was at last.

This mechanism is achieved by the server storing the page the user was last at in a cache.

Instead of the server making this decision, the user should do it themselves with localStorage and link hijacking of clicked links.

Alternatively, disable page caching altogether.

Define behaviour when there are no entries

Two separate issues need to be resolved:

  1. The voting rounds and results should be deleted when there are zero entries, since there aren't anything for the voters to do.
  2. If an event uses entries for prompts and there are no entries submitted (e.g., pic2fic with no pics), then there aren't any prompts. The obvious behaviour for participants is to use the event prompt, but they still won't be accepted since entries need at least one indicated related entry.

Cancelling the voting round can't work when there is one entry, since even if there isn't anything for voters to do, there should still be time allowed for the entry to receive reviews with an anonymous author. In addition, the rating logic that gives the entry a medal wouldn't work if the voting round were removed.

Sort scoreboard and entry listings

Old layout had a mechanism to sort the tables.

Clicking on relevant icons in the design should sort the table. Clicking again should reverse sort.

This should have an abstracted interface to be used in later designs as well.

Unlist stories using the author's page

Unless it's not obvious, I'm kinda just throwing whatever I think the site could use up on here. :P Hopefully this is useful to you; if not, ignore it.

But yeah, it's not currently obvious how to remove stories, since you have to do so on the submissions page for the contest, but most people won't think to look there since it's closed during the contest. I'd suggest adding the post/remove checkboxes that are there to the list of stories that pop up if you click on your alias names in the alias dropdown.

Show user what groups they're in

The SubGenre and ArtistGenre data are currently not particular visible to users.

  • SubGenre is useful currently for emails and will in future be used to decide what to show the user.
  • ArtistGenre is not particularly useful outside of showing the member list for a group (and in future assigning perms to a particular artist).

Current behaviour is to sub to any group that you join on any alias, and only unsub when you leave the group and have no other aliases in it. This will obviously be confusing to anyone using aliases wanting to leave and unsub from a group entirely.

Desired behaviour will be to display a tab "My groups" with a dropdown showing every group in SubGenre. Clicking the "My groups" button leads to /user/groups, which will contain a page with the data listed out as per example:

Group A [unsub]
- AliasA [leave]
- AliasB [leave]
- AliasC [leave]

Group B [unsub]
- AliasC [leave]

Clicking leave will unsub if there are no other aliases left (same as clicking leave at the group listing). Clicking unsub will leave on all aliases.

Email notifications should add "mode" option

Right now there are 4 events one can subscribe to:

  • event created
  • prompt selected
  • voting started
  • results up

"Prompt selected" is mostly a proxy for "Submissions open", but doesn't work that way in art rounds, so prompt-selected -> subs-open.

"Event created" should fire if a user is subscribed to any relevant modes. Every other notif should fire per mode, so only if the user is subscribed to that particular mode.

Deleting alts

I think people will be more likely to use alts if they can delete/change them.

Possibly even move stories between alts you own?

Focus color on thumbed-up posts

Is the same color as non-thumbed-up-posts.

So if your mouse is over a post, it's difficult to tell if you've thumbed it up or not.

Highlighting is frequently too light to distinguish easily (or at all).

I use LED 1080p monitors. The Writeoff site has highlighting that is practically invisible. Most of it could stand to be darkened. Maybe this is unique to my monitors, but I don't have this problem anywhere else on the internet (that I can recall).

The biggest issue is the unselected green lines for author guessing. Those are almost completely invisible. Another example that's not as much of a problem, but still a bit of eye strain, would be the yellow vs. blue background in the prelim how-you-voted slate that shows which stories made the cut.

In general, I think most of those near-#FFFFFF's could be pulled back a lot.

FR: Tag controls in edit mode.

When editing a message, you have to add tags manually (or use ctrl+{i|b|s}) because the controls aren't available at the top of the message window. It'd be nice if they were.

Prevent user's artist from being leaked to organisers on edit form

There are currently two ways that a user's artists can be leaked to an organiser when they edit an entry:

(1) the artist field contains all of the entry's user's artists
(2) the related pics/fics field does not contain the entry's user's own entries

Solution to (1) is only include the entry's current artist and Anonymous as valid artists
Solution to (2) is to make all pics/fics valid for an organiser

[Extra note on the solution for (2) is that this would have enabled GGA's request for his fic to have every pic rel (including his own) to be done through the front-end.]

Specify scheme for URLs in emails

Relative scheme doesn't work for email assets, so need to specify the right scheme.

Require config option for HTTPS, otherwise HTTP.

$c->req->base has to have its previous value restored after rendering emails.

Separate but related issue: $c->stash->{wrapper} also should be localised.

Put event prompt in entry listing

Suggested by Chris.

Will probably use same size/color as the genre/format.

Not sure if it's necessary since the date contains a link to the event with the prompt in the URL.

Notification UI tweaks

Could we have the notifications listed in reverse chronological order, instead of chronological?

Right now, I need to click/scroll to get to the new ones on the bottom, instead of just clicking.

Event archive should be paged

The event archive currently takes 3-4s to render. This is obviously too long, so caching or paging is required.

Paging by year is probably most appropriate.

Notifications

For comments on your stories and replies to your comments.

Personally, I think some sort of targeted tagging might be good too, so if I did something like >>RogerDoger it would notify them of that post, to pull people into discussions without needing a msg to reply to.

Set global text line height

The pager is slightly off-centre depending on body font because the line-height of body text isn't specified

Rework formats

Current situation with formats is weird. Resolving this is important for custom groups, for a few reasons:

  • Events can only be made through a schedule, which accepts a format and not a word limit
  • Currently, formats have a fixed word limit, whereas people will want to have a customised limit
  • It'd be confusing if allowed to manually set both to have, say, a "Minific" contest with a word limit of 2000–8000.

My intuition is that the format should be decided based on the maximum word limit, with the cut-off occurring at these points:

  • Flashfic <300 words
  • Minific <1000 words
  • Microfic <2250 words
  • Short story <9000 words
  • Novelette <20000 words
  • Novella <45000 words
  • Novel >45000 words

Under this system, people can set whatever word limits they please without worrying about what "format" it's under.

Similarly, the "polished short story" format should be removed. The purpose this format served is better served by groups in general. Also, if it remains, a "polished" version of every format, as well as any other modifier you could imagine, is implied. That doesn't scale well at all.

I also think that the per-format scoreboards should be removed, since it even now results in too many scoreboards, and it increases the burden on "formats" to be a meaningful category. I think this change to them being mostly shorthand (it's easier to say short story than 2000–8000 words) will increase the meaningfulness of groups in general and remove the friction to hosting a contest that comes from deciding "what format is this".

The issue of handling poetry vs prose vs script etc remains unresolved. My current position is that they can all go into the same contests, and that they are as comparable as they need to be for the purposes of the writeoff. The competition is mainly against yourself, so if one wants to practice poetry in the writeoff, not being likely to place as well isn't that big a deal. It'd be much worse for the non-prose authors to have their own contest in which almost no one else comments or participates.

If, however, there is big demand for segregated poetry, then a group for poetry can be made anyway. The group concept generally solves all these categorisation issues by pushing the categorisation down to the users.

Add "role" field to new posts

Currently poster name colour is hardcoded (very naughty) to make user id==8 red (admin) and everyone else blue.

New posts should have a "role" field which states what role the poster is posting as. For example, I should be able to choose whether to post as "user", "admin", or "organiser".

Users who can only post under one role (most people) will have the field ommitted.

Refractor artist refs to always link the artists profile

Excepting some special scenarios (e.g., the in the guessing page), everywhere that the artist's names appear on the website should be a link to their profile, e.g., <a href="/artist/8-RogerDodger" class="Artist">RogerDodger</a> Aside from the obvious purpose, this is useful to disambiguate users that have similar names from each other, since artist names are not unique, but their ids, which are visible in the url, are.

Problems with Writeoff categorization in scoreboard display

For some reason, when I go to the scoreboard, stories from multiple FIM Writeoffs are visible with the display filtered to "Mode: Fic, Genre: Original". For example, "Rising From the Ashes" is correctly listed as a FIM Writeoff on the title bar of its pages e.g. https://writeoff.me/event/66-Rising-From-the-Ashes/fic/results , but if you click on the + next to my name in the scoreboard rankings, you can see that round's story counting toward the Original Fiction scoreboard.

It looks like the problem is that "Genre: Original", Format: Blank is listing stories of both genres which fit within "Format: Short Story". If I select both Genre and Format, it displays correctly.

screenshot 2017-07-13 20 14 33

Seperate General Discussion Thread from Story-Specific Comments

In the general contest discussion thread, comments on all stories on included, intermixed with more general comments/discussions directed toward the contest as a whole. It would be nice to have a discussion thread for the contest itself that doesn't include comments on individual stories. Story comments are usually specific to the story itself, and are often made without any knowledge of more general conversations taking place in the main thread. Having such comments injected into that main thread is distracting and confusing to anyone that intends to comment on the general state of a contest. Worse, many people have (seemingly accidentally) replied to a story-specific comment in the general discussion thread instead of the relevant story, preventing their reply from showing up underneath said story with the proper notifications and such to the author.

I'd propose that the main contest discussion thread be a virtual "story-like" topic of it's own, isolated in the same way as each story is. That said, I think it wouldn't go amiss to have an "all comments" thread/view option as well, which would include all comments, regardless of "topic" and thus basically persist the view the "discussion thread" view currently shows.

Request: Anonymity option for author guessing.

I'm pretty good at author guessing, but I worry about offending somepony with my guesses. This is why I stopped doing it a long time ago.

This is probably just me (in which case it shouldn't be implemented), but I'd like the option for one's failed author guesses to remain anonymous. Only one's successful guesses would show up in the graph.

If desired, anonymous guessers' failed guesses could go into a pool, get shuffled, and be randomly assigned to one or more "anonymous fail" nodes. That way, authors would still get feedback about how their works are perceived.

Separate but related issue: in the last Writeoff, a couple of authors mentioned they would like to see more guesses than the ones shown in the graph (they didn't know why their guesses didn't appear). If it's possible that those guesses could be useful feedback for authors, it might be worth it to find a way to show the entire gamut of guesses.

Or failing that, at least a count of how many ponies guessed that X wrote story Y... even if only X is permitted see that data.

Create better abstraction for commands

  • Command help should come from some annotation directly above the function
  • Command resolution should be entirely handled in WriteOff::Command
  • Add support for GetOpt::Long type options
  • Add generic _find function similar to how it's used for controllers

Post preview

For JS enabled users, beside the "Post comment" button should be a "Preview" button.

When clicked, the "Preview" button should be replaced with a "Please wait..." button and the textarea should be dimmed. The post's body is sent as an AJAX request to the server which returns the post render. Once received, the post render replaces the textarea, and the "Please wait..." button is replaced with an "Edit comment" button. The post render should behave exactly like an ordinary post in the thread (that is, hovering >>RogerDodger quotes should work as expected). The "Edit comment" button when clicked removes the render and returns the textarea. At all times the "Post comment" button should behave as normal.

Would like an all-spoiler option

I have a hard time reading through the Writeoff discussion because there are lots of stories that I haven't read, and I only want to be able to see reviews for stories I have already read.

I would love, love, love a user option to auto-spoiler any story comments if you haven't opened that story in a web browser. I suspect that most of our users would use this feature. It would be super-convenient. Once you've opened a story, you could then see all the comments in the forum that pertain to that story, so you can very easily keep track of which reviews you've seen and which you haven't seen. That way you don't miss any reviews, which will encourage discussion.

Failing that, I'd like a user option to spoiler EVERY message. At least then I can scroll down without accidentally seeing spoilertext for stories I haven't read. (TD tends to put three-word summaries at the top of his reviews and I've had stories ruined for me by that.)

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.