Migrating bespoke functionality to Discourse (Writing critique)

This is a question about how much it’s possible to customize Discourse functionality, and how big a job it’s likely to be.

I’m on the tech team for an organization of professional science fiction writers, largely based around forum software that was written by a now-departed founder. It runs on a creaking asp.net/SQL server setup and we’re keen to migrate to a different platform.

One of the most popular features of the software is a story critique function. Users can upload a document, with a title and wordcount. There’s a specific page that shows all stories currently looking for feedback. The software has some minor gamification built in: uploading a story automatically starts a discussion thread, and anyone who posts a response longer than 750 characters gets points. When a user has received enough responses they can stop anyone else from downloading the file.

On the story download page, next to each user’s name you can see the number of critique points they’ve earned and the number their stories have received. They’re supposed to be kept roughtly at parity but it’s all on the honor system; as far as I know no one has ever been warned for receiving critiques without giving any. It all works quite well (except for the creaking outdated tech setup, see above).

Long-term users have sometimes run up an impressive number of credits, and we’re quite keen to migrate these to the new platform rather than erase everyone’s high scores.

My question is: how simple is it going to be to incorporate functionality like this into a Discourse forum? Is it likely to be within the scope of a bespoke plugin, or would we need a separate app that interacts with Discourse via the api? I’d appreciate any guidance you can give.


That should be doable in a plugin. The points could be kept as a custom field with the topics, posts and/or users.

Some questions to get the functionality straight:

Are those points solely based on the length of the response?

How is “enough” determined?

I assume “the file” is the story? Do they need to take explicit action? I.e. is there a button “stop people from downloading the file” which is unlocked by “enough responses” ?

How is the number (of points?) a story receives determined?


Thanks for replying!

Any response over 750 characters receives points (it’s possible to make a non-critique post in a critique thread by including the words “This is not a critique post” but I don’t think I’ve ever seen that used). If an author makes a > 750 character post in their own critique thread, that should not generate any points.

By the story’s author. They can decide when they have received enough feedback on their story.

Yes, the file is the story (a Word document or RTF file or other format). There is a button that the author can press at any time to disable further downloads. They can press it before anyone has downloaded the file if they have second thoughts about sharing it.

Rather than try to summarise it, here’s the SQL statement:

CASE WHEN WordCount < 1001 THEN 0.5 
 WHEN WordCount BETWEEN 5000 AND 9999 THEN 1.5 
 ELSE Round([WordCount] / 10000, 0) + 1 END

In practice, people rarely upload a story greater than 10K words.


As Richard said, anything is possible on a plugin. What you’re proposing is likely a few hours work. There could be some shortcuts to take to fit your budget. Custom badges might also help. You could certainly get the new plugin written and then import the data to it when you do the migration.

Don’t mistake duplicating the old system for creating the best one.

You could use the solved plugin or tags to use way to turn off review time.

If your entire system is bespoke, a custom importer is typically on the order of $1500, and you’d likely need close to that much more for the needed plugin.


You could also stop distinguishing between story and critique credits and just re-purpose Discoure’s like feature (sharing hearts) as sharing credits. It would make migration and implementation rather straightforward. But I might miss the advantage of separating the credits?


The idea is that you’re giving back to the community. If others are reading your work and giving you feedback on how to improve it, you should also be reading others’ work and giving them feedback. It would be great if that could be monitored using some built-in Discourse feature but I can’t see how.


You can run more detailed queries on the likes users receive. For example you could discern between the likes they receive for posting stories or for sharing feedback by querying the likes on the initial and on subsequent posts in a stories category.

You could then design badges (together with user titles and flairs) that will be awarded for reaching certain numbers.


The issue is, as I understand it likes are a way to demonstrate the popularity of a post, but the system I’m trying to migrate is a way of monitoring whether users have met a baseline level of effort. So if it was possible for any post in a story thread that contained more than a certain number of characters and was not by the story’s author to be automatically liked once and only once, that would work for our system. But that doesn’t seem to be a good match for the way likes work.