> ## Documentation Index
> Fetch the complete documentation index at: https://supastack.dev/llms.txt
> Use this file to discover all available pages before exploring further.
> For the full documentation corpus in one file, fetch: https://supastack.dev/llms-full.txt

# Meldingen en push

De inbox in de app, kanaalvoorkeuren en de Expo-pushpipeline.

## De inbox en kanaalvoorkeuren

Het meldingentabblad toont werkruimtemeldingen uit GET /api/notifications en markeert ze als gelezen met een PATCH op de meldings-id. Instellingen → Meldingen bewerkt de gedeelde kanaalvoorkeuren — emailBilling, emailInvites, inAppProduct — via GET en PATCH op de voorkeursweergave van dezelfde route, exact het contract dat de webapp gebruikt. Het aantal ongelezen meldingen verschijnt op het startscherm.


## Een apparaat registreren voor push

Bij het aanmelden — en opnieuw bij elke werkruimtewissel — vraagt de app meldingstoestemming, bepaalt de EAS-project-id uit de appconfiguratie, verkrijgt een Expo-pushtoken en post die naar POST /api/mobile/push-tokens. Android registreert op het standaardkanaal met hoge prioriteit.

Registratie meldt registered, permission_denied of unavailable en gooit nooit — aanmelden wordt nooit door push geblokkeerd. Expo Go en simulators kunnen de registratie niet voltooien, dus echte dekking vereist een ontwikkelingsbuild. De token wordt in SecureStore bewaard (supastack.push.token) zodat uitloggen hem kan afmelden voordat de sessiecookie wordt vernietigd.


## Serverlevering en ontvangstbewijzen

GET toont de tokens van het lid, POST upsert een token onder de actieve werkruimte en DELETE trekt in — tonen en intrekken blijven gebruikersgebonden zodat een account zonder werkruimte alsnog kan opruimen. Elke gebruiker bewaart maximaal twintig apparaattokens; nog één registreren snoeit de oudste weg.

Elke werkruimtemelding in de app wordt ook best-effort gepusht: de server verzendt naar de Expo push-API in batches van honderd, legt ok-tickets vast en snoeit DeviceNotRegistered-tokens direct weg. De optionele, alleen-server EXPO_ACCESS_TOKEN voegt een Bearer-header aan die calls toe en wordt nooit gelogd. Een platformplanning vereffent ontvangstbewijzen elke dertig minuten en veegt verouderde tickets weg — die heeft dezelfde schedulertick-driver nodig als de andere platformplanningen.

```
# Optional server-only token for authenticated Expo push sends:
# apps/web/.env.local
EXPO_ACCESS_TOKEN=
```


## Tikken op meldingen opent approutes

Afzenders voegen een webpad toe als data.href. De app valideert dat — alleen absolute slashpaden, begrensde lengte, geen traversal — en mapt bekende paden op native routes, bijvoorbeeld /billing naar /settings/billing en /dashboard naar /home. Een tik die aankomt terwijl de gebruiker is uitgelogd wordt gebufferd en afgevoerd zodra het aanmelden is voltooid.


## Verificatie en probleemoplossing

Test op een ontwikkelingsbuild: verleen en weiger toestemming, schakel push om onder Instellingen → Meldingen — het scherm meldt dit apparaat als enabled, disabled of denied — en tik een melding koud en warm aan. Als uitschakelen een fout toont, is de server-side afmelding mislukt en blijft het apparaat geregistreerd tot die lukt.

[Maak een ontwikkelingsbuild](https://supastack.dev/nl/docs/mobile/eas-setup.md)


## Volgende

[Gebruik en credits](https://supastack.dev/nl/docs/mobile/usage.md)
