Skip to content

raj-Dcoder/MaterialBox

Repository files navigation

MaterialBox Logo

MaterialBox

Your study materials, organized.
A modern Android app to store, organize, and access all your study materials in one place.

Platform Min SDK Kotlin Compose License


📖 About

MaterialBox helps students organize their study materials with a clean, intuitive 3-tier hierarchy:

📚 Subject (e.g. "Data Structures")
  └── 📁 Topic (e.g. "Binary Trees")
        └── 📄 Material (PDFs, notes, links, images, docs)

No cloud dependency. No ads. Everything stays offline on your device.


✨ Features

Feature Description
📂 3-Tier Organization Subject → Topic → Material hierarchy for structured note management
📄 Multi-Format Support Store PDFs, DOCX, TXT, images, web links, and text notes
📎 File Upload Import documents directly from your device's file system
🔗 Link Saving Save web URLs as materials for quick reference
📝 Text Notes Create and edit text notes with in-app editor
👁️ View Tracking Track how many times you've accessed each material
🔃 Smart Sorting Toggle between "Recent" and "Most Viewed" materials on the home screen
🗑️ Cascade Deletion Deleting a subject removes all its topics and materials automatically
🎨 Modern UI Gen-Z inspired design with Poppins font, indigo/teal palette, and edge-to-edge display
🌙 Dark Mode Full dark mode support with Material You theming
📱 Predictive Back Smooth Android 14+ predictive back gesture support

🏗️ Architecture

MaterialBox follows modern Android architecture principles:

┌─────────────────────────────────────────────────┐
│                   UI Layer                       │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐      │
│  │ Screens  │  │Components│  │  Theme   │      │
│  │(Compose) │  │ (Cards)  │  │(M3+Custom)│     │
│  └────┬─────┘  └──────────┘  └──────────┘      │
│       │                                          │
│  ┌────▼─────────────────────┐                   │
│  │     ViewModels (Hilt)    │                   │
│  └────┬─────────────────────┘                   │
├───────┼─────────────────────────────────────────┤
│       │         Data Layer                       │
│  ┌────▼─────┐  ┌──────────┐  ┌──────────┐      │
│  │Repository│──│   DAOs   │──│   Room   │      │
│  └──────────┘  └──────────┘  │ Database │      │
│                               └──────────┘      │
└─────────────────────────────────────────────────┘

Key patterns:

  • MVVM with Kotlin StateFlow for reactive UI
  • Repository pattern for data abstraction
  • Dependency Injection with Hilt
  • Single Activity architecture with Compose Navigation
  • Offline-first — all data stored locally with Room

🛠️ Tech Stack

Category Technology
Language Kotlin 2.0
UI Jetpack Compose + Material 3
Navigation Navigation Compose 2.9.0
Database Room 2.6.1 (SQLite)
DI Hilt (Dagger) 2.50
Async Kotlin Coroutines + StateFlow
Image Loading Coil 2.5.0
Camera CameraX 1.3.1
PDF PdfBox Android 2.0.27
Build Gradle (Kotlin DSL)
Min SDK API 24 (Android 7.0)
Target SDK API 35 (Android 15)

🚀 Getting Started

Prerequisites

  • Android Studio Ladybug (2024.2.1) or newer
  • JDK 11 or higher
  • Android SDK with API 35 installed

Setup

# Clone the repository
git clone https://github.com/raj-Dcoder/MaterialBox.git

# Open in Android Studio
# File → Open → Select the MaterialBox folder

# Build the project
./gradlew assembleDebug

# Install on connected device
./gradlew installDebug

Build Variants

Variant Command Description
Debug ./gradlew assembleDebug Development build with debugging enabled
Release ./gradlew assembleRelease Optimized build with R8 minification

📁 Project Structure

app/src/main/java/com/rajveer/materialbox/
├── data/
│   ├── entity/          # Room entities (Subject, Topic, Material)
│   ├── dao/             # Data Access Objects
│   ├── converter/       # Type converters (Date ↔ Long)
│   ├── repository/      # Repository layer
│   └── AppDatabase.kt   # Room database definition
├── di/
│   └── AppModule.kt      # Hilt dependency injection module
├── navigation/
│   ├── NavGraph.kt       # Navigation graph with transitions
│   └── NavRoutes.kt      # Route definitions
├── ui/
│   ├── components/       # Reusable composables (MaterialCard, SubjectCard, TopicCard)
│   ├── screens/          # Screen composables (Home, SubjectDetail, TopicDetail, etc.)
│   └── theme/            # Colors, Typography (Poppins), Theme
├── util/
│   └── DateUtils.kt      # Date formatting utilities
├── MainActivity.kt       # Single activity entry point
└── MaterialBoxApplication.kt  # Hilt application class

🎨 Design

MaterialBox features a custom Gen-Z inspired design system:

  • Font: Poppins (Regular, Medium, SemiBold, Bold)
  • Primary: Indigo/Purple #5C6BC0
  • Accent: Teal #00BFA5
  • Tertiary: Coral #FF6B9D
  • Material Type Colors: Each file type (PDF, LINK, NOTE, etc.) has its own accent color for quick visual identification
  • Edge-to-edge display with transparent status bar
  • Collapsible large header on the home screen

🤝 Contributing

Contributions are welcome! Here's how:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'feat: add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

📄 License

This project is licensed under the MIT License — see the LICENSE file for details.


Made with ❤️ by Rajveer

About

MaterialBox is an offline-first Android study organizer built with Kotlin and Jetpack Compose. Manage subjects, topics, notes, PDFs, links, roadmaps, day plans, and YouTube learning feeds with local Room storage and a clean Material 3 UI.

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages