Aggie is a web application for using social media and other resources to track groups around real-time events such as elections or natural disasters.
Aggie can retrieve data from several sources such as Twitter, Facebook, Tiktok, Instagram, Truthsocial, and RSS
Items (called reports) from all sources are streamed into the application. Monitors can quickly triage incoming reports by marking them as relevant or irrelevant.
Relevant reports can be grouped into groups for further monitoring and follow-up.
Reports are fully searchable and filterable via a fast web interface.
Users can be assigned to admin, manager, monitor, and viewer roles, each with appropriate permissions.
Aggie is built using React and Express.js, commonly used and popular web frameworks.
Contact mikeb@cc.gatech.edu for more information on the Aggie project.
Extensive documentation about using the application can be found in ReadTheDocs page.
- node.js (v22 LTS)
- Use Fast Node Manager.
- fast node manager (FNM) allows multiple versions of node.js to be used on your system and manages the versions within each project.
- this is the 2025 recommended node manager
- After installing fnm:
- Navigate to the aggie project directory:
cd aggie. - Run
fnm installto install the version specified in.nvmrc. - then
fnm useto switch to that version.
- Navigate to the aggie project directory:
- Use Fast Node Manager.
- Mongo DB (requires >= 7.0.0)
- Follow the installation instructions for your operating system.
- You can connect to the live database, ask a maintainer for a copy of the db access token. you will need mongoCompass installed.
- if you are running a copy of the dabase locally:
- Make sure MongoDB is running:
- On Linux run
sudo systemtl status mongodto see whether themongoddaemon started MongoDB successfully. If there are any errors, you can check out the logs in/var/log/mongodbto see them.
- On Linux run
- Note: You do not need to create a user or database for aggie in Mongo DB. These will be generated during the installation process below.
- Make sure MongoDB is running:
-
Clone the aggie repo.
- you can use github-desktop, or clone using git.
- In your terminal, navigate to your main projects folder (e.g. Documents).
- Use this command:
git clone https://github.com/TID-Lab/aggie.git. cd aggie
-
Copy
.env.exampleto.env.- ask current developers for a copy of the .env
- the
DATABASE_URLkey should be the current mongo database, ask developers for a copy of this key
-
(optional, rarely needed) You might have issues with HTTPS. if so, copy your SSL certificate information to the
configfolder (two files namedkey.pemandcert.pem).- If you do not have the certificate you can create a new self-signed certificate with the following command:
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 - This will allow you to start the server but it will generate unsafe warnings in the browser. You will need a real trusted certificate for production use.
- Adding the
-nodesflag will generate an unencrypted private key, allowing you to run tests without passphrase prompt
- If you do not have the certificate you can create a new self-signed certificate with the following command:
-
Run
npm installfrom the project directory.- This installs all dependencies.
- Use
npm run devfor development.- you can run frontend and backend in separate shells with
npm run dev:frontendandnpm run dev:backend
- you can run frontend and backend in separate shells with
- Navigate to
https://localhost:8000in your browser.- This will show you the running site. Login with the user name and password, which you can obtain from the current devs
- build react app with
npm run build - run
npm start- remember to have your
ENVIRONMENT=productionin the.envfile.
- remember to have your
When collaborating with multiple developers, we adopt a feature-branch workflow. If you are unfamiliar, read this article.
the develop branch is our main/staging branch. production will be built from this branch. try not to push directly to this branch.
when writing PRs, include high-level changes and notable/interesting engineering challenges. However, you don't need to be particularly granular.
PR's should be reviewed by another developer, ideally the developer lead or the developer with domain knowledge of the feature before merging.
resolve conflicts with the main develop branch by merging the latest into the current branch. for example, if you are working on a PR example-feature-branch then:
checkout developgit fetch --allgit pullcheckout example-feature-branchgit merge develop- resolve any merge conflicts then push to branch
TODO: create proper maintenance
changes to many social media APIs means we need new ways of obtaining data from these sites. crowdtangle is being sunset. work in progress.
currently the only supported importer besides RSS. website
- Set
fetchingvalue to enable/disable fetching for all sources at global level.
- This is also changed during runtime based on user choice.
TBD
Aggie consists of two largely separate frontend and backend apps. Some model code (in /shared) is shared between them.
The backend is a Node.js/Express app responsible for fetching and analyzing data and servicing API requests. There are three main modules, each of which runs in its own process:
- API module
- Fetching module
See README files in the lib subdirectories for more info on each module.
The model layer (in /models) is shared among all three modules.
See detailed Frontend at FRONTEND.md
The frontend is a SPA react app that runs in the browser and interfaces with the API, via both pull (REST) and push (WebSockets) modalities. It source files contained in /src and /public. when built, files are served from /build
would be nice to have modern docs, but we dont at the moment
TBD
