RallyNow is a mobile application that provides users with real-time information about upcoming protests, incidents, and emergency services. The app also offers features such as emergency aid, medical ID, and community donations.
- Features
- Getting Started
- Project Structure
- Screens and Components
- Navigation
- Backend Integration
- Contributing
- License
- Real-time Protests and Incidents: View the next upcoming protest and the latest incident, both fetched in real-time from a Firestore backend.
- Emergency Features: Quickly access emergency services, medical ID, and emergency aid information.
- Community Donations: View and donate to various organizations through the Community page.
- SOS Button: Quickly contact emergency services through an SOS button.
To run this app, you'll need to have the following installed:
- Node.js
- npm or Yarn
- Expo CLI (
npm install -g expo-cli
) - Firebase Project Setup
-
Clone the Repository:
git clone https://github.com/yourusername/rallynow.git cd rallynow
-
Install Dependencies:
npm install
or
yarn install
-
Configure Firebase:
Create a Firebase project and add the Firebase configuration to your project. This should be done in the
firebaseConfig.js
file located in thesrc
folder.
To start the development server and run the app:
expo start
Scan the QR code generated by Expo with your phone to run the app on a physical device, or press the options for running in an Android/iOS simulator.
rallynow/
├── assets/ # Asset files like images
├── src/ # Source files
│ ├── components/ # Reusable components
│ ├── pages/ # Screen components
│ ├── navigation/ # Navigation setup
│ ├── firebaseConfig.js # Firebase configuration
│ └── App.tsx # Main app entry point
├── .gitignore # Files and folders to be ignored by Git
├── package.json # npm package configuration
├── README.md # This README file
└── app.json # Expo configuration
The landing page displays the following:
- Upcoming Protest: Shows details of the next upcoming protest.
- Latest Incident: Displays information about the most recent incident.
- SOS Button: Allows users to quickly contact emergency services.
- Button Grid: Provides access to emergency services, emergency aid, medical ID, and community donations.
- Logout Button: Allows users to log out of the app.
The ProtestList
page shows a list of protests, sorted by the number of votes. Users can upvote protests and add new protests through a form.
The IncidentList
page lists incidents without any voting options. Users can add new incidents through a form.
The EmergencyContactsScreen
provides a list of emergency contacts (e.g., Hospital, Police, Fire Department). Tapping on a contact shows an alert with the message "Making call".
The FirstAidPage
provides information and resources related to first aid. Users can access this page via the "Emergency Aid" button on the landing page.
The MedicalIDPage
contains the user's medical information, which can be accessed in emergencies.
The CommunityPage
lists organizations to which users can donate. Each organization has a "Donate" button (currently non-functional).
The app uses React Navigation to handle screen transitions. Each screen is defined in App.tsx
within a navigation stack:
<Stack.Screen name="LandingPage" component={LandingPage} />
<Stack.Screen name="ProtestList" component={ProtestList} />
<Stack.Screen name="IncidentList" component={IncidentList} />
<Stack.Screen name="EmergencyContactsScreen" component={EmergencyContactsScreen} />
<Stack.Screen name="FirstAidPage" component={FirstAidPage} />
<Stack.Screen name="MedicalIDPage" component={MedicalIDPage} />
<Stack.Screen name="CommunityPage" component={CommunityPage} />
This app integrates with Firebase Firestore to fetch real-time data:
- Protests: Data is fetched from the
protests
collection, ordered by date to display the next upcoming protest. - Incidents: Data is fetched from the
incidents
collection, ordered by date to display the latest incident.
Ensure your Firebase project is properly set up with Firestore collections for protests
and incidents
.
As we continue to develop and enhance RallyNow, a key area of focus is the further implementation of Low-Network Usability features. Our goal is to expand the app's ability to maintain essential functionalities even in extremely limited connectivity environments. This includes optimizing data caching, improving offline access to critical features such as emergency contacts and medical IDs, and ensuring that users can still receive timely updates on protests and incidents whenever possible. By prioritizing these enhancements, we aim to make RallyNow an even more reliable tool for communities in all connectivity scenarios.
Contributions are welcome! Please follow these steps to contribute:
- Fork the repository.
- Create a new branch (
git checkout -b feature/your-feature-name
). - Make your changes and commit them (
git commit -m 'Add some feature'
). - Push to the branch (
git push origin feature/your-feature-name
). - Open a Pull Request.
This project is licensed under the MIT License. See the LICENSE
file for details.
This README provides an overview of the RallyNow app, its features, and instructions for setting up and running the project.