OPSC6311 · THE 5 WATERMELONS · MARCH 2026
🍉
M3LON

SMART BANKING · SLICED SIMPLE

// VISUAL STORYBOARD · ANDROID STUDIO · KOTLIN + XML

👋
📱
HELLO WATERMELONS! I am MELON-BOT 🍉 — your interactive guide through the M3LON Android app storyboard. Every screen below is rendered inside a phone canvas with the REAL M3LON design colours and layout. This presentation covers Sections 2.1 through 4.10. Scroll to begin your 100-mark journey! 🚀
ZANDILE SELAO · ST10436981 TSHIAMO MOSETLHA · ST10451437 MUHLURI NKUNA · ST10437226 MATLHOGONOLO KEEBINE · ST10452412 NDABEZINHLE MATHUNYANE · ST10457680
▼ SCROLL TO EXPLORE ▼
📱 ANDROID STUDIO⚙️ KOTLIN + XML🗄️ ROOM / SQLITE🎨 MATERIAL DESIGN 3🏆 GAMIFICATION ENGINE🤖 AI RECEIPT SCANNER🍉 THE 5 WATERMELONS📊 MPANDROIDCHART🔐 BCRYPT AUTH📱 ANDROID STUDIO⚙️ KOTLIN + XML🗄️ ROOM / SQLITE🎨 MATERIAL DESIGN 3🏆 GAMIFICATION ENGINE🤖 AI RECEIPT SCANNER🍉 THE 5 WATERMELONS
// SECTION 2 · APP OVERVIEW — M3LON
2.1
// 2.1 APP NAME & ICON

The name M3LON is bold, modern and memorable — inspired by our group name The 5 Watermelons. The stylised '3' replacing 'E' gives it a tech-forward, app-native aesthetic — immediately signalling a smart, modern financial tool built for the digital generation.

The icon features a watermelon slice styled as a pie chart — red segments represent expense categories, the green rind represents savings. Dual symbolism: distinctive and instantly communicative of the app's financial purpose.

App Name:M3LON
Tagline:Smart Banking · Sliced Simple
Fonts:Syne (headings) + DM Sans (body)
Platform:Android API 29+
IDE:Android Studio (Kotlin + XML)
🍉
M3LON
SMART BANKING · SLICED SIMPLE
// EXACT BRAND COLOURS (FROM M3LON LOGO PDF)
#101010Dark BG
#1A2E2ECard BG
#203030Elevated
#4ABFAATeal Brand
#70C0A0Teal Light
#E8635ACoral
#C0392BCoral Dark
#E8B84BGold XP
#E8F5F2Light BG
2.2
// 2.2 APP DESCRIPTION

M3LON is an Android personal finance application designed to make budgeting approachable, visual, and enjoyable for users of all financial backgrounds. The app allows users to:

  • Register and log in securely
  • Create and manage expense categories
  • Log and track expenses with optional receipt photos
  • Set monthly budget goals per category
  • View spending analytics through interactive graphs
  • Earn badges and rewards for meeting financial goals
🏆
Gamification Engine
XP per expense, badges for goals, streaks, leaderboard
🤖
AI Receipt Scanner
Photo a receipt — AI extracts amount, merchant, date
💰
Safe-to-Spend Widget
Real-time daily safe-to-spend on home dashboard
🧠
Smart Budget Insights
Personalised spending pattern analysis and alerts
🎨
Category Colour Theming
User-customisable colours for each expense category
2.3
// 2.3 INNOVATIVE FEATURES — M3LON'S KEY DIFFERENTIATORS
🏆
Gamification Engine
XP per expense logged, weekly/monthly badges, streak counters, optional leaderboard for social comparison. NONE of Spendee, Wallet or YNAB offer this.
📷
AI Receipt Scanner
Uses device camera + AI to extract amount, merchant and date from a photographed receipt — pre-populates the transaction form instantly.
💰
Safe-to-Spend Widget
Prominent home screen widget showing real-time 'safe-to-spend' amount for today and the current month.
🧠
Smart Budget Insights
App analyses spending patterns and provides personalised, actionable insights (e.g., 'You spend 34% more on food on weekends — consider meal prepping').
🎨
Category Colour Theming
Every expense category has a user-customisable colour, making pie charts and graphs visually distinct and deeply personalised.
// SECTION 3 · DETAILED REQUIREMENTS
3.1 & 3.2
// 3.1 FUNCTIONAL REQUIREMENTS
FR-01
User Authentication
  • Register: unique username, valid email, password (min 8 chars, 1 number, 1 special char)
  • Login with username/email + password
  • BCrypt password hashing in SQLite
  • 'Remember Me' via SharedPreferences
  • Logout from main menu
