Tuition Management App banner

Tuition Management App

19 devlogs
105h 13m 11s

This is a cross-platform tuition/coaching management app built with Expo and Firebase. It runs on Web, Android, and iOS and is designed for small coaching centers and independent tutors who need a straightforward way to manage their classes withou…

This is a cross-platform tuition/coaching management app built with Expo and Firebase. It runs on Web, Android, and iOS and is designed for small coaching centers and independent tutors who need a straightforward way to manage their classes without heavy software.
I’ve been building this as a solo project for a while to simplify the everyday admin work that tutors usually handle through notebooks, spreadsheets, or scattered messages.

Core Features -
Student management
Attendance tracking
Fee tracking and management
Parent communication tools
Mobile-friendly admin workflow
Cross-platform support (Web + Android + iOS)

Who it’s for -
Independent tutors
Coaching centers
Small institutes that want a lightweight admin + communication workflow

Login -
Currently the app supports Google login only, both for creating accounts and for inviting users to the platform.

Platform Status -
Web + Android: Working
iOS: Needs additional testing and will be released later

This project uses AI

During the development of this project, AI-assisted tools integrated in Visual Studio Code (primarily GitHub Copilot with ChatGPT models) were used throughout the development process. AI helped with code suggestions, debugging, brainstorming implementation approaches, and improving documentation.

All AI-generated outputs were reviewed, modified, and validated by me before being included in the final project. I made the final decisions on implementation, design, and functionality and take full responsibility for the final result.

Demo Repository

Loading README...

krvikrantsingh51

Shipped this project!

I have built a cross-platform tuition/coaching management app built with Expo and Firebase. It runs on Web, Android, and iOS and is designed for small coaching centers and independent tutors who need a straightforward way to manage their classes without heavy software.

I’ve been building this as a solo project for a while to simplify the everyday admin work that tutors usually handle through notebooks, spreadsheets, or scattered messages. It helps a teacher/admin manage students, attendance, fees, and parent communication from one place.

krvikrantsingh51

Implemented reviewer quick join feature with auto-approval and UI integration in both the login page and the Membership Manager Overlay with backend support so that flavourtown reviewers can easily test out the app

Attachment
0
krvikrantsingh51

Added wake lock for Android native push delivery ack + detailed logging
Implemented a true native client-ack path for Android terminated-app cases, without server-side guessing
added lightweight delivered-receipt telemetry counters and wired them into the retry pipeline
Added a reliability layer so delivered ticks no longer depend on a single immediate receipt call succeeding

Attachment
0
krvikrantsingh51

⁠Introduced AsyncStorage for persistent storage of pending receipts and telemetry data.
Implemented retry logic for syncing delivery receipts with exponential backoff
Added iOS-side native ack outcome logging plus persistent counters inside the notification service extension
Implemented the iOS native receipt path too, so iOS can ack delivery from a Notification Service Extension even when the app process is not running

Attachment
0
krvikrantsingh51

Added iOS notification service extension for chat delivery receipts

  • Implemented NotificationService to handle incoming notifications and send delivery acknowledgments.
  • Created Info.plist for the new XPC service.
  • Developed chatReceiptSync service to manage pending delivery receipts and telemetry.
  • Added notificationBackgroundTask service to process background notifications and confirm chat delivery.
Attachment
0
krvikrantsingh51

Enhanced the tick system in the chat page

  • Message will no longer double-tick immediately from stale online state.
  • Delivery tick will appear only after actual confirmation/receipt events happen.
  • Logging out now clears the full web-push footprint, including webPushVapidPublicKey and related web-push metadata, so logged-out devices are fully detached from web push delivery.
  • There was a issue and its fixed now. Signed-out devices no longer receive notifications on web or mobile
Attachment
0
krvikrantsingh51

Enhanced device tracking and notification delivery

  • Added new fields to UserDevice interface for session management and tracking.
  • Implemented logic to determine if a device can receive notifications based on its status and session activity.
  • Introduced detailed notification delivery results, including counts for successful and failed deliveries.
  • Enhanced cleanup of stale web push subscriptions to improve notification reliability.
  • Updated notification sending methods to return detailed results, including delivery sources and counts.
Attachment
0
krvikrantsingh51

Enhanced device tracking and notification delivery

  • Added sessionActive and lastTenantPingAt fields to UserDevice interface.
  • Introduced DeviceNotificationAttemptResult and DeviceNotificationFanoutResult interfaces for detailed notification delivery results.
  • Updated notification sending methods to return detailed results including delivery sources and counts for successful notifications.
  • Added tests for chat receipt synchronization and outbound delivery confirmation.
  • Created chatReceiptState utility functions for managing unread counts and refresh logic based on app state.
Attachment
0
krvikrantsingh51

Implemented web push notifications and service worker for enhanced user engagement

  • Added web push notification support in notificationService.ts, including handling of duplicate notifications and improved notification payload structure.
  • Introduced a new webPush.ts module for managing web push subscriptions and sending notifications.
  • Created a service worker (service-worker.js) to handle push events, notification display, and client navigation.
  • Updated quotesService.ts to remove web-specific notification scheduling, consolidating quote delivery to backend only.
  • Enhanced notification handling logic to support deep linking and improved user experience across platforms.
