I am working on a form building feature that will be used across different applications within our organization. Since each app has a slightly different stack we are planning to implement this feature as its own service. It will be hosted separately from our other applications with its own isolated database. I am pretty locked in on how I am going to design the backend and how the data will be shared from the service to the consuming applications. However, one part of my design I'm a little shaky about is how to share the frontend for the form builder across each application. I.e. what is the best way to expose the form building feature to other applications to integrate with.
- Create a reusable and extensible React component combined with relevant Typescript APIs and helpers and release that as a private NPM package which each app can consume and extend as they need
- Not every application uses a React frontend so sharing this component would not be trivial
- Create a centralized form builder frontend that is built directly on top of the service and redirect as needed from the consuming applications to this app.
- I am not sure if this is a good practice or idea or not. This doesn't seem the most straightforward to implement. Is this a bad idea or generally frowned upon practice?
- I have looked a bit into Micro Frontends and it seems like it could be a workable solution here
- I am not familiar enough to know how big of a lift that would be for consuming applications to support. I also don't know what the extensibility looks like here or if tethering a workflow onto an application is a good use case for Micro Frontends.
- Just create APIs that other apps can build their own workflows on top of
- Based on some of the complicated features we want to support with our form builder I don't think this is a really great idea and will not be the best experience for other teams to integrate with
I am new to posting here so if I'm not asking a great question or providing enough details for my question to be answered let me know.