Project: Jumpthe-Q

Een "virtual assistant" die o.a. een chauffeursdienst, personal shopping en exclusieve restaurants biedt. Ik ontwikkelde de API als backend voor de app en integreerde alle externe partijen.

Jumpthe-Q

Mondain 24/7 van Tom Brokking is een PA-service die voor haar leden o.a. bijzondere arrangementen, reizen, reserveringen in exclusieve restaurants, bijzondere wannahaves, chauffeursdiensten verzorgt. Hij vroeg zich af of deze dienstverlening ook toegankelijk gemaakt kon worden via een native iPhone app met een abonnementsmodel. Met 23G bedachten we hiervoor een slim concept, en ik heb hiervoor de backend en alle externe integraties gebouwd.

Enkele onderdelen

  • De JSON API
  • Authenticatie en autorisatie
  • Abonnementen: Stripe en Apple Subscriptions
  • Chats met Slack integratie
  • Content Management: Laravel Nova

De JSON API

Om de native iOS app en de backend met elkaar te koppelen heb ik een JSON API gebouwd. Daar kun je maar beter goed over nadenken, want naderhand breaking changes doorvoeren is lastig, ook al gebruik je een versioned API. Ik begon met het maken van de specificatie met behulp van de OpenAPI specification, ook wel bekend als "Swagger". Er zijn veel tools voor beschikbaar om eenvoudig documentatie of test-clients te genereren op basis van je Swagger file. Bovendien is het formaat gebaseerd op een JSON schema, dus daarmee heb je het voordeel van intelligente autosuggest en linting binnen je IDE, door middel van de YAML Language Server.

Authenticatie en autorisatie

De API moest geheel stateless zijn, dus ook de authenticatie. Hiervoor heb ik gebruik gemaakt van Laravel Sanctum, dat me best wat werk uit handen heeft genomen. Het biedt functionaliteit om eenvoudig api tokens te genereren, eventueel met custom scopes of permissies, en het bevat middleware om automatisch requests te valideren, in dit geval op basis van een Bearer Authorization header.

Abonnementen: Stripe en Apple Subscriptions

Betalingen voor abonnementen en andere producten in de app wilden we via Stripe laten lopen. Ik had hier al eerder uitstekende ervaringen mee opgedaan. Echter, Apple stelt als eis dat abonnementen in iOS apps alleen via het Apple Subscription systeem mogen lopen, vooral omdat ze dan 30% van de opbrengst kunnen afsnoepen. Gelukkig konden we dat gedeeltelijk omzeilen door betalen via Stripe via de website te laten gebeuren.

Er moesten daarvoor wel twee losse betaalflows gemaakt worden, voor dezelfde abonnementen. Dat zorgde ervoor dat een oplossing zoals Laravel Cashier minder goed inzetbaar bleek. Uiteindelijk heb ik alles zelf geimplementeerd. Het voordeel van zelfbouw is natuurlijk grotere flexibiliteit, en het is natuurlijk ook leuker en leerzamer.

Chats met Slack integratie

Een belangrijk deel van de app bestaat uit chats, waar abonnees met verschillende "virtual assistants" kunnen chatten om bijvoorbeeld reizen of vervoer te regelen. Deze chats beginnen met een chat bot die geautomatiseerd en paar beginvragen stelt. Als de antwoorden binnen zijn, wordt er onzichtbaar voor de gebruiker doorgeschakeld naar echte personen, in een ter plekke aangemaakt Slack channel. Door middel van de Slack API en de event webhooks heb ik een transparante bridge tussen de iOS app en Slack gemaakt, waarover alle berichten, emojis en geuploade bestanden heen en weer gaan.

Content Management: Laravel Nova

Zoals het een goede web developer betaamt (het is bijna een initiatie-rite) heb ik in het verleden zelf al meerdere content management systemen ontworpen. Ik vond het in dit geval weinig zinvol om dat nog eens dunnetjes over te doen, zeker omdat op dit gebied veel bijna kant en klare oplossingen bestaan, zoals Laravel Nova. Hiermee bouw je in zeer korte tijd een best goed bruikbaar CMS. Het pakket kent zeker beperkingen, maar als je die door hebt en een beetje creatief kan nadenken, valt daar prima mee te leven.

Heb jij ook een project waar je mijn hulp bij kan gebruiken?

Ik help je graag! Neem contact met me op, en we bespreken je wensen.