sucresware / 4sucres

Parce qu'à 2 on était pas assez.
https://4sucres.org
9 stars 4 forks source link

Types de topics #9

Open innocenzi opened 5 years ago

innocenzi commented 5 years ago

L'idée est de pouvoir, à la création d'un topic, sélectionner le type de ce dernier. Pour l'instant, le seul type existant est un topic normal, comprenant un message. La suggestion suivante est d'ajouter deux autres types : un topic dit "live", et un topic sondage.

Topic live

Le principe serait de pouvoir informer le plus facilement possible l'avancée d'un évènement. Le topic agira comme les topics normaux, à l'acception de la possibilité de mettre en valeur des réponses concernant des actualités.

La mise en valeur pourrait être une copie du message sur le premier post du topic (comme une timeline) et/ou une accentuation de la couleur et/ou de la taille du message concerné (à la suite). L'idée d'une timeline minimaliste sur le côté du topic est également à prendre en compte.

Live

Topic sondage

Un topic sondage serait, à la manière de Twitter et de JVC, un topic dont l'auteur choisi la question et un nombre (indéfini ?) de réponses possibles. L'auteur pourrait avoir la possibilité de laisser aux utilisateurs de choisir une seule ou plusieurs réponses.

Sondage

mgkprod commented 5 years ago

Très bonnes idées. J'ajoute quelques notes à la réflexion :

Pour les topics live :

Sachant que l'affichage des posts est géré avec VueJS, il est possible de changer facilement le DOM à la volée, a commencer par l'ajout de posts.

J'avais commencé aussi une implémentation d'infinite scroll, fonctionnel, mais à finaliser (notamment concernant le retour d'un permalink sur un post) : https://github.com/4sucres/board/blob/f87402a98168229eadb1c6131e9fbab08475eb77/resources/js/components/DiscussionInfinite.vue

Tout peut être gérable en socket dans des private-channels. Il est même très facile d'implémenter le "User est entrain d'écrire" avec un message envoyé directement client->clients, sans même passer par le serveur.

Petite note sur le socket, pour l'instant j'utilise le plan gratuit Pusher (200k messages par jour max), il faudrait avant tout réussir à implémenter et mettre en production le package beyondcode/laravel-websockets qui permet d'auto-héberger, facilement, son serveur websocket.

https://github.com/beyondcode/laravel-websockets

Il faudrait également prévoir un affichage différent pour les topics live "en cours", et ceux qui sont terminés, et possiblement les mettre en valeur sur la page d'accueil (par une catégorie ou comme un message épinglé?)

mgkprod commented 5 years ago

Pour les topics sondage :

Pour l'instant, je serais plus partant pour intégrer les résultats d'un site (et pourquoi pas un API) comme https://www.strawpoll.me/ par exemple.

https://github.com/strawpoll/strawpoll/wiki/API

Si on implémente ce genre de topics, dont l'intérêt est principalement d'afficher un type de topic différent pour savoir à quoi s'attendre avant de cliquer, il faudrait rajouter d'autres choses genre des topics partage de vidéos, partage d'image, débat ?

innocenzi commented 5 years ago

Il faudrait également prévoir un affichage différent pour les topics live "en cours", et ceux qui sont terminés, et possiblement les mettre en valeur sur la page d'accueil (par une catégorie ou comme un message épinglé?)

Pour la mise en valeurs des topics live en cours, peut-être partir sur le modèle des messages épinglés. On pourrait par exemple mettre les lives en cours entre les topics normaux et les topics épinglés. En revanche, une mise en avant du genre pourra ennuyer les utilisateurs qui ne sont pas intéressés, donc il pourrait être intéressant de mettre en avant ces topics lives en fonction des paramètres de l'utilisateur.

Pour l'instant, je serais plus partant pour intégrer les résultats d'un site (et pourquoi pas un API) comme https://www.strawpoll.me/ par exemple.

Pourquoi pas, mais il faut prendre en compte qu'il faudra implémenter la possibilité de désactiver les topics lives quand l'API externe ne répond pas. Si l'API ne répond pas, l'utilisateur ne va donc pas pouvoir voter et ça peut poser problème. De plus, strawpoll n'intègre pas la possibilité d'avoir un champ de réponse où l'utilisateur peut entrer la réponse qu'il veut (fonctionnalité utile par exemple dans les cas où un sondage sur l'âge est demandé, afin d'éviter de mettre des tranches d'âges pour avoir des résultats plus précis).

Si on implémente ce genre de topics, dont l'intérêt est principalement d'afficher un type de topic différent pour savoir à quoi s'attendre avant de cliquer, il faudrait rajouter d'autres choses genre des topics partage de vidéos, partage d'image, débat ?

Je doute qu'une mise en page différente ou des fonctionnalités avancées pour les deux premiers exemples soient nécessaires. Pour un type de topic relatif aux débats, peut-être, mais il faudra beaucoup réfléchir à la manière dont c'est fait (gérer les débats n'a jamais été chose facile). Cela dit, peut-être rajouter un système de "flair" comme le fait Reddit peut être pertinent pour catégoriser les topics. Par exemple, les flairs "Image", "Vidéo", "Débat", ou encore "Alerte" pourraient être intéressants.

mgkprod commented 5 years ago

Cela dit, peut-être rajouter un système de "flair" comme le fait Reddit peut être pertinent pour catégoriser les topics. Par exemple, les flairs "Image", "Vidéo", "Débat", ou encore "Alerte" pourraient être intéressants.

Tu peux expliquer le mécanisme ? Je traîne trop peu sur Reddit

innocenzi commented 5 years ago

Tu peux expliquer le mécanisme ? Je traîne trop peu sur Reddit

C'est un simple badge ajouté au début où à la fin du titre, indiquant le contenu du topic. Sur Reddit, c'est pratique parce qu'il y a des codes couleurs et qu'on peut filtrer. Sachant que Reddit fonctionne par subreddit, chaque subreddit possède ses propres flairs.

Pour adapter l'idée à 4S, peut-être serait-il intéressant d'intégrer des flaires par catégorie. Par exemple la catégorie #jeux pourrait avoir des flairs "Avis", "Gameplay", et la catégorie #lifehacks des flairs "DIY", "Tutoriel" (je dis des exemples nuls mais c'est pour faire comprendre le concept).