FR-02
Expense Category Management
  • 10+ default categories (Groceries, Entertainment, Transport, Healthcare, Utilities, Dining Out, Education, Clothing, Savings, Other)
  • Create custom: name, icon from library, colour
  • Edit or delete existing custom categories
  • Delete prompts: reassign or delete expenses
FR-03
Expense Entry
  • Add: Amount, Date, Description, Category, Receipt Photo (optional, camera/gallery)
  • Edit any previously entered expense
  • Delete with confirmation prompt
  • All stored in local SQLite via Room
  • Full-screen receipt photo view
FR-04
Budget Goal Setting
  • Set overall monthly budget (e.g., R5,000/month)
  • Set per-category spending limits (e.g., Groceries: R1,200)
  • Limits persist month-to-month
  • Remaining budget calculated in real-time
FR-05
Expense List View
  • View by period: Today, Week, Month, Last Month, Year, Custom
  • Each item: Date, Category icon (coloured), Description, Amount, Camera icon if receipt
  • Tap = edit, Long-press = delete
  • Search by description, filter by category
  • Sort by date (newest/oldest) or amount
FR-06
Category Spending Summary
  • Total spent per category over selected period
  • Displayed as list AND colour-coded pie chart
  • Shows: Category, Total spent, Budget limit, Remaining or overspend
  • Exceeded categories highlighted in coral red
FR-07
Spending Graphs
  • Line graph of daily total spending over user-selectable period
  • Category spending as coloured lines or stacked bar chart
  • Pinch-to-zoom and pan
  • Colour legend per category
FR-08
Progress Dashboard
  • Overall monthly budget progress bar
  • Per-category budget progress bars
  • Safe-to-spend amount for current month
  • Total spent vs. total budget
  • Overspending categories glow coral red with warning icon
  • Updates in real-time on every expense add/edit
FR-09
Gamification 🏆
  • 10 XP per expense logged
  • Badges: 'First Budget Set', 'Week Streak' (7 consecutive days), 'Budget Boss' (within all budgets for full month), 'Receipt Hoarder' (10 receipt photos)
  • Profile page: total XP, level, earned badges, current streak
  • Monthly summary screen: budgeting performance score
// 3.2 NON-FUNCTIONAL REQUIREMENTS
PerformanceAll screens load within 2 seconds on mid-range Android 10+
UsabilityFollows Material Design 3 throughout
Data PersistenceSQLite via Room Persistence Library — data retained between sessions
SecurityPasswords hashed + salted. No financial data to external servers
CompatibilityAndroid 10 (API Level 29) and above
ScalabilityDB schema supports 10,000+ expense entries without performance degradation
// SECTION 4 · USER INTERFACE DESIGN
// M3LON UI DESIGN PRINCIPLES

M3LON follows Material Design 3 with a teal-and-coral colour palette. Dark background #101010, teal brand #4ABFAA, coral accent #E8635A, gold gamification #E8B84B. Frame size: 360×800px (Android standard). Fonts: Syne (headings) + DM Sans (body). Each screen is clean, information-dense but not cluttered, and action-oriented.

SCREEN 1 & 2 · Splash / Login Screen
Purpose: Authenticate the user before granting access to the app.
  • Displays the M3LON logo (watermelon icon) and app name and motto centred on a teal background
  • Next page: two input fields for Username/Email and Password
  • 'Remember Me' checkbox and a 'Login' button (teal, full width)
  • A 'Register' text link below for new users
  • Input validation highlights empty or incorrectly formatted fields in coral red
SplashActivity.kt
Handler(Looper.getMainLooper()).postDelayed({
  startActivity(Intent(this,
    LoginActivity::class.java))
  finish()
}, 2000)
Splash
🍉
M3LON
Smart Banking
Sliced Simple
Get Started
Login
SCREEN 1 & 3 · Registration Screen
Splash
🍉
M3LON
Smart Banking
Sliced Simple
Get Started
Register
🍉
M3LON
Your Budget Companion
Create an Account
Full Name
Email Address
Username
Password
Medium strength
Confirm Password
Register
Purpose: Allow new users to create an account.
  • On splash, "Get Started" button directs to the registration screen
  • Fields: Full Name, Email Address, Username, Password, Confirm Password
  • Password strength indicator bar updates in real-time as the user types
  • 'Register' button submits; successful registration redirects to Home screen
  • A 'Back to Login' link is provided
RegisterActivity.kt
etPassword.addTextChangedListener(
  object : TextWatcher {
    override fun onTextChanged(s: CharSequence?, ...) {
      pwStrengthBar.progress = calcStrength(s.toString())
    }
  }
)
val user = User(name, email, username,
  BCrypt.hashpw(password, BCrypt.gensalt()))
