Mobile
Web
SaaS
AI
ThriveOn Digital Platform
Full Stack Engineer — Expo app, thriveon-api (Azure OpenAI wizards), Strapi/WordPress surfaces, shared packages
Health and wellness platform: Expo React Native client, Express thriveon-api with Azure OpenAI Assistants for purpose/goal/PSM wizards, Strapi 5 CMS, WordPress plugin, Revolut payments, and .NET Aspire orchestration.

Overview
ThriveOn is a multi-surface wellness product from the Bullshark thriveon-digital-platform monorepo. Clients use an Expo Router app for coaching, courses, events, toolkit, account, and wizard journeys. A shared Express package (thriveon-api) handles auth, bookings, payments webhooks, growth plans, and AI-assisted wizards via Azure OpenAI (Assistants API threads/runs). Content is administered in Strapi 5; a WordPress plugin bridges marketing pages to Strapi. Aspire orchestrates local services.
Problem
Wellness journeys (purpose, goals, habits, coaching, courses, events) needed one mobile product plus CMS and website embedding—and guided wizards that could generate personalized coaching-style guidance, not static forms alone.
Solution
Shipped and extended the Expo client, thriveon-api Express services (including Azure OpenAI Assistants for Purpose, Goal, and PSM wizards), Strapi 5 content APIs, shared thriveon-data types, WordPress shortcode/PHP Strapi client, Revolut checkout/webhooks, and Aspire-hosted local delivery.
Frontend
Expo ~54 app with file-based Expo Router groups for auth, tabs, wizard flows, and WordPress WebView integration.
Expo 54
React Native
Expo Router
TypeScript
React Hook Form + Zod
Revolut Checkout
Reanimated
thriveon-data shared types
- Tab surfaces: Home, Coaching, Courses, Events, Toolkit, Account, Thriveon Wizard (purpose / goals / habits / change actions)
- Auth, public onboarding, and nested protected (inner) screens via route groups
- (web-integration) WebView path for WordPress-hosted content
- API client calls into thriveon-api for wizards, profile, courses, events, bookings, and payments
- Payments via @revolut/checkout; media via expo-image / image-picker; markdown and HTML renderers for CMS content
Backend
Express thriveon-api with Azure OpenAI Assistants for wizard messaging, Strapi 5 CMS, WordPress PHP Strapi client, Revolut/Reach360 webhooks, Passport auth providers, Aspire orchestration.
Express (thriveon-api)
Azure OpenAI (openai SDK AzureOpenAI client)
Assistants API (threads / runs / messages)
Strapi 5.18
PostgreSQL / SQLite
Passport (incl. Azure AD OAuth paths)
Revolut webhooks
WordPress PHP plugin
.NET Aspire
- Azure OpenAI client configured with AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_KEY, and deployment (e.g. gpt-4.1) via purposeWizardConfig / goalWizardConfig / psmWizardConfig
- Wizard controllers create Assistants threads, post user context (focus area, values, passions, goals), poll runs, and return assistant message content to the app
- Routes for purpose, goal, PSM, daily-habit, and change-action wizards plus growth plans and change-action reports
- Auth routes with Passport strategies; profile, courses, events, books, groups, posts, perks, orders, transactions
- SimplyBookMe booking integration; Revolut and Reach360 webhook handlers
- Strapi content types + bootstrap for wellness domains; WordPress thriveon-strapi-client.php and exercise shortcodes for site parity
- Aspire AppHost runs Strapi, DB, API, and related containers locally
Modules
AI wizards (Azure OpenAI)
Purpose, Goal, and PSM wizards using Azure OpenAI Assistants threads/runs for personalized guidance
Coaching & courses
Session booking/viewing and course library consumption
Events, toolkit & habits
Calendar registration, wellness toolkit, daily habit and change-action flows
CMS & WordPress bridge
Strapi 5 admin plus PHP shortcodes/client for marketing ↔ app content
API & integration highlights
- POST purpose/goal/PSM wizard messages → Azure OpenAI Assistants thread + run polling
- Save purpose/goal outcomes onto user profile via thriveon-data services
- Auth sign-in callbacks (incl. Azure OAuth paths) with mobile deep-link exchange codes
- Revolut checkout webhooks and SimplyBookMe booking routes
- Strapi REST from WordPress via thriveon-strapi-client.php
Challenges
- Reliable Azure OpenAI Assistants run polling and error envelopes for mobile wizards
- Keeping Expo, thriveon-api, and Strapi models aligned across coaching, courses, events, and toolkit
- WordPress plugin integration without forking the content pipeline
- Aspire-local multi-service setup matching Strapi/Postgres/API parity
Impact
AI-assisted wellness wizards on Azure OpenAI inside the same product as courses and coaching
Single mobile surface for core wellness journeys
CMS-driven content ops in Strapi 5 with WordPress embedding
Shared thriveon-api / thriveon-data packages that shortened feature delivery
Architecture
Tech
React Native
Expo
Expo Router
TypeScript
Express
Azure OpenAI
OpenAI Assistants API
Strapi 5
PostgreSQL
WordPress
PHP
Revolut Checkout
.NET Aspire
React Hook Form
Zod
Passport