Skip to content

elyse502/PingUp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

110 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

PINGUP πŸ“±

Connect, Share, and Engage in Real-Time

Last Commit Languages License MERN

Powered by cutting-edge technologies:

MongoDB Express React Node.js ImageKit Inngest Clerk

LIVE - DEMO 🌐

Visit the πŸ‘‰ LINK πŸ”—

Profile Page Home Page
Profile Home

Table of Contents


Overview

PINGUP is a full-featured social media platform that provides:

  • πŸ‘₯ Social Networking: Connect with friends and discover new people
  • πŸ’¬ Real-time Messaging: Instant chat with typing indicators
  • πŸ“± Stories Feature: Share ephemeral content that disappears in 24 hours
  • πŸ“Έ Media Sharing: Upload and share images with optimized delivery
  • πŸ” Discoverability: Find and connect with users based on interests
  • ⚑ Background Processing: Efficient handling of async tasks with Inngest

Built with the MERN stack and designed for modern social interactions.


Key Features

πŸ” Authentication & Security

  • Clerk Integration: Secure authentication with social login options
  • JWT Tokens: Stateless authentication for API requests
  • Protected Routes: Role-based access control
  • Session Management: Secure user sessions

πŸ’¬ Real-time Communication

  • Instant Messaging: One-on-one and group chats
  • Typing Indicators: Real-time feedback when users are typing
  • Message Status: Read receipts and delivery confirmations
  • Online Presence: User online/offline status

πŸ“± Social Features

  • Post System: Share text and image content with followers
  • Stories: 24-hour ephemeral content with viewer tracking
  • Follow/Unfollow: Build your social network
  • Friend Requests: Manage connections with approval system
  • News Feed: Personalized content based on connections
  • Notifications: Real-time alerts for social interactions

πŸ–ΌοΈ Media Management

  • ImageKit Integration: Optimized image storage and delivery
  • File Uploads: Support for multiple image formats
  • Image Optimization: Automatic resizing and compression
  • CDN Delivery: Fast global content delivery

βš™οΈ Background Processing

  • Inngest Integration: Efficient background job processing
  • Scheduled Tasks: Automated cleanup and maintenance
  • Email Notifications: Welcome emails and alerts
  • Async Operations: Non-blocking background processing

Tech Stack

Frontend (Client)

  • React 18+ - Modern React with hooks and context
  • Axios - HTTP client for API communication
  • Redux Toolkit - State management (store.js)
  • React Router - Client-side navigation
  • Custom Hooks - Feature-specific logic encapsulation

Backend (Server)

  • Node.js - JavaScript runtime environment
  • Express.js - Web application framework
  • MongoDB - NoSQL database for flexible data storage
  • Mongoose - MongoDB object modeling
  • Socket.io - Real-time bidirectional communication
  • Inngest - Background job processing
  • ImageKit - Image optimization and CDN
  • Nodemailer - Email notification system
  • JWT - Authentication tokens

DevOps & Deployment

  • Vercel - Frontend deployment platform
  • Render/Railway - Backend deployment
  • MongoDB Atlas - Cloud database service
  • ImageKit CDN - Media content delivery

Architecture

PingUp/
β”œβ”€β”€ client/                 # React Frontend
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ api/           # API configuration
β”‚   β”‚   β”‚   └── axios.js   # Axios instance
β”‚   β”‚   β”œβ”€β”€ app/           # Redux store
β”‚   β”‚   β”‚   └── store.js   # State management
β”‚   β”‚   β”œβ”€β”€ assets/        # Static assets
β”‚   β”‚   β”œβ”€β”€ components/    # Reusable UI components
β”‚   β”‚   β”‚   β”œβ”€β”€ Loading.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ MenuItems.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Notification.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ PostCard.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ ProfileModal.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ RecentMessages.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Sidebar.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ StoriesBar.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ StoryModal.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ StoryViewer.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ UserCard.jsx
β”‚   β”‚   β”‚   └── UserProfileInfo.jsx
β”‚   β”‚   β”œβ”€β”€ features/      # Feature-based organization
β”‚   β”‚   β”‚   β”œβ”€β”€ connections/
β”‚   β”‚   β”‚   β”œβ”€β”€ messages/
β”‚   β”‚   β”‚   └── user/
β”‚   β”‚   β”œβ”€β”€ pages/         # Route components
β”‚   β”‚   β”‚   β”œβ”€β”€ ChatBox.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Connections.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ CreatePost.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Discover.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Feed.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Layout.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Login.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Messages.jsx
β”‚   β”‚   β”‚   └── Profile.jsx
β”‚   β”‚   └── ...           # Config files
β”‚
β”œβ”€β”€ server/                # Express Backend
β”‚   β”œβ”€β”€ configs/          # Configuration files
β”‚   β”‚   β”œβ”€β”€ db.js         # Database configuration
β”‚   β”‚   β”œβ”€β”€ imageKit.js   # ImageKit configuration
β”‚   β”‚   β”œβ”€β”€ multer.js     # File upload configuration
β”‚   β”‚   └── nodeMailer.js # Email configuration
β”‚   β”œβ”€β”€ controllers/      # Business logic
β”‚   β”‚   β”œβ”€β”€ messageController.js
β”‚   β”‚   β”œβ”€β”€ postController.js
β”‚   β”‚   β”œβ”€β”€ storyController.js
β”‚   β”‚   └── userController.js
β”‚   β”œβ”€β”€ inngest/          # Background jobs
β”‚   β”‚   └── index.js
β”‚   β”œβ”€β”€ middlewares/      # Custom middlewares
β”‚   β”‚   └── auth.js
β”‚   β”œβ”€β”€ models/           # Database models
β”‚   β”‚   β”œβ”€β”€ Connection.js
β”‚   β”‚   β”œβ”€β”€ Message.js
β”‚   β”‚   β”œβ”€β”€ Post.js
β”‚   β”‚   β”œβ”€β”€ Story.js
β”‚   β”‚   └── User.js
β”‚   β”œβ”€β”€ routes/           # API routes
β”‚   β”‚   β”œβ”€β”€ messageRoutes.js
β”‚   β”‚   β”œβ”€β”€ postRoutes.js
β”‚   β”‚   β”œβ”€β”€ storyRoutes.js
β”‚   β”‚   └── userRoutes.js
β”‚   └── server.js         # Server entry point

