Skip to content

ondata/taskforse.it

Repository files navigation

Task Forse

Nel dubbio... task forse!

"Task Forse" is an independent project for monitoring of public task forces' activity during COVID-19 emergency in 2020 in Italy: https://www.taskforse.it/.

It's a no-profit and community-driven initiative supported by Ondata and based on a shared database hosted by Google Sheets and Google Form and a web application built on top of NextJS.

The name "Task Forse" is a joke in Italian language: force in English and forse in Italian (maybe in English) sound similar, so in Italy the word task forse suggests some amount of uncertainty in the management of emergency using task forces appointed by the government and local public institutions.

Database

Shared database: 15LmCiYKg2cWzovAiqquhp_lYsaBSuGNau7suUkQddl8.

Sheets:

  • Meta: database metadata with tables and fields descriptions.
  • Task forses (task forces): table with all monitored task forces
  • Membri (members): table with all known members which are part of at least one task force
  • Verbali (minutes): table with all official minutes produced and pyblished by task forces
  • Risorse (resources): table with all sort of external resources related to task forces' activity

You can freely access the shared database, download it in all formats supported by Google Sheet and reuse it in agreement with a Creative Commons Attribution (CC-BY) license.

Web application

Running instance: https://www.taskforse.it/.

Source code

Public repository: https://github.com/ondata/taskforse.it.

Source code is released under a MIT license on Github. Contributions are welcome. Feel free to open issues and submit a pull request at any time!

Software architecture

This application is composed by three services:

  • a reverse proxy with caching as a middleware between client and nextjs application and between nextjs application and remote google sheet
  • a nextjs application with SSR enabled
  • an interactive API documentation

The remote database is a simple Google Sheet with public visibility accessed by nextjs application only on server-side.

Production

You can deploy and run the application in a production environment using Docker. A docker-compose.yml is provided to simplify deploy using Docker Compose utility.

The application is composed by 3 containers based on images hosted by Github Packages: https://github.com/ondata/taskforse.it/packages.

You can simply copy and paste the docker-compose.yml file provided and run docker-compose up. Then you can open http://localhost:8080 using your favourite browser.

You can set environment variables using a .env file:

  • PROXY_URL - URL of nginx server with path for proxied Google Sheet, default: http://proxy/db
  • APP_URL - URL of nextjs application, default: http://app:3000
  • OAS_URL - URL of swagger ui service, default: http://oas-ui:8080
  • PROD_PORT - Port exposed on host, default: 8080

Development

If you want to contribute to the development, you can fork and clone this repository, make your changes and finally send a pull request.

NextJS is a node application, so after cloning you must install dependencies running npm install.

Main dependencies:

You can start development server with hot reloading running npm run dev. You can also test the production instance running npm run start. Then you can open http://localhost:3000 using your favourite browser. Note that reverse proxy and caching are unavailable outside docker containers.

API

All data are available on a REST API (only GET verb is supported): https://www.taskforse.it/api/v1. There is also an interactive documentation powered by Swagger UI and compliant to OpenAPI Specification v3: https://www.taskforse.it/oas/.

If you want to contribute to the API documentation, you can run Swagger Editor using the docker-compose.yml file in oas/ folder.

Warning: CORS is disabled by default for all origins, if you need to access API from a client-side application feel free to open an issue.

License

The source code is released under the MIT License.

The database is released under the Creative Commons Attribution License.