# Real-Time Location Tracking App A Next.js application for real-time location tracking and sharing using Socket.IO. ## Features ### Real-Time Location Tracking - Track your location in real-time on an interactive map - Share your location with other users - See other users' locations updated in real-time - Direct location sharing between specific users ### Location Sharing via Email - Generate shareable links for location sharing - Email location links to anyone - Set expiration times for shared locations - View shared locations without an account ## Tech Stack - **Frontend**: Next.js, React, TypeScript, TailwindCSS, shadcn/ui - **Maps**: Leaflet with OpenStreetMap - **Real-Time Communication**: Socket.IO - **Email**: Integrated email services ## Implementation Details ### Socket.IO Implementation The real-time features are implemented using Socket.IO with the following main components: 1. **Server-Side Socket.IO Service**: - Located in `src/server/socket.ts` and `src/services/socketService.ts` - Manages user connections, broadcasting, and direct messaging - Tracks active users and their socket IDs 2. **Client-Side Socket Hook**: - Located in `src/hooks/useSocket.ts` - Manages client-side socket connection and events - Provides functions for location updates and sharing 3. **Events**: - `user:register`: Register a user with the socket server - `location:update`: Broadcast location updates to all users - `location:share`: Share location with a specific user - `users:update`: Update the list of active users - `location:broadcast`: Receive broadcasted location updates - `location:shared`: Receive shared location from another user ### Map Component The interactive map is implemented using Leaflet with OpenStreetMap: - Located in `src/components/Map.tsx` - Supports real-time location updates - Displays user and shared locations - Tracks location history with path visualization ## Setup and Configuration 1. Install dependencies: ``` npm install ``` 2. Start the development server: ``` npm run dev ``` 3. Start the Socket.IO server: ``` npm run socket ``` ## Environment Variables Create a `.env` file with the following variables: ``` NEXT_PUBLIC_APP_URL=http://localhost:3000 SOCKET_PORT=3001 ``` ## Pages - `/`: Home page with feature overview - `/track`: Real-time location tracking page - `/view/[userId]`: View a specific user's location - `/map`: Location sharing via email page - `/shared/[token]`: View a shared location