Product Updates Notification System

Looking for the most efficient way to create a “change log” of sorts where I can post product updates and all users will see a notification within the UI. The notification would be a short message that can be marked as “seen” or “read” by them individually. It should only be marked as “seen” to that user.

Ideally this system would also be easy to implement in various form factors such as a popup message or a floating group. So I know I need this to be it’s own data type. But figuring out how to let each individual user mark an item as seen is where I’m getting tripped up.

Hello @dustinstout

There are various ways that this can be approached. Most of them would require you to build expressions where an object1Entry is part of a anotherObject2’sListofObject1Entries (hint: a userObject and a notificationObject with a list of usersThatViewedTheNotification; or a notification entry holding just one userEntry; etc etc).

Keep the objects as light as possible and consider deleting them after a specific period of time in order not to load your database with unnecessary high number of noLongerNeeded entries (once a notification has been seen … why keep it in the dB?).

Hope the above makes sense :smiley:

1 Like

Here’s how I do it in one of my apps (this is based in the editor so only ideal if it’s your own app as the app admin can’t create it from your app’s actual UI)

  • Create field ‘lastUpdateShown’ on user of type number.

  • When you have an update, create a Popup in your app’s dashboard page or something. Display the popup on page load only when Current user’s lastUpdateShown is not 1.

  • In this popup put whatever content you want. After showing popup, set user’s lastUpdateShown to one.

  • When you have a new update, change the popup content, and change the condition to when lastUpdateShown is 2. Change the user’s lastUpdateShown to 2. etc etc

They’ll always see the latest available update and only see it once.

3 Likes

Ohhhh… That’s a brilliant solution. So I can create (for example) a Notification (type) that contains a list of Users. When a user marks the item as “Seen” it adds that User to the notification’s List of Users and then I can just have a conditional state based on whether or not the Current User is in the Notification’s List of Users!

This is exactly the connection I needed. Thanks @cmarchan!

1 Like

If you have lots of users this won’t be very performant - having a list of > 50 can mean a big performance hit and (I would assume but not certain) be costly for WU as it increases the amount of data in the DB

3 Likes

I really like this method, especially the incremental number updates. I don’t see how this wouldn’t be easy to roll out to an actual UI: an admin-accessible only page with a basic text input for the message: anything they input there appears in the popup. And then an input for the lastupdateshown number. This would also allow you to rollout a notification without also causing the ‘this app has been updated and should be refreshed’ message to pop-up.

1 Like

Yes exactly. Most of my apps have a ‘Site Settings’ type which has only one object in the database and a bunch of fields for different useful things e.g ‘website version’ or in this case ‘lastUpdateNumber’ and ‘lastUpdateContent’.

To implement this you just modify the workflow so the popup displays when Current user’s lastUpdateShown isn’t Do a search for site settings:unique ID = whatever the site settings unique ID. And that search is actually not a search WU wise, it’s just fetching that item from the database (any search you do in Bubble with unique ID = is not really a search). Then display the lastUpdateContent in the popup :slight_smile:

2 Likes

Ah, yea… >1,200 users at the moment. Darn.

Okay, if I understand this correctly, it would work well in the case that I only have a linear line of updates (ie. an onboarding sequence, or product updates). I’ll have to play with it a bit and see if it will give me the versatility I’m hoping for. Trying to accomplish 2 types of notifications…

  1. Product updates on a small drop-down style list in the user’s dashboard
  2. Onboarding messages for new features when they’re introduced into the interface—which means they would need to pop up in the right page context.

It could work though I think. :thinking:

Well if you want to save the list of product updates so they can be looked through in the future you’ll need to create a Product Update type with the relevant data. I’d suggest:

title (text)
content (text)
global (yes/no)

User should have a Last Shown Product Update field. When page is loaded if user’s last shown product update isn’t Do a search for Product Update where global = yes:sorted by creation date’s first item show the popup and update the last shown product update field.

For onboarding messages, when you create them, set ‘global’ to ‘no’ (that means they won’t ever be shown when the page is loaded). Then maybe just have an onboardingMessagesShown field on the user. Make changes in the editor so when a user clicks relevant thing (e.g new feature button) then if they haven’t got it in their onboardingMessagesShown list, show them the relevant Product Update and add it to their list.

2 Likes

@georgecollier Is a sound solution. I suggested lists as this is usually the first step … when later the path to more elaborate approaches comes about as one becomes more familiar with Bubble … and one learns that it is better to avoid … lists :sweat_smile:

The lastUpdateShown number is super scalable and as it was explained … it does not look elaborate at all … although it is a masterpiece! :smiley:

1 Like

This topic was automatically closed after 70 days. New replies are no longer allowed.