Skip to content

GrantTotinov/uni-event-app

Repository files navigation

πŸŽ“ UniEventApp

Cross-Platform University Event Management Platform

React Native Expo TypeScript Firebase

A comprehensive mobile application connecting university communities through events, clubs, and social interactions

Features β€’ Tech Stack β€’ Architecture β€’ Getting Started


πŸ“‹ Overview

UniEventApp is a production-ready, cross-platform mobile application designed to revolutionize university event management and student engagement. Built with modern React Native technologies, the app provides a seamless experience across iOS, Android, and web platforms.

The application serves as a central hub for university communities, enabling students and faculty to discover events, join clubs, share posts, and connect with peers - all in one intuitive interface.

✨ Key Features

🎯 Core Functionality

  • Event Management System

    • Browse and discover university events with advanced filtering
    • Create and manage events with rich media support
    • RSVP and attendance tracking
    • Event categories and tags for easy discovery
  • University Clubs & Organizations

    • Explore and join student clubs
    • Club-specific event feeds
    • Club membership management
    • Activity tracking and engagement metrics
  • Social Features

    • Create and share posts with the university community
    • Real-time chat functionality
    • User profiles with customizable settings
    • Follow clubs and receive updates

πŸ” Authentication & Security

  • Firebase Authentication integration
  • Secure user session management
  • Protected routes and API endpoints
  • Role-based access control

πŸ’‘ User Experience

  • Modern, Responsive UI with React Native Paper
  • Smooth Animations powered by Reanimated 3
  • Dark/Light Mode support
  • Offline-First Architecture with local caching
  • Image Optimization via Cloudinary CDN
  • Haptic Feedback for enhanced interactions

πŸ“± Cross-Platform

  • Native iOS experience
  • Native Android experience
  • Progressive Web App (PWA) support
  • Consistent UI/UX across all platforms

πŸ›  Technology Stack

Frontend

Technology Purpose Version
React Native Cross-platform mobile framework 0.76.9
Expo Development platform & tooling ~52.0
TypeScript Type-safe development 5.9.2
Expo Router File-based navigation system ~4.0
React Native Reanimated High-performance animations ~3.16
React Native Paper Material Design components 5.14.5

State Management & Data Fetching

Technology Purpose
TanStack React Query Server state management & caching
React Context API Global state management
AsyncStorage Persistent local storage

Backend & Services

Service Purpose
Firebase Authentication, real-time database, push notifications
PostgreSQL Primary relational database
Cloudinary Image/video hosting and optimization
Axios HTTP client for API communication

Developer Experience

Tool Purpose
Jest Unit and integration testing
ESLint Code linting and quality
TypeScript Static type checking

πŸ— Architecture Highlights

File-Based Routing

Leveraging Expo Router for intuitive, type-safe navigation with automatic deep linking support.

Component Architecture

  • Modular design with reusable components organized by feature
  • Shared components for common UI elements
  • Custom hooks for business logic separation
  • TypeScript interfaces for type safety across the application

Performance Optimizations

  • React Query caching for efficient data fetching
  • Lazy loading for improved initial load times
  • Image optimization with Cloudinary transformations
  • Memoization for expensive computations
  • Virtual scrolling for large lists

Responsive Design

  • react-native-responsive-screen for adaptive layouts
  • react-native-size-matters for consistent sizing
  • Supports devices from small phones to tablets

πŸ“Έ Screenshots

Add screenshots of your app here to showcase the UI/UX


πŸš€ Getting Started

Prerequisites

Before you begin, ensure you have the following installed:

  • Node.js (v16 or higher) - Download
  • npm or yarn - Package manager
  • Expo CLI - npm install -g expo-cli
  • iOS Simulator (Mac only) - via Xcode
  • Android Studio - for Android emulator
  • Git - Version control

Installation

  1. Clone the repository

    git clone <repository-url>
    cd UniEventApp
  2. Navigate to the app directory

    cd uni-event-app
  3. Install dependencies

    npm install
  4. Configure environment variables

    Create a .env file in the uni-event-app directory:

    # Firebase Configuration
    FIREBASE_API_KEY=your_api_key
    FIREBASE_AUTH_DOMAIN=your_auth_domain
    FIREBASE_PROJECT_ID=your_project_id
    
    # Cloudinary Configuration
    CLOUDINARY_CLOUD_NAME=your_cloud_name
    CLOUDINARY_API_KEY=your_api_key
    
    # Database
    DATABASE_URL=your_postgres_connection_string
  5. Start the development server

    npm start
  6. Run on your platform

    • iOS Simulator: Press i or run npm run ios
    • Android Emulator: Press a or run npm run android
    • Web Browser: Press w or run npm run web
    • Physical Device: Scan the QR code with Expo Go app

