# Migrating bespoke functionality to Discourse (Writing critique)

**URL:** https://meta.discourse.org/t/migrating-bespoke-functionality-to-discourse-writing-critique/188437
**Category:** Community Building
**Created:** [April 28, 2021, 8:30pm UTC](https://meta.discourse.org/t/migrating-bespoke-functionality-to-discourse-writing-critique/188437 "2021-04-28T20:30:28Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![stuwest](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stuwest/32/192400_2.png) [@stuwest](https://meta.discourse.org/u/stuwest)
#### Post date: [April 28, 2021, 8:30pm UTC](https://meta.discourse.org/t/migrating-bespoke-functionality-to-discourse-writing-critique/188437/1 "2021-04-28T20:30:29Z")

</div>

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.

---

<div class="post-metadata">

### Author: ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)
#### Post date: [April 28, 2021, 9:21pm UTC](https://meta.discourse.org/t/migrating-bespoke-functionality-to-discourse-writing-critique/188437/2 "2021-04-28T21:21:32Z")

</div>

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:

> [@stuwest](#):
>
> anyone who posts a response longer than 750 characters gets points

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

> [@stuwest](#):
>
> When a user has received enough responses

How is “enough” determined?

> [@stuwest](#):
>
> they can stop anyone else from downloading the file

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” ?

> [@stuwest](#):
>
> the number their stories have received

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

---

<div class="post-metadata">

### Author: ![stuwest](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stuwest/32/192400_2.png) [@stuwest](https://meta.discourse.org/u/stuwest)
#### Post date: [April 28, 2021, 9:52pm UTC](https://meta.discourse.org/t/migrating-bespoke-functionality-to-discourse-writing-critique/188437/3 "2021-04-28T21:52:03Z")

</div>

Thanks for replying!

> [@RGJ](#):
>
> Are those points solely based on the length of the response?

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.

> [@RGJ](#):
>
> How is “enough” determined?

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

> [@RGJ](#):
>
> 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” ?

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.

> [@RGJ](#):
>
> How is the number (of points?) a story receives determined?

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.

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [April 28, 2021, 11:05pm UTC](https://meta.discourse.org/t/migrating-bespoke-functionality-to-discourse-writing-critique/188437/4 "2021-04-28T23:05:27Z")

</div>

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.

---

<div class="post-metadata">

### Author: ![manuel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/manuel/32/468169_2.png) [@manuel](https://meta.discourse.org/u/manuel)
#### Post date: [May 1, 2021, 12:18am UTC](https://meta.discourse.org/t/migrating-bespoke-functionality-to-discourse-writing-critique/188437/5 "2021-05-01T00:18:58Z")

</div>

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?

---

<div class="post-metadata">

### Author: ![stuwest](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stuwest/32/192400_2.png) [@stuwest](https://meta.discourse.org/u/stuwest)
#### Post date: [May 1, 2021, 1:18am UTC](https://meta.discourse.org/t/migrating-bespoke-functionality-to-discourse-writing-critique/188437/6 "2021-05-01T01:18:07Z")

</div>

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.

---

<div class="post-metadata">

### Author: ![manuel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/manuel/32/468169_2.png) [@manuel](https://meta.discourse.org/u/manuel)
#### Post date: [May 1, 2021, 7:57am UTC](https://meta.discourse.org/t/migrating-bespoke-functionality-to-discourse-writing-critique/188437/7 "2021-05-01T07:57:49Z")

</div>

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.

---

<div class="post-metadata">

### Author: ![stuwest](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/stuwest/32/192400_2.png) [@stuwest](https://meta.discourse.org/u/stuwest)
#### Post date: [May 1, 2021, 5:45pm UTC](https://meta.discourse.org/t/migrating-bespoke-functionality-to-discourse-writing-critique/188437/8 "2021-05-01T17:45:31Z")

</div>

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.
