Building PukatFlow β an offline-first mobile ledger & AI assistant designed for maritime vessel o...Building PukatFlow β an offline-first mobile ledger & AI assistant designed for maritime vessel o...
The network for creativity
Join 1.25M professional creatives like you
Connect with clients, get discovered, and run your business 100% commission-free
Creatives on Contra have earned over $150M and we are just getting started
Building PukatFlow β an offline-first mobile ledger & AI assistant designed for maritime vessel operators βπ±
Most bookkeeping apps completely break down at sea once you lose cell signal. With PukatFlow, everything works seamlessly offline:
β’ Local-first sync via PowerSync + Supabase (zero data loss when back at port)
β’ Voice logging & receipt parsing powered by Gemini API
β’ Instant profit-sharing (bagi hasil) calculation right from the dock
Realistic AI Talking Head Video with Emotional Lip SyncAI
Video Creator | Character Generation, Lip Sync, Sound & Editing
The client needed a 30-second cinematic AI talking-head video featuring one woman delivering the same line, "I'm fine," with six distinct emotions. I created the character visuals, generated and refined the performances, and handled lip sync, sound and editing. The focus was consistent identity and room details, realistic skin, subtle facial expressions, natural body movement and believable emotional transitions.
Same line six times is a tough brief, since the words can't carry any of it and everything sits on the face. With recurring characters, identity usually slips first on the strong expressions, not the calm ones. Did you lock her with one reference set across all six emotions, or adjust refs per emotion?
Cancelling a purchase and failing a purchase reach your Flutter code the same way, as a PlatformException. That is how a paywall ends up showing a red error to someone who simply changed their mind on the store sheet.
PurchasesErrorHelper.getErrorCode is what distinguishes them, and two outcomes are not enough. A single call to Purchases.purchase can end five ways: cancelled, pending, completed, failed and unresolved. Pending is the one that catches people out. A parent still has to approve the purchase, or a slow payment method has to settle, and RevenueCat grants no entitlement until the store confirms it.
Which means the paywall screen should not be what decides access. A pending purchase can complete after the paywall closes or after the app has been killed, and RevenueCat does not push that change to the device. Keep a CustomerInfo listener in an object that lives as long as the app, and have every paid feature read the entitlement from it rather than from whatever the purchase call returned.
https://www.duskolicanin.com/blog/flutter-subscription-pending-cancelled-purchase