Skip to content

ErenBalkis/SyncDev

Repository files navigation

OnyxFi Banner

πŸ”Ά OnyxFi

The Future of Agentic Personal Finance

AI-powered wealth simulator that replaces chat walls with interactive financial widgets.

Problem β€’ Solution β€’ Features β€’ Architecture β€’ Design β€’ Get Started


🚨 The Problem

Traditional AI financial assistants share a critical UX flaw: cognitive overload through walls of text.

When a user asks "How should I save for a house?", existing chatbots return 500+ words of dense financial advice β€” paragraphs about compound interest, risk diversification, and budgeting rules. The user reads the first two sentences, glazes over, and closes the app.

78% of users abandon AI chat interfaces within the first 3 interactions due to information density and lack of actionability.

The problem isn't the AI's intelligence β€” it's the interface.

Plain text is the wrong medium for financial planning. Numbers need charts. Choices need buttons. Goals need cards. Projections need visualizations.


πŸ’‘ Our Solution

OnyxFi doesn't just talk about your finances β€” it renders them.

We built the first Generative UI (GenUI) personal finance assistant. Instead of returning paragraphs of text, our AI agent dynamically generates interactive Flutter widgets β€” goal selection cards, input fields, projection charts, and alert badges β€” directly inside the conversation flow.

The AI doesn't just tell you to save β‚Ί2,000/month. It shows you a live projection chart of your wealth growth over 10 years, lets you adjust the savings slider, and reacts with updated strategic advice in real-time.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                             β”‚
β”‚   Traditional Chatbot          OnyxFi (GenUI)               β”‚
β”‚   ─────────────────          ────────────────               β”‚
β”‚                                                             β”‚
β”‚   "You should save           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”‚
β”‚    β‚Ί2,000 per month          β”‚  🏠  πŸš—  πŸŽ“  πŸ–οΈ    β”‚        β”‚
β”‚    for 10 years to           β”‚  Pick your goals    β”‚        β”‚
β”‚    reach your goal           β”‚  [Interactive Cards] β”‚        β”‚
β”‚    of buying a house.        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β”‚
β”‚    Consider investing                                       β”‚
β”‚    in index funds with       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”        β”‚
β”‚    a 7% annual return.       β”‚  πŸ“ˆ Wealth Growth    β”‚        β”‚
β”‚    Also, you should          β”‚  β–“β–“β–“β–“β–“β–“β–“β–“β–‘β–‘ 83%    β”‚        β”‚
β”‚    create an emergency       β”‚  [Live Chart]       β”‚        β”‚
β”‚    fund first..."            β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜        β”‚
β”‚                                                             β”‚
β”‚   😴 User left.              🎯 User engaged.              β”‚
β”‚                                                             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

How It Works

  1. User speaks naturally β†’ "I want to buy a car"
  2. Gemini AI understands intent β†’ Determines the best UI widget to render
  3. A2UI protocol streams JSON β†’ Two-step createSurface + updateComponents
  4. Flutter renders the widget β†’ Interactive GoalSelectionCard appears in chat
  5. User interacts β†’ Selection feeds back to AI for the next step
  6. Loop continues β†’ AI adapts, deepens, and builds the financial plan visually

✨ Core Features

🎯 Conversational Onboarding

No forms. No sign-up walls. The AI greets you warmly (in Turkish), validates your goals with strategic insights, and dynamically generates selection cards for financial objectives β€” Home, Car, Retirement, Education, Travel, Emergency Fund.

πŸ“Š Generative Interactive Charts

When enough data is collected, the AI renders FinancialProjectionChart widgets powered by fl_chart β€” showing compound growth projections, savings timelines, and investment scenarios. The data points are computed and structured by the AI itself.

πŸ€– Agentic Co-Pilot

OnyxFi doesn't just answer questions β€” it orchestrates the entire financial planning journey:

  • Celebrates your goal selection with strategic context
  • Asks follow-up questions via multi-choice GoalSelectionCard widgets (e.g., "Car preference: Economy vs. Luxury vs. Electric?")
  • Gradually collects financial data through contextual DynamicInputField widgets
  • Surfaces warnings and opportunities via AlertActionBadge components

🎨 Glassmorphic Premium UI

Every interaction feels premium. The "Ambient Transparent Glass" design system uses backdrop blur, frost borders, and Solar Orange accents over a deep Midnight Ink background β€” creating a spatial, depth-rich experience.


