Back to all projects
NS RideShare Platform

NS RideShare Platform

ride sharing·react·node.js·typescript·postgresql

NS RideShare Platform

Created a full-stack ride-sharing platform connecting Singapore and Malaysia that reduced transportation costs by 77% for over 30 cross-border NS commuters while simultaneously building a tight-knit community of travelers.

Features

  • User authentication with secure password handling and profile management
  • Bi-directional ride creation (Singapore to Forest City or reverse)
  • Intuitive ride joining with passenger management
  • Dynamic ride capacity and cost calculation
  • Drop-off sequence management for multi-stop journeys
  • Location mapping with visual representation of routes
  • Shareable trip summaries for easy communication
  • Contact information exchange for ride coordination
  • Vendor/driver integration system for professional drivers
  • Comprehensive travel guide with bus routes and scheduling information
  • Mobile-responsive design for on-the-go access

Technical Stack

  • Frontend: React with TypeScript, TailwindCSS, Shadcn UI components
  • State Management: React Query for server state, React Context for auth
  • Routing: Wouter for lightweight client-side routing
  • Backend: Node.js with Express, TypeScript for type safety
  • Database: PostgreSQL with Drizzle ORM for data modeling
  • Authentication: Passport.js with session-based auth and scrypt password hashing
  • Form Validation: React Hook Form with Zod schema validation
  • Map Integration: Leaflet for interactive location maps
  • Deployment: Replit for hosting and continuous deployment

Lessons Learned

The NS RideShare platform was developed to address a specific transportation challenge faced by commuters traveling between Singapore and Forest City, Malaysia. The project successfully demonstrates how technology can create community-driven solutions to practical, everyday problems.

A key technical decision was using TypeScript throughout the entire stack, which significantly improved code quality and reduced runtime errors. The strong typing, combined with Zod schema validation, ensured data consistency between the client and server. This approach minimized bugs related to data handling and API communication, though it did add development overhead initially.

The choice of React Query for data fetching proved especially valuable, providing automatic caching, refetching, and mutation handling with minimal boilerplate. This pattern kept the components clean and focused on presentation logic rather than data fetching concerns. However, we found that more consistent invalidation strategies would have improved the user experience during rapid data changes.

Implementing the dynamic passenger sequence management feature presented interesting challenges. Creating an intuitive interface for organizing drop-off sequences required careful consideration of user experience and real-time data updates. The drag-and-drop interface, while powerful, required additional effort to maintain consistency with the backend state.

The location mapping functionality using Leaflet highlighted the importance of progressive enhancement. While the initial implementation provides basic visualization, we recognized that real-time location tracking and route optimization would significantly enhance the user experience in future iterations.

Authentication security was a priority from the start, implementing proper password hashing with scrypt and robust session management. However, we learned that balancing security with user convenience required thoughtful UX design to maintain a smooth onboarding process.

From a product perspective, we discovered that social features like sharing ride summaries and facilitating communication between passengers were unexpectedly valuable. These social elements transformed the platform from a simple utility into a community tool, increasing user engagement and retention.

Performance optimization became increasingly important as the application grew. Implementing appropriate data fetching strategies and component memoization helped maintain a responsive user experience, though there's still room for improvement with bundle size optimization and code splitting.

Overall, the NS RideShare platform demonstrates how a well-executed technical solution can address real-world community needs while providing valuable learning opportunities in modern web development practices. The focus on type safety, component reusability, and thoughtful UX design created a solid foundation that can evolve with user needs.