Attachment
0
krvikrantsingh51

Enhance reminder quota management and usage refresh functionality

  • Implemented loadTenantReminderQuotaState to fetch and normalize reminder quota state.
  • Added releaseTenantReminderReservationTokenIfAvailable to manage reservation tokens.
  • Updated reminder batch send logic to handle existing history and expired reservations.
  • Introduced usage refresh request deduplication to prevent multiple requests for the same tenant/month.
  • Enhanced tests for reminders batch send and usage billing endpoints to cover new functionality.
  • Updated cloud run job configurations for improved resource management and environment variable handling.
  • Modified ReminderHistoryViewer to improve refresh logic and removed debug logging.
  • Added new fields to UsageSummaryResponse for in-flight and reserved counts, along with effective usage metrics.
Attachment
0
krvikrantsingh51

Add push notification support for usage alerts

  • Integrated push notification functionality into the usage alert notifier.
  • Updated tenant admin contacts to include push notification preferences.
  • Enhanced the notifyUsageAlert function to handle push notifications.
  • Implemented device management for push notifications, including validation and delivery.
  • Added UI components for managing usage alert preferences in TenantUsageSummary.
  • Updated Firebase Firestore structure to accommodate new notification preferences.
  • Created a cleanup script for managing disabled email alerts in usage alerts.
  • Introduced a new job for reconciling Google Play billing.
Attachment
0
krvikrantsingh51

Shipped this project!

Hours: 39.82
Cookies: 🍪 719
Multiplier: 18.06 cookies/hr

I built a Cross-platform tuition/coaching management app (web + iOS + Android) built with Expo and Firebase. It helps a teacher/admin manage students, attendance, fees, and parent communication from one place.

krvikrantsingh51

Enhance receipt upload functionality with improved file handling and drag-and-drop support

  • Added state management for skipped receipt files and improved file identity checks.
  • Implemented drag-and-drop functionality for receipt uploads on web platforms.
  • Enhanced user feedback for skipped files, including categories for duplicates, oversized files, and unsupported formats.
  • Refactored file selection logic to streamline the addition of new files and handle duplicates more effectively.
  • Updated UI to display skipped files with detailed categorization.
  • Improved modal state management for receipt uploads.

fix: Adjust VideoPlayer component styles for better responsiveness

  • Set width constraints for the VideoPlayer component to ensure proper display across different screen sizes.
Attachment
0
krvikrantsingh51

Enhance file viewer components with download progress tracking

  • Added download progress tracking to FileViewer, PdfViewer, VideoPlayer, and associated components.
  • Introduced useDownloadState hook to manage download states across components.
  • Implemented downloadFileWithProgress utility function for handling file downloads with progress reporting.
  • Updated UI to reflect download progress in buttons and modals for better user experience.
  • Created downloadStateStore and messageUiStateStore for managing download and message UI states.
  • Added new hooks for managing message UI state and download state subscriptions.
Attachment
0
krvikrantsingh51

feat(billing): enhance Razorpay subscription handling and invoice management

  • Removed unnecessary start_at parameter in createRazorpaySubscription function.
  • Improved invoice resolution logic in handleRazorpayWebhook to prevent duplicates.
  • Added hasPaidInvoiceForSubscriptionCycle function to check for existing paid invoices.
  • Updated invoice creation logic to handle subscription events more effectively.
  • Introduced timeZone support in invoice PDF generation for accurate date formatting.
  • Added tests for billing cancellation policies and Razorpay invoice deduplication.
  • Enhanced error handling and logging for invoice write failures.
Attachment
0
krvikrantsingh51

Refactor billing cancellation logic and improve Razorpay integration

  • Updated verifyRazorpayWebhookSignature to accept rawBody as Buffer for better handling.
  • Enhanced error handling in cancelRazorpaySubscription to treat specific cancellation errors as successful.
  • Introduced failInvoicesByDocs function to streamline invoice failure marking.
  • Improved candidate selection logic in runBillingAutoCancelStalePending to handle stale invoices more effectively.
  • Removed deprecated tests related to cancelled downgrades and adjusted related assertions.
  • Updated billing service to remove unnecessary cancellation response interface and method.
  • Added email backend configuration to Cloud Run job for notification purposes.
  • Cleaned up billing change descriptions to remove unused downgrade cancellation logic.
Attachment
0
krvikrantsingh51

Added notice reaction emoji catalog and store

•⁠ ⁠Introduced ⁠ noticeReactionEmojiCatalog.ts ⁠ to define emoji categories and items for user reactions.
•⁠ ⁠Implemented ⁠ noticeReactionEmojiStore.ts ⁠ for managing recent and custom emoji storage using AsyncStorage.
•⁠ ⁠Created ⁠ pwa.ts ⁠ for handling PWA service worker registration and meta tag management.
•⁠ ⁠Developed ⁠ sharedFileService.ts ⁠ for managing shared file links, including caching and token generation.

Attachment
0
krvikrantsingh51
  • Implemented Progressive Web App (PWA) capabilities to enable web app installation
  • Added offline support with service worker caching strategies
  • Created user-facing install prompt for seamless app installation experience
  • Improved installability reliability (proper icon sizes + manual-install fallback when browsers suppress beforeinstallprompt)
Attachment
0