A beautiful, modern React Native mobile application for calculating BTech internal marks with Material Design principles and smooth animations.
- Material Design principles throughout
- Smooth animations using React Native Animated API
- Spring physics for natural motion
- Gradient effects and elevation shadows
- SafeArea handling for all devices (notches, home indicators)
- R23 Regulation Calculator - Calculate internal marks based on assignments and mid exams
- Preset Management - Save and load calculations for different subjects
- Quick Preview - View final marks in the sidebar without opening presets
- Smart Override - Confirmation dialog when overwriting existing presets
- Local Storage - All data persists locally using AsyncStorage
- Staggered card entrance with spring bounce
- Smooth drawer slide with overlay fade
- Pulsing save button to draw attention
- Modal spring animation from bottom
- List item cascade with back-easing
- Scale feedback on button press
- Automatic calculation of halved assignment marks
- Mid-term assignments average (different for Mid 1 and Mid 2)
- Weighted final internal marks (80% best mid + 20% other mid)
- Real-time calculation updates
- Clear result visualization with color coding
BTechInternalsCalculator/
βββ frontend/ # React Native Expo application
β βββ app/ # Application screens and components
β β βββ components/ # Reusable components
β β βββ utils/ # Utility functions (storage)
β β βββ index.tsx # Home screen
β β βββ R23Page.tsx # R23 calculator
β β βββ _layout.tsx # Navigation layout
β βββ assets/ # Images and static assets
β βββ package.json # Dependencies
β βββ README.md # Frontend documentation
βββ README.md # This file
- Node.js (v16 or higher)
- npm or yarn
- Expo CLI (install globally:
npm install -g expo-cli) - iOS Simulator (macOS) or Android Emulator
- Expo Go app (for physical device testing)
-
Clone the repository
git clone <repository-url> cd BTechInternalsCalculator
-
Navigate to frontend
cd frontend -
Install dependencies
npm install
-
Start the development server
npm start # or expo start -
Run on device/emulator
- Press
ifor iOS Simulator - Press
afor Android Emulator - Scan QR code with Expo Go app on your phone
- Press
- Launch the app to see the regulation selection screen
- Tap on R23 to access the calculator
- Enjoy the smooth entrance animations!
- Enter your Assignment marks (1-5)
- Enter your Mid exam marks (short questions and main exam)
- View real-time calculations in the Final Calculation card
- Tap the pulsing Save Preset button to save your marks
- Tap the menu button (β°) in the top-left corner
- View all saved subjects with their final marks
- Tap a preset to load it instantly
- Tap the trash icon to delete a preset
- Swipe or tap outside to close the drawer
For Mid 1:
- Each assignment mark is halved and rounded up
- Average of (Assignment 1/2) and (Assignment 2/2)
- Mid 1 Internals = Short Q + Assignments Avg + (Mid 1 Marks/2)
For Mid 2:
- Each assignment mark is halved and rounded up
- Average of (Assignment 3/2), (Assignment 4/2), and (Assignment 5/2)
- Mid 2 Internals = Short Q + Assignments Avg + (Mid 2 Marks/2)
Final Calculation:
- Final = (Best Mid Γ 0.8) + (Other Mid Γ 0.2)
- Result is rounded up to nearest integer
- Primary:
#FF6347(Tomato Red) - Energy and action - Success:
#FFD700(Gold) - Achievement - Background:
#f8f9fa(Light Gray) - Reduced eye strain - Surface:
#ffffff(White) - Clean cards - Accent:
#FFE5E0(Pale Pink) - Icon backgrounds
- Headings: 22-28px, weight 700-900
- Body: 15-16px, weight 600
- Secondary: 13-14px, weight 500-600
- Grid: 8px base unit
- Padding: 12-24px
- Gaps: 8-16px
- Card Margins: 20px
- @react-navigation/drawer - Slide-out navigation
- @react-native-async-storage/async-storage - Local data persistence
- @expo/vector-icons - Icon library
- react-native-safe-area-context - Safe area handling
- react-native-toast-message - Toast notifications
- expo-router - File-based routing
# Start development server
npm start
# Start with cache clear
npm start -- --clear
# Run on Android
npm run android
# Run on iOS
npm run ios
# Run linter
npm run lint
# Build for production
expo build:android
expo build:ios- Create a new page file in
app/directory - Implement the calculation logic
- Add route in
app/index.tsx - Update the items array with new regulation
Issue: Animations are choppy
- Solution: Enable
useNativeDriver: truefor all animations (already done)
Issue: SafeArea not working
- Solution: Ensure device has proper safe area (use physical device or simulator)
Issue: AsyncStorage not persisting
- Solution: Check app permissions and clear cache:
expo start --clear
Issue: Drawer not closing on Android back button
- Solution: This is by design - use overlay tap or swipe gesture
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Use TypeScript for type safety
- Follow React hooks conventions
- Use functional components over class components
- Maintain Material Design principles
- Add animations for delightful UX
This project is open source and available under the MIT License.
Created with β€οΈ by Avinash
- React Native team for the amazing framework
- Expo team for simplifying development
- Material Design for design guidelines
- Ionicons for beautiful icons
For questions or suggestions, please open an issue on GitHub.
Made with React Native + Expo | Designed for BTech Students | Built with Modern UX Principles