{"id":38261412,"url":"https://github.com/mitmedialab/gobo","last_synced_at":"2026-01-17T01:36:41.388Z","repository":{"id":42087406,"uuid":"94904719","full_name":"mitmedialab/gobo","owner":"mitmedialab","description":"💭 Gobo: Your social media. Your rules.","archived":false,"fork":false,"pushed_at":"2022-12-10T12:54:10.000Z","size":39870,"stargazers_count":111,"open_issues_count":39,"forks_count":17,"subscribers_count":7,"default_branch":"master","last_synced_at":"2026-01-12T13:07:14.545Z","etag":null,"topics":["facebook","flask","mastodon","react","social-media","twitter"],"latest_commit_sha":null,"homepage":"https://gobo.social","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mitmedialab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-06-20T15:11:42.000Z","updated_at":"2025-11-16T17:43:54.000Z","dependencies_parsed_at":"2023-01-26T07:16:47.540Z","dependency_job_id":null,"html_url":"https://github.com/mitmedialab/gobo","commit_stats":null,"previous_names":[],"tags_count":44,"template":false,"template_full_name":null,"purl":"pkg:github/mitmedialab/gobo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitmedialab%2Fgobo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitmedialab%2Fgobo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitmedialab%2Fgobo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitmedialab%2Fgobo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mitmedialab","download_url":"https://codeload.github.com/mitmedialab/gobo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitmedialab%2Fgobo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28412478,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T05:26:33.345Z","status":"ssl_error","status_checked_at":"2026-01-14T05:21:57.251Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["facebook","flask","mastodon","react","social-media","twitter"],"created_at":"2026-01-17T01:36:41.325Z","updated_at":"2026-01-17T01:36:41.381Z","avatar_url":"https://github.com/mitmedialab.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"Gobo [![Build Status](https://travis-ci.com/mitmedialab/gobo.svg?branch=master)](https://travis-ci.com/mitmedialab/gobo)\n====\n\nGobo is a responsive web-based social media aggregator with filters you can control. You can use Gobo to control what’s edited out of your feed, or configure it to include news and points of view from outside your usual orbit. Gobo aims to be completely transparent, showing you why each post was included in your feed and inviting you to explore what was filtered out by your current filter settings.\n\nTry it out at [https://gobo.social](https://gobo.social).\n\nGobo is a project of the [MIT Center for Civic Media](https://civic.mit.edu), at the [MIT Media Lab](https://media.mit.edu).  It was created by Jasmin Rubinovitz, Alexis Hope, Rahul Bhargava and Ethan Zuckerman, with generous support from the Knight Foundation.\n\n\nInstallation\n------------\n\nGobo is a [Flask](http://flask.pocoo.org)-based server side, which uses [React](http://reactjs.org) \u0026 [Redux](https://github.com/reactjs/react-redux) in the browser to render the UI.\n\n### Backend\n\nGobo uses Python 3.7.x.\n\nCreate `config.py` in `server/config/` using the provided template to hold the right api keys and database url.\n\n#### PyEnv\n\nWe manage different versions with [pyenv](https://github.com/pyenv/pyenv). Install this with HomeBrew:\n```\nbrew update\nbrew install pyenv\n```\n\nThen install the versions of Python we need:\n```\npyenv install 3.7.3\n```\n\n#### PyEnv-VirtualEnv\n\nFor managing a virtual enviromnent with a specific version of python for our project, we use \n[pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv). Install this with homebrew as well\n```\nbrew install pyenv-virtualenv\n```\nAs noted in their readme, you'll need to add these two lines to your `.bash_profile` file (or you `.profile` file). Then open a new terminal session:\n```\neval \"$(pyenv init -)\"\neval \"$(pyenv virtualenv-init -)\"\n```\n\nAnd then create a virtualenv for this project.  The name is important, because the `.python-version` file\nrefers to it so it loads automatically when you enter the directory (if `eval \"$(pyenv virtualenv-init -)\"` \nis in your `.profile`):\n```\npyenv virtualenv 3.7.3 gobo-3.7.3\n```\n\n#### Requirements and Database\n\nInstall all requirements:\n```shell\n$ make requirements-local.py\n```\n\nTo set up the database run:\n```shell\n$ export FLASK_ENV=dev\n$ make db-setup\n```\n\n### Front-end\nIn another terminal window, cd to `/client`.\n\nIf you haven't already, install [Node Version Manager](https://github.com/creationix/nvm).\n\nInstall and use version node version 10.13.0:\n```shell\n$ nvm install 10.13.0\n$ nvm use 10.13.0\n```\n\nInstall requirements and build static assets:\n```shell\n$ npm install\n$ npm run build \n```\n\nRunning\n-------\n\nIn development mode Gobo has multiple pieces you need to run:\n\n1. The Flask server handles authentication and interactions between the client and the various APIs.\n2. The Redis queue holds jobs for analyzing content with the plug-in algorithms, and requests to fetch posts.\n3. Celery runs the workers to do things in the queue.\n4. We use npm to run the front-end React code that drives the UI.\n\nRun the Flask server locally:\n```shell\n$ ./run.sh\n```\n\nIn order to fetch posts from Facebook, Twitter, and Mastodon you need to run the redis-server and celery worker locally.  Open 2 new shell terminals. Then run:\n```shell\n$ redis-server\n```\n\nAnd in the other one:\n```shell\n$ celery -A server.scripts.tasks worker\n```\n\nIn another terminal window open cd to `/client` and then:\n```shell\n$ nvm use 10.13.0\n$ npm start\n```\n\nAfter that you should be able to see Gobo at localhost:5000\n\n\n### Recurring Tasks\n\nYou need to set up three recurring tasks. The first adds tasks to the queue to fetch FB and Twitter posts for users that\nhave been using the system recently.  Run this every hour or so:\n```shell\n$ python -m server.scripts.queue_prioritized_user_posts\n```\n\nThe second updates the posts from news organizations (used for the \"perspectives\" filter). Run this every 6 hours or so:\n```shell\n$ python -m server.scripts.queue_latest_news_posts\n```\n\nThe third removes old posts (Gobo only tracks the posts within the last two weeks). Run this once a night:\n```shell\n$ python -m server.scripts.delete_old_posts\n```\n\n### Manual Tasks\n\nTo delete a specific user:\n```shell\n$ python -m server.scripts.delete_user [user_id]\n```\n\nDocumentation and tasks for creating and sharing rules found via the flask CLI:\n```shell\n$ flask \n```\n\nConfiguration\n-------------\n\n### Beta Password\n\nYou can choose to only allow signup to people that have a special password.  Add the following vars in `config.py`:\n```python\nLOCK_WITH_PASSWORD = True\nBETA_PASSWORD = 'password_you_want'\n```\nTo remove the password just set `LOCK_WITH_PASSWORD = False`.\n\n### Set up Google Analytics:\n\nEdit the GA ID in `client/app/index.js`\n\n\nDevelopment\n-----------\n\nWhen updating models that result in a table change (e.g. column added/removed), generate migrations with:\n\n```shell\n$ flask db migrate\n```\n\nThis will generate a new migration file in `migrations/versions` that should be added to version control.\n\nDeploying\n---------\n\n### Setup\n\nGobo is set up to deploy to containerized hosts like Heroku or Dokku.  Typically configuration is done with environment variables.  For now we've got a system that involves editing the config file on a local branch.  We'll get around to changing this eventually.\n\n1. Create a new local branch called \"deploy\": `git checkout -b deploy`\n2. Create a new app on the Heroku website, or with the command line in Dokku\n3. Add the heroku/dokku remote to the GitHub repo\n4. In \"deploy\" branch, edit `.gitignore` to not ignore `config.py` (make sure to also save a copy of `config.py` somewhere else on your computer)\n5. On your host (Heroku/Dokku), add a database and a redis instance\n6. Update `config.py` in the deploy branch to match the database and redis url\n7. Push to that deploy remote: `git push deploy deploy:master`\n    \n**!!! - Make sure to __**not push this branch**__ anywhere else!! as this contains sensitive data! - !!!**\n\n### Versioning\n\nEdit `client/app/constants/index.js` and bump up the semantic version number before every release.  This shows up at the bottom of the About page.\n\nContributing\n------------\n\nA pre-commit hooks will run JavaScript linting (e.g. when you commit, linting will be run). You can try to automatically fix JavaScript linting errors by running:\n\n```shell\n$ npm run lint_fix\n```\n\nNot all errors can be fixed this way and for more details about the linting error see [eslint](https://eslint.org).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmitmedialab%2Fgobo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmitmedialab%2Fgobo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmitmedialab%2Fgobo/lists"}