Available Scripts

Command Description
npm start Start the development server with LAN access
npm run android Run on Android emulator/device
npm run ios Run on iOS simulator/device
npm run web Run in web browser
npm test Run Jest test suite in watch mode
npm run check Run TypeScript type checking
npm run clear Clear cache and restart development server
npm run lint Run ESLint for code quality

πŸ“ Project Structure

UniEventApp/
β”‚
β”œβ”€β”€ uni-event-app/                 # Main application directory
β”‚   β”‚
β”‚   β”œβ”€β”€ app/                       # Expo Router - File-based routing
β”‚   β”‚   β”œβ”€β”€ (tabs)/               # Tab navigator screens
β”‚   β”‚   β”‚   β”œβ”€β”€ index.tsx         # Home feed
β”‚   β”‚   β”‚   β”œβ”€β”€ explore.tsx       # Explore events
β”‚   β”‚   β”‚   β”œβ”€β”€ clubs.tsx         # Clubs directory
β”‚   β”‚   β”‚   └── profile.tsx       # User profile
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ (auth)/               # Authentication flow
β”‚   β”‚   β”‚   β”œβ”€β”€ login.tsx         # Login screen
β”‚   β”‚   β”‚   β”œβ”€β”€ register.tsx      # Registration screen
β”‚   β”‚   β”‚   └── forgot-password.tsx
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ (api)/                # API routes
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ event/                # Event detail screens
β”‚   β”‚   β”œβ”€β”€ add-event/            # Create event flow
β”‚   β”‚   β”œβ”€β”€ add-club/             # Create club flow
β”‚   β”‚   β”œβ”€β”€ add-post/             # Create post flow
β”‚   β”‚   β”œβ”€β”€ chat/                 # Chat functionality
β”‚   β”‚   β”œβ”€β”€ settings/             # App settings
β”‚   β”‚   β”œβ”€β”€ user-page/            # User profile pages
β”‚   β”‚   β”œβ”€β”€ _layout.tsx           # Root layout
β”‚   β”‚   └── index.tsx             # Entry point
β”‚   β”‚
β”‚   β”œβ”€β”€ components/               # Reusable UI components
β”‚   β”‚   β”œβ”€β”€ Events/               # Event-related components
β”‚   β”‚   β”œβ”€β”€ Clubs/                # Club-related components
β”‚   β”‚   β”œβ”€β”€ Home/                 # Home screen components
β”‚   β”‚   β”œβ”€β”€ Post/                 # Post components
β”‚   β”‚   └── Shared/               # Shared/common components
β”‚   β”‚
β”‚   β”œβ”€β”€ context/                  # React Context providers
β”‚   β”‚   β”œβ”€β”€ AuthContext.tsx       # Authentication state
β”‚   β”‚   └── ThemeContext.tsx      # Theme management
β”‚   β”‚
β”‚   β”œβ”€β”€ hooks/                    # Custom React hooks
β”‚   β”‚   β”œβ”€β”€ useAuth.ts           # Authentication hook
β”‚   β”‚   β”œβ”€β”€ useEvents.ts         # Event data hook
β”‚   β”‚   └── useClubs.ts          # Club data hook
β”‚   β”‚
β”‚   β”œβ”€β”€ utils/                    # Utility functions
β”‚   β”‚   β”œβ”€β”€ api.ts               # API client configuration
β”‚   β”‚   β”œβ”€β”€ helpers.ts           # Helper functions
β”‚   β”‚   └── validators.ts        # Form validation
β”‚   β”‚
β”‚   β”œβ”€β”€ types/                    # TypeScript definitions
β”‚   β”‚   β”œβ”€β”€ event.types.ts       # Event interfaces
β”‚   β”‚   β”œβ”€β”€ user.types.ts        # User interfaces
β”‚   β”‚   └── club.types.ts        # Club interfaces
β”‚   β”‚
β”‚   β”œβ”€β”€ configs/                  # Configuration files
β”‚   β”‚   β”œβ”€β”€ firebase.config.ts   # Firebase setup
β”‚   β”‚   └── cloudinary.config.ts # Cloudinary setup
β”‚   β”‚
β”‚   β”œβ”€β”€ assets/                   # Static assets
β”‚   β”‚   β”œβ”€β”€ images/              # Image files
β”‚   β”‚   β”œβ”€β”€ fonts/               # Custom fonts
β”‚   β”‚   └── icons/               # Icon assets
β”‚   β”‚
β”‚   β”œβ”€β”€ data/                     # Static data
β”‚   β”‚
β”‚   β”œβ”€β”€ app.json                  # Expo configuration
β”‚   β”œβ”€β”€ package.json              # Dependencies
β”‚   β”œβ”€β”€ tsconfig.json             # TypeScript configuration
β”‚   └── .env                      # Environment variables
β”‚
β”œβ”€β”€ .github/                      # GitHub configuration
└── babel.config.js               # Babel configuration

