You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/overview.md
+9-9Lines changed: 9 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,14 +6,14 @@ permalink: /docs/overview/
6
6
7
7
# MapSwipe Overview
8
8
9
-
## A typical MapSwipe workflow
9
+
This page walks through the typical MapSwipe workflow, from a project manager setting up a project through to volunteers contributing results and the data being exported. For how the underlying components fit together, see [System Architecture](/docs/system_architecture/).
10
10
11
-
1. Project managers upload information about their projects (e.g. area of interest, objects to look for) to backend, which will sync information to Firebase in realtime database, using the **manager dashboard**.
12
-
2. A tutorial must be attached to the projects using existing tutorials or a new one in the final phase of project creation before the publishing it.
13
-
3. After the project is published from the **manager dashboard**, relevant groups and tasks are created in the backend and synced with Firebase
14
-
4. The users of the MapSwipe app contribute to the projects and submit their results via app which will be stored in backend as well as Firebase realtime database. The **firebase rules** ensure, that app users can only change pre-defined parts of the firebase realtime database.
15
-
5. Once new results are submitted, the **backend** and **firebase functions** generate real-time statistics and update the progress of groups, compute project level statistics and user statistics in the backend and firebase realtime database.
16
-
6. All results are synchronized with **backend** and **firebase** on defined basis (e.g. every 10 minutes). The backend database holds all MapSwipe results for long term storage. Once results are synced in the backend database, they will be deleted in Firebase realtime database by the workers.
17
-
7. Based on the data in the backend, the **backend** generates aggregated data and statistics (e.g. as CSV files). The data is served by the backend's GraphQL endpoint (the older nginx-served REST API is no longer used).
11
+
## A typical MapSwipe workflow
18
12
19
-
For the architectural picture behind this workflow — old vs. new architecture and the individual components — see [System Architecture](/docs/system_architecture/).
13
+
1. Project managers use the **Manager Dashboard** to upload project information (e.g. area of interest, objects to look for) to the backend, which syncs it to the Firebase Realtime Database.
14
+
2. In the final phase of project creation, a tutorial must be attached before the project can be published — either an existing shared tutorial or one specialised for the project.
15
+
3. Once the project is published from the **Manager Dashboard**, the backend creates the relevant groups and tasks and syncs them to Firebase.
16
+
4. Users of the MapSwipe app contribute to projects and submit their results through the app; these are stored in both the Firebase Realtime Database. **Firebase rules** ensure that app users can only change pre-defined parts of the Firebase Realtime Database.
17
+
5. As new results arrive, **Firebase functions** and the **backend** generate real-time statistics — updating group progress and computing project and user statistics.
18
+
6. Results are synchronised between the **backend** and **Firebase** on a defined schedule (e.g. every 10 minutes). The backend database holds all MapSwipe results for long-term storage; once results are synced and then deletes them from the Firebase Realtime Database.
19
+
7. The **backend** then generates aggregated data and statistics from this stored data and serves them via its GraphQL endpoint.
This page describes how the MapSwipe system is put together: the old vs. new architecture, and the individual components that make up the new architecture today. For the typical end-to-end workflow (project request → publish → contribute → export), see [Overview](/docs/overview/).
9
+
This page describes how the MapSwipe system is put together: the old vs. new architecture, and the individual components that make up the new architecture today.
10
10
11
11
## Architecture overview
12
12
@@ -37,14 +37,17 @@ The primary reason for keeping Firebase as the primary database was auto-scaling
37
37
38
38
The major difference in the new architecture is that **Postgres is the primary database**. Only the MapSwipe mobile and web apps interface with Firebase directly. The system stays scalable and reliable while significantly reducing the usage of the Firebase Realtime Database. See the [Components](#components) section below for an inventory of the pieces.
39
39
40
+
> [!NOTE]
41
+
> **Firebase Endpoints** shown in the new architecture diagram is planned for a future iteration and has not yet been implemented. Today, the mobile and web apps still read from and write to the Firebase Realtime Database directly.
The public marketing and information site for MapSwipe — what MapSwipe is, recent projects, the organisations behind it, and links to the apps and dashboards.
50
+
The public-facing website for MapSwipe — an introduction to the project, recent mapping work, the organisations behind it, and links to the apps and dashboards.
48
51
49
52
### Mobile App
50
53
@@ -75,16 +78,14 @@ A React-based static site showcasing aggregated MapSwipe contribution stats, plu
75
78
76
79
The central **Django server** backed by Postgres. A single service is responsible for:
77
80
78
-
- The **GraphQL API** consumed by the [Manager Dashboard](#manager-dashboard) and the [Community Dashboard](#community-dashboard). (REST endpoints from earlier iterations are no longer used.)
81
+
- The **GraphQL API** consumed by the [Manager Dashboard](#manager-dashboard) and the [Community Dashboard](#community-dashboard).
79
82
-**Data synchronisation** between Postgres and Firebase Realtime Database — including the background workers that transfer in-flight results out of Firebase and into Postgres for long-term storage.
80
83
- The **data-export generation** that produces the files documented under [About the Data](/docs/about_data/).
81
84
82
-
The state machines that drive the [project lifecycle](/docs/for_project_managers/projects/#status-flow) and the [tutorial lifecycle](/docs/for_project_managers/tutorials/#status-flow) are also defined here (in `apps/project/serializers.py` and `apps/tutorial/serializers.py`).
Cloud Functions that react to Firebase Realtime Database events — incrementing per-user contribution counters when results arrive, propagating user-group membership changes, queuing PSQL-sync flags so the backend knows what changed, and serving the OSM OAuth handshake.
89
+
Cloud Functions that react to Firebase Realtime Database events — incrementing per-user contribution counters when results arrive, propagating user-group membership changes, queuing PSQL-sync flags so the backend knows what changed, and serving the OSM OAuth login.
89
90
90
-
The functions co-exist with the runtime **Firebase Realtime Database**, which holds active project / group / task data and in-flight result submissions until the backend workers transfer them to Postgres.
91
+
The functions co-exist with the runtime **Firebase Realtime Database**, which holds active project / group / task data and in-flight result submissions until the backend workers transfer them to Postgres database.
Copy file name to clipboardExpand all lines: docs/use_cases.md
-3Lines changed: 0 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,9 +6,6 @@ permalink: /docs/use_cases/
6
6
7
7
# Use Cases
8
8
9
-
> [!NOTE]
10
-
> This page is based on the first version of MapSwipe and contains some outdated information. It's still a useful starting point for thinking about whether a project is a good fit for MapSwipe.
11
-
12
9
## How to identify "good" mapping tasks for MapSwipe
13
10
14
11
MapSwipe projects can cover large areas in comparison to other mapping approaches, e.g. using the HOT Tasking Manager. Nevertheless, the level of detail of the resulting information you can expect from the resulting data will be lower than using the data from OpenStreetMap.
Copy file name to clipboardExpand all lines: examples/index.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,7 +9,8 @@ permalink: /examples/
9
9
10
10
Worked examples and reference scripts for interacting with MapSwipe.
11
11
12
-
> **Note:** Ongoing updates to MapSwipe may render these examples out-of-date. They are intended as a starting point and assume read-only access where applicable.
12
+
> [!NOTE]
13
+
> Ongoing updates to MapSwipe may render these examples out-of-date. They are intended as a starting point and assume read-only access where applicable.
13
14
14
15
-[Fetch Project Data](/examples/fetch-project-data/) — read-only download of a project's public data exports.
15
16
-[Fetch Global Data](/examples/fetch-global-data/) — read-only download of the four MapSwipe-wide global exports.
Copy file name to clipboardExpand all lines: index.md
+6-5Lines changed: 6 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -14,12 +14,13 @@ validating map data, MapSwipers help improve map data across the world.
14
14
15
15
## Where to start
16
16
17
-
-**[Overview](/docs/overview/)** — how MapSwipe is put together, old vs. new architecture, and how the pieces fit together.
18
-
-**[About the Data](/docs/about_data/)** — the global and project-specific exports MapSwipe makes available, and what every column means.
17
+
-**[Overview](/docs/overview/)** — the typical MapSwipe workflow, from project request through publish, contribute, and export.
18
+
-**[System Architecture](/docs/system_architecture/)** — how MapSwipe is put together: system architecture and the components that make up the system today.
-**[For Project Managers](/docs/for_project_managers/)** — how to become a project manager, set up new projects, manage tutorials, organisations, and teams.
21
-
-**[Examples](/examples/)** — reference scripts and code snippets for interacting with the MapSwipe backend.
22
-
-**[Local Development](/docs/docs_local_development/)** — how to run this docs site locally.
20
+
-**[About the Data](/docs/about_data/)** — the global and project-specific exports MapSwipe makes available, and what every column means.
21
+
-**[For Project Managers](/docs/for_project_managers/)** — how to become a project manager, set up new projects, and manage tutorials, organisations, and teams.
22
+
-**[Examples and Scripts](/examples/)** — reference scripts and code snippets for interacting with the MapSwipe backend.
23
+
-**[Use Cases](/docs/use_cases/)** — when MapSwipe is a good fit, and the kinds of mapping problems it can help with.
0 commit comments