Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Gather requirements and create tickets #2

Open
chriscoderdr opened this issue Oct 22, 2024 · 2 comments
Open

Gather requirements and create tickets #2

chriscoderdr opened this issue Oct 22, 2024 · 2 comments
Assignees
Labels
documentation Improvements or additions to documentation in-progress In Progress

Comments

@chriscoderdr
Copy link
Owner

Objective:

Develop a simplified ride-sharing driver mobile application using React Native that allows
drivers to view nearby ride requests and accept or decline them. The application should utilize
Redux for state management.

Core Requirements:

  1. Home Screen:
    ○ Display a map with the driver's current location.
    ○ Fetch nearby ride requests from a mock API or generate dummy ride requests
    locally.
    ○ Display nearby ride requests as markers on the map.

  2. Ride Request Details Screen:
    ○ Allow drivers to select a ride request from the map.
    ○ Display details of the selected ride request, including pickup location and user
    information.

  3. Redux Implementation:
    ○ Implement Redux actions, reducers, and selectors to manage driver location, nearby
    ride requests, and ride request status (e.g., pending, accepted, declined).

  4. Functionality:
    ○ Allow drivers to accept or decline a ride request from the details screen.
    ○ Update the status of the ride request accordingly in the Redux store.

  5. UI/UX:
    ○ Use appropriate UI components and styling for a user-friendly experience.
    ○ Ensure smooth transitions between screens and intuitive user interactions.

  6. Error Handling:
    ○ Handle edge cases gracefully, such as no nearby ride requests or errors in fetching
    data.
    ○ Provide appropriate error messages or fallback mechanisms to guide users.

Ride Model

// Ride Model
{
id: string, // Unique identifier for the ride
userId: string, // ID of the user requesting the ride
driverId: string | null, // ID of the driver accepting the ride
(null if not accepted)

pickupLocation: {
latitude: number, // Latitude of the pickup location
longitude: number, // Longitude of the pickup location
},
destination: {
latitude: number, // Latitude of the destination
longitude: number, // Longitude of the destination
},
status: 'pending' | 'accepted' | 'declined' | 'started' |
'picked-up' | 'dropped-off', // Status of the ride request
pickupTime: Date, // Time when the ride is scheduled for pickup
timestamp: Date, // Timestamp of when the ride request was made
}
@chriscoderdr chriscoderdr self-assigned this Oct 22, 2024
@chriscoderdr
Copy link
Owner Author

chriscoderdr commented Oct 22, 2024

User stories:

Epic: As a new driver, I want to sign up for the Morro Taxi app so that I can create my driver profile, submit required documents, and start receiving ride requests.

User Stories:

  • As a new driver, I want to provide my basic personal information so that I can create an account in the app.
  • As a new driver, I want to upload my driver’s license and vehicle registration so that I can submit the necessary documents for verification.
  • As a new driver, I want to enter my banking details so that I can receive payments for completed rides.
  • As a new driver, I want to set up my driver profile and vehicle information so that riders can know more about me and my vehicle when requesting a ride.
  • As a new driver, I want to receive confirmation of my account approval so that I know I’m ready to start driving and receiving ride requests.

Epic: As a driver, I want to log in to the Morro Taxi app securely so that I can start my shift and receive ride requests.

User Stories:

  • As a driver, I want to enter my username/email and password so that I can securely access my account.
  • As a driver, I want to reset my password if I forget it so that I can regain access to my account.
  • As a driver, I want to use biometric authentication (fingerprint or face ID) so that I can quickly and securely log in without typing my * credentials every time.
  • As a driver, I want to stay logged in for a specific duration so that I don’t have to log in every time I use the app within that period.
  • As a driver, I want to receive an error message if I enter incorrect login credentials so that I know what went wrong and how to fix it.

Epic: As a driver, I want to access a home screen with a map, status control, and menu options so that I can manage my availability and navigate my driving experience effectively.

