"Full" and "restricted" versions of a Shiny App -- two apps or one?



Hi all –

Hoping someone could give me some good practical advice here!

I have two versions of a Shiny app in mind that differ substantially in terms of their content – i.e., the “site content”, so to speak. One contains a lot of information, the other quite a bit less.

Currently, I have a “full” version programmed and need to think about the “restricted” or “minimalist” version.

The main common feature is a large filterable dataset. But it’s the user experience around this that I’m thinking about.

The app is “private” – users are given access to it. Approved users sit in a separate dataset, and may have different attributes assigned to them, etc, and may see different versions of the app’s core dataset, depending on things like, for instance, where they live.

However, I also want users to see different versions of the app altogether. So, for instance, if a user is assigned to a “restricted” group, they see an app with much less content – some pages, tabs, or panels are hidden.

I wonder if it almost makes more sense to create a totally new “minimalist” app, and to direct the “restricted” users tot that one. Or does it make more sense to focus on one app, and build in conditions?

Any guidance or advice would be much appreciated, I hope the problem is clear.


Assuming that the content for restricted users is a subset of the content for approved users, then I would prefer one app, with content displayed/withheld based on user status.

If you have feature X shown to both restricted and approved users, you can make changes in one place instead of in two separate apps.

And since it’s just a matter of subsetting the full content, imagine a case where you have feature Y for only approved users, and now, for some reason, you want to let restricted users try it.

Do you want to copy feature Y from the approved app to the restricted app and test that it still works before deploying? Or would you rather simply remove the if-condition surrounding feature Y? I prefer the latter because there’s less code movement and less chance to make a mistake.