πŸ“Έ Screenshots


πŸ—οΈ Technical Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        OnyxFi Architecture                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚                    FLUTTER FRONTEND                       β”‚  β”‚
β”‚  β”‚                                                          β”‚  β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚  β”‚
β”‚  β”‚  β”‚ Onboarding  β”‚  β”‚  Dashboard   β”‚  β”‚   Settings     β”‚  β”‚  β”‚
β”‚  β”‚  β”‚    View     β”‚  β”‚    View      β”‚  β”‚    View        β”‚  β”‚  β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚  β”‚
β”‚  β”‚         β”‚                β”‚                               β”‚  β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”                       β”‚  β”‚
β”‚  β”‚  β”‚     GenUI Surface Engine      β”‚                       β”‚  β”‚
β”‚  β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚                       β”‚  β”‚
β”‚  β”‚  β”‚  β”‚  SurfaceController      β”‚  β”‚                       β”‚  β”‚
β”‚  β”‚  β”‚  β”‚  β”œβ”€ GoalSelectionCard   β”‚  β”‚                       β”‚  β”‚
β”‚  β”‚  β”‚  β”‚  β”œβ”€ DynamicInputField   β”‚  β”‚                       β”‚  β”‚
β”‚  β”‚  β”‚  β”‚  β”œβ”€ ProjectionChart     β”‚  β”‚                       β”‚  β”‚
β”‚  β”‚  β”‚  β”‚  └─ AlertActionBadge    β”‚  β”‚                       β”‚  β”‚
β”‚  β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚                       β”‚  β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                       β”‚  β”‚
β”‚  β”‚                 β”‚                                         β”‚  β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                       β”‚  β”‚
β”‚  β”‚  β”‚  A2uiTransportAdapter        β”‚                       β”‚  β”‚
β”‚  β”‚  β”‚  └─ A2uiParserTransformer    β”‚                       β”‚  β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                       β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                    β”‚  Streaming Chunks                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚                  GOOGLE GEMINI API                         β”‚  β”‚
β”‚  β”‚           gemini-3-flash-preview                          β”‚  β”‚
β”‚  β”‚    System Instruction: A2UI v0.9 Protocol                 β”‚  β”‚
β”‚  β”‚    + Empathetic Wealth Manager Persona                    β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                                                β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚                   PYTHON BACKEND                          β”‚  β”‚
β”‚  β”‚         FastAPI + Supabase (PostgreSQL)                   β”‚  β”‚
β”‚  β”‚    User profiles, financial data persistence              β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚                                                                β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Frontend β€” Flutter & VGV GenUI SDK

Component Technology Purpose
Framework Flutter 3.11+ Cross-platform (Web, Android, iOS)
GenUI Engine genui: ^0.8.0 (by Very Good Ventures) A2UI protocol parsing, surface lifecycle management
State Management Provider App-wide state (onboarding progress, navigation)
Charts fl_chart Financial projection visualizations
Networking google_generative_ai Direct Gemini API streaming
Config flutter_dotenv Secure API key management

AI Engine β€” Google Gemini 3 Flash Preview

The AI operates under a strict system instruction that enforces:

  • A2UI v0.9 Protocol: Every widget render requires a two-step JSON sequence β€” createSurface (registers the surface with a unique ID and catalog reference) followed by updateComponents (populates with flat component definitions).
  • Empathetic Persona: The model acts as a premium Wealth Manager, never asking for raw financial numbers immediately. It validates choices with rich encouragement, discusses strategic implications, and gradually deepens the conversation.
  • Structured Output Discipline: All natural language text is completed BEFORE any A2UI JSON blocks are emitted β€” preventing chaotic interleaving that would break the parser.

Backend β€” Python, FastAPI & Supabase

Component Technology Purpose
API Framework FastAPI RESTful endpoints for user data
Database Supabase (PostgreSQL) User profiles, financial goals, session persistence
Auth Supabase Auth Secure user authentication

🎨 Design System

"Ambient Transparent Glass" β€” Midnight Ledger Theme

OnyxFi's visual identity is built on a custom design system inspired by spatial computing interfaces and premium fintech aesthetics.