Getting Started

Prerequisites

  • Node.js (v18 or higher)
  • npm (v8 or higher)
  • MongoDB Atlas account or local MongoDB
  • ImageKit account
  • Clerk account
  • Inngest account

Installation

  1. Clone the repository:
git clone https://github.com/elyse502/PingUp.git
cd PingUp
  1. Install client dependencies:
cd client && npm install
  1. Install server dependencies:
cd ../server && npm install

Environment Variables

Client (.env)

VITE_CLERK_PUBLISHABLE_KEY=pk_test_...
VITE_API_BASE_URL=http://localhost:5000
VITE_IMAGEKIT_URL_ENDPOINT=your-imagekit-endpoint
VITE_IMAGEKIT_PUBLIC_KEY=your-imagekit-public-key

Server (.env)

MONGODB_URI=your-mongodb-connection-string
CLERK_SECRET_KEY=sk_test_...
IMAGEKIT_PRIVATE_KEY=your-imagekit-private-key
INNGEST_EVENT_KEY=your-inngest-event-key
INNGEST_SIGNING_KEY=your-inngest-signing-key
EMAIL_SERVICE=your-email-service
EMAIL_USER=your-email-username
EMAIL_PASS=your-email-password
JWT_SECRET=your-jwt-secret
PORT=5000
  1. Start the development servers:
# Terminal 1 - Start backend
cd server && npm run dev

# Terminal 2 - Start frontend
cd client && npm run dev

Core Functionality

πŸ—‚οΈ User Management

  • User registration and authentication via Clerk
  • Profile customization with avatars and bios
  • Friend request system with approval workflow
  • User search and discovery features

πŸ’¬ Messaging System

  • Real-time chat with Socket.io
  • Conversation history persistence
  • Typing indicators and read receipts
  • Message notifications

πŸ“± Content Sharing

  • Create posts with text and images
  • Like, comment, and share functionality
  • News feed algorithm based on connections
  • Hashtag and mention support

🎬 Stories Feature

  • Upload images/videos as stories
  • 24-hour expiration with auto-cleanup
  • Viewer tracking and analytics
  • Story reactions and replies

⚑ Background Jobs

  • Email notifications for new messages
  • Story expiration cleanup
  • Periodic data backups
  • Analytics and reporting generation

API Endpoints

Authentication Routes (/api/auth)

Method Endpoint Description
POST /verify Verify Clerk session
GET /profile Get user profile
PUT /profile Update user profile

User Routes (/api/users)

Method Endpoint Description
GET /search Search for users
POST /follow Follow a user
DELETE /unfollow Unfollow a user
GET /connections Get user connections

Post Routes (/api/posts)

Method Endpoint Description
GET /feed Get news feed
POST /create Create a new post
PUT /like Like a post
POST /comment Add comment to post

Message Routes (/api/messages)

Method Endpoint Description
GET /conversations Get user conversations
GET /conversation/:id Get specific conversation
POST /send Send a message

Story Routes (/api/stories)

Method Endpoint Description
POST /upload Upload a story
GET /user/:id Get user stories
GET /feed Get stories from connections

Deployment

Frontend (Vercel)

Deploy with Vercel

Backend (Render/Railway)

Deploy with environment variables configured for:

  • MongoDB Atlas connection
  • Clerk authentication
  • ImageKit integration
  • Inngest background processing

Database (MongoDB Atlas)

# Recommended: MongoDB Atlas Cloud
https://www.mongodb.com/atlas

Real-time Services

  • Socket.io for real-time features
  • Inngest for background jobs
  • ImageKit for media optimization

Performance

  • ⚑ Lighthouse Score: 90+
  • πŸ“¦ Optimized Bundle Size with code splitting
  • πŸš€ Fast image loading with ImageKit CDN
  • πŸ“± Mobile-first responsive design
  • πŸ”’ Secure authentication with Clerk
  • ⏱️ Efficient background processing with Inngest

Contributing

We welcome contributions! Please follow these steps:

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

License

Distributed under the MIT License. See LICENSE for more information.


Support

For support, email elyseniyibizi502@gmail.com or create an issue in the GitHub repository.


πŸ“ž Contact

For any questions or support, please contact:

LinkedIn @phenrysay pH-7


PINGUP - Where connections happen in real time! πŸš€

Built with ❀️ using the MERN stack and modern web technologies.

Made with ❀️ by Elysée NIYIBIZI

⬆ Back to Top


Releases

No releases published

Packages

 
 
 

Contributors

Languages