A Flutter-based mess tracking app designed for college use, enabling students to track meals across multiple messes, developed for OpenCode’25.
NomMetric is a Flutter-based mess tracking application designed to simplify and digitize meal management in our college hostels. In many colleges, mess attendance, meal tracking, and rebate calculations are handled manually, leading to inaccuracies, lack of transparency, and poor user experience.
NomMetric aims to provide a unified, scalable solution where students can track their meals across multiple messes, while enabling accurate attendance logging and data-driven decision-making.
The application is built using Flutter for cross-platform support and Firebase (Firestore) as the backend, ensuring real-time updates, reliability, and ease of scalability. In addition to being a practical utility, NomMetric is developed as a learning-focused open-source project, allowing contributors to gain hands-on experience with Flutter, Firebase, and real-world application architecture.
- Track student attendance for each meal (breakfast, lunch, dinner)
- Support for multiple messes within the same campus
- Accurate daily and monthly attendance records
- Reduced ambiguity compared to manual attendance systems
- Automatic calculation of mess rebates based on missed meals
- Monthly rebate summaries for students
- Configurable rebate rules to match different colleges
- Transparent rebate history to avoid disputes
- Digital mess menu visible to students
- Support for daily and weekly menus
- Easy updates to menu items without app redeployment
- Support for special meals and holiday menus
- Firestore-backed real-time data updates
- Consistent data across devices and sessions
- Offline-friendly architecture with automatic sync when online
- Simple, intuitive interface designed for daily use
- Modular widget structure for easy feature expansion
- Responsive layouts for different screen sizes
NomMetric is intended to be both a practical campus utility and a learning-focused open-source project, making it suitable for experimentation, feature expansion, and architectural improvements.
Ready to contribute? Check out our Contributing Guide. It covers everything you need to know about setting up the project, claiming issues, and submitting pull requests for OpenCode'25.
Before you begin working on this project, ensure your environment meets the following requirements.
- Flutter SDK:
^3.27.0 - Dart SDK:
3.6.0(bundled with Flutter 3.27.x) - Java Development Kit (JDK):
17(recommended) or21
- Android SDK (Linux / macOS / Windows):
- Compile SDK / Target SDK:
API level 35(Android 15, recommended)
- Compile SDK / Target SDK:
- iOS SDK (macOS only):
- Requires Xcode and iOS platform tools
This project uses Flutter and Firebase and is largely OS-independent.
- The setup instructions apply to Linux, macOS, and Windows.
- Android development is supported on all three operating systems.
- iOS and macOS builds require macOS with Xcode installed.
- Installation steps for the Android SDK and JDK may differ slightly by OS, but the required versions remain the same.
These following packages are used in this project:
-
flutter_riverpod:
^2.5.1
https://pub.dev/packages/flutter_riverpod -
firebase_core:
^3.6.0
https://pub.dev/packages/firebase_core -
cloud_firestore:
^5.4.0
https://pub.dev/packages/cloud_firestore -
go_router:
^14.2.0
https://pub.dev/packages/go_router
- Ensure
compileSdkVersionandtargetSdkVersionare set to35. - Run
flutter doctorto verify that all dependencies are correctly installed.
Try checking out contributing guide for further help.
If you’re new to Flutter, Firebase, or Riverpod, the resources below will help you get started and contribute effectively.
- Flutter Documentation: https://docs.flutter.dev
- Flutter Widget Catalog: https://docs.flutter.dev/ui/widgets
- Flutter YouTube (official): https://www.youtube.com/@flutterdev
- Firebase for Flutter: https://firebase.flutter.dev
- Firestore Documentation: https://firebase.google.com/docs/firestore
- Firestore Data Modeling (video): https://www.youtube.com/watch?v=v_hR4K4auoQ
- Riverpod Documentation: https://riverpod.dev
- Riverpod Crash Course (video): https://www.youtube.com/watch?v=3OdciTLjS8k
- FlutterFire CLI: https://firebase.flutter.dev/docs/cli
- GoRouter Documentation: https://pub.dev/packages/go_router
- Clone the repo
git clone https://github.com/opencodeiiita/NomMetric.git
cd NomMetric- Link the repository to your Firebase project using the application ID defined in
android/app/build.gradle.
Current applicationID : com.example.nommetric
NomMetric/
├── android/ # Android native configurations
├── ios/ # iOS native configurations
├── web/ # Web platform support
├── assets/ # Images, fonts, and local data files
├── lib/ # Primary application code
│ ├── screens/ # Full-page UI components
│ ├── widgets/ # Reusable UI elements
│ ├── services/ # Logic for Firebase, Firestore, and APIs
│ ├── models/ # Data structures; (User, Meal, Rating objects)
│ ├── provider/ # State management logic (Riverpod)2
├── contributors.md # Registration file for participants
└── pubspec.yaml # Project dependencies and configuration
We welcome contributions as part of OpenCode’25.
- Browse the repository issues and pick one that matches your interest and skill level.
- Issues may be:
- Open-for-all (OFA): No claiming required; anyone can submit a PR.
- Competitive: Multiple submissions allowed; the best PR is accepted.
- First-come: Must be claimed before working on it and has a time limit.
To contribute:
- Fork the repository and create a new branch.
- Make your changes following the project guidelines.
- Add your details to contributors.md.
- Open a pull request with a clear title and link it to the relevant issue.
For detailed rules, issue claiming process, and PR requirements, refer to
Contributing.md.
If you have any questions, run into issues while setting up, or need clarification on contributions, feel free to reach out.
- Discord:
VirtualVard
You can also contact me for reporting bugs, feature requests, or suggestions about this repository.
Happy contributing, and welcome to NomMetric!