Inspiration

The first idea for this app was actually not mine, it was proposed to me by my team some months ago, and it seemed really interesting. Then, once my city (Andria, Italy) approved the idea, we started making it.

What it does

It's actually really easy to use: you just launch the app, record a video or take a picture, add a small optional message to the report and send it directly to the police! It's really a matter of seconds. Both photos and videos must be taken from the app directly and cannot be chosen from gallery. The report includes your geolocation position (latitude and longitude) so the officers know exactly from where you are sending the report. The reports are fully anonymous.

There is also a separate web-app built for the officers that will actually review and approve the reports sent through the main app, and that's also easy to use.

How I built it

The very first thing I built was the server and the APIs that it exposes. I used NodeJS (with the Express framework) writing the whole thing in Typescript (because let's face it, Typescript > Javascript). The server code is also fully tested using Mocha and fully documented using Swagger. It's also possible to use Postman to test calls really quickly.

The database that I chosen was MongoDB, mainly because of GridFS, a really useful set of APIs made to store large files directly on the database in binary format. The upload is really (really!) fast, while the download isn't as fast, but I don't really care about that, since downloads will surely be made in conditions where internet access is fast and reliable, while uploads will be made from the app which will surely be used mainly in areas where internet access is not reliable.

The main app (available on Android and iOS) was built using Flutter with the Dart language. Flutter is a really simple and fun to use native mobile framework backed by Google, if you never heard anything about it you should really check it out because it rocks!

Challenges I ran into

Even if Flutter is easy to use, it doesn't mean that it does everything for you. Setting up the app to work properly on all resolutions, scales and aspect ratio was a real pain, and making the camera plugin work better and faster was even more pain.

Accomplishments that I'm proud of

Putting the damn app on the App Store and making it work.

What I learned

How to use GridFS, how to use Flutter and its plugins, how to compile and release a Flutter app on the Play Store and App Store (f**k the app store)

What's next for Neuvo!

We have tons of ideas and new features for Neuvo. The next thing we will add is a reporter profile with experience points and levels and achievements. We feel like gamification really works with this kind of projects. I also need to tweak a bit the security of the upload API call, which atm is I think the only good attack vector for the app.

Built With

  • flutter-node.js-react-express.js
Share this project:

Updates