Skip to content

Saidharan-dev/remainder-app

Repository files navigation

📱 Reminder App - React Native with Expo

A feature-rich reminder and todo application built with React Native, Expo Router, and TypeScript. Manage your tasks, deadlines, and stay organized with a beautiful, intuitive interface.

✨ Features

🗓️ Smart Calendar

  • Custom-built calendar component with month/year navigation
  • Today's date highlighted in blue
  • Dates with deadlines marked with red indicators
  • Click to select any date and view associated todos
  • Click deadline dates to see full details in a modal popup

Todo Management

  • Add/edit/delete todos for any date
  • Mark todos as complete with visual feedback (strikethrough)
  • Organize todos by date
  • Quick add from calendar view
  • Persistent storage across sessions

Deadline Tracking

  • Create deadlines with title, description, and date
  • View all deadlines grouped by date
  • Calendar automatically highlights deadline dates
  • Beautiful popup modal showing full deadline details
  • Easy deletion of completed deadlines

🧭 Bottom Tab Navigation

  • Home: Calendar view with instant deadline preview
  • Todo: Dedicated todo list with date picker
  • Deadline: Complete deadline management interface

🚀 Getting Started

Prerequisites

  • Node.js (v14 or higher)
  • npm or yarn
  • Expo CLI (optional, but recommended)

Installation

# Navigate to project directory
cd remainder-app

# Install dependencies
npm install

Running the App

# Start the development server
npm start

Choose how to run:

  • Press 'w' → Open in web browser
  • Press 'a' → Open in Android emulator
  • Press 'i' → Open in iOS simulator
  • Scan QR code → Use Expo Go app on your phone

📁 Project Structure

remainder-app/
├── app/                          # Expo Router navigation
│   ├── _layout.tsx              # Root layout with tab navigation
│   ├── home/index.tsx           # Home tab
│   ├── todo/index.tsx           # Todo tab
│   └── deadline/index.tsx       # Deadline tab
│
├── src/
│   ├── components/              # Reusable UI components
│   │   ├── Calendar.tsx         # Custom calendar grid
│   │   ├── TodoList.tsx         # Todo list display
│   │   ├── DeadlinePreview.tsx  # Deadline details card
│   │   └── DeadlineList.tsx     # Deadline list display
│   │
│   ├── context/                 # Global state management
│   │   └── AppContext.tsx       # App state provider
│   │
│   ├── screens/                 # Screen components
│   │   ├── HomeScreen.tsx       # Calendar + Todos
│   │   ├── TodoScreen.tsx       # Todo management
│   │   └── DeadlineScreen.tsx   # Deadline management
│   │
│   └── utils/                   # Utility functions
│       └── storage.ts           # AsyncStorage operations
│
├── assets/                      # App assets
├── package.json                 # Dependencies
└── tsconfig.json               # TypeScript config

🎯 How to Use

Adding a Todo

  1. From Home Tab: Tap the "+" button next to "Todos"
  2. From Todo Tab: Tap "Add Todo" button, select date, enter title
  3. Enter your todo text and save
  4. Todo automatically persists to device storage

Adding a Deadline

  1. Go to Deadline Tab
  2. Tap "Add Deadline" button
  3. Fill in:
    • Title (required) - Deadline name
    • Description (optional) - More details
    • Date (YYYY-MM-DD format)
  4. Tap "Add" to save
  5. Calendar will automatically highlight this date

Viewing Deadline Details

  1. Go to Home Tab
  2. Click on a date with red dot (deadline indicator)
  3. Beautiful modal popup appears showing:
    • Deadline title with alert icon
    • Full description
    • Deadline date
  4. Click X button (top-right) to close and return to calendar

Changing Selection Date

  • Home Tab: Click any date on the calendar
  • Todo Tab: Use arrow buttons or tap date field to change

💾 Data Models

Todo

{
  id: string;           // Unique identifier
  title: string;        // Todo text
  date: string;         // YYYY-MM-DD format
  completed: boolean;   // Completion status
}

Deadline

