Cross-platform cryptocurrency wallet for iOS and Android. Led from project inception to the first App Store release. Current production version is maintained by a different team on top of the same architecture.
| Phase | Period | What I did |
|---|---|---|
| Architecture & MVP | 2024 — early 2025 | Designed the wallet architecture from scratch in FlutterFlow with Flutter custom actions; integrated Trust Wallet Core for multi-chain key management; wired Alpha Vantage for in-app news; set up Firebase for auth + analytics; led the migration path from FlutterFlow constructor into editable Flutter source for crypto-critical custom actions. |
| First release | Q1 2025 | Coordinated the path to App Store submission: store listing, screenshot set, App Store Review compliance for a crypto wallet. |
| Handoff | Mid-2025 | Project handed to current owners. UI was later redesigned by them; the underlying architecture, security model, and key-management decisions documented here remain in production. |
| My ongoing relationship | 2025 — present | Author retains showcase rights for portfolio purposes. Not involved in current operational maintenance. |
The live version on the App Store reflects work by the current team (UI redesign, ongoing feature work). The architectural decisions described below are what I authored.
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Screenshots are pulled from the public App Store listing and reflect the current production build. The product surface — multi-chain wallet, news feed, send/receive, security model — is what was built during the phase I led. The visual design in these screenshots is from the current team's redesign.
| Layer | Technology | Why |
|---|---|---|
| Frontend | Flutter 3.0+ (FlutterFlow-derived, custom actions in Flutter) | Cross-platform from one codebase; FlutterFlow let the non-crypto UI ship fast while custom actions handled the crypto-sensitive paths |
| Routing | go_router 12 |
Type-safe, deep-link friendly |
| State | App-state class + provider patterns | FlutterFlow's idiom; kept consistent across custom actions |
| Crypto core | Trust Wallet Core 4.1.21 (wallet_core_bindings + wallet_core_bindings_libs + wallet_core_bindings_native) |
Battle-tested C++ library; same library used by Trust Wallet itself; supports BTC, ETH, BNB, SOL, and 100+ other chains |
| Key management | flutter_secure_storage 9 + Trust Wallet Core HD wallet |
Seed phrase stored in iOS Keychain / Android Keystore; addresses derived per-coin via Trust Wallet Core |
| Auth | Firebase Auth + Firestore | Off-device account recovery (without custodial holding of keys) |
| Analytics | Firebase Performance / Crashlytics | Production telemetry for performance regressions |
| News | Alpha Vantage NEWS_SENTIMENT API + bespoke OpenAPI spec for FlutterFlow |
Crypto / blockchain / technology topic filtering with sentiment indicators |
| Cache | cached_network_image 3 |
Coin icons, news thumbnails — long-tail latency reduction |
| Misc | mobile_scanner (QR for addresses), flutter_animate (motion polish), google_fonts, flutter_svg |
Standard product surface |
FlutterFlow accelerates UI iteration but its visual editor cannot reliably encode crypto-sensitive logic — anything touching seed phrases, key derivation, transaction signing, or RPC endpoint switching had to live in Flutter custom actions where the source code is auditable.
The clean line ended up being: anything that touches wallet_core_bindings is a custom action. Everything else — listings, navigation, news, profile screens — stayed in FlutterFlow.
This boundary was the single most important decision because FlutterFlow's "save" operation periodically rewrites the project's pubspec.yaml. There was a recurring class of bugs where wallet_core_bindings imports got dropped on save, leaving the app to crash on first crypto operation. The fix was to make the import survival explicit in the custom-action prelude and to test the post-save artefact, not just the editor preview. This is documented in the ported development logs.
A crypto wallet has zero acceptable bugs in the seed-phrase / signing path. Trust Wallet Core is open source (trustwallet/wallet-core), audited by multiple firms, and used in production by Trust Wallet, Coinbase Wallet, and others. Picking it eliminated the entire class of "did we implement BIP-32 / BIP-39 correctly" risks.
Each chain — BTC / ETH / BNB / SOL / etc. — uses a coin-specific CoinType to derive the address from the master seed. The custom action shape is uniform:
import 'package:wallet_core_bindings/wallet_core_bindings.dart';
import 'package:wallet_core_bindings_native/wallet_core_bindings_native.dart';
Future<String> getCoinAddress(String mnemonic, int coinTypeRaw) async {
// Initialise once per process
WalletCoreBindings.init();
final wallet = HDWallet.createWithMnemonic(mnemonic, '');
final coinType = TWCoinType.values.firstWhere((c) => c.value == coinTypeRaw);
return wallet.getAddressForCoin(coinType);
}Symmetric custom actions exist for: generate_seed_phrase, get_bitcoin_address, get_ethereum_address, get_all_addresses, plus a test_trust_wallet_core health-check that runs on first launch to fail loud rather than silently (FlutterFlow rebuilds occasionally drop the native bindings — this was the early-warning system).
In-app news was a product requirement. Building a news feed from scratch means moderation, source-curation, sentiment classification, and the editorial responsibility that comes with it. Alpha Vantage's NEWS_SENTIMENT endpoint already does the topic-filtered curation (blockchain, cryptocurrency, technology) and ships sentiment scores per article.
The integration shape:
- A bespoke OpenAPI YAML (
alpha_vantage_news_api.yaml) imported into FlutterFlow, generating a typedNewsArticlemodel and the API-call wrappers - Topic filter:
blockchain,cryptocurrency,technology - Sentiment indicators rendered with green / red / neutral chips in
NewsExampleandNewsDetailsExample Path to Datain FlutterFlow's API call set tofeed[]for clean list parsing
The trade-off: Alpha Vantage's free tier rate-limits to 25 calls/day, which forced a server-side cache plan for a future iteration. That plan is documented in the dev logs but was not in scope for the first release.
The auth layer is Firebase (email + Google). Firestore stores account metadata — display name, settings, theme — but never seed phrases, private keys, or anything from which keys could be derived. Keys live in flutter_secure_storage (iOS Keychain / Android Keystore) and are derived from the seed via Trust Wallet Core, on-device only.
This boundary is non-negotiable in a non-custodial wallet. Documenting it as an explicit architectural rule (rather than relying on developer intuition) prevented at least one design proposal that would have crossed it.
- The application source code. This is a portfolio showcase, not an open-source release. The application is commercial and the source is proprietary.
- Specific store / business / financial details beyond what the public App Store listing already shows.
- The current team's redesigned UI source. I'm not involved in the current production iteration; that source belongs to its current owners.
- My internal development logs (
AviaWalletLog.md, integration logs, troubleshooting notes) — those stay in private memory and inform this README's architectural section only.
- Screenshots reflect a UI redesign by the current team. The product surface and architecture are mine; the visual design as it appears today is theirs.
- Some architectural decisions have evolved since handoff. Where this README describes "as authored", that's the state at first release — current production may differ in details I don't have visibility into.
- App Store availability depends on the current owner's listing decisions, not mine. If the listing is ever pulled, the screenshots in this repository remain the historical record of the released product.
claude-code-antiregression-setup—CLAUDE.md+ subagents + hooks. Featured on Habr top-5 (20K reads).hydrowatch— AI-powered groundwater monitoring (Theis equation + LiteLLM router + 7 MCP tools).webtest-orch— token-efficient e2e test orchestration for Claude Code (npm package).claude-statusline— statusline for Claude Code with VPS health monitoring. Featured on Habr.ai-context-hierarchy— three-level context system. Featured in Graphify v5.0 roadmap.notebooklm-claude-workflows— seven slash-commands for NotebookLM.lingua-companion— voice-first English tutor.security-scanner— mobile threat detection through VPN traffic analysis.diabot— non-commercial Telegram bot for type 1 diabetes.ghost-showcase— invisible AI assistant for Windows (commercial showcase).cc-janitor— 🔨 in active development — Claude Code workspace cleanup.
I'm open to investment / partnership / acquisition discussions for GHOST and lingua-companion, and to senior engineering / staff-level roles (remote, open to relocation outside Russia).
For AviaWallet specifically, I'm not pursuing reacquisition or competing-product work — this showcase is portfolio context for evaluating my track record on shipped consumer-crypto products.
Reach me:
- Email: creatmanick@gmail.com
- Telegram: @Creatman_it
- Website: creatman.site
- GitHub: @CreatmanCEO
- Habr: creatman
- dev.to: @creatman
Nick Podolyak — Field geologist since 2007, software engineer since 2020. Solo product builder across mobile (Flutter — App Store), desktop (Electron + Win32 native), backend (FastAPI + WebSocket + LiteLLM routing), and Claude Code-era developer tooling.
Commercial showcase · all rights reserved · Nick Podolyak.