User Stories:

  • As a driver, I want to see my current location on a map in real-time so that I can track my position and navigate the area effectively.
  • As a driver, I want to switch between online and offline modes so that I can control my availability for receiving ride requests.
  • As a driver, I want to see my current status (online or offline) displayed clearly so that I know when I’m available to receive ride requests.
  • As a driver, I want to open the hamburger menu so that I can access additional options like account settings, trip history, and earnings.
  • As a driver, I want to receive a confirmation message when I change my status (online/offline) so that I’m aware that my availability has been updated successfully.
  • As a driver, I want to receive a notification or alert when there is a loss of internet connection so that I know I’m not able to receive ride requests until the connection is restored.

Epic: As a driver, I want to view my earnings and trip statistics so that I can track my income and performance on a daily and weekly basis.

User Stories:

  • As a driver, I want to see my total earnings and number of trips for today on the main display so that I can quickly track my progress during the day.
  • As a driver, I want to access a detailed weekly summary so that I can review my earnings, trips, and hours online for the week.
  • As a driver, I want to filter my earnings by day, week, or month so that I can view detailed statistics over different time periods.

Epic: As a driver, I want to manage my service preferences so that I can choose the types of rides or deliveries I want to accept.

User Stories:

  • As a driver, I want to access a preferences screen from the main display so that I can modify the types of services I’m willing to accept.
  • As a driver, I want to see a list of service types (e.g., ride, delivery) in the preferences section so that I can choose which services I want to accept.
  • As a driver, I want to enable or disable specific services (e.g., ride or delivery) so that I only receive requests for the types of services I choose to accept.
  • As a driver, I want to receive a confirmation notification after updating my service preferences so that I know my changes have been saved successfully.

Epic: As a driver, I want to view my profile details from the hamburger menu so that I can see my personal information, rating, and trip statistics.

User Stories

  • As a driver, I want to see my profile picture, name, and rating in the hamburger menu so that I can quickly view my basic information at a glance.
  • As a driver, I want to click on my profile in the hamburger menu and be taken to a detailed profile page so that I can see more detailed statistics about my driving history.
  • As a driver, I want to see a detailed profile page that shows my profile picture, name, rating, total trips, and driving history duration (e.g., "over 9 years") so that I can track my career as a driver.

Epic: As a driver, I want to request the deletion of my account and personal data so that I can ensure my privacy is respected if I no longer wish to use the app.

User Stories

  • As a driver, I want to access a "Privacy & Data" section in the hamburger menu so that I can manage my privacy settings and account deletion.
  • As a driver, I want to see an option to delete my account within the "Privacy & Data" section so that I can request the permanent deletion of my data.
  • As a driver, I want to receive a confirmation prompt before my account is deleted so that I can confirm my decision to permanently delete my account and data.
  • As a driver, I want to receive a notification or email confirming that my account deletion request was successful so that I have proof that my data has been deleted.

Epic: As a driver, I want to access app settings so that I can customize my preferences for navigation and display modes.

User Stories:

  • As a driver, I want to access an "App Settings" section from the hamburger menu so that I can adjust my app preferences.
  • As a driver, I want to choose my preferred navigation app (e.g., Google Maps or Waze) so that I can use my preferred map service while driving.
  • As a driver, I want to enable or disable Night Mode so that I can control the appearance of the app based on my preference or the time of day.
  • As a driver, I want my navigation and display preferences to be saved so that they are automatically applied every time I use the app.

Epic: As a driver, I want to receive ride requests based on my proximity to the rider so that I can accept rides efficiently and maximize my earnings.

User Stories:

  • As a driver, I want to receive a ride request if I am within the closest 10 drivers to the rider's location so that I have priority based on proximity.
  • As a system, I want to expand the radius and send the ride request to 20 additional drivers if none of the initial 10 drivers accept the ride within 5 minutes so that more drivers have the opportunity to accept the request.
  • As a system, I want to continue expanding the radius exponentially until the request reaches a 10 km limit so that the ride is offered to all potential drivers within a reasonable distance.
  • As a driver, I want to receive a notification if I am too far from the rider's location to be offered a ride request so that I know why I am not receiving ride requests.
  • As a rider, I want to be assigned a driver within a reasonable time so that I don’t have to wait too long for a ride to be confirmed.

Epic: As a driver and rider, I want to manage the various stages of a trip so that I can successfully complete the ride with clear communication and the ability to cancel if necessary.

