Inspiration

We've been building things together since school, starting with games, then websites and small tools. When generative AI arrived, we asked a simple question: what if anyone could turn an idea into a video?

The first version of Tangram Holo had no UI at all. Yavor emailed an idea, we ran it through the pipeline, and a finished video landed in his inbox. People started watching those videos, so we kept going, built a real platform, launched it on the web in 2025, and opened a free tier that thousands of people used and gave us feedback on.

The name comes from the tangram puzzle: separate pieces that form a complete picture. A video is the same: script, visuals, voice, motion and music. Holo is short for holographic.

We'd talked about a mobile app for a long time. Shipaton gave us the deadline to stop talking and ship it.

What it does

Tangram Holo is an AI video maker. You start from an idea, a script, a document, a link, or your own images and logos, and it produces a complete video:

  • Script: AI agents turn your input into a structured, scene-by-scene script you can edit or regenerate.
  • Visuals: multiple generated image options per scene, in the style you choose, or based on your own brand assets.
  • Motion: image-to-video animation brings scenes to life.
  • Voice and music: professional AI narrators or your own cloned voice, plus AI-generated background music.
  • Publish: export, save to your device, or publish directly to YouTube.

The mobile apps for Android and iOS bring the whole workflow to your phone, so you can go from an idea to a finished video wherever the idea happens.

How we built it

  • One codebase, three platforms: Vue 3 + Ionic, wrapped with Capacitor for iOS and Android. The same app runs at app.tangramholo.com.
  • Backend: Node.js / Express, MongoDB, Redis, and Socket.IO for live generation progress.
  • AI pipeline: specialized LLM agents write scripts and scene prompts and coordinate the models. Image generation runs on serverless GPUs; TTS, animation and music come from dedicated model providers. Assets are stored in S3-compatible storage.
  • Video composition: videos are assembled on the device, in the browser or app, by a shared composition package. If a device can't finish the render, a server-side fallback we call galactus runs the exact same package inside headless Chrome, so the output matches pixel for pixel.
  • Monetization with RevenueCat: Tangram Holo uses a prepaid wallet in real dollars instead of a subscription, because AI generation costs vary a lot from one video to the next. Every step shows its price in dollars, with no tokens or made-up currency. On mobile, users top up the wallet with in-app purchases through RevenueCat; on the web, through Stripe. Both add to the same balance, so you can start a video on your laptop and finish it on your phone.

Challenges we ran into

One wallet, two payment systems. Web payments go through Stripe; mobile purchases go through the App Store and Google Play via RevenueCat. We configure RevenueCat with our own user ID as the appUserID, so every purchase webhook maps straight to the right account. Both webhook paths are idempotent (keyed on event and transaction IDs), so a retried webhook can never add funds twice, and refunds on either platform reverse the right payment.

Keeping prices fair across platforms. App stores take a commission, but we wanted a $10 top-up to add $10 to your balance everywhere. So each store product's price $p$ is set from the balance $c$ it adds and the store fee $f$:

$$p = \frac{c}{1 - f}, \quad f \approx 0.15$$

The fee goes into the price, not out of the user's balance.

Paying for work that hasn't finished yet. A video's cost depends on how many scenes, animations and voiceover minutes it ends up using. We show the price up front, place a temporary hold on the balance when generation starts, charge only what was actually used, and release the rest. Expired holds are settled automatically.

Rendering video on a phone. Composing a full video on the device depends on the device's codecs, memory and whether the screen stays awake. We keep the device awake during a render, and if the render fails we fall back to galactus, the server-side renderer running the same composition code, and upload the result directly to storage.

Thinking like a mobile app, not a website. Ionic keeps screens alive in a navigation stack, so data loaded "on mount" goes stale when you come back to a screen. We moved data loading to the moment a screen becomes visible, so balances and video status are always current.

Store review. Shipping to two app stores in a few weeks meant working through each store's billing, privacy and listing requirements. Android went live on September 27 and iOS on September 30, both during Shipaton.

What we learned

  • Shipping beats planning. We expected mobile to take months. A hard deadline showed us most of it was already built.
  • The pricing model should match the cost structure. AI costs vary a lot between users, so a pay-per-use dollar wallet with a first-deposit bonus fits better than a flat subscription, and plain dollar prices build more trust than a credit system.
  • Let tools handle what isn't your product. RevenueCat took store billing off our plate, so our time went into the creative experience.
  • Powerful AI only matters if it's easy to use. Our pipeline keeps getting more complex; the goal is for the user to see less of it every release.
  • Community beats broadcast. Engaging with specialized communities drove most of our traffic. Reddit alone brought about half of our ~8,000 views in the Shipaton week, ahead of Facebook, Instagram, TikTok and YouTube.

What's next

  • Multi-language voiceovers, our most requested feature from early users.
  • Push notifications to bring creators back for quests and streaks.
  • A web-to-app funnel so web visitors can top up on the web and continue in the app.
  • More models, more styles, and faster renders.
  • Bigger community campaigns to reach more creators and gather more feedback.

Every video in our submission was made with Tangram Holo.

Built With

Share this project:

Updates

Submission history