Giter Club home page Giter Club logo

retrospring's Introduction

The Retrospring logo

Retrospring

Retrospring is a free, open-source social network following the Q/A (question and answer) principle of sites like Formspring, ask.fm or CuriousCat. Users can create accounts on Retrospring to receive questions from other users of the site and/or anonymous people on the Internet. They can also follow each other on Retrospring to see new answers of their friends in the timeline and to ask their followers interesting questions.

Installation

You can find all the installation instructions needed for a local/production setup of Retrospring in the Wiki.

Contributing

Retrospring is free, open-source software licensed under AGPLv3.

Our guidelines and general information about how you can help us improving Retrospring can be found in the CONTRIBUTING.md file.

Licence

Copyright (C) 2014-2024 The Retrospring team and contributors

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see http://www.gnu.org/licenses/.

retrospring's People

Contributors

bandie avatar chahmedejaz avatar coderobe avatar colons avatar dependabot[bot] avatar funerally avatar greyidol avatar nilsding avatar pixeldesu avatar raccube avatar thehowl avatar tina-otoge avatar yretenai avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

retrospring's Issues

Tagging

Tagging yourself and questions, for easier way to manage content and finding people that are similar.

Tagging yourself

This can be useful if we let people specify 5 things (tags) about themselves. With this we can do user-matching ("Who to follow?") easier than thinking off complicated algorithms that analyze a huge part of the users content.

Tagging questions

With this, we could make pages dedicated to tags, so people can follow these to get questions about things they are interested in. Also, people could mute questions of different tags if they don't like this content.

Banning over the frontend doesn't work anymore

Not the functionality in the backend, but the modal on user profiles appears to have lost functionality.

My first guess seems to be that the IDs bootstrap_forms assigns to elements has changed and with that, the CoffeeScript related to displaying data and sending the AJAX request is now broken.

Implement Policies

Currently, a lot of the code that authorizes or prevents actions from happening or being displayed is based on long chains of conditions due to the nature of privacy settings, anonymity, etc.

Instead of managing the authorization inside models, we should implement policies using Pundit.

For backend stuff, this can already be implemented. Frontend-wise, I'd wait until my frontend refactor in #68 is done.

Invitation System

Allow users to directly invite people via email or link, bringing them to a nice landing + registration page and automatically following the person that invited them and vice versa.

Notification Stream

Ability to get push notifications in (near) real time without spamming an AJAX call (WebSockets, SSE)

  • Notifcations
  • Inbox Entries
  • OAuth API Access
  • Tests
    • Notifications
    • Inbox Entries

Bulk Deletion and Archive View

Introducing an "Archive View" similar to Tumblr's blog post archive pages would make it easy to mass delete multiple answers and navigate them quickly.

This interface would probably be a layout distinct from the rest of the site to

  1. Optimize space specific to it's use
  2. Clearly indicate that you are in a possibly dangerous mode

Invite Codes

Basically sign up-links with a passed parameter (the invite code) that create follower/following relationships between the already registered user and the invited user.

Beta Mode/Restricted Access

"OH MY GOD RETROSPRING WILL GET CLOSED DOWN AGAIN."

As a preparation to get the development/pre-test/beta session of Retrospring running, we need a way to stop people from being able to register on the site just like that.

The easiest way to do this would be adding a section to the config to enable this mode and appending a list with the allowed mail addresses to it.

Undelete last deleted question

After deleting a question in a user's inbox, give them the option to undo the deletion. Maybe in the deletion success message or have a button on the sidebar.

Hover Widgets

The ability to hover over a username and it will show basic info about them, similar to Facebook, and Google+.

  • AJAX Endpoints
  • Main interface
  • JavaScript binding

This will be released in conjunction with #9

Moderation Improvements

Moderation Power

Since all moderators have the same power all time, once we grew bigger, this could lead to abuse of being able to ban people (of course, if we knew that, we'd remove all these bad people), but there should be some Power Level for moderators, which first just allows them to report, vote and discuss, and after time (or after an admin set it) allows them to ban people etc.

Moderation Blame

Associate the executing moderator with the banned user or deleted content for better control and tracking of moderators.

Send data export complete notification as an email

Currently upon requesting a data export, the user is notified that the export is ready through a question being sent to their inbox. I think it would be much better if this was done through email.

Alternatively, we could use the notification system on the site.

Discussion: Give Questions the procedure to tell whether or not it was asked to a person directly or not

Doing this would allow us to deny answers to questions asked directly to a single person and to sort large quantity inboxes based on type, but doing so would require:

  • A: A lot of processing power to process through every single record, breaking pagination

or

  • B: An additional column for the question table indicating who it was asked to (user, or group)

A would require a lot of processing power for every question in a given context, looking at how many inbox entries and answers it has. The user would only be limited to the person asked if there is only one inbox or answer entry.

B would still require that processing power when inserting the table to upgrade the existing questions to follow the new model, however thereafter we can can do all the bulk sorting within the database, saving on time and keeping pagination sane. After the migration the AJAX and API calls must and should specify the target audience column.

This is an discussion issue until we have to estimate what the impact is for both (or more) possible options and come to an agreement to which option to implement.

Show remaining characters for questions

In both the questionbox and the ask modal the remaining characters for questions are not shown, so users don't know when they reach the maximum character limit (except after trying to send the question and get an error)

Soft Deleting

This allows data to persist indefinitely in the system and allows for further investigation with resolved reports or reports pertaining to deleted content.

Soft deleting is marking the record as "deleted", in which it would be in a read-only state and not retrieved under normal circumstances.

Make Discover 'really' weekly

But not using cron for it, we are cool and use Sidetiq

This helps us to reduce fetching queries and updating every time a user is visiting the site.

Translation Refactoring

As it pretty much was one of the first larger projects we have done with localization, it's pretty broken.

We're using split translations based on English sentence order and base vocabulary drop-ins without proper pluralization, causing most languages aside of English to look pretty bad.

To fix this, pretty much all of the translations have to be redone.

To Do:

  • Remove all locales aside of English
  • Refactor english translations to use placeholders and pluralization properly
  • Setup Crowdin for new translations in evaluated languages

why “Email can't be blank”?

If I leave the “Email address” field blank at https://retrospring.net/sign_up the error “Email can't be blank” appears.

Consider giving users the ability of leaving that field blank. The idea is that the user cannot reset password or receive notifications in email, but the account is not compromised if the email address is ever stolen, hacked, etc.

(For example, email address is optional on the Wikipedia's registration page.)

Mastodon/Fediverse sharing

Add an option to share to Mastodon/Pleroma/∞ in the same manner as how Twitter sharing currently works.

  • Must be able to attach an account to post to as a service
  • Must be able to control the post's privacy level (default = followers only)
  • Must be able to set a content warning (default = retrospring answer)
  • Must be able to publish answers to Mastodon

Account History

Something more moderation-specific.

How about a account history, which is viewable by each user for themselves, and moderators/admins for each user, this history includes reports (not sure about this one) and deletions of content with the reasoning.

With this, users themselves can see if their account is in a good standing or not and admins/moderators can see how many times they already took action against this user.

This could later on be combined with some sort of "Karma" system removing different abilities from users if they misbehave multiple times.

Content Warnings

Not forgetting to reopen this one. Will blur out texts of questions/answers from NSFW marked users, or seperately NSFW marked content.

This is "actually" work in progress, I just don't know how behind the code is, it might be broken by now.

Blocking Users

Blocking users you don't like/have personal issues with, the same thing as on every social network.

  • X's Profile not visible for user Y
  • X's Questions and answers not visible for user Y
  • Y's Profile not visible for user X
  • Y's Questions and answers not visible for user X

This will cause that these 2 users, except if they end up making new accounts (for stalking), being practically invisible for each other, blocking one user basically shows you have either personal or any issues with them and don't want to interact with them in any way.

Muting

Following things should be able to get muted:

  • Keywords: So questions/answers/inbox entries on feeds don't get shown containing those.
  • Users: So questions/answers/inbox entries on feeds don't get shown from those.

It also should be able to define a scope on where stuff gets muted, scopes could be:

  • Timelines
  • Inbox

i am sometimes receiving questions from people i do not follow

i'm not following Jack_Kerouac because i have zero interest in interacting with them, but this question still showed up in my inbox

perhaps this is intentional and i should hold out for #12, but if it is i'm not sure what 'following' even does

i also have a friend who has reported that this is why they stopped using the site months ago

Theming Bugs

List of theming bugs yet to be addressed

  • The stats page on a user's profile (.entry-subtext)
  • Search icon?
  • Dark and Light presets are too monotone (modify primary and warning and link color)
  • API methods (GET/PATCH /api/sleipnir/user/theme)
  • Navigation current tab
  • Notifications get a 1px top-border when hovering
  • Dropdown chevron
  • Turbolinks doesn't respect page transitions
  • Wipe Theme button (GET /settings/theme/destroy)
  • Certain links have incorrect colors
  • Notifications Badge reverts to purple when activated
  • Outline color
  • Headings
  • Panels aren't themed in accordance to the different color types (primary, warning etc)

insight:

  • Selection color
  • Input color

also:

  • Implement system to retroactively regenerate every single theme once the source is modified. (Rake, or at startup)

you can't get to questions that are not in your inbox that only have one answer

it seems that there's no way to get to the detail page for questions from people you don't follow that only have one answer, even if they were asked of everyone; where most questions would have a 'n answers' link, if there's only one, no such link exists. even when you're looking at the person's list of questions, you can't see the answers if only one exists

Announcements

Because adding .alert.alert-info into the templates by yourself is too unpractical.

Basically lists up recent stuff happening on the site + the ability to post dismissable flashes to the website without the hassle of editing templates to show important messages or use the "Ask your followers" feature to broadcast new additions.

truncated tweets should never be shorter than 140 characters

the way truncation works at the moment is pretty basic, and it leads to stuff like this happening, which makes me sad

an initial check to see if an untruncated tweet would work would help massively, but that'd only solve 'if it is possible to fit an entire question and answer in a tweet, that should happen'; even when truncation is necessary, as much content as possible should be included in the tweet. how much to truncate from the question vs the answer is a potentially complicated problem, though

if someone is in this logic anyway, it'd probably be prudent to respect short_url_length from https://dev.twitter.com/rest/reference/get/help/configuration

Account Deletion Timeout

When an account has too much content the website will timeout, causing the user not being deleted at all, so server admins have to do this over the database or Rails console.

Proposed solution: Running the deletion in a Sidekiq worker.

Frontend Refactoring

Retrosprings frontend was a 2014 hobbyist code project, and that's how the code really looks like at the moment as well.

To Do:

(S)CSS:

  • Switch from Bootstrap 3 to Bootstrap 4
  • Rewrite core elements in a BEM-style syntax
  • Use mobile-first approach instead of desktop-first

JS/Coffee:

  • Try to remove as much jQuery plugins as possible
  • Consider moving to a Webpacker pack and using ES6 instead of CoffeeScript

HAML/Layouts:

  • Utilize more layouts instead of copying the same partials into base-files
    • A great example for this are all settings and profile pages
  • Create more granular templates and a more defined structure than throwing everything into app/views/shared/
    • app/views/answerbox for all Answerbox partials
    • app/views/modals for all Modal elements
    • app/views/navigation for all navigations

Ruby:

  • Refactor a lot of conditionals for classes or URLs into helpers, to reduce in-template logic

Formatting help

A lot of sites utilizing custom markup use this and it wouldn't be too bad having this for Retrospring.

Can be solved with a simple modal showing all available ways of styling text output.

Polls

Because moving everything into one site is better, and giving people pre-made choices on some topics is probably for the better (instead of just getting a "no").

Alternate formatting

A few users have requested a more "human" formatting, such as I propose;

* for bold
_ for underline
- for strikethrough
/ for italic
` for code blocks
> for blockquotes
\ for escape

and <br/> every newline.

Teams

Allows one to invite other Retrospring members to control an existing Retrospring account without any third party knowing the password or having the capacity to edit the password.

API

To make everyone's life easier all feature requests are staggered until the API is complete and functioning. All future feature implementations must also provide appropiate API endpoints or adjustments.

  • Application Creation
  • Application Auth
  • Application Metrics
  • User API
  • Comments
  • Questions
  • Answers
  • Smiles
  • Reports
  • Moderation
  • Inbox
  • Notifications
  • Subscriptions
  • Groups
  • Utilities
  • Settings
  • Documentation
    • User
    • Questions
    • Answers
    • Reports
    • Moderation
    • Group
    • Setting
    • Utility
  • Tests
    • User
    • Questions
    • Answers
    • Reports
    • Moderation
    • Group
    • Setting
    • Utility

Original report at retrospring/bugs#9

Embedded Media Previews

Showing content like images and embedded posts from other sites directly in the answer.

TODO:

  • Disable autolinking
  • Manually process URIs on the https, http and ftp schemes
  • Embed image in a lightbox if it ends with .jpg, .png, .gif, .webp, or .bmp
  • Embed video in a lightbox if it ends with .ogg, .mp4, .webm
  • Embed appropirate content in a lightbox if the host starts with youtube.com, soundcloud.com, vimeo.com, twitter.com
  • Embed Retrospring content if it starts with retrospring.net
    proxy all images and videos through atmos/camo*

* video adjusted fork.

Search

Search users, answers and questions.

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.