About this drop
The glow is a single Skia RuntimeEffect written in SkSL and painted twice per card, once for the fill and once for the hairline border, so the light follows the card's own rounded outline instead of sitting over it as a blurred layer. Its uniforms are Reanimated derived values, so scroll position, audio level and intro progress reach the GPU on the UI thread and nothing re-renders in JS while a card is talking. Level comes from expo-audio: the sample listener computes RMS per buffer, and an asymmetric follower with a fast attack and a slow release smooths it inside a useFrameCallback worklet, which is what gives the rim its lag behind the voice. Where PCM sampling is unavailable, a synthetic speech-shaped envelope takes over so the card never reads as dead. The carousel itself is an Animated.ScrollView with snapToInterval and disableIntervalMomentum; card scale follows a raised cosine of the distance from centre, and expo-haptics fires a selection tick when the snap resolves. Skia and Reanimated worklets both need a development build, not Expo Go. Built on Expo SDK 56 with React Native 0.85, Reanimated 4.3 and Skia 2.6.2; web runs through CanvasKit, which index.ts loads before registering the root component.