Skip to content

Offline-First Savings & Internal Loan Ledger App for Neighbourhood SHGs (Kotlin, Room, MVVM)

  • 12 slides
  • 14 viva questions
  • 5 modules
  • Code included

@shg-savings-loan-ledger-appUpdated Oct 2026

Weekly thrift, internal loans, repayment schedules and member passbooks on the secretary's phone, no internet needed

BCA, Mobile App Development · Sem 4 · Beginner · 5 weeks · Team of 2

More info
Level
Beginner · 5 weeks · Team of 2
Relevant for
Kerala
Common at
University of Kerala, GGSIPU, MDSU
Syllabus
Kerala University FYUGP 2024 · UK4INTCAP200 Internship · Semester 4
Tech stack
  • Kotlin
  • Android SDK (minSdk 26)
  • Room
  • MVVM with ViewModel and StateFlow
  • Jetpack Navigation
  • XML layouts with ViewBinding
  • Kotlin Coroutines
  • JUnit 4 and AndroidX Test
For educational purposes only

Unlock this project

Full PPT + speaker notes, source code and setup steps, READMEFIRST, instructions and all 14 viva answers.

One-time. No subscription, no auto-renew, no drama.

Project packs

Credits never expire and work on any project. Use one here, save the rest for your friend who “will pay you back”.

  1. Pinned

    1 min

    Overview

    SHG Ledger is an offline-first Android app, written in Kotlin, that helps the secretary of a neighbourhood self-help group keep the group's accounts instead of in a stack of registers. Kerala has tens of thousands of Kudumbashree-style neighbourhood groups (ayalkoottams), each with around 10 to 20 women members who meet weekly, deposit a small thrift amount, and lend the pooled savings to members as internal loans. The secretary records all of this by hand in a thrift register, a loan register and a minutes book, and the monthly totals take hours to tally.

    The app records members, weekly meetings with attendance and thrift collected, internal loans with a configurable monthly interest rate and an automatically generated repayment schedule, repayments against each instalment, and short meeting minutes. Each member has a passbook view showing total savings, loans taken, amount repaid and balance. A group summary shows the cash position (thrift + interest earned − loans outstanding), and the secretary can export a CSV for the Community Development Society (CDS) or bank linkage review.

    Because many meetings happen in homes with weak mobile data, everything is stored locally in a Room database and no internet is needed. The app follows MVVM with ViewModels, StateFlow and Jetpack Navigation. It is scoped as a 5-week, two-member internship project for the University of Kerala FYUGP BCA UK4INTCAP200 Internship in Semester 4, building on the UK4SECCAP202 Kotlin Android course. All group and member names used in the app and report are fictional.

    Syllabus alignment

    Kerala University · FYUGP 2024

    UK4INTCAP200 · Internship · Semester 4 · 2 credits

    Subjects this project applies
    • UK4SECCAP202 Kotlin Android
    • UK3DSCCAP201 DBMS (relational design applied to Room entities)
    • Kotlin (object-oriented and functional programming)
    • UK6DSECAP306 Mobile App Dev (foundation for later extension)
    How it is evaluated

    See your department's project guidelines.

    Also fits: GGSIPU 4-year BCA 2024, MDSU CBCS 2024, BCU SEP 2024.

    1 min read · 14 viva questions

  2. 2 min

    Synopsis

    Abstract

    Neighbourhood self-help groups (SHGs) in Kerala pool weekly savings and give internal loans to their members, but their accounts are kept in handwritten registers. Errors in interest, missing repayments and slow monthly tallies weaken members' trust and delay bank linkage. This internship project builds SHG Ledger, an offline-first Android application in Kotlin that records members, weekly thrift collection, internal loans with repayment schedules, repayments and meeting minutes, and shows every member a passbook view. Data is stored in a Room database following the MVVM architecture, and the secretary can export CSV reports.

    Introduction

    During our internship with a small app development firm (fictional name: Kayal Apps, Thiruvananthapuram), we were asked to build a simple tool for SHG secretaries. We met the secretary and president of a fictional neighbourhood group, Pulari Ayalkoottam, and studied their thrift register, loan register and minutes book.

    Existing system

    • Three paper registers (thrift, loan, minutes) updated by one person.
    • Interest calculated by hand, sometimes on the original loan amount instead of the outstanding balance.
    • Members cannot see their own balance without asking the secretary.
    • Monthly and annual totals for the CDS take several hours of manual addition.
    • Existing finance apps assume internet access and bank accounts, and are not designed for group lending.

    Proposed system

    • One Android app on the secretary's phone, working fully offline.
    • Weekly meeting screen: attendance and thrift in one list, saved in a single transaction.
    • Loan screen that generates a monthly repayment schedule from amount, rate and tenure.
    • Repayment entry against instalments, with overdue instalments highlighted.
    • Member passbook, group summary and CSV export.

    Feasibility

    • Technical: Kotlin, Room and Jetpack components are covered in UK4SECCAP202 and run on low-cost Android phones (Android 8.0 and above).
    • Economic: free tools (Android Studio); no server or data costs.
    • Operational: screens mirror the registers the secretary already uses; a 30-minute walkthrough is enough.
    • Schedule: the 5-week internship allows one week of study and design, three weeks of development and one week of testing and reporting.
  3. 1 min

    Problem statement

    Neighbourhood SHGs in Kerala collect weekly thrift from every member and lend the pooled money as internal loans, but the secretary maintains all accounts in handwritten registers. Mistakes in totals and interest are common, repayments are occasionally missed or recorded twice, and members cannot check their own savings or loan balance without asking. Preparing monthly figures for the CDS or for a bank linkage review takes hours, and the registers can be damaged or lost. Most finance apps require internet access and individual bank accounts, which does not match how these groups actually meet and lend.

    The problem is to build a simple, reliable Android app that works completely offline and lets the secretary record members, weekly thrift and attendance, internal loans with an automatically calculated repayment schedule, repayments and meeting minutes, while giving each member a clear passbook view and the group an exportable summary.

  4. 1 min

    Objectives & scope

    1. 01Study the thrift, loan and minutes registers of a neighbourhood SHG and convert them into a Room database design.
    2. 02Build an offline-first Android app in Kotlin using MVVM, ViewModel, StateFlow and Jetpack Navigation.
    3. 03Record weekly meetings with attendance and thrift collection in a single, transaction-safe screen.
    4. 04Generate a monthly repayment schedule for internal loans using interest on the reducing balance.
    5. 05Record repayments against instalments and highlight overdue instalments.
    6. 06Provide a member passbook view and a group cash summary, with CSV export through the Android file picker.
    7. 07Test the loan schedule logic with JUnit and the Room DAOs with instrumented tests.

    Scope

    In scope

    • One neighbourhood group per installation, used by the secretary (or president) on one Android phone.
    • Members with name, phone number, date of joining and a member number within the group (no Aadhaar or other ID numbers).
    • Weekly meetings: date, attendance, thrift amount per member and short minutes.
    • Internal loans: amount, purpose, monthly interest rate, tenure in months, schedule, repayments.
    • Member passbook, group summary, CSV export, app PIN lock and local backup file.

    Out of scope

    • Cloud sync or multiple phones sharing one group (future scope).
    • Bank linkage loans and external loan accounting.
    • Online payments; all money is handled in cash or UPI outside the app.
    • Federation-level (ADS/CDS) consolidated reports across many groups.
  5. 1 min

    Methodology

    We followed a lightweight Agile approach with one-week sprints, suited to a 5-week internship. At the end of each sprint we demonstrated the working app to our internship supervisor and, when possible, to the SHG secretary.

    WeekSprint goalMember A (data layer)Member B (UI layer)Output
    1Study and designStudy registers, draw ER diagram, define Room entitiesWireframes for all screens, navigation graphDesign notes, daily log
    2Members and meetingsMember and Meeting entities, DAOs, repositoryMember list, add member, weekly meeting screenWorking meeting entry
    3LoansLoan and Instalment entities, schedule generator, unit testsLoan form, schedule view, repayment entryLoan module
    4Passbook and exportSummary queries, CSV writer, backup filePassbook, group summary, export and PIN lock screensFeature-complete app
    5Testing and reportDAO instrumented tests, bug fixesUI testing on two phones, screenshotsInternship report, presentation

    Loan schedule rule. For a loan of principal P, monthly interest rate r percent and tenure n months, each instalment repays an equal principal part P ÷ n. Interest for a month = outstanding principal at the start of the month × r ÷ 100. Instalment due = principal part + that month's interest. The last principal part absorbs any rounding so the principal repaid equals P exactly. The rate and tenure are decided by the group and entered by the secretary.

    Both members kept a daily internship log with tasks, time spent and problems solved, signed weekly by the supervisor.

  6. 2 min

    Architecture & tech stack

    • Kotlin
    • Android SDK (minSdk 26)
    • Room
    • MVVM with ViewModel and StateFlow
    • Jetpack Navigation
    • XML layouts with ViewBinding
    • Kotlin Coroutines
    • JUnit 4 and AndroidX Test

    The app follows the MVVM (Model–View–ViewModel) pattern recommended in the Android architecture guide.

    • UI layer: Fragments with XML layouts and ViewBinding, RecyclerView lists and Jetpack Navigation. Fragments only observe state and send user actions.
    • ViewModel layer: one ViewModel per screen exposes a StateFlow of UI state, survives screen rotation and launches database work in viewModelScope coroutines.
    • Data layer: a repository wraps Room DAOs. Room entities map to SQLite tables; DAOs return Flow, so lists update automatically when data changes. Business rules such as the loan schedule live in a plain Kotlin LoanCalculator class that is easy to unit test.
    flowchart TD
      U["Secretary using the app"] --> F["Fragments and XML layouts"]
      F -->|"user actions"| VM["ViewModels (StateFlow)"]
      VM -->|"UI state"| F
      VM --> R["Repository"]
      R --> LC["LoanCalculator (schedule rules)"]
      R --> DAO["Room DAOs"]
      DAO --> DB[("Room database on device")]
      R --> CSV["CSV export via file picker"]
    erDiagram
      SHG_GROUP ||--o{ MEMBER : has
      SHG_GROUP ||--o{ MEETING : holds
      MEETING ||--o{ THRIFT_ENTRY : records
      MEMBER ||--o{ THRIFT_ENTRY : pays
      MEMBER ||--o{ LOAN : borrows
      LOAN ||--|{ INSTALMENT : "scheduled as"
      INSTALMENT ||--o{ REPAYMENT : "paid by"
      SHG_GROUP {
        int id PK
        string name
        string ward
        int weeklyThrift
      }
      MEMBER {
        int id PK
        int groupId FK
        int memberNo
        string name
        string phone
        string joinedOn
      }
      MEETING {
        int id PK
        int groupId FK
        string meetingDate
        string minutes
      }
      THRIFT_ENTRY {
        int id PK
        int meetingId FK
        int memberId FK
        boolean present
        int amountPaise
      }
      LOAN {
        int id PK
        int memberId FK
        int principalPaise
        float monthlyRatePercent
        int tenureMonths
        string purpose
        string status
      }
      INSTALMENT {
        int id PK
        int loanId FK
        int instalmentNo
        string dueDate
        int principalPaise
        int interestPaise
      }
      REPAYMENT {
        int id PK
        int instalmentId FK
        int amountPaise
        string paidOn
      }

    Key design decisions

    • Money stored as integer paise, never as floating point, so totals never drift by fractions of a rupee.
    • Weekly meeting saved in one Room @Transaction: the meeting row and all thrift entries are written together or not at all.
    • Offline-first by design: there is no network permission in the manifest; a backup file can be exported to the phone's storage or shared through the Android share sheet.
    • Passbook figures are computed with SQL aggregate queries (SUM of thrift, SUM of principal and repayments) rather than stored totals, so they always match the underlying entries.
    • PIN lock: a four-digit PIN is stored as a salted hash in Jetpack DataStore to protect the ledger if the phone is shared at home.
  7. 5 modules

    Modules

    • Room Database, DAOs and Repository (Member A)

      Member A designed the entities (group, member, meeting, thrift entry, loan, instalment, repayment), wrote the DAOs with Flow queries and aggregate SUM queries for the passbook, and built the repository that the ViewModels use. Also owns the database migration plan and backup export.

    • Loan Calculator and Repayment Logic (Member A)

      A plain Kotlin class that generates the monthly schedule using interest on the reducing balance with equal principal parts, handles rounding in paise, marks instalments overdue when unpaid after the due date, and applies part payments. Covered by JUnit tests for normal, zero-interest and rounding cases.

    • Members and Weekly Meeting Screens (Member B)

      Member B built the member list and add or edit form, and the weekly meeting screen where the secretary ticks attendance and enters thrift for every member in one RecyclerView, then writes minutes. Validation stops negative amounts and duplicate meetings on the same date.

    • Loan, Passbook and Summary Screens (Member B)

      Screens for sanctioning a loan and previewing its schedule, entering repayments, and viewing each member's passbook (savings, loans, repaid, balance). The group summary shows total thrift, interest earned, loans outstanding and cash in hand, built with ViewModels observing StateFlow.

    • CSV Export, Backup and PIN Lock (Shared)

      Member A wrote the CSV and backup file writers; Member B built the export screen using the Storage Access Framework file picker and the PIN lock screen with DataStore. Exports can be shared with the CDS accountant through the Android share sheet.

  8. Locked

    Presentation

    12 slides with speaker notes. The outline below is free; the bullets, notes and the generated .pptx unlock with the project.

    1. SHG Ledger: Savings and Internal Loan App
    2. About the internship
    3. Problem
    4. Objectives
    5. Tools and architecture
    6. Database design
    7. Loan schedule logic
    8. Who built what
    9. Screens
    10. Testing
    11. Learning outcomes
    12. Conclusion and future scope

    Bullets, speaker notes and the .pptx download unlock with the project.

    Presentation is locked: 12 slides, Speaker notes, .pptx download.

  9. 1 min

    Future scope

    • Optional cloud sync so the president and secretary can share one ledger across two phones, with conflict handling.
    • Malayalam interface and larger fonts for members who prefer reading in Malayalam.
    • SMS or WhatsApp passbook sharing so each member receives a weekly balance message.
    • Charts for thrift growth and loan recovery over the year.
    • Federation reports that combine exports from many groups for ADS or CDS level review.
  10. 7 sources

    References

    1. Android Developers: Save data in a local database using Room
    2. Android Developers: Guide to app architecture
    3. Android Developers: ViewModel overview
    4. Kotlin Documentation
    5. Kudumbashree State Poverty Eradication Mission, Government of Kerala
    6. National Bank for Agriculture and Rural Development (SHG-Bank Linkage Programme)
    7. Dawn Griffiths and David Griffiths, Head First Android Development, 3rd ed., O'Reilly Media

    Cite this bundle

    OnlyProjects. (2026). Offline-First Savings & Internal Loan Ledger App for Neighbourhood SHGs (Kotlin, Room, MVVM): BCA Mobile App Development project bundle [Educational resource]. https://onlyprojects.online/projects/bca-mobile-shg-savings-loan-ledger-app

Slides, diagrams & files

12 slides. Titles are free; bullets, speaker notes and the .pptx unlock with the project.

  1. SLIDE 1

    SHG Ledger: Savings and Internal Loan App

  2. SLIDE 2

    About the internship

  3. SLIDE 3

    Problem

  4. SLIDE 4

    Objectives

  5. SLIDE 5

    Tools and architecture

  6. SLIDE 6

    Database design

  7. SLIDE 7

    Loan schedule logic

  8. SLIDE 8

    Who built what

  9. SLIDE 9

    Screens

  10. SLIDE 10

    Testing

  11. SLIDE 11

    Learning outcomes

  12. SLIDE 12

    Conclusion and future scope

Architecture diagrams · 2

1
flowchart TD
  U["Secretary using the app"] --> F["Fragments and XML layouts"]
  F -->|"user actions"| VM["ViewModels (StateFlow)"]
  VM -->|"UI state"| F
  VM --> R["Repository"]
  R --> LC["LoanCalculator (schedule rules)"]
  R --> DAO["Room DAOs"]
  DAO --> DB[("Room database on device")]
  R --> CSV["CSV export via file picker"]
2
erDiagram
  SHG_GROUP ||--o{ MEMBER : has
  SHG_GROUP ||--o{ MEETING : holds
  MEETING ||--o{ THRIFT_ENTRY : records
  MEMBER ||--o{ THRIFT_ENTRY : pays
  MEMBER ||--o{ LOAN : borrows
  LOAN ||--|{ INSTALMENT : "scheduled as"
  INSTALMENT ||--o{ REPAYMENT : "paid by"
  SHG_GROUP {
    int id PK
    string name
    string ward
    int weeklyThrift
  }
  MEMBER {
    int id PK
    int groupId FK
    int memberNo
    string name
    string phone
    string joinedOn
  }
  MEETING {
    int id PK
    int groupId FK
    string meetingDate
    string minutes
  }
  THRIFT_ENTRY {
    int id PK
    int meetingId FK
    int memberId FK
    boolean present
    int amountPaise
  }
  LOAN {
    int id PK
    int memberId FK
    int principalPaise
    float monthlyRatePercent
    int tenureMonths
    string purpose
    string status
  }
  INSTALMENT {
    int id PK
    int loanId FK
    int instalmentNo
    string dueDate
    int principalPaise
    int interestPaise
  }
  REPAYMENT {
    int id PK
    int instalmentId FK
    int amountPaise
    string paidOn
  }

Files

Viva questions & answers

3 of 14 questions free. Explain each answer in your own words before you move on.

  1. Concept

    What is MVVM and why did you use it in this app?

    MVVM separates the View (Fragments and layouts), the ViewModel (screen state and actions) and the Model (repository and Room). In SHG Ledger it keeps business logic such as loan schedules out of Fragments, lets the state survive screen rotation, and makes the calculator testable without a phone.

  2. Concept

    What is Room and how is it different from using SQLite directly?

    Room is an abstraction over SQLite from Android Jetpack. We write entity classes and DAO interfaces, and Room generates the SQL code, checks queries at compile time and returns Flow so the UI updates automatically. Using raw SQLite would need manual cursor handling and would not catch query errors early.

  3. Concept

    What does offline-first mean for this project?

    The local Room database is the only source of truth, so every feature works without internet. The app does not even request network permission. This suits SHG meetings held in homes with weak mobile data; sync could be added later without changing the screens.

+11 more questions

They and the answers unlock with the project. Try answering the ones above yourself first. Your examiner will.

For educational purposes only. Use this bundle to understand how the project works, then build and write your own. Submitting it verbatim is between you, your conscience and your external examiner.