{
  id: string;           // Unique identifier
  title: string;        // Deadline title
  description: string;  // Detailed description
  date: string;         // YYYY-MM-DD format
}

🔄 State Management

Context API (AppContext.tsx):

  • Global state for selected date
  • All todos and deadlines
  • Automatic data refresh
  • Clean API for all screens

AsyncStorage:

  • @reminder_app/todos - Persisted todos
  • @reminder_app/deadlines - Persisted deadlines
  • Automatic loading on app startup

🎨 Design System

Colors

  • Primary Blue: #2196F3 (Today, interactive elements)
  • Danger Red: #F44336 (Deadlines, alerts)
  • Background: #F5F5F5 (App background)
  • Surface: #fff (Cards, modals)

Components

  • SafeAreaView for screen boundaries
  • ScrollView for scrollable content
  • FlatList for efficient list rendering
  • Modal for deadline popups
  • TouchableOpacity for interactions
  • Ionicons for intuitive icons

📦 Dependencies

Core

  • expo: ^54.0.33 - Framework
  • expo-router: ~6.0.23 - File-based routing
  • react: 19.1.0
  • react-native: 0.81.5

Navigation

  • @react-navigation/bottom-tabs: ^7.4.0 - Tab navigation
  • @react-navigation/native: ^7.1.8

Storage & UI

  • @react-native-async-storage/async-storage - Local data persistence
  • @expo/vector-icons - Icon library

Development

  • TypeScript: ~5.9.2 - Type safety
  • ESLint: ^9.25.0 - Code quality

🔧 Available Scripts

# Start development server
npm start

# Run tests
npm run lint

# Build for production
npm run build

# Reset to default project
npm run reset-project

🎯 Key Features Breakdown

Custom Calendar Component

  • ✅ Dynamic month/year display
  • ✅ 7-column grid layout with Flexbox
  • ✅ Today indicator (blue highlight)
  • ✅ Deadline indicator (red dot)
  • ✅ Touch feedback on dates
  • ✅ Automatic date navigation

Todo Management

  • ✅ Add todos per date
  • ✅ Delete todos
  • ✅ Mark complete/incomplete
  • ✅ Visual feedback for completed items
  • ✅ Empty state messaging
  • ✅ Date-based organization

Deadline System

  • ✅ Create deadlines with details
  • ✅ Modal popup display
  • ✅ Calendar integration
  • ✅ Delete deadlines
  • ✅ Date grouping and sorting
  • ✅ Beautiful UI/UX

Data Persistence

  • ✅ AsyncStorage integration
  • ✅ Automatic save on changes
  • ✅ Automatic load on startup
  • ✅ No internet required
  • ✅ Complete CRUD operations

🚨 Troubleshooting

App won't start

# Clear Metro cache and rebuild
npm start -- --reset-cache

AsyncStorage not working

# Verify installation
npm list @react-native-async-storage/async-storage

TypeScript errors

# Check for compilation errors
npx tsc --noEmit

Lint issues

# Run linter
npm run lint

🔐 Data Privacy

  • All data is stored locally on the device
  • No data is sent to any server
  • No internet connection required
  • Complete user control over data

📈 Future Enhancements

Potential features for future versions:

  • Recurring reminders
  • Push notifications
  • Cloud sync
  • Categories/tags
  • Search functionality
  • Dark mode
  • Backup/restore
  • Multi-device sync

🤝 Contributing

This project is open for enhancements. Feel free to:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Test thoroughly
  5. Submit a pull request

📝 License

MIT License - feel free to use this project for personal or commercial purposes.

📚 Documentation

Additional documentation available:

💬 Support

For issues or questions:

  1. Check the QUICK_START.md guide
  2. Review PROJECT_STRUCTURE.md for architecture details
  3. Check Expo documentation
  4. Review React Native docs

🎉 Get Started Now

cd remainder-app
npm install
npm start

Press 'w' for web, 'a' for Android, 'i' for iOS, or scan QR code with Expo Go!


Built with ❤️ using React Native, Expo, TypeScript, and Context API

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors