About this drop
Built on React Native Skia. The strip of slides is wrapped around the inside of a vertical cylinder of radius R, tangent to the screen plane at the centre of the viewport, with the axis between the camera and the screen — so the middle of the strip is the far wall and both edges curl toward the viewer. For a pinhole camera of focal length f, a point at arc length s = R*theta projects with scale k = f / (f - R(1 - cos theta)) and offset x = k*R*sin(theta). dx/dtheta collapses toward the edges (the horizontal squeeze) while k grows (the edges are nearer, so they draw taller) — a convex cylinder shrinks the edges instead and reads as a spinning drum. dx/ds is exactly 1 at the tangent point, so a drag through the middle tracks the finger 1:1. Nothing is shaded; the curve is sold purely by the silhouette. Past cos(theta_fold) = -R/(f - R) the projection stops being one-to-one, so the mesh clamps there and slides beyond it collapse to a degenerate point. Every card is the same 3:2 frame, so the pitch is constant and the rolled sliver at each screen edge is identical whichever work holds the centre. Each slide's arc position comes from a wrapping modulo, so seven fixed meshes cover an endless strip with no recycling and no re-renders. Every vertex is rebuilt in a useDerivedValue worklet, so the whole strip re-projects on the UI thread. Requires the New Architecture (Fabric) and a custom dev build because true-sheet is native (npx expo run:ios / run:android). Tested on Expo SDK 56, iOS + Android.