userDao.insert(user)
SCREEN 3 ⭐ HOME / DASHBOARD — CORE SCREEN
Purpose: Give the user an instant overview of their financial health for the current month.
  • Top: Greeting with user's name and current date
  • Large card: Overall monthly budget progress bar (R4,650 / R5,000 spent). Coral gradient — monthly budget card
  • 'Safe to Spend' chip: Displaying remaining daily budget (R26)
  • Category cards grid: Each category shown as circular progress indicator with icon and remaining amount. Overspent categories glow coral red
  • Quick-add FAB: Coral '+' button to add expense from any screen
  • Bottom navigation bar: Home, Expenses, Graphs, Budget, Profile
activity_home.xml
<FloatingActionButton
  android:id="@+id/fab"
  android:backgroundTint="@color/coral"
  app:srcCompat="@drawable/ic_add"/>

<BottomNavigationView
  android:id="@+id/bottomNav"
  app:menu="@menu/bottom_nav"/>
Home Dashboard
Hello, Alex! 🍉
Monday, March 23, 2026
AJ
Monthly BudgetRemaining R350
93% used
Safe to Spend Today
R26
13 days remaining this month
Categories
🍔
Food
80%
R300
🚗
Transport
81%
R150
🛍️
Shopping
100%
R0
🎬
Entertain
44%
R180
📋
Bills
100%
R0
💊
Health
45%
R+
+
🏠
Home
💰
Expenses
📊
Graphs
📋
Budget
👤
Profile
SCREEN 4 · Add / Edit Expense Screen
Home (FAB active)
Hello, Alex! 🍉
Monthly BudgetR350
Safe to Spend Today
R26
+
🏠
💰
📊
📋
👤
Add Expense
Add ExpenseCancel
Amount
R 0.00
Date📅 2026/03/19
Category
🍔 Food
🚗 Transport
🛍️ Shop
🎬 Ent
💊 Health
Description
What did you spend on?
What did you spend on?
📷Attach Receipt
Save Expense
🏠
💰
📊
📋
👤
Purpose: Allow the user to log or edit an expense entry.
  • Amount field (large, numeric keyboard, prominent at top)
  • Date picker (defaults to today)
  • Category selector (scrollable horizontal chip list with icons and colours)
  • Description text field
  • Attach Receipt button: Opens camera or gallery picker
  • If a photo is attached, thumbnail preview shown with 'X' to remove
  • 'Save' button at bottom; 'Cancel' in top app bar
ExpenseEntity.kt (Room)
@Entity(tableName = "expenses")
data class Expense(
  @PrimaryKey(autoGenerate = true)
  val id: Int = 0,
  val amount: Double,
  val date: String,
  val category: String,
  val description: String,
  val receiptPath: String? = null
)
SCREEN 5 · Expense List Screen
Purpose: Show all expenses over a user-selected period.
  • Date range selector at top (presets + custom)
  • Total spent for the selected period below the date selector
  • List items: Category icon (coloured), Date, Description, Amount, Camera icon if receipt attached
  • Tapping entry opens Edit Expense screen
  • Long-pressing shows 'Delete' option
  • Search bar and filter/sort options from top app bar
📱 4 views shown: Week · Month · Year · Search Results
Week
Expenses🔍
Week
Month
Year
▼ Filter & Sort
Total Spent R645
🍔
Weekly groceries
Mar 18
R250
🚗
Uber to office
Mar 18
R85
+
🏠
💰
📊
📋
👤
Month
Expenses🔍
Week
Month
Year
▼ Filter & Sort
Total Spent R18 750
🚗
Uber to office
Mar 18
R85
🛍️
New shoes 📷
Mar 17
R450
🎬
Movie tickets
Mar 17
R120
+
🏠
💰
📊
📋
👤
Year Summary
Expenses🔍
Week
Month
Year
Yearly Summary 2024
R198 500
Food
42%
Rent
48%
Transp
7%
Ent
1%
Other
1%
🏠
💰
📊
📋
👤
Search
Expenses🔍 s
Week
Month
Year
2 results for 's'
🚗
Transport
Mar 16
R85
🛍️
Shopping
Mar 17
R450
🎬
Movie tickets
Mar 17
R120
📋
Bills
Mar 15
R600
+
🏠
💰
📊
📋
👤
SCREEN 6 · Category Summary Screen
Category Summary
Category SummaryMar 2026 ›
R18 750
Food 35%
Transport 29%
Shopping 21%
Entertain 15%
🍔
Food
R1,200/R1,500
🚗
Transport
R1,200/R1,500
🛍️
Shopping ⚠️
R1,200/R1,000
🎬
Entertainment
R1,200/R1,800
🏠
💰
📊
📋
👤
Purpose: Show how much was spent per category over a selected period.
  • Date range selector at top
  • Large colour-coded pie chart in upper half of screen (MPAndroidChart PieChart)
  • Below chart: list of all categories — Category icon, name, Total spent, Budget limit, Progress bar (teal = within, red = over)
  • Tapping a category drills down to a filtered expense list for that category
build.gradle
dependencies {
  implementation 'com.github.PhilJay:
    MPAndroidChart:v3.1.0'
}
// settings.gradle
maven { url "https://jitpack.io" }
SCREEN 7 · Graphs / Trends Screen
Purpose: Display visual spending trends over time.
  • Date range selector at top
  • Toggle between: Line Graph (daily spending total over time) and Stacked Bar Graph (spending by category per day/week)
  • Graph is interactive: pinch-to-zoom and tap data points to see exact amounts
  • Colour legend below the graph matching categories to colours
  • Below the graph: summary table — average daily spending and highest spending day
Line Graph
Trends & Insights
Line Graph
Bar Graph
Month
Year
Daily Spending Trend
R600
Mar 1Mar 7Mar 14Mar 21Mar 28
Avg Daily SpendingR396
Highest Spending DayR600
Total for PeriodR18,400
+
🏠
💰
📊
📋
👤
Bar Graph
Trends & Insights
Line Graph
Bar Graph
Month
Year
Spending by Category
Mar 12Mar 14Mar 15Mar 17Mar 18
■ Food■ Transport■ Shopping■ Ent
Avg Daily SpendingR396
Total for PeriodR18,400
+
🏠
💰
📊
📋
👤
SCREEN 8 · Budget Screen
Budget Settings
Budget
Set your monthly budget and category limits
Overall Monthly Budget
R 5000 🔒
Category Limits
🍔
Food
R 1,500
🚗
Transport
R 1,500
🛍️
Shopping
R 1,500
🎬
Entertain
R 1,500
+
Save All
Reset to Default
🏠
💰
📊
📋
👤
Purpose: Allow users to set and manage monthly budget goals.
  • Overall monthly budget input field at the top
  • List of all categories, each with an editable budget limit input field
  • A toggle to enable/disable a budget limit for each category
  • 'Save All' button at the bottom saves all changes at once
  • 'Reset to Default' option clears all limits
BudgetDao.kt
@Dao
interface BudgetDao {
  @Upsert
  suspend fun setBudget(goal: BudgetGoal)

  @Query("SELECT * FROM budget_goals
    WHERE category = :cat")
  fun getBudget(cat: String): Flow<BudgetGoal>
}
SCREEN 9 🏆 Profile / Gamification Screen / Settings
Purpose: Display user account details and gamification progress.
  • User avatar (initials-based), username, email at the top
  • XP Bar: Current XP, level title (e.g., 'Budget Apprentice'), progress to next level
  • Current Streak counter: Flame icon + number of consecutive days logged
  • Badges Grid: Earned badges as coloured icons; unearned badges as greyed-out outlines
  • Monthly Performance Score: % score — how well user stayed within budget last month
  • Settings Menu: Account management, Notifications, Data Import, Support
  • Appearance: Light Mode / Dark Mode / System via popup
  • Logout: Clear button at bottom of Settings
GamificationManager.kt
object GamificationManager {
  fun onExpenseLogged(db: AppDatabase) {
    db.userDao().addXP(10)
    db.userDao().incrementStreak()
    checkBadges(db)
  }
  private fun checkBadges(db: AppDatabase) {
    val u = db.userDao().getUser()
    if (u.streak >= 7)
      db.badgeDao().unlock("WEEK_WARRIOR")
    if (u.xp >= 1000)
      db.badgeDao().unlock("BUDGET_BOSS")
  }
}
Profile
AJ
Alex Janson
Alex.janson@gmail.com
⚙️ Settings
Level 5
Budget Apprentice
1250 XP · 750 to next level
🔥
12
Day Streak
📊
78%
Performance
Badges
👟
⚔️
👑
🪙
🔒
🔒
4 of 6 badges collected
🏠
💰
📊
📋
👤
Settings
Settings
AJ
Alex Johnson
alex.johnson@email.com
👤 Account
🎨 Appearance
📥 Import
⚙️ Preferences
🔔 Notifications
❓ Support
Theme Preference ×
☀️ Light — Light theme for day use ✓
🌙 Dark — Dark theme for night use
📱 System — Match system preference
↪ Logout
🏠
💰
📊
📋
👤