Skip to content

sanamir23/finora

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Finora — Intelligent Digital Wallet Platform

A Flutter-based digital wallet prototype built for the Pakistani market as part of an SPM course project.

Flutter Dart Jira GitHub


📋 Table of Contents


🏦 Project Overview

Finora is an Android-first digital wallet prototype demonstrating peer-to-peer transfers, QR merchant payments, utility bill payments, and virtual card management in a single Flutter application.

The project was built over 5 days (4th–9th May 2026) as a Software Project Management (SPM) course project, applying agile methodology with daily sprints, Jira-based tracking, and agentic AI-assisted development via Google Antigravity.

Key Design Decisions

  • All backend services are simulated locally — no live bank APIs, NADRA, or payment gateways
  • SQLite for persistence — full schema with users, wallets, transactions, cards, billers, merchants, audit_log tables
  • Provider for state management — clean ChangeNotifier hierarchy with ChangeNotifierProxyProvider for dependency injection
  • Layered architecture — Presentation → State → Service → Persistence

👥 Team

Member Role Student ID
Abdulrehman Baloch Project Captain / Backend & Mock-Services i221182
Ayesha Kiani Full-Stack / Integration & Testing i221283
Sana Fatima Frontend / UI-UX Lead i221160

✅ Features

MUST HAVE (Implemented ✅)

Feature Status Sprint
CNIC-based registration with regex validation ✅ Done Sprint 1
Simulated biometric verification (local_auth) ✅ Done Sprint 1
6-digit PIN creation + mock OTP flow ✅ Done Sprint 1
Real-time wallet balance in PKR (SQLite) ✅ Done Sprint 1
Transaction history with search and filter ✅ Done Sprint 1
In-app transaction receipt view ✅ Done Sprint 1
P2P transfers by phone number ✅ Done Sprint 2
QR code merchant payments ✅ Done Sprint 2
Digital receipt generation ✅ Done Sprint 2
Transaction rollback on simulated failure ✅ Done Sprint 2
Virtual debit card with masked PAN, expiry, CVV ✅ Done Sprint 3
Card freeze/unfreeze toggle (persisted) ✅ Done Sprint 3
Bill payments (electricity, gas, water, mobile) ✅ Done Sprint 3
Transaction limit configuration ✅ Done Sprint 3
2FA for high-value transfers (Settings screen) ✅ Done Sprint 3

SHOULD HAVE (Implemented ✅)

Feature Status
Bill payments against mock biller catalogue ✅ Done
Transaction limit slider in Settings ✅ Done
2FA (PIN + biometric) toggle in Settings ✅ Done

🏗 Architecture

lib/
├── app.dart                     # MultiProvider root
├── app_shell.dart               # Bottom navigation shell
├── main.dart
├── core/
│   ├── routing/app_router.dart  # go_router configuration
│   └── theme/                   # Design system (colors, typography, spacing, radii)
├── data/
│   ├── db/database.dart         # SQLite schema + migrations
│   ├── models/                  # Dart data models
│   └── services/                # Mock service classes
│       ├── auth_service.dart
│       ├── wallet_service.dart
│       ├── transaction_service.dart  # Idempotency + rollback
│       ├── payment_service.dart      # P2P + QR
│       ├── card_service.dart         # Luhn-valid PAN generation
│       └── bill_service.dart         # Biller seeding + payment
├── features/
│   ├── auth/                    # Registration, OTP, PIN, Login, Biometric
│   ├── wallet/                  # Home dashboard, Activity/History
│   ├── payments/                # Send Money, QR Scanner, Confirmation
│   ├── cards/                   # Virtual card display + management
│   ├── bills/                   # Multi-step bill payment flow
│   └── settings/                # Settings, 2FA limits, profile
└── shared/
    └── widgets/                 # PrimaryButton, FinoraTextField, TransactionTile, etc.

SQLite Schema

