Building an app to showcase your own artwork is an idea most artist-developers have at some point. I actually did it with Antigravity. Here's the complete account — from concept through simultaneous iOS and Android release — including the places where the process went sideways.
Concept Design — Building an Experience, Not a Portfolio Viewer
The first decision was framing. A "portfolio viewer" app positions the functionality at the center: view images, swipe between them, tap to zoom. That's functionally correct but doesn't create the experience I wanted.
I wanted the app itself to feel like an extension of the work — something that communicated an aesthetic before a single image was displayed.
The design decisions I locked in before writing a single line:
Minimize interface chrome: No navigation buttons, no hamburger menus, no tab bars. The work takes the full screen. UI elements appear only when needed.
Dynamic color backgrounds: The background color shifts to match the dominant tone of the displayed artwork — muted when the piece is muted, warm when it's warm. The UI responds to the content.
Minimal text: Title and year only. No lengthy descriptions competing for attention.
Writing these decisions into Antigravity's AGENTS.md before starting development shaped the quality of suggestions throughout. Antigravity stopped generating generic components and started producing things that matched the project's intent.
Technical Stack — Why React Native and Expo
Cross-platform was required — maintaining separate native codebases solo would have been unsustainable. React Native with Expo gave a single codebase that targets both platforms.
Antigravity's React Native and Expo output is stable. The core structure — image gallery, full-screen display, swipe navigation — was roughly 80% complete after the first prompt session, with AGENTS.md providing the design context.
The Dynamic Color implementation (extracting dominant colors from images and animating the background) required more work. The combination of expo-image's color extraction and react-native-reanimated v3 for smooth transitions wasn't something Antigravity could generate accurately, but it produced a useful starting point that I could understand and modify.
Two Rejection Issues That Required Manual Fixes
Apple: Privacy Manifest Requirements
The first iOS submission was rejected for a Privacy Manifest issue. Using third-party libraries like expo-image requires declaring their privacy data usage in a PrivacyInfo.xcprivacy file — a requirement that wasn't obvious from Expo's default setup.
Giving Antigravity the rejection text produced the file structure and content needed. I still cross-referenced with Apple's documentation to verify the declarations were accurate before resubmitting. Second submission was approved.
Google Play: Target API Level
Google Play requires a minimum targetSdkVersion, which updates periodically. At submission time, API level 34 was required. Expo's default configuration didn't meet this, so the submission was rejected.
The fix was updating targetSdkVersion in app.json and rebuilding. Antigravity's diagnosis of the rejection text pointed to the right configuration, though I navigated the distinction between Expo config and Android Studio settings myself by checking Expo's documentation directly.
What the App Taught After Launch
The metric that matters for an art app isn't the same as for utility apps. Average time on screen per artwork — measured through Firebase Analytics — ran much higher than typical apps. Users were spending meaningful time with individual pieces.
This was evidence that the design investment was working. Making the interface recede so the work could come forward changed how people interacted with it.
App Store reviews occasionally come from people I've never encountered through social media — the app creating a distribution channel independent of existing follower networks. That specific quality of mobile publishing isn't something that happens with a website portfolio.
If You're Considering the Same Project
The most important thing I'd pass on: write the concept before writing code.
Not the technical architecture — the experience. What do you want someone to feel when they open this app? What should disappear into the background so the work can be present? Writing those answers in AGENTS.md gives Antigravity something to orient toward. The suggestions it produces with that context are different in quality from what comes out of blank prompting.
For developers who also think in terms of aesthetics and experience, building your own platform for your own work is worth attempting. Antigravity makes the technical barrier lower than it's been for this type of project. What you invest in the concept is what determines whether the result feels like art or just software.