Skip to content

jvpatey/homekeep-mobile

Repository files navigation

HomeKeep Mobile App

A React Native mobile application built with Expo and TypeScript, featuring Supabase authentication, comprehensive home maintenance task management, and a modern UI designed for tracking and organizing household maintenance activities.

πŸš€ Features

πŸ” Authentication & User Management

  • Supabase Authentication - Secure email/password authentication
  • Google OAuth Integration - Sign in with Google account
  • Email Verification - Secure email verification flow
  • User Profile Management - Customizable user profiles and preferences

πŸ“‹ Task Management System

  • Create & Edit Tasks - Add new maintenance tasks with detailed information
  • Task Categories - Organize by type (HVAC, Plumbing, Electrical, Appliances, Exterior, Interior, Landscaping, Safety, General)
  • Priority System - Set task importance (Low, Medium, High, Urgent)
  • Due Date Tracking - Monitor upcoming, overdue, and completed tasks
  • Recurring Tasks - Set up maintenance routines with custom intervals
  • Task Completion - Mark tasks as complete with timestamps

🎯 Dashboard & Organization

  • Hero Carousel - Featured tasks with swipe navigation
  • Timeline View - Visual task scheduling and organization
  • Task Statistics - Track completion rates, streaks, and maintenance history
  • Priority Filtering - Filter tasks by priority level
  • Category Filtering - Organize tasks by maintenance category
  • Date Range Filtering - View tasks within specific time periods

🎨 Modern UI/UX

  • Gradient Components - Beautiful gradient backgrounds and buttons
  • Haptic Feedback - Tactile responses for better user experience
  • Smooth Animations - React Native Reanimated for fluid interactions
  • Responsive Design - Works on various screen sizes and orientations
  • Dark/Light Theme Support - Dynamic theming system
  • Custom Gradients - User-selectable gradient themes

πŸ“± Advanced Features

  • Push Notifications - Reminders for due tasks and maintenance alerts
  • Notification Preferences - Customizable notification settings by category
  • Completion History - Detailed history of completed maintenance tasks
  • Avatar Customization - Personalized user avatars
  • Streak Tracking - Monitor consecutive task completion streaks
  • Motivational Messages - Encouraging messages based on progress

πŸ›  Tech Stack

  • Framework: React Native with Expo SDK 53
  • Language: TypeScript for type safety
  • Backend: Supabase (PostgreSQL + Real-time subscriptions)
  • Authentication: Supabase Auth with Google OAuth
  • UI Components: React Native Paper, Custom components
  • Animations: React Native Reanimated
  • Navigation: React Navigation v7
  • State Management: React Context API
  • Date Handling: date-fns
  • Icons: Expo Vector Icons
  • Gradients: Expo Linear Gradient
  • Haptics: Expo Haptics

πŸ“ Project Structure

