Missing kids alerting system
Tags: mulesofthackathon
Published: 2020-11-30 07:57:16

As a parent, one of our biggest fears is missing our kids, specially in public and crowded places.

This project follows the idea of Amber Alert but for missing kids in public places like a big mall, zoo, stadium or park. The alerting system is intended as a first response and would not replace Amber Alert but would complement it adding the social aspect with real-time notifications.

## High level description

The signup process will allow users to create a profile with their contact information (email, phone number) and might add information about their kids. i.e. Full name, age and a short bio that might include useful information like a disability.

When people go to a certain place they will check in using the mobile app. There would be two kind of check-in processes, one for parents and one for general public.

Parents will be able to upload a recent picture of their kids so if there is an incident, users can have a better idea of how the kid looks and help.

In case there is an incident, the API will gather all the people who have checked in from the last hour and will send a notification via SMS or email with the incident detail.

## Architecture

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/ag62oiyli1qn1ehnonxh.png)

The PoC includes integration with Twilio and GMail to send notifications and integration with Google Maps API to get the list of places for check-in. The events are processed via Kafka and data is persisted in a MySQL Database.

## API Definition

```
#%RAML 1.0
title: Alerting API
baseUri: http://alerting-api-v1.cloudhub.io


/signup:
    post:
        body:
            application/json:
                example: |
                    {
                        "firstName": "John",
                        "lastName": "Doe",
                        "email": "john@doe.com",
                        "phone": "4154188358",
                        "kids:": [
                            {
                                "firstName": "John",
                                "lastName": "Doe Jr.",
                                "dateOfBirth": "2016-04-30",
                                "bio": "He doesn't know his parents names"
                            }
                        ]
                    }
        responses:
            201:
                body:
                    application/json:
                        example: |
                            {
                                "id": "123e4567-e89b-12d3-a456-556642440000"
                            }

/check-in:
    post:
        body:
            application/json:
                example: |
                    {
                        "id": "123e4567-e89b-12d3-a456-556642440000",
                        "location": "ChIJgeLABbB9j4AR00VqlJ98eqU",
                        "picture": "VEVTVA=="
                    }
        responses:
            201:
                body:
                    application/json:
                        example: |
                            {
                                "id": "0e467434-c9cb-48bc-ac63-a74ad61b274e"
                            }

/incident:
    post:
        body:
            application/json:
                example: |
                    {
                        "id": "0e467434-c9cb-48bc-ac63-a74ad61b274e",
                        "description": "He was seen last time around 15:54 in front of the carousell"
                    }
        responses:
            201:
                body:
                    application/json:
                        example: |
                            {
                                "id": "97d92f5c-65b9-4c2b-a4f0-5da12f400aa5"
                            }
    /{id}/response:
        post:
            body:
                application/json:
                    example: |
                        {
                            "message": "I found him, we are in front of the cafeteria"
                        }

/locations:
    get:
        queryParameters:
          location:
            description: Latitude and Longitude comma-separated
        responses:
            200:
                body:
                    application/json:
                        example: |
                            [
                                {
                                    "id": "ChIJgeLABbB9j4AR00VqlJ98eqU",
                                    "name": "San Francisco Zoo"
                                },
                                {
                                    "id": "ChIJQ87gTrp9j4AR60rA_fO2ef0",
                                    "name": "Stonestown Galleria"
                                }
                            ]
    /{id}:
        get:
            responses:
                200:
                    body:
                        application/json:
                            example: |
                                {
                                    "id": "ChIJgeLABbB9j4AR00VqlJ98eqU",
                                    "name": "San Francisco Zoo"
                                }
```

## Future enhancements

* Integration with Salesforce or any other Case Management Software
* Integration with Apple Push notifications
* Webhooks to add subscribers


## References

* [Amber Alert website](https://amberalert.ojp.gov)
* [Source code](https://github.com/focadiz/hackathon-2020)