A mobile app that helps people discover and organize protest events in Belgium, the Netherlands and Luxembourg. France is on the way: the app shows it as soon as our server supports it. Available on iOS and Android.
Website: protestbase.be
ProtestBase is a calendar of protests and demonstrations. Anyone can browse upcoming events, save the ones they're interested in, and get directions to the location. Verified organizers can publish their own events and reach a broader audience without depending on social-media gatekeepers.
The app is built around a simple idea: surfacing collective action shouldn't require giving up your privacy. Every feature is designed with that constraint in mind.
| Feature | Description |
|---|---|
| Event Discovery | Browse, search, and filter upcoming protests in a list, a month calendar, or on a map |
| Save Events | Keep track of events you're interested in — encrypted on-device, never synced to our servers |
| Reminders | Optional reminders for saved events, on the day or an hour before, scheduled on your phone |
| Follow & Like | Follow organizations and like events; both lists stay on your device |
| Home Area | Pick a city, province or region to see nearby events first, without sharing your location |
| Event Creation | Verified organizers can create, edit, and manage events |
| Event Templates | Save and reuse event templates for recurring protests |
| Map Integration | View event locations on OpenFreeMap (no Google dependency) |
| Deep Linking | Share event links that open directly in the app |
| Multi-language | Full support for English, French, and Dutch |
| Dark/Light Mode | Automatic theme switching based on system preference |
Privacy is the foundation the app is built on, not an afterthought. Here's what that actually means.
The events you save or like, the organizations you follow, your home area and your preferences stay on your phone. We never receive these lists, store them on our servers, or sync them across devices. Saved events, liked events and followed organizations live in your device's encrypted secure storage. When you filter events by your home area, that area is sent with the search, like any other filter.
If you use ProtestBase without an account — which is the default — we collect no personal data about you. There are no third-party analytics SDKs, no advertising trackers, and no behavioral fingerprinting. The app does not require an account to function.
Like any server, ours sees your IP address. It is used briefly for rate limiting and abuse blocking, and our logs never keep it in full.
The counters you see on events and organizations (views, saves, likes and followers) are totals, nothing more. Opening an event adds one view and is sent without your account, even if you are signed in. Saving, liking or following adds one to the total. We never store who saved, liked or followed what. For signed-in accounts the server keeps a temporary marker for 24 hours, only to stop the same account counting twice.
A few features connect to other services. Each one sees your IP address:
- Map tiles load from OpenFreeMap, which also sees which part of the map you are viewing.
- App updates: on launch the app checks Expo's update service for fixes we publish between store releases. That check includes a random ID that Expo's update library creates on your device the first time the app runs.
- Feedback: the feedback form opens Tally in your browser.
Weather forecasts from Open-Meteo and address suggestions go through our server, so those services never see your device.
Our servers run in the European Union under GDPR. We don't sell your data, we don't share it with third parties, and we never will.
The app requests as little as possible from your device. Location, camera, and microphone access are deliberately not requested — the app does not need them. Everything else is optional and asked for only when you use the feature:
- Notifications: asked the first time you save an event, for reminders. Reminders are scheduled on your phone; we don't run a push server.
- Calendar: used only when you tap "Add to Calendar" on an event.
- Photos: used only when you attach an image to an event you're creating. On Android the system photo picker is used, so no photo permission is needed.
Verified organizers do log in to manage events. For those accounts we store login credentials (standard security) and the event data they publish. Everything in the sections above still applies to users who don't log in.
Our source code is publicly available so anyone can audit how we handle data. Trust, but verify.
- Organizer accounts: creating, editing and publishing events requires a signed-in session with short-lived access tokens and rotating refresh tokens, kept in the device's encrypted secure storage.
- API access: the app identifies itself to the API with a static app key. It only filters out anonymous scanner traffic and is not treated as a security boundary: the backend relies on user sessions, rate limiting and automatic abuse blocking instead.
- No device identifiers on our servers: requests to our API never carry a device or install ID, only the app key and app version, plus your session when you are signed in. The one install ID the app holds belongs to Expo's update library and goes only to Expo's update service (see Services outside our servers).
| Category | Technology |
|---|---|
| Framework | Expo SDK 58 |
| UI | React Native 0.88 |
| Navigation | Expo Router 58 (SDK-aligned versioning) |
| Language | TypeScript 6.0 |
| State | React Context API |
| HTTP | Axios + JWT refresh interceptors |
| Maps | MapLibre React Native + OpenFreeMap |
| Storage | AsyncStorage + SecureStore (with chunked encryption for list payloads) |
| Notifications | Expo Notifications (local reminders only) |
| Testing | Jest 30 + React Native Testing Library, Maestro for end-to-end tests |