πŸ’» Development Best Practices

Code Quality

  • TypeScript strict mode enabled for maximum type safety
  • ESLint configuration for consistent code style
  • Prettier integration for automatic code formatting
  • Husky pre-commit hooks (if configured)

Testing Strategy

  • Unit tests with Jest for utility functions
  • Component tests with React Test Renderer
  • Integration tests for critical user flows
  • Run npm test to execute the test suite

State Management Pattern

// Using React Query for server state
const { data, isLoading, error } = useQuery({
  queryKey: ['events'],
  queryFn: fetchEvents,
  staleTime: 5 * 60 * 1000, // 5 minutes
})

// Using Context for global UI state
const { theme, toggleTheme } = useTheme()

🎯 Key Technical Highlights

For Recruiters & Technical Evaluators

Modern React Native Architecture

  • βœ… Latest React Native 0.76 with New Architecture enabled
  • βœ… TypeScript 5.9 throughout the entire codebase
  • βœ… File-based routing with Expo Router for type-safe navigation
  • βœ… Component-driven development with modular architecture

Performance & Optimization

  • βœ… TanStack React Query for efficient server state management
  • βœ… Reanimated 3 for 60 FPS animations on the UI thread
  • βœ… Lazy loading and code splitting for optimal bundle size
  • βœ… Image optimization with Cloudinary CDN integration
  • βœ… Offline-first approach with local caching strategies

Full-Stack Integration

  • βœ… Firebase Authentication for secure user management
  • βœ… PostgreSQL for relational data storage
  • βœ… RESTful API integration with Axios
  • βœ… Real-time features for chat and notifications
  • βœ… Cloud storage integration (Cloudinary)

Code Quality & Best Practices

  • βœ… Type-safe development with TypeScript interfaces
  • βœ… Custom hooks for reusable business logic
  • βœ… Context API for global state management
  • βœ… Component testing with Jest
  • βœ… Responsive design across all device sizes

Cross-Platform Excellence

  • βœ… iOS native experience
  • βœ… Android native experience
  • βœ… Web progressive web app support
  • βœ… Consistent UI/UX across all platforms
  • βœ… Platform-specific optimizations

πŸ”§ Technical Skills Demonstrated

This project showcases proficiency in:

Frontend Development

  • React Native & Expo ecosystem
  • TypeScript for large-scale applications
  • Complex navigation patterns
  • State management (Context API, React Query)
  • Animation and gesture handling
  • Responsive and adaptive design

Backend Integration

  • Firebase services (Auth, Realtime DB, Storage)
  • RESTful API consumption
  • Database design and modeling (PostgreSQL)
  • Authentication and authorization flows
  • File upload and cloud storage

Development Practices

  • Git version control
  • Component-based architecture
  • Custom hooks pattern
  • Error handling and validation
  • Code organization and modularity
  • Cross-platform development

Tools & Technologies

  • Expo development platform
  • TypeScript compilation and type checking
  • Package management (npm)
  • Testing frameworks (Jest)
  • Development debugging tools

🚦 Current Status

  • βœ… Core Features: Fully implemented
  • βœ… Authentication: Complete with Firebase
  • βœ… Event Management: Fully functional
  • βœ… Club Features: Operational
  • βœ… Chat System: Integrated
  • βœ… Cross-Platform: iOS, Android, Web ready
  • πŸ”„ In Progress: Additional features and optimizations

πŸ“š Learning Resources

If you want to understand the technologies used:


🀝 Contributing

Contributions are welcome! If you'd like to contribute to this project:

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

Contribution Guidelines

  • Follow the existing code style and patterns
  • Write meaningful commit messages
  • Add tests for new features
  • Update documentation as needed
  • Ensure all tests pass before submitting PR

πŸ“„ License

This project is private and proprietary. All rights reserved.

For licensing inquiries, please contact the repository owner.


πŸ“§ Contact & Support

For additional questions or collaboration opportunities, please open an issue or contact the maintainers.


⭐️ If you find this project interesting, consider giving it a star!

Built with ❀️ using React Native & Expo

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors