Inspiration
Every indie dev ships an app and then hits the same wall: Play Store and App Store screenshots. Design tools are overkill, online generators are subscription traps, and nobody wants to open Figma just to add a caption to a phone frame.
What it does
Screenshot Maker turns raw app screens into store-ready marketing screenshots on your phone. Pick screens, choose from 39 templates, add captions, and export correctly sized sets for Play, App Store, and social — no desktop, no design skills.
How we built it
Expo 57 + React Native with strict TypeScript. Compositing runs fully on-device with Skia (backgrounds, gradients, decor, device frames, watermark), so exports work offline and instantly. Firebase handles auth (guest + Google, with guest→Google upgrade preserving quota), and Cloud Functions own the daily quota so it can't be edited from the client. RevenueCat drives Pro.
Challenges we ran into
The big one was killing our own backend: rendering started as a Python/Pillow server, and we ported the entire pipeline to Skia on-device. Beyond that — Cloud Run v2 functions silently rejecting calls with zero logs until we granted the invoker role, keeping the Skia export and the React preview visually in sync, and cutting the AAB from ~135 MB to ~122 MB by moving 39 template backgrounds to WebP.
Accomplishments that we're proud of
Zero-latency offline rendering, a 20-template catalog with deterministic geometry across four aspect ratios, a server-authoritative quota with no bypass, and a shipped 1.0.8 build on Play with a full store kit — screenshots, ad creatives, and promo video — generated by script.
What we learned
Moving compute to the device removed an entire class of infrastructure, cost, and failure modes. Also: "client-trusted" is fine for purchases, but never for limits.
What's next for Screenshot Maker
Finishing the remaining 10 Figma-designed template backgrounds, AI-assisted caption suggestions, an iOS release, and multi-device frame mockups.
Built With
- android
- cloud-firestore
- cloud-functions
- crashlytics
- expo-router
- expo.io
- fastapi
- firebase
- firebase-analytics
- firebase-auth
- firebase-performance
- github-actions
- google-sign-in
- gradle
- jest
- pillow
- python
- react-native
- react-native-reanimated
- react-native-skia
- react-query
- revenuecat
- typescript
- zustand
Log in or sign up for Devpost to join the conversation.