[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-92543":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":8,"htmlUrl":8,"language":9,"languages":8,"totalLinesOfCode":8,"stars":10,"forks":11,"watchers":12,"openIssues":13,"contributorsCount":13,"subscribersCount":13,"size":13,"stars1d":13,"stars7d":13,"stars30d":14,"stars90d":13,"forks30d":13,"starsTrendScore":13,"compositeScore":15,"rankGlobal":8,"rankLanguage":8,"license":16,"archived":17,"fork":17,"defaultBranch":18,"hasWiki":19,"hasPages":17,"topics":20,"createdAt":8,"pushedAt":8,"updatedAt":21,"readmeContent":22,"aiSummary":23,"trendingCount":13,"starSnapshotCount":13,"syncStatus":24,"lastSyncTime":25,"discoverSource":26},92543,"daily-crumple","pablogdcr\u002Fdaily-crumple","pablogdcr",null,"TypeScript",79,9,62,0,10,41,"MIT License",false,"master",true,[],"2026-07-22 04:02:06","# 🗞️ The Daily Crumple\n\nA newspaper app where the paper is real.\n\nEvery page of this fake broadsheet behaves like an actual sheet of\nnewsprint - it folds, stretches, and crumples under your finger, all\nrendered in real time. No videos, no Lottie: the live page is snapshotted\nat touch-down and pushed through **Skia shaders** and a **hand-rolled 3D\npaper mesh**, driven frame-by-frame from the UI thread by **Reanimated**.\n\n- **Swipe between articles** and the page peels off the stack like pulled\n  cloth, folding around your finger. The fold pattern depends on where you\n  grab - top, middle, and bottom swipes all crease differently, and a\n  per-gesture seed means no two swipes ever fold the same.\n- **Scroll past either end** and the sheet stretches into a wavy crumple\n  against the edge, then relaxes flat when you let go.\n- **Don't like an article?** Tear the top-right corner along the\n  perforation. The page flips over an advancing crease like a real pulled\n  corner, gathers into a crumpled ball of newsprint, and flies into a wire\n  wastebasket that rises to catch it. The article beneath is revealed as\n  if the pages were stacked.\n\nThe paper ball is not a canned animation: the page is partitioned into 80\ntriangular scraps mapped one-to-one onto the facets of a noise-displaced\nicosphere. Each scrap travels from its spot on the page to its facet on the\nball - rotated, lit, depth-sorted, and perspective-projected in a worklet\nevery frame, then drawn as a single textured triangle list.\n\n## How it works\n\n| File | What it does |\n| --- | --- |\n| [`src\u002Feffects\u002FcrinkleShader.ts`](src\u002Feffects\u002FcrinkleShader.ts) | The swipe fold: an SkSL height field of travelling creases anchored to the grab point, with numeric normals for lighting and a cast shadow on the page beneath. |\n| [`src\u002Feffects\u002FoverscrollShader.ts`](src\u002Feffects\u002FoverscrollShader.ts) | The edge stretch: scroll offset drives a wave warp of the pinned snapshot. |\n| [`src\u002Feffects\u002FpaperBallMesh.ts`](src\u002Feffects\u002FpaperBallMesh.ts) | Ball geometry: subdivided icosphere + seeded radial noise, and the page-to-facet assignment that keeps neighbouring scraps together mid-fold. |\n| [`src\u002Feffects\u002FCrumpleOverlay.tsx`](src\u002Feffects\u002FCrumpleOverlay.tsx) | The delete: corner peel over an advancing crease, gather-to-ball blend, facet lighting, painter-sorted `Vertices` passes, the Bézier throw. |\n| [`src\u002Fengine\u002FuseSnapshot.ts`](src\u002Fengine\u002FuseSnapshot.ts) | Snapshot plumbing: `makeImageFromView` at touch-down, generation-stamped so overlays never draw a stale capture. |\n| [`src\u002Fengine\u002FusePageGestures.ts`](src\u002Fengine\u002FusePageGestures.ts) | Gesture arbitration between the scroll view, the crinkle swipe, and the corner tear. |\n| [`src\u002Fscreens\u002FNewsStack.tsx`](src\u002Fscreens\u002FNewsStack.tsx) | The deck: two mounted pages with keyed no-remount promotion, so committing a swipe or a delete never flickers. |\n\n## Run it\n\n```sh\nnpm install\nnpx expo prebuild -p ios\nnpx expo run:ios\n```\n\nNotes:\n\n- Expo Go is not supported (custom fonts + prebuild).\n- The articles are satire. Any resemblance to your sprint planning is\n  coincidental.\n\n## Stack\n\n[@shopify\u002Freact-native-skia](https:\u002F\u002Fgithub.com\u002FShopify\u002Freact-native-skia) ·\n[Reanimated](https:\u002F\u002Fgithub.com\u002Fsoftware-mansion\u002Freact-native-reanimated) ·\n[Gesture Handler](https:\u002F\u002Fgithub.com\u002Fsoftware-mansion\u002Freact-native-gesture-handler) ·\nExpo SDK 57 · React Native 0.86\n","这是一个基于 React Native（Expo）的交互式数字报纸应用，通过实时 GPU 渲染模拟真实新闻纸的物理行为。核心功能包括：手指拖拽时页面按抓取位置动态折叠（使用 Skia 自定义着色器）、滚动越界时边缘拉伸与波纹形变、以及撕下右上角后将页面分解为三角碎片并卷曲成三维废纸球投入垃圾桶（基于噪声扰动的细分二十面体网格与逐帧顶点变换）。技术特点涵盖 Reanimated 工作线程驱动、SkSL 着色器编程、手写 3D 纸张网格及快照帧同步机制。适用于交互设计演示、UI 物理动效研究及移动端高性能图形实验场景。",2,"2026-07-09 02:30:18","CREATED_QUERY"]