YardPlan
Featured
- Platform
- iOS and Android
- Built at
- Trial & Error
- Category
- Graphics & Design
- Rating
- 4.7 on the stores
AI landscaping app: photograph a yard, explore renders that branch off one another, then get a buildable plan with plants suited to the region. A two-person build, and the effort went into making a cross-platform app feel genuinely native on iOS — real platform controls, haptics, and render progress that keeps ticking on the Lock Screen while the app is closed.
YardPlan turns a photograph of a yard into a redesign, and then into something buildable: renders to explore, and a plan with plants that suit the region. Built fresh by two engineers, with most of the mobile app and about half the backend written here.
Renders form a tree rather than a chain — one starts either from the original photo or from another render's output, so trying a different direction is just another branch, and the request carries no image because the server resolves the input from the parent. Generation runs on its own queue, so a render outlives the app being closed and is only called failed once retries are exhausted.
Nothing double-charges for that: one job at a time, a deterministic key so a redelivered job resumes from the image it already made, and a refund in exactly one place. Frontend is the specialism, and the backend was written with AI assistance — but the decisions were not delegated along with the typing: what the queue had to guarantee, where state was allowed to live, what a failed job must never cost.
Most of the effort, though, went into making a cross-platform app feel like a native iOS one. Sheets, context menus and the segmented control are real platform controls rather than imitations, glass steps down to system blur on older iOS and on Android, every tappable surface answers with haptics, and pinch-to-zoom settles on a spring.
Render progress shows up on the Lock Screen and Dynamic Island, animated by the system from a pair of timestamps, so it keeps moving with the app suspended or killed. Both sides hold themselves to written rules — one-way dependencies between layers, semantic color tokens, generated event names so no analytics string is typed by hand — and the backend's 597 tests run against the real migrations on a real database rather than mocks, because the SQL is what is under test; it ships on both stores, in English and Spanish.
Go see it
The ingredients
- 01Expo
- 02React Native
- 03React 19
- 04React Compiler
- 05TypeScript
- 06expo-router
- 07uniwind
- 08Tailwind
- 09React Query
- 10Redux Toolkit
- 11Firebase
- 12RevenueCat
- 13PostHog
- 14Branch
- 15Lingui
- 16Reanimated
- 17Skia
- 18MMKV
- 19EAS
- 20Cloudflare Workers
- 21Hono
- 22D1
- 23R2
- 24Cloudflare Queues
- 25Drizzle
- 26Gemini
- 27Biome
- 28Jest
The screens
06 of them

01

02

03

04

05

06