users(id, cnic, phone, full_name, pin_hash, biometric_enabled, created_at)
wallets(id, user_id, balance, currency, created_at, updated_at)
transactions(id, wallet_id, type, status, amount, recipient_name, recipient_phone,
             merchant_id, description, failure_reason, created_at)
cards(id, wallet_id, user_id, pan_encrypted, expiry_month, expiry_year,
      cvv_hash, status, created_at)
billers(id, name, category, code)
merchants(id, name, category, qr_code)
audit_log(id, user_id, action, entity_type, entity_id, details, created_at)

🚀 Getting Started

Prerequisites

  • Flutter 3.x (flutter --version)
  • Android Studio or VS Code
  • Android device or emulator (Android 8.0+)

Installation

git clone https://github.com/sanamir23/finora.git
cd finora
flutter pub get
flutter run

Build Release APK

flutter build apk --release
# APK: build/app/outputs/flutter-apk/app-release.apk

🧪 Running Tests

flutter test

The test suite (test/widget_test.dart) covers all 5 core user journeys:

  1. Authentication & Onboarding — CNIC regex, OTP generation/verification, PIN validation
  2. Wallet Management — Balance debit/credit, insufficient funds guard, PKR formatting
  3. P2P Transfer — Phone validation, simulated failure, idempotency check
  4. QR Merchant Payment — QR payload parsing, merchant lookup, receipt generation
  5. Virtual Card Management — PAN generation, masking, expiry, CVV, freeze toggle

Plus rollback, idempotency, bill payment, and non-functional requirement checks.


📊 Project Management

All project management is tracked in Jira: https://finora-team-spm.atlassian.net

  • Scrum board with 5 sprints (Sprint 0 through Sprint 4)
  • Epics: Foundation & Tooling, Authentication, Wallet, Payments, Cards & Bills, QA & Delivery
  • Risk register: 6 tracked risks with mitigation strategies (SCRUM-92 through SCRUM-97)
  • Daily standups with status updates in ticket comments
  • Burndown: All MUST HAVE stories completed by Sprint 3

📅 Sprint Summary

Sprint Theme Dates Status
Sprint 0 Foundation & Tooling 4 May ✅ Done
Sprint 1 Auth & Wallet 5 May ✅ Done
Sprint 2 P2P + QR Payments 6 May ✅ Done
Sprint 3 Cards + Bills + 2FA 7 May ✅ Done
Sprint 4 QA, Docs, Demo 8–9 May ✅ Done

⚠️ Risk Register

Risk ID Risk Likelihood Impact Mitigation
R1 Five-day timeline slippage High High Daily sprint cutoffs; AI-assisted parallelism
R2 Mock service drift from realistic behaviour Medium Medium Latency injection + failure-rate toggle
R3 Antigravity / MCP tooling instability Medium Medium Git discipline after every agent task
R4 Scope creep Medium High Scope locked Day 1; change control via Jira
R5 Demo day bug surfacing Low High Day 5 freeze; APK on device by midday
R6 Team member unavailability Low High Daily standups; Ayesha as swing resource

📦 Deliverables

  • Android APK (see Releases)
  • Flutter source code (this repository)
  • SQLite schema with ER diagram (see lib/data/db/database.dart)
  • Mock service contracts (Dart-doc comments in lib/data/services/)
  • Test report (test/widget_test.dart)
  • README (this document)
  • Final project report (PDF — submitted separately)
  • 5-minute PowerPoint (submitted separately)
  • Demo video recording (submitted separately)

📌 Jira Workflow

To Do → In Progress → In Review → Done

Tickets were updated directly by the Google Antigravity AI agent via the Atlassian Rovo MCP server, ensuring the Jira board stayed in sync with every code commit without manual overhead.


Prepared by: Abdulrehman Baloch (i221182) · Ayesha Kiani (i221283) · Sana Fatima (i221160)
Submission: 9th May 2026

About

a fintech mobile app - made for spm project

Resources

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages