Forum Academy Marketplace Showcase Pricing Features

Another Contact List and category problem

I’ve been exploring bubble for the last couple of weeks and its a great tool.

Like almost everyone, I’m trying to create a “contact list” with “categories” for each contact.
I’ve read through every post on this forum I can find and this is a very common issue it seems.

It also seems like this is a very common feature for most communication, CRM, and general social networks. Is there a definitive guide on building the data structures and workflows necessary to build this functionality? Maybe a good plugin or template that someone can recommend?

It’s really a shame that this isn’t a solved issue in a tutorial or a built-in feature of the bubble platform. I can imagine that many fall into the same challenges that the hundreds of posts on the forum and myself have fallen into. It’s a real setback for those starting out and makes the platform seem frustrating and like it can’t deliver on its promise to simplify building apps.

What are the specific issues you’re having with this?

Obviously, there are always multiple ways to achieve any objective with bubble, but this sounds like a fairly straight forward thing to build:

Just have a datatype for your contacts and a datatype (or option set) for your categories, and assign each contact a category (or categories).

You can make it more complicated than that if you need to (especially if you need to store data about when, and by whom, contacts were added to categories), but I can’t see any reason it should be more difficult than that.

If you’re having a specific issue then feel free to share it on here, I’m sure someone will be able to point you in the right direction.

1 Like

You would think. Thats really the message of my post. The reality is that its not and its either not easy or its not well described. The evidence for this is many many posts on the forums. Just search for it. Its really difficult to get a validated, well described, model to follow.

The problem I think many, including myself, run into is that when you are creating data objects, you soon discover that the user data object is specific to each user and can contain list of other objects and the difficulty is in WHERE to store the individual attributes for a contact.

For example, As a user, I want to add a contact to my list. I use an “add contact” page. Will that information in the form then create a new application user? If so then how will you store the attributes that the original user wants to associate with the new user? Say I would like to label my new contact “Friend” as an attribute. Do I store that in a “contact” record that is global? Do I create a list of contact “things” under the user account that I then use to associate a generic user account with the specific attributes as they relate to the single user? I.e. A user will potentially be a “contact” for many other users and each of those other users will have unique attributes for that one user.

So there becomes confusion on a number of different levels. Does that make sense?
I’m sure once the concept on how to think about this in Bubble is clear once explained, I’m just pointing out that as of now, its been difficult for me, and many others based on forum questions, to find and understand this information.

I’m not trashing bubble at all. I think its really cool. I’m just a newbie and I think that if you can understand where newbies have questions commonly, you can proactively address them, and make your user experience that much better thereby increasing adoption rate and success.
Make sense?

Your questions seem to be related to data structures. To build an app will require some knowledge of how to set up data structures – whether you are custom coding or building on Bubble or some other platform.

There are a bunch of tutorials for “how to build x” – including Bubble’s cloning tutorials, stuff on various Bubble educational websites, youtube and Udemy. It’s worth doing one or more of those to practice building in Bubble and getting a sense of how to structure data. You may also be able to find a relevant 3rd party template on Bubble’s template directory. But you’ll still want to have some knowledge of Bubble in order to modify the template.

In general, be prepared to roll up your sleeves, invest some time, take some wrong turns and occasionally get frustrated. But also be prepared to learn a ton about Bubble, app building and databases, and be surprised at what you can build on Bubble once you get the hang of it.

As to your question, you’ll need additional datatables to hold the unique information a specific user wants to save on contacts that are shared among multiple users.

1 Like

I totally agree. There is a learning curve with anything and everything. I was simply pointing out that with a lot of the other “functionality” common to many apps, there seem to be some great examples and resources that explain the concepts, data structures, and workflows necessary to achieve the intended result. Take messaging, for example, there are many great examples and templates out there. For some reason, the same doesn’t seem to exist (or is not readily found) for the functionality of building contact lists and categories within bubble.

My original post was simply stating that it seems to be a common issue of confusion and was hoping someone would have a great resource they could share.

As evidenced by the replies, I guess that’s not the case.

As I continue my research and understanding, I’ll try to trace my path of understanding and document my questions and the answers that I find and validate so that I can share for the next future me with the same questions.

When you say that “you’ll need additional datatables to hold the unique information a specific user wants to save on contacts that are shared among multiple users.”

I would love to make sure my understanding of the concepts is clear:

Users in this sense are signed-up application users. In this use case there are two User types - the CreatingUser which is the User account creating the Contacts and ContactList and then there is the TargetUser which is the User account being added to a Contact by the CreatingUser.

