If it was just content/community you could control it via role priviliges.
With features/function I'd say go 2 different setups
Vanilla needs InnoDB, and you're using MyiSam.
Remove view rights for the category for the Guest role.
You can also control that logged in role Z can see category X while logged in role Y cannot.
Or can see but not post in
Via dashboard under Role permission
Go to Moderation / Site / Messages
Just take the above as an example: if you want to customize the me-box with keystone, you need to create a file in your theme called views/modules/me.php - easy as that. As you have seen above, it is a TypeScript React component in Foundation. That means that if you want to use your React component, you need to recompile some assets. Since I don't know much about React, I cannot tell if swapping a component is easy or not. But the fact that me as an experienced Vanilla developer is absolutely clueless about the theme also shows how much it is different from what could be found in Vanilla until now.
Another example. Foundation comes with a "Quick Links" widget and guess what the class names of the list entries in that widget are! div.pageBoxNoCompat css-18ts849-PageBox-boxClass > nav > ul.vanilla-lfbjtw-quickLinks-list no-css > li.vanilla-1mmg9nn-quickLinks-listItem
div.pageBoxNoCompat css-18ts849-PageBox-boxClass > nav > ul.vanilla-lfbjtw-quickLinks-list no-css > li.vanilla-1mmg9nn-quickLinks-listItem
Happy styling... Of course with some tweaking of source sass files and recompiling again it could be done. If you know how.
Furthermore after each new release of Vanilla, it wouldn't be as easy a to copy the new release files to your installation, but you would need to recompile all assets by yourself.
PHP < 50% - unbelievable...
He experienced it here aswell
The Reactions plugin is a second example
The QnA plugin is a complex example, therefore maybe not the best but I cannot think of any better right now. Maybe it helps to look what is done there. Use this method as an entry point: https://github.com/vanilla/vanilla/blob/master/plugins/QnA/QnAPlugin.php#L1353
At first you need to extend the database table. After that the model will handle that column like any other.
You need to show it in the front-end by yourself, though. But if it is included in the postback data, it will be saved automatically.
Always try to find simple plugins which do something similar to what you want to do: https://github.com/vanilla/addons/blob/master/plugins/PrefixDiscussionFilter/class.prefixdiscussionfilter.plugin.php