But today, I'll talk about how we approach the SDK updates for introducing changes. We optimize for flexibility, customization, and a shallow learning curve. Our design includes a low-level client SDK, hooks for React libraries, and out-of-the-box components built on top of Radex UI. These components are accessible and customizable, allowing you to override styles and match them to your product. Our pre-built React components include a banner, modal, card, and notification feed.
But what I want to talk about today is a bit about how we actually approach the SDK updates for introducing these changes. So we actually set out with some design principles about how we would introduce this. So we really wanted to make sure that we are optimizing for flexibility around use cases. So thinking about customers who are using these pre-built out-of-the-box components, but also people who are coming and building custom components on top of what we're providing, all the way through to Shocker for this room, people who are using other Vue frameworks that aren't React. And maybe they need to bind in and do something inside of Vue or Svelte or something else like that.
And we also wanted to make sure that everything is super customizable. So if you're using our out-of-the-box components just as they come, you can override all of the styling and bring your own kind of design system and set of styles to it. And then lastly, we wanted this kind of shallow learning curve, so making it really easy for folks to get started with the components that we provide. So it's the minimal amount of changes within your code base to get up and running with these pre-built out-of-the-box components.
So here's a bit about how we approached our design. So this slide is not a stack, but if you kind of imagine it as a bit more of a stack, this makes more sense. At the bottom, we have our low-lying SDK, which is our client SDK. That is a low-level wrapper that actually exposes plain JavaScript classes and then manages all of the kind of business logic associated with in-app messaging. When should that message show? Who should it show to? Marking it as read, things like that. That's backed by a store that we actually use TANstack Store for, which is fantastic because it gives us this kind of cross-Vue platform ability to bind into these state updates. Really, really neat.
Then, next, we actually expose a set of hooks that make use of that low-level client. That's what our React libraries can consume. Those hooks make everything nicely reactified, makes it really easy to bind to that state store so you can receive these updates. Then, finally, at the top of the stack is a set of out-of-the-box components that we provide. Those are built on top of Radex UI, the primitives that it provides. Make sure that we have a nice set of accessible components out of the gate. Then, we also deliver these kind of smart and dumb components. The smart component binds to our hooks, provides all the functionality. These dumb components are more of the view layer whereby folks can come in and maybe you want to use our modal, but you want to override the way that the button works or some other facet of the modal, and you can do so. Then, everything inside of here, you can actually update the CSS variables or the classes can be overridden. It's really easy to kind of match it to whatever styling that you have within your product.
Cool. Here's a little look at what our pre-built React components look like. We provide a banner, a modal, a card, this notification feed as well.
Comments