src/
β”œβ”€β”€ components/                    # Reusable UI components
β”‚   β”œβ”€β”€ auth/                     # Authentication components
β”‚   β”‚   β”œβ”€β”€ OAuthButtons.tsx      # Google OAuth sign-in
β”‚   β”‚   └── styles.ts             # Auth component styles
β”‚   β”œβ”€β”€ dashboard/                # Main dashboard components
β”‚   β”‚   β”œβ”€β”€ Dashboard.tsx         # Main dashboard container
β”‚   β”‚   β”œβ”€β”€ DashboardHeader.tsx   # Dashboard header with stats
β”‚   β”‚   β”œβ”€β”€ HeroCarousel.tsx      # Featured tasks carousel
β”‚   β”‚   β”œβ”€β”€ FloatingActionButton.tsx # FAB for creating tasks
β”‚   β”‚   β”œβ”€β”€ tasks/                # Task-related components
β”‚   β”‚   β”‚   β”œβ”€β”€ TaskCard.tsx      # Individual task cards
β”‚   β”‚   β”‚   └── PriorityBadge.tsx # Priority indicators
β”‚   β”‚   β”œβ”€β”€ timeline-view/        # Timeline visualization
β”‚   β”‚   β”œβ”€β”€ profile/              # User profile components
β”‚   β”‚   β”‚   β”œβ”€β”€ ProfileButton.tsx # Profile button
β”‚   β”‚   β”‚   └── ProfileMenu.tsx   # Profile menu modal
β”‚   β”‚   β”œβ”€β”€ popups/               # Notification popups
β”‚   β”‚   β”‚   β”œβ”€β”€ CompletionCelebration.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ DueSoonPopup.tsx
β”‚   β”‚   β”‚   └── StreakPopup.tsx
β”‚   β”‚   └── modals/               # Modal components
β”‚   β”‚       β”œβ”€β”€ create-task-modal/ # Task creation modal
β”‚   β”‚       β”‚   β”œβ”€β”€ CreateTaskModal.tsx
β”‚   β”‚       β”‚   β”œβ”€β”€ CategorySelector.tsx
β”‚   β”‚       β”‚   β”œβ”€β”€ PrioritySelector.tsx
β”‚   β”‚       β”‚   β”œβ”€β”€ IntervalSelector.tsx
β”‚   β”‚       β”‚   β”œβ”€β”€ StartDateSelector.tsx
β”‚   β”‚       β”‚   └── styles.ts
β”‚   β”‚       └── simple-task-detail-modal/ # Task detail modal
β”‚   β”‚           β”œβ”€β”€ SimpleTaskDetailModal.tsx
β”‚   β”‚           └── styles.ts
β”‚   β”œβ”€β”€ onboarding/               # Onboarding components
β”‚   β”‚   β”œβ”€β”€ FeaturesSection.tsx   # App features showcase
β”‚   β”‚   β”œβ”€β”€ LogoSection.tsx       # Logo and branding
β”‚   β”‚   └── WelcomeText.tsx       # Welcome messaging
β”‚   β”œβ”€β”€ ui/                       # Reusable UI components
β”‚   β”‚   β”œβ”€β”€ action-buttons/       # Action button components
β”‚   β”‚   β”œβ”€β”€ gradient-divider/     # UI dividers
β”‚   β”‚   β”œβ”€β”€ gradient-picker/      # Color picker components
β”‚   β”‚   └── NotificationPermissionRequest.tsx
β”‚   └── modals/                   # Global modals
β”‚       └── avatar-customization-modal/ # Avatar customization
β”œβ”€β”€ context/                      # React Context providers
β”‚   β”œβ”€β”€ AuthContext.tsx           # Authentication state
β”‚   β”œβ”€β”€ TasksContext.tsx          # Task management state
β”‚   β”œβ”€β”€ ThemeContext.tsx          # Theme management
β”‚   β”œβ”€β”€ UserPreferencesContext.tsx # User preferences
β”‚   └── NotificationContext.tsx   # Notification state
β”œβ”€β”€ hooks/                        # Custom React hooks
β”‚   β”œβ”€β”€ useAnimations.ts          # Animation utilities
β”‚   β”œβ”€β”€ useDynamicSpacing.ts      # Responsive spacing
β”‚   β”œβ”€β”€ useGradients.ts           # Gradient management
β”‚   β”œβ”€β”€ useHaptics.ts             # Haptic feedback
β”‚   └── useTasks.ts               # Task management logic
β”œβ”€β”€ navigation/                   # Navigation configuration
β”‚   β”œβ”€β”€ AppNavigator.tsx          # Main app navigation
β”‚   β”œβ”€β”€ AuthNavigator.tsx         # Authentication flow
β”‚   └── RootNavigator.tsx         # Root navigation setup
β”œβ”€β”€ screens/                      # Screen components
β”‚   β”œβ”€β”€ auth/                     # Authentication screens
β”‚   β”‚   β”œβ”€β”€ LoginScreen.tsx       # Login screen
β”‚   β”‚   β”œβ”€β”€ SignUpScreen.tsx      # Sign up screen
β”‚   β”‚   β”œβ”€β”€ EmailVerificationScreen.tsx
β”‚   β”‚   β”œβ”€β”€ CodeVerificationScreen.tsx
β”‚   β”‚   └── EmailEntryScreen.tsx
β”‚   β”œβ”€β”€ DashboardScreen.tsx       # Main dashboard screen
β”‚   β”œβ”€β”€ HomeScreen.tsx            # Welcome/home screen
β”‚   β”œβ”€β”€ completion-history/       # Task completion history
β”‚   β”‚   └── CompletionHistoryScreen.tsx
β”‚   └── notification-preferences/ # Notification settings
β”‚       └── NotificationPreferencesScreen.tsx
β”œβ”€β”€ services/                     # API and external services
β”‚   β”œβ”€β”€ MaintenanceService.ts     # Main service orchestrator
β”‚   β”œβ”€β”€ MaintenanceRoutineService.ts # Routine management
β”‚   β”œβ”€β”€ MaintenanceInstanceService.ts # Instance management
β”‚   β”œβ”€β”€ MaintenanceTaskService.ts # Task queries
β”‚   β”œβ”€β”€ MaintenanceStatsService.ts # Statistics and analytics
β”‚   β”œβ”€β”€ maintenanceDataMapper.ts  # Data transformation
β”‚   └── index.ts                  # Service exports
β”œβ”€β”€ theme/                        # Theme configuration
β”‚   β”œβ”€β”€ colors.ts                 # Color definitions
β”‚   └── designSystem.ts           # Design system tokens
└── types/                        # TypeScript type definitions
    β”œβ”€β”€ maintenance.ts            # Maintenance-related types
    └── navigation.ts             # Navigation types