User Stories:

  • As a system, I want to store trip details (driver, rider, time of start and end, pickup and drop-off points) so that I can track and log trips for business purposes and customer service.
  • As a driver and rider, I want to see each other’s name, profile picture, and other details (e.g., vehicle information for the driver) so that we can identify each other easily during pickup.
  • As a rider, I want to see the driver's current location on the map in real time so that I can track their approach to the pickup point.
  • As a driver and rider, I want to communicate via an in-app chat so that we can resolve any issues related to pickup location or other needs during the trip.
  • As a driver or rider, I want to cancel the trip if needed so that I can back out of the ride if there’s a valid reason to do so.
  • As a system, I want to log all trip cancellations, including who canceled and why so that I can generate statistics for business purposes and improve the service.
  • As a rider, I want to see the real-time route from the driver’s location to the pickup point so that I can anticipate when the driver will arrive.

Epic: As a driver and rider, I want to progress through the different stages of the trip so that I can complete the journey, calculate the fare, and handle payment efficiently.

User Stories

  • As a driver, I want to notify the rider when I arrive at the pickup location so that the rider knows I am ready for pickup.
  • As a system, I want to update the map to show the route from the pickup location to the drop-off location once the driver has arrived so that the rider and driver can track the trip to its destination.
  • As a driver, I want to end the trip when I am within 500m of the drop-off location so that the system knows the ride is complete and can proceed to the fare calculation stage.
  • As a rider, I want to see a summary of the fare after the trip ends so that I know how much I need to pay.
  • As a driver, I want to see how much I should charge the rider after the trip ends so that I can collect the correct fare.
  • As a driver, I want to notify the system if the rider has not paid the correct amount or has not paid at all so that this information is logged for future reference.
  • As a system, I want to calculate the fare using a configurable $ per km rate so that the driver and rider both know the correct fare to be paid.
  • As a system, I want to define geofenced areas where different fare rates can apply so that the fare calculation is adjusted based on the location.
  • As a system, I want to restrict rides to specific geofenced areas so that rides are only allowed within designated areas.
  • As a system, I want to disable the restriction of rides based on geofenced areas so that rides can occur anywhere, even outside geofenced areas.

Epic: As a driver and rider, I want to receive a summary of the trip after it ends so that I have a clear record of the trip details, including fare and distance traveled.

User Stories:

  • As a system, I want to send an email to both the rider and driver after the trip ends so that they receive a summary of the trip details.

  • As a system, I want to send a trip summary via the app (later feature) so that riders and drivers can access their trip history within the app.

Epic: As an admin, I want to manage trips, users, roles, and permissions so that I can maintain control over the system and restrict actions based on roles.

User Stories:

  • As an admin, I want to view trip statistics so that I can analyze the performance of drivers and trips for business insights.
  • As an admin, I want to create, view, and manage drivers and riders so that I can onboard new users and manage their profiles.
  • As an admin, I want to create new admin users with role-based access so that I can delegate specific tasks while restricting access to sensitive areas.
  • As an admin, I want to create new roles with custom permissions so that I can define granular access control based on organizational needs.
  • As an admin, I want to assign specific permissions to individual users so that I can give them custom access without assigning a pre-built role.
  • As an admin, I want to view logs of actions taken by other admins so that I can track changes and ensure accountability.
  • As an admin, I want to set up or update geofencing areas and fare rates so that I can manage pricing based on location.
  • As an admin, I want to view cancellation reasons and statistics so that I can track why and how often trips are being canceled.

Future Considerations:

Payment with card: Implement payment methods other than cash (e.g., credit/debit cards, digital wallets).
Fare calculation based on time and number of stops: Expand the fare calculation to include factors like trip time and the number of stops in addition to distance.

@chriscoderdr chriscoderdr added the documentation Improvements or additions to documentation label Oct 22, 2024
@chriscoderdr
Copy link
Owner Author

This task won't be close, will keep updating

@chriscoderdr chriscoderdr added the in-progress In Progress label Oct 22, 2024
@chriscoderdr chriscoderdr pinned this issue Nov 14, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation in-progress In Progress
Projects
None yet
Development

No branches or pull requests

1 participant