
KickAvenue
Led the ground-up rebuild of KickAvenue, an authenticated marketplace for sneakers, apparels, and handbags carrying brands like Jordan, Yeezy, OFF-WHITE, and Nike. Migrated the aging native Android codebase to a modern Flutter application with Riverpod state management, delivering a faster, more maintainable, and visually refined experience across Android and iOS. The app serves tens of thousands of users with features like real-time product search, a make-an-offer bidding system, and seller listing tools.
01 / The_Problem
The existing KickAvenue app was built on a legacy native Android stack that had accumulated years of tech debt. The UI felt outdated compared to modern marketplace apps, the codebase was difficult to maintain and iterate on, and there was no iOS counterpart — limiting the platform's reach. Performance bottlenecks in product browsing and checkout flows led to high drop-off rates.
“The app needed more than a facelift — the entire foundation had to be rebuilt to support the pace the business demanded.”
02 / The_Solution
CROSS_PLATFORM
Single Flutter codebase serving both Android and iOS, eliminating the need for separate native teams.
REACTIVE_STATE
Riverpod-driven state architecture with provider scoping for predictable data flow across complex marketplace screens.
DESIGN_OVERHAUL
Complete UI redesign with modern component library — improved product discovery, streamlined checkout, and refined brand identity.
PERF_OPTIMIZATION
Lazy loading, image caching, and optimized list rendering for smooth browsing across thousands of product listings.
Rebuilt the entire application from scratch using Flutter for cross-platform delivery and Riverpod for scalable, testable state management. The new architecture emphasizes clean separation of concerns, reactive data flows, and a design system that aligns with modern marketplace UX patterns.
03 / Technical_Recap
The architecture follows a feature-first modular structure with Riverpod providers handling async data, caching, and side effects. Repository pattern abstracts the API layer, making it trivial to swap data sources or add offline support. Navigation uses a declarative routing approach with deep link support for product sharing.
@riverpod
Future<List<Product>> productList(
ProductListRef ref, {
required String category,
int page = 1,
}) async {
final repository = ref.watch(productRepositoryProvider);
final products = await repository.getProducts(
category: category,
page: page,
);
// Cache invalidation on pull-to-refresh
ref.keepAlive();
return products;
}