πŸš€ Getting Started

Prerequisites

  • Node.js (v16 or higher)
  • npm or yarn
  • Expo CLI (npm install -g @expo/cli)
  • iOS Simulator (for iOS development) or Android Studio (for Android development)

Installation

  1. Clone the repository:
git clone <your-repo-url>
cd homekeep-mobile
  1. Install dependencies:
npm install
  1. Set up Supabase:

    • Create a Supabase project at supabase.com
    • Get your project URL and anon key from the API settings
    • Create a .env file with your Supabase credentials
  2. Start the development server:

npm start
  1. Run on your preferred platform:
    • Press i for iOS simulator
    • Press a for Android emulator
    • Scan QR code with Expo Go app on your device

πŸ”§ Environment Variables

Create a .env file in the project root:

EXPO_PUBLIC_SUPABASE_URL=your_project_url_here
EXPO_PUBLIC_SUPABASE_ANON_KEY=your_anon_key_here

πŸ“Š Database Schema

The app uses Supabase with the following main tables:

  • maintenance_routines - Recurring maintenance tasks
  • routine_instances - Individual task instances
  • user_preferences - User settings and preferences
  • notification_settings - Notification preferences by category

🎯 Key Features in Detail

Task Management

  • Create Tasks: Add new maintenance tasks with categories, priorities, estimated duration, and due dates
  • Task Categories: HVAC, Plumbing, Electrical, Appliances, Exterior, Interior, Landscaping, Safety, General
  • Priority Levels: Low, Medium, High, Urgent with color-coded indicators
  • Recurring Tasks: Set up maintenance routines with custom intervals (daily, weekly, monthly, quarterly, yearly)
  • Task Completion: Mark tasks as complete with timestamps and completion history

Dashboard Features

  • Hero Carousel: Swipeable carousel of upcoming tasks with pagination
  • Statistics: Active routines, total instances, completion rates, overdue tasks
  • Timeline View: Visual representation of task scheduling
  • Quick Actions: Floating action button for creating new tasks
  • Profile Management: User profile with avatar customization

Notifications

  • Due Soon Reminders: Notifications for tasks due soon
  • Overdue Alerts: Reminders for overdue tasks
  • Daily Digest: Summary of daily tasks
  • Weekly Summary: Weekly maintenance overview
  • Category-based Settings: Customize notifications by maintenance category

πŸ“± Available Scripts

  • npm start - Start the Expo development server
  • npm run android - Run on Android emulator
  • npm run ios - Run on iOS simulator
  • npm run web - Run in web browser
  • npm run build:ios - Build iOS app for production
  • npm run submit:ios - Submit iOS app to App Store

πŸ§ͺ Development

Testing with Expo Go

  • Install Expo Go app on your device
  • Scan QR code from development server
  • Test app functionality in real-time
  • Perfect for demos and quick testing

TypeScript

  • Full TypeScript implementation for type safety
  • Comprehensive type definitions for all components
  • Service layer with proper error handling and response types

Code Quality

  • Consistent code formatting and structure
  • Separated concerns (components, services, types)
  • Reusable components and hooks
  • Proper error handling throughout the app

About

🏠 Smart home maintenance tracker built with React Native, Expo, and Supabase

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published