ReadThat: A Reddit-Scale Client, Built for Real
A Reddit-style Android/iOS/www client and Cloudflare backend, built to explore SDUI, offline-first architecture, media pipelines, and agentic development. Hub for the full case-study series.
Hi! ReadThat is my exploration of the system design, client architecture, and UI of Reddit. It is essentially a working (with limited features) reddit clone backed by a Cloudflare Workers, D1, R2, and Streaming media. It’s my dive into the reddit engineering space using insights from r/redditeng posts for inspiration. Some of the more interesting bits are a personalized server-driven feed, deeply nested comments trees, image/gallery/video posting, offline first architecture with optimistic UI, three-state voting, and an media feed with streaming video & photos.
Admittedly this was mostly AI coded using codex. Detailed high-level system design was given to the agents with functional and non-functional requirements for client and backend. Once overall system design and spec was in place multiple agents implemented autonomously until evals and verification criteria were met. The final output needed some tweaking, particularly the comments UI and animations, and they still could use some tweaking. Overall impressive output great learning playground. I know from experience mileage will vary with agents in a large production codebase. Additionally much of the content in this blog is AI generated with guidance and some review. Generally I would be more manual or review more thoroughly for published docs, but I’d like to get this content up asap and the overall direction looks correct.
Feel free to try out, browse the code, or follow a deep dive below :)
Source: github.com/patjackson52/ReadThat
One original "reading conversation" mark across Android, iOS, and web: the open book doubles as a speech bubble, on a coral #F04424 / paper #FFF8F0 / ink #17212B palette (branding/).
📲 Try it yourself: every client runs against the live backend.
| Platform | Artifact |
|---|---|
| Android | Download the ReadThat APK (8.3 MB). Open the file and allow “install unknown apps” if prompted. |
| Web | Open the web client in any browser (installable PWA) |
| iOS | No public artifact yet; see part 11 for the on-device capture |
The Android SDUI feed, captured on device: ranked posts, image carousels, and inline video, all rendered from server-described cells.
Why build this
- Explore the problem space.
- Exercise agentic development.
- Practice Jetpack Compose.
- Optimize media and networking on mobile.
- Push on Kotlin Multiplatform.
The series
- Client architecture
- The SDUI feed
- The media feed
- Post detail & comments
- The data layer
- Backend architecture
- Observability
- International strategy
- Networking deep dive
- Kotlin Flows in practice
- Kotlin Multiplatform
- The web client
Stack Overview
| Client | Kotlin Multiplatform: shared Compose UI + shared MVVM (:core:client) on Android and iOS, Paging 3 over Room 3 KMP, Android WorkManager + iOS BGTaskScheduler, unidirectional data flow |
| Backend | TypeScript Cloudflare Worker + D1 + R2 + Images + Stream + Durable Objects |
| Tests | Android host/instrumentation suites, KMP suites (Android/iOS and JS where configured), 26 Workers-runtime integration scenarios |
| On device | Registration, live SDUI feed, detail/comments, create/profile/settings verified on a physical Pixel 10 Pro |
| Transport | API and images negotiated HTTP/3 on device; Stream fell back to HTTP/2 as expected |
Everything in this series links to the actual code at main.