A Flutter-based mobile application that enables employees to check in their emotional state daily, helping organizations maintain better workplace wellness and employee engagement.
The Emotion Check-In Application (EMC) is designed to help organizations track and understand employee emotional well-being. By providing a simple, intuitive interface for daily emotional check-ins, the app helps HR teams and management gain insights into workplace sentiment and take timely actions to improve employee satisfaction and productivity.
- π± About
- β¨ Key Features
- π οΈ Technical Stack
- π Project Structure
- π Getting Started
- ποΈ Architecture
- π± App Screens
- π Security Features
- π API Integration
- π Offline Functionality
- π¦ Building for Production
- π§ Configuration
- π Troubleshooting
- π Project Background
- π± Download
- π Privacy Policy
- π Version History
- βοΈ License
- Daily Check-ins: Quick and easy emotional state logging with emoji-based selections
- Three Categories: Emotions organized into Negative, Neutral, and Positive categories
- Custom Notes: Add personal notes to provide context for your emotional state
- Historical View: Calendar-based visualization of past check-ins
- Secure Authentication: JWT-based login with automatic token refresh
- Profile Management: Edit personal information, upload avatars, and update contact details
- Employee Information: View department, position, and work-related details
- Check-in Calendar: Visual representation of emotional patterns over time
- Check-in Details: View past entries with timestamps and notes
- Offline Support: SQLite local storage for offline functionality
- Data Synchronization: Automatic sync with backend when online
- Secure Storage: Flutter Secure Storage for sensitive data
- Token Management: Automatic token refresh and session management
- Encrypted Communication: HTTPS-only API communication
- Framework: Flutter 3.9.2
- State Management: Provider
- Local Storage: SQLite (sqflite)
- Secure Storage: flutter_secure_storage
- UI Components: Material Design 3
dependencies:
flutter: sdk: flutter
provider: ^6.1.5+1
http: ^1.5.0
flutter_secure_storage: ^9.2.4
sqflite: ^2.4.2
jwt_decoder: ^2.0.1
google_fonts: ^6.3.2
table_calendar: ^3.2.0
intl: ^0.20.2
image_picker: ^1.2.0
shared_preferences: ^2.5.3lib/
βββ components/ # Reusable UI components (buttons, form fields)
βββ database/ # SQLite database helper
βββ enums/ # Application enums
βββ models/ # Data models
β βββ check_in_model.dart # Check-in record structure
β βββ emotion_model.dart # Emotion categories and items
β βββ employee_model.dart # Employee profile data
βββ providers/ # State management providers
β βββ check_in_provider.dart # Check-in operations and state
β βββ emotion_provider.dart # Emotion data management
β βββ employee_provider.dart # Employee profile management
β βββ login_provider.dart # Authentication and session
βββ screens/ # Application screens
β βββ auth/ # Authentication flows
β βββ main/ # Core app screens (home, profile, check-in)
β βββ onBoard/ # Onboarding introduction
β βββ splash/ # Splash screen
βββ services/ # API service layer
β βββ emotion_service.dart # Emotion API calls and caching
β βββ employee_service.dart # Employee data API calls
βββ utils/ # Utility classes (constants, helpers, theme, validators)
βββ main.dart # Application entry point
- Flutter SDK (3.9.2 or higher)
- Dart SDK
- Android Studio / Xcode (for mobile development)
- Git
-
Clone the repository
git clone https://github.com/fisheeesh/emc_mob.git cd emc_mob -
Install dependencies
flutter pub get
-
Configure API endpoints
Update the API URLs in
lib/utils/constants/urls.dart:static const String PROD_URL = "https://your-api-domain.com";
-
Run the application
# For development flutter run # For production build flutter build apk # Android flutter build ios # iOS
The app uses the Provider pattern for state management, with separate providers for:
- LoginProvider: Authentication and user session
- CheckInProvider: Emotion check-in operations
- EmotionProvider: Emotion categories and data
- EmployeeProvider: Employee profile management
- Login: User authenticates β Tokens stored securely β Navigate to Home
- Check-in: Select emotion β Add notes β Submit to API β Store locally
- Sync: App fetches latest data β Updates local DB β Refreshes UI
- Offline: All operations work offline β Auto-sync when connection restored
checkins table
CREATE TABLE checkins (
id INTEGER PRIMARY KEY AUTOINCREMENT,
emoji TEXT NOT NULL,
textFeeling TEXT NOT NULL,
createdAt TEXT NOT NULL,
checkInTime TEXT NOT NULL
)- Animated logo display
- Automatic navigation based on:
- Onboarding status
- Authentication status
- Two-page introduction
- Feature highlights
- Skip or complete flow
- Email and password authentication
- Form validation
- Loading states
- Error handling
- Greeting based on time of day
- Calendar view of check-ins
- Check-in status indicator
- Quick access to profile settings
- Three emotion categories (tabs)
- Grid of emotions with emojis
- Text input for additional notes
- Character counter (100 max)
- Submit with validation
- Confirmation message
- Check-in timestamp
- Emotion summary
- Return to home
- Employee information display
- Avatar with initials fallback
- Department and role details
- Contact information
- Logout functionality
- Update personal information
- Change avatar (image picker)
- Phone number validation
- Gender and birthdate selection
- Form validation and submission
- JWT-based token authentication
- Automatic token refresh via backend middleware
- Secure token storage using flutter_secure_storage
- Token expiration validation
- All API calls use HTTPS
- Sensitive data encrypted at rest
- No plain-text password storage
- Automatic session cleanup on logout
- User consent for data collection
- Optional profile information
- Local data cleared on logout
- No third-party analytics without consent
POST /api/v1/login
GET /api/v1/user/my-history
POST /api/v1/user/check-in
GET /api/v1/user/emotion-categories
GET /api/v1/user/emp-data
PATCH /api/v1/user/emp-data
Authorization: Bearer {access_token}
x-refresh-token: {refresh_token}
x-platform: mobile
Content-Type: application/json
The app is designed to work seamlessly offline:
- Check-ins: Stored locally in SQLite
- Emotions: Cached with 24-hour refresh
- Profile: Cached locally
- Sync: Automatic background sync when online
- Emotion categories cached for 24 hours
- Fallback data available if API fails
- Manual refresh available via pull-to-refresh
# Generate release APK
flutter build apk --release
# Generate App Bundle (recommended for Play Store)
flutter build appbundle --release# Build for iOS
flutter build ios --release
# Create archive in Xcode
open ios/Runner.xcworkspaceUpdate the API URLs in lib/utils/constants/urls.dart:
// Development URLs
static const String ANDROID_BASE_URL = "https://10.0.2.2:8080";
static const String IOS_BASE_URL = "https://192.168.1.185:8080";
// Production URL
static const String PROD_URL = "https://api.your-domain.com";Note:
- Android emulator uses
10.0.2.2to access localhost on the host machine - iOS simulator uses your local network IP address
- Update
PROD_URLwith your actual production API domain
Issue: App crashes on startup
- Solution: Clear app data and reinstall
Issue: Login fails with network error
- Solution: Check API URL configuration in
urls.dart
Issue: Images not loading
- Solution: Verify network permissions in AndroidManifest.xml
Issue: Token refresh fails
- Solution: Backend auth middleware must return new tokens in headers
This application was developed as a senior project at Mae Fah Luang University by the Software Engineering department, originally inspired by and in collaboration with ATA IT (Thailand).
- Institution: Mae Fah Luang University
- Department: Software Engineering
- Project Type: Senior Project
- Year: 2024-2025
This mobile application is part of the Emotion Check-In System ecosystem, which also includes:
- EMC Web Application: A comprehensive web-based dashboard for HR managers and administrators to view analytics, generate reports, and monitor employee emotional well-being across the organization.
- Backend API: RESTful API service that handles authentication, data storage, and business logic for both mobile and web applications.
The system aims to create a holistic approach to workplace wellness by combining daily emotional check-ins with actionable insights for management.
β οΈ Data Privacy & Responsibility
All privacy inquiries and data subject requests should be directed to 6531503187@lamduan.mfu.ac.th.
ATA IT is not responsible for the operation, data handling, or privacy practices of this application.
π§ Contact Information
For questions, support, or feedback about this project:
- Email: 6531503187@lamduan.mfu.ac.th
- Website: https://emotioncheckinsystem.com
We would like to thank:
- ATA IT (Thailand) for the initial project inspiration and collaboration opportunity
- Mae Fah Luang University for academic guidance and support
- All my team members who helped shape this system to completion:
- Swan Yi Phyo (Full-Stack Developer/Mobile Developer) - 6531503187
- Kaung Htut Hlaing (Project Manager/Backend Developer) - 6531503145
- Khun Shine Si Thu (UI/UX Designer) - 6531503149
- Myat Thu Kyaw (Front-end Developer) - 6531503159
Status: App currently in review. Will be available soon!
We take your privacy seriously. For detailed information about how we collect, use, and protect your data, please review our privacy policy.
- Initial release
- Basic emotion check-in functionality
- Profile management
- Calendar view
- Offline support
This project is licensed under the MIT License.
Built with β€οΈ by Software Engineering students at Mae Fah Luang University
Creating healthier, more empathetic workplaces where every voice matters and every emotion counts.
