diff --git a/app/src/main/java/hu/bme/kszk/szobatarsch/composable/FindPeople.kt b/app/src/main/java/hu/bme/kszk/szobatarsch/composable/FindPeople.kt
index fd9785b98359652afae1816911b3c06b87f34065..11b9cd14c33950c476d722deb6822eff06393212 100644
--- a/app/src/main/java/hu/bme/kszk/szobatarsch/composable/FindPeople.kt
+++ b/app/src/main/java/hu/bme/kszk/szobatarsch/composable/FindPeople.kt
@@ -1,32 +1,54 @@
 package hu.bme.kszk.szobatarsch.composable
 
 import androidx.compose.animation.core.animateDpAsState
-import androidx.compose.animation.core.animateFloatAsState
 import androidx.compose.foundation.gestures.detectDragGestures
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.offset
-import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.rememberScrollState
+import androidx.compose.foundation.verticalScroll
 import androidx.compose.material3.*
 import androidx.compose.runtime.*
-import androidx.compose.ui.ExperimentalComposeUiApi
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.alpha
 import androidx.compose.ui.draw.rotate
 import androidx.compose.ui.input.pointer.pointerInput
 import androidx.compose.ui.platform.LocalConfiguration
 import androidx.compose.ui.platform.LocalDensity
 import androidx.compose.ui.unit.Dp
 import androidx.compose.ui.unit.dp
+import hu.bme.kszk.szobatarsch.firebase.*
+import kotlinx.coroutines.launch
 
-@OptIn(ExperimentalComposeUiApi::class, ExperimentalMaterial3Api::class)
+@OptIn(ExperimentalMaterial3Api::class)
 @Composable
 fun FindPeople() {
+    val items = remember { mutableStateListOf<User>() }
+    val user = remember { mutableStateOf<User?>(null) }
+    val coroutineScope = rememberCoroutineScope()
 
+    LaunchedEffect(Unit) {
+        userData.collect { newUser ->
+            if (newUser != user.value) {
+                user.value = newUser
+            }
+        }
+    }
 
-    val items = remember { mutableStateListOf<Int>() }
+    LaunchedEffect(items.size, user.value) {
+        val limit = 3L
 
-    LaunchedEffect(Unit) {
-        (1..5).forEach { items += it }
+        if (user.value == null) return@LaunchedEffect
+
+        if (items.size < 3) {
+            val list =
+                user.value!!.likedUsers + user.value!!.dismissedUsers + items.map { it.id } + user.value!!.id
+            geLimitedLikeableUsers(
+                userList = list,
+                limit = limit
+            ).forEach {
+                items += it
+            }
+        }
     }
 
     val width = LocalConfiguration.current.screenWidthDp.dp
@@ -36,8 +58,10 @@ fun FindPeople() {
     val edge = width + 100.dp
     val sens = width / 2
 
-    val degPerDp = 20 / width.value
+    val degPerDp = 15 / width.value
+    val alphaPerDp = 0.75f / width.value
     fun Dp.getRotation() = value * degPerDp
+    fun Dp.getAlpha() = if (value < 0) (-value) * alphaPerDp else value * alphaPerDp
 
     Box() {
         items.forEach {
@@ -47,8 +71,20 @@ fun FindPeople() {
                 targetValue = offset,
                 finishedListener = { off ->
                     if (off == edge) {
+                        user.value!!.likedUsers += it.id
+
+                        coroutineScope.launch {
+                            registerOrOverwriteUser(user.value!!)
+                        }
+
                         items -= it
                     } else if (off == -edge) {
+                        user.value!!.dismissedUsers += it.id
+
+                        coroutineScope.launch {
+                            registerOrOverwriteUser(user.value!!)
+                        }
+
                         items -= it
                     }
                 },
@@ -75,11 +111,15 @@ fun FindPeople() {
                     }
                     .offset(x = animatedOffset)
                     .rotate(animatedOffset.getRotation())
+                    .alpha(1f - animatedOffset.getAlpha())
                     .fillMaxSize()
-                    .padding(8.dp),
+                    .padding(8.dp)
+                    .verticalScroll(rememberScrollState()),
                 elevation = CardDefaults.cardElevation(defaultElevation = 10.dp)
             ) {
-                Text(it.toString())
+                Column(Modifier.padding(8.dp)) {
+                    UserDataCard(it, true)
+                }
             }
         }
     }