Hi Softr community!
I’m building client portals for enterprise customers from an AirTable back end. I now want a single Softr Portal to service multiple companies. So, the user logs in (or uses magic link), and can only see their company’s content and the layout for their company.
What are your recommendations on how to architect this? Is there a best practice guide on how to build a multi-client portal?
At the moment I have the data in multiple AirTable bases (with some synchronised tables between them), and a client portal for each. The main reasons are:
- I want users to only see pages which relate to their company (e.g. some companies will only have some of the pages)
- Different companies have different menu items for this reason
- I use some static blocks with client specific content stored in Softr (e.g pics, videos)
It’s now taking a long time to roll changes across multiple Softr apps, so I’m looking to consolidate and centralise into a single app.
Thanks, I appreciate any tips!
Hi @NikW , I would recommend having each company’s data distributed in different tables within the same base to start with. Then, on each page, have different headers and blocks with various visibilities and layouts for each company connected to corresponding tables.
To connect each user to their own company data, you can use linked records and add a lookup field in each table for each company to connect to the corresponding user (e.g.,Email, Name). This allows you to set up Conditional Filters on each block based on that information or even create User Groups and set as visibility on each page If you want to have different pages for each company.
Compared to conditional filters, user groups also work with linked records and not just lookups.
Hi Maria -
Thank you for your thoughts on this
I originally took a similar approach to the one you suggested. The challenge was that I don’t want to update Softr when I add a company portal. I just want to add them to AirTable, and voila, the portal automatically adjusts its content dynamically to show that company’s content.
I’ve made a lot of progress using this approach:
- Customer data is all stored in one table, Collections (we make collections of merchandise for enterprise companies)
- Each Item in a Collection has a linked field to the Client Projects table. This attributes each item and collection to a customer
- The Users table contains a linked field to the same Client Projects table
- Each user has their own Magic Link
- Then, every block has conditional filters on Client Project. So the User can only see data which is from their projects.
This gets around another challenge we had with Comments block. We have an internal management portal across all data for all client portals. The users table was different to the users tables for the client portals. When comments were left, they couldn’t attribute the user, because they came from different tables. Now that we have a single users table, comments work well across the client portal and our internal management portal.
So far so good… all content in the client portal is dynamic and filtered by Client Project. I have two issues remaining:
- I can’t find a way to filter individual menu items on the header by logged-in user attributes, i.e. Client Project. How do I show header menu items differently for different portal users?
- I don’t know if this is a general problem, but my Rose and Donut charts return no data when conditional formatting is applied. I am just filtering on one attribute, Client Project. It works without conditional filtering.
Thanks for all your help.