diff --git a/config.json b/config.json
index e81bf03c53471def0f63c7a08a34bb3bc3499bbb..0a2f9144577920d928399082e9f929a4e7bd1d25 100644
--- a/config.json
+++ b/config.json
@@ -17,6 +17,12 @@
         "lounge" : "/@/lalala",
         "lobby" : "/@/lounge"
       }
+    },
+    "bbb" : {
+      "scope" : ["bbb"],
+      "allowed" : [],
+      "blocked" : [],
+      "prefix" : "https://bbb.rc3.world/"
     }
   }
 }
diff --git a/lib/Properties.hs b/lib/Properties.hs
index 85ef7c0b1af3a53cc935afca0a3edb9524d10932..35cc155a510d031437b01f58355052414414efe6 100644
--- a/lib/Properties.hs
+++ b/lib/Properties.hs
@@ -153,7 +153,7 @@ checkLayerProperty p@(Property name _value) = case name of
         >>= setProperty "jitsiRoomAdminTag"
       uselessEmptyLayer
       unwrapString' p
-        $ suggestProperty $ Property "jitsiTrigger" (StrProp "onaction")
+        $ suggestProperty $ Property "jitsiTrigger" "onaction"
     "jitsiTrigger" -> do
       isString p
       unlessHasProperty "jitsiTriggerMessage"
@@ -169,6 +169,30 @@ checkLayerProperty p@(Property name _value) = case name of
     "jitsiInterfaceConfig" -> isForbidden
     "jitsiWidth" ->
       isIntInRange 0 100 p
+    "bbbRoom" -> do
+      removeProperty "bbbRoom"
+      unwrapURI (Proxy @"bbb") p
+        (\link -> do
+            dependsOn (Link link)
+            setProperty "openWebsite" link
+            setProperty "openWebsitePolicy"
+              ("fullscreen;camera;microphone;display-capture" :: Text)
+        )
+        (const $ complain "property \"bbbRoom\" cannot be used with local links.")
+    "bbbTrigger" -> do
+      removeProperty "bbbTrigger"
+      requireProperty "bbbRoom"
+      unwrapString p
+        (setProperty "openWebsiteTrigger")
+      unlessHasProperty "bbbTriggerMessage" $ do
+       suggest "set \"bbbTriggerMessage\" to a custom message to overwrite the default \"press SPACE to enter the bbb room\""
+       setProperty "openWebsiteTriggerMessage"
+         ("press SPACE to enter bbb room" :: Text)
+    "bbbTriggerMessage" -> do
+      removeProperty "bbbTriggerMessage"
+      requireProperty "bbbRoom"
+      unwrapString p
+        (setProperty "openWebsiteTriggerMessage")
     "playAudio" -> do
       uselessEmptyLayer
       unwrapLink p $ \link -> if "https://" `isPrefixOf` link
@@ -196,9 +220,7 @@ checkLayerProperty p@(Property name _value) = case name of
     "openWebsiteTriggerMessage" -> do
       isString p
       requireProperty "openWebsiteTrigger"
-    "openWebsitePolicy" -> do
-      isString p
-      requireProperty "openWebsite"
+    "openWebsitePolicy" -> isForbidden
     "openWebsiteAllowApi" -> isForbidden
     "openTab" -> do
       isString p