A Contact is an association of the TargetUser account ID with additional data such as category, notes, company affiliation, etc. etc. that are relevant to the CreatingUser. These attributes are owned by the CreatingUser and not the TargetUser.

A ContactList is unique lists of these Contacts relevant to the CreatingUser.

Each User can own one or more unique ContactList with contain Contacts.

The question then becomes - If I create a “datatable” to store Contacts, This table is global to all Users of the application, correct? If I then want to create a datatable to store ContactLists that are unique to the User itself, I must create a “List of Contacts” under the built-in User datatable. Correct?

If this is the case, won’t my Contacts datatable be filled with Contact entries from all Users of my application? Each user doesn’t get their own unique Contact Datatable, correct?

The only unique datatable to each User is the built-in USER Datatable, correct?

Thanks for taking the time to help a new user! I really appreciate it.

A few thoughts…

“User” is a unique datatype (ie datatable) in Bubble that allows individuals to login to the app and for you to show them functionality and information specific to them.

I’m not sure if a “Contact” in your app is another User (ie someone else who has an account on your app, and you are linking them like Facebook friends). Or if a Contact is someone that users at an organization are storing in a contact directly, like if you are building a contact management system for a company, and various users at the company can create contacts, but these contacts don’t have accounts on your app.

If the former, I’d set up the following datatypes and fields:

User

  • Text fields for name, address, whatever

Categories (This can be a datatype or an option set. If you want users to be able to create categories, then needs to be a datatype. Otherwise, option sets are usually faster and easier to work with)

  • Name (text field)

UserContacts

  • User (links to a User)
  • Contact (this is a user’s contact, and links to a User)
  • Categories (a list field, linking to Categories)
  • Whatever other unique fields you want that are unique to a User’s relationship with a User contact, like notes

The UserContacts datatype allows you to create links between each User and their contacts, and also allows you to store unique information relating to that relationship.

When you are searching and displaying data for contacts, you can search the UserContacts datatype (like searching for a User’s contacts with specific categories), and display information from the UserContacts datatype (like categories) and also pull into the displayed results information from the User table (like a contact’s name, address, etc.)

If a contact is not another User, then create a Contacts datatype, and link to that in your UserContact datatype.

Thanks for the insight. I really appreciate the response.

In your data model, would UserContacts then be a global table that would hold all user contacts for all users of the application? To find a particular users contacts, you would have to search the table for all records where the user field matches user account running the search? Would you then have to have some security level on the table so that users could only access their own entries? If its the case where the UserContacts table is global, then wouldn’t that table then become extremely large over time? Wouldn’t it make more sense and be more secure to have a Mycontacts entry that is a list of contacts data types under each individual user table?

Thanks again for your input.

yes

yes, and Bubble is pretty fast at this

You can set up the on page views and searches however you want. However, someone with tech know-how can access your records unless you set up privacy rules.

Bubble’s privacy rules could be set up to only allow Users to see their own UserContacts info (their connections and categories). Privacy rules can also be set up to allow Users to see their own information. But if you need Users to be only partially visible to other Users (like name and location only), and then if they are connected they have more visibility, unfortunately Bubble has limitations in searches embedded within privacy rules (search the forum and you’ll see discussions on this).

However, privacy rules can be set up so that User information is only viewable if the User is in current User’s list of Users – so you’d need to set up a list field in the User to hold each User’s contacts. But if you need the categorization ability, you’d still need to do the UserContact table to hold those categories.

You couldn’t accomplish your categorization issue this way. You could put a User’s list of contact Users in a list field, but that doesn’t enable you to assign the categories. You need a table like UserContacts to hold them.

But putting that aside, regarding list fields… great post on this below. The goal with databases is to keep them light, and the experts say that loading down each User record with a list of records should be avoided where possible. Comes down to scalability though – if you don’t anticipate a large database, then most ways will work fine. But if you anticipate getting very large, then taking the optimal way is important.

Alternative approach to the Bubble’s recent tutorials for list of things

1 Like

Thank you for this information. The article is very informative. As each user can create their own categories for contacts, would a list of text objects under the user account be the right place to store that information? Or would another global table containing all categories from all users be the best way?

The latter option. The first option (list of text objects under the user account) wouldn’t work. See my earlier post.

At this point, if you haven’t already done some “how to build” courses/tutorials, I’d suggest doing those, and also reading the Bubble manual. Then try to build your basic structure and see how it goes. Or, there are some good agencies/coaches that can build for you if you need.

Thanks! For the info. Yes, I’ve done all of the tutorials and have read through the docs as much as possible. For most things, there are great examples of how to think about and implement them. For some reason, this is a challenge for a lot of people. Hopefully your post will help others as it has helped me.