Token Value Usage
Midnight Ink #0A0A0F β†’ #141420 Primary background gradient
Solar Orange #FF6B35 Accent color, CTAs, active states
Frost Border rgba(255,255,255, 0.20) Glass panel edge definition
Snow White #F5F5F7 Heading text
Silver Mist #B0B0B8 Body text
Stone Grey #6B6B78 Captions, secondary text

Glass Morphism Stack

Every UI panel follows a strict layering protocol:

ClipRRect (border-radius: 20px)
  └─ BackdropFilter (blur: 20px)
       └─ Container
            β”œβ”€ gradient: white 7% β†’ white 5% (top-left to bottom-right)
            β”œβ”€ border: 1px solid rgba(255,255,255, 0.20) β€” "Frost Border"
            └─ box-shadow: 0 8px 32px rgba(0,0,0, 0.30)

Typography

Scale Size Weight Tracking
Heading 32px 700 (Bold) -0.025
Subheading 20px 600 (Semi) -0.022
Body 16px 400 (Regular) -0.020
Body SM 14px 400 (Regular) -0.013
Caption 12px 400 (Regular) -0.007

Font: Inter (Google Fonts) β€” Optimized for financial data legibility.


πŸš€ Getting Started

Prerequisites

1. Clone the Repository

git clone https://github.com/ErenBalkis/SyncDev.git
cd SyncDev

2. Configure Environment Variables

Create a .env file in the project root:

# Flutter β€” Gemini AI Engine
GEMINI_API_KEY=your_gemini_api_key_here

# Python Backend β€” Supabase
SUPABASE_URL=your_supabase_url_here
SUPABASE_KEY=your_supabase_key_here

3. Install Flutter Dependencies

flutter pub get

4. Run the Flutter App

# Web (recommended for demo)
flutter run -d chrome

# Android
flutter run -d android

# iOS
flutter run -d ios

5. Run the Python Backend (Optional)

pip install -r requirements.txt
uvicorn main:app --reload --port 8000

πŸ“ Project Structure

onyxfi_frontend/
β”œβ”€β”€ lib/
β”‚   β”œβ”€β”€ main.dart                          # App entry point & Provider setup
β”‚   β”œβ”€β”€ core/
β”‚   β”‚   β”œβ”€β”€ constants/colors.dart          # Midnight Ledger color tokens
β”‚   β”‚   β”œβ”€β”€ theme/app_theme.dart           # Full ThemeData implementation
β”‚   β”‚   └── network/gemini_client.dart     # Gemini API + A2UI system instruction
β”‚   β”œβ”€β”€ catalog/
β”‚   β”‚   β”œβ”€β”€ component_registry.dart        # OnyxCatalog β€” widget registry
β”‚   β”‚   β”œβ”€β”€ goal_selection_card.dart        # Interactive goal picker widget
β”‚   β”‚   β”œβ”€β”€ dynamic_input_field.dart        # Contextual data input widget
β”‚   β”‚   β”œβ”€β”€ financial_projection_chart.dart # fl_chart visualization widget
β”‚   β”‚   └── alert_action_badge.dart         # Warning/opportunity badge widget
β”‚   β”œβ”€β”€ views/
β”‚   β”‚   β”œβ”€β”€ onboarding_view.dart           # Conversational onboarding flow
β”‚   β”‚   └── dashboard_view.dart            # Main chat + analytics + settings
β”‚   β”œβ”€β”€ widgets/
β”‚   β”‚   β”œβ”€β”€ glass_container.dart           # Reusable glassmorphic panel
β”‚   β”‚   └── chat_bubble.dart               # Styled message bubble
β”‚   └── models/
β”‚       β”œβ”€β”€ onboarding_state.dart          # Onboarding progress state
β”‚       └── chat_message.model.dart        # Chat message data model
β”œβ”€β”€ main.py                                # FastAPI backend entry point
β”œβ”€β”€ database.py                            # Supabase client configuration
β”œβ”€β”€ .env                                   # API keys (gitignored)
└── pubspec.yaml                           # Flutter dependencies

πŸ† BTK Hackathon '26

Team
SyncDev
Category
Agentic AI + FinTech
AI Model
Gemini 3 Flash Preview
Key Innovation
Generative UI (A2UI v0.9)

Built with πŸ”Ά by Team SyncDev
Where artificial intelligence meets intentional design.

About

AI-powered wealth simulator that replaces chat walls with interactive financial widgets.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages