diff --git a/docs/history.md b/docs/history.md new file mode 100644 index 000000000..010dcb1ad --- /dev/null +++ b/docs/history.md @@ -0,0 +1,51 @@ +# History + +In order to better understand soapbox-fe, this document tells the story of how it came to be. + +## March 2016, Mastodon + +Mastodon, a federated microblogging platform, was released. +Mastodon is built with Ruby on Rails and uses React.js for its frontend. + +The React frontend uses [standardized API endpoints](https://docs.joinmastodon.org/methods/accounts/) to handle all actions. + +## July 2019, gab.com relaunch + +In July 2019, Gab forked Mastodon 2.8.4 and migrated to it. +They overhauled Mastodon's user interface into a streamlined single-column UI with a prettier stylesheet. + +Like Mastodon, Gab's fork is [open source](https://code.gab.com/gab/social/gab-social). + +## August 2019, spinster.xyz launch + +Spinster is a feminist platform I helped launch, forked from Gab's Mastodon version. + +I began to heavily customize it with additional themes, integrated Stripe donations, and more. +I created the fork early on, and did not adopt many of the features (and bugs) that Gab added later. + +## December 2019, Soapbox + +I decided to rebrand the Spinster codebase to be more neutral, calling it "Soapbox" (coined by `@grrrandma@spinster.xyz`). + +I wanted Soapbox to be something others would use. +However, Mastodon still had fundamental problems, and I began eye alternatives like Pleroma. + +My goal with Soapbox is to attract non-technical people to the Fediverse. +In order to do that, I need to experiment and run a lot of servers, but Mastodon makes that very expensive since it requires a lot of RAM to run. +Meanwhile Pleroma is worlds more efficient, and would make things a lot cheaper for me in the long run. + +## February 2020, HYDRA Social + +I began contracting with Gab to create HYDRA Social, a Node.js Fediverse backend. +Node.js is also more efficient than Ruby and could have solved the problem. + +For reasons I still don't understand, I was removed from the project after only a month. + +## March 2020, soapbox-fe + +I was in a headspace of making big changes, and decided to take on the move of Soapbox to Pleroma. +To do this, I would separate the frontend into its own repo to run on top of Pleroma, greatly simplifying the system. + +This is only possible because Pleroma implements most of Mastodon's API endpoints, allowing me to re-use the majority of Soapbox's frontend code. + +At the time of writing, I'm still getting soapbox-fe off the ground by implementing the basic features it needs to power Spinster and other sites. diff --git a/docs/store.md b/docs/store.md new file mode 100644 index 000000000..b9dc63e8a --- /dev/null +++ b/docs/store.md @@ -0,0 +1,103 @@ +# Redux Store Map + +A big part of what makes soapbox-fe function is the [Redux](https://redux.js.org/) store. +Redux is basically a database of everything your frontend needs to know about in the form of a giant JSON object. + +To work with Redux, you will want to install the [Redux browser extension](https://extension.remotedev.io/). +This will allow you to see the full Redux store when working in development. + +Due to the large size of the Redux store in soapbox-fe, it's worth documenting the purpose of each path. + +If it's not documented, it's because I inherited it from Mastodon and I don't know what it does yet. + +- `dropdown_menu` + +- `timelines` + +- `meta` - User-specific data that is _not_ a frontend setting (see: `settings`). + + - `pleroma` - Pleroma specific metadata about the user pulled from `/api/v1/accounts/verify_credentials` (excluding the pleroma_settings_store) + +- `alerts` + +- `loadingBar` - Managed by [react-redux-loading-bar](https://github.com/mironov/react-redux-loading-bar) + +- `modal` + +- `user_lists` + +- `domain_lists` + +- `status_lists` + +- `accounts` - Data for all accounts you've viewed since launching the page, so they don't have to be downloaded twice. + +- `accounts_counters` + +- `statuses` - Data for all statuses you've viewed since launching the page, so they don't have to be downloaded twice. + +- `relationships` + +- `settings` - Any frontend configuration values that should be persisted to the backend database. This includes user preferences as well as metadata such as emoji usage counters. It uses [`pleroma_settings_store`](https://docs-develop.pleroma.social/backend/API/differences_in_mastoapi_responses/#accounts) to do it if it's available. If there's some other endpoint that handles your value, it doesn't belong here. + +- `push_notifications` + +- `mutes` + +- `reports` + +- `contexts` + +- `compose` + +- `search` + +- `media_attachments` + +- `notifications` + +- `height_cache` + +- `custom_emojis` + +- `identity_proofs` + +- `lists` + +- `listEditor` + +- `listAdder` + +- `filters` + +- `conversations` + +- `suggestions` + +- `polls` + +- `trends` + +- `groups` + +- `group_relationships` + +- `group_lists` + +- `group_editor` + +- `sidebar` + +- `patron` - Data related to [soapbox-patron](https://gitlab.com/soapbox-pub/soapbox-patron) + +- `soapbox` - Soapbox specific configuration pulled from `/soapbox/soapbox.json`. The configuration file isn't required and this map can be empty. + +- `instance` - Instance data pulled from `/api/v1/instance` + +- `me` - The account ID of the currently logged in user, 'null' if loading, and 'false' if no user is logged in. + +- `auth` - Data used for authentication + + - `app` - Map containing the app used to make app requests such as register/login and its access token. + + - `user` - Map containing the access token of the logged in user.