Skip to content

iScreenager/greedy-todo-frontend

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

13 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸš€ Greedy Todo - My Full-Stack Learning Project

Dashboard Overview

A project I built to level up my full-stack development skills

Why I Built This

I wanted to dive deeper into full-stack development and learn the technologies I'd been hearing about. This project became my playground for experimenting with real-time features, complex state management, and modern authentication patterns.

πŸš€ Features

βœ… Real-time task management with live updates
πŸ” Dual authentication (Email/Password + Google OAuth)
πŸ‘₯ Role-based access control (Superuser & Normal user)
πŸ”” Smart notifications (4-hour deadline warnings)
πŸ“± Mobile-first responsive design
⚑ WebSocket integration for instant sync
πŸ” Advanced search & filtering
πŸ“Š Live dashboard with task statistics
🎨 Modern UI with Tailwind CSS

🌐 Live Demo

πŸ‘‰ Try Greedy Todo Now (Live on Vercel)

What I Learned

This project taught me a lot about:

  • Real-time applications with WebSocket integration
  • Advanced React patterns and state management
  • Authentication systems with multiple providers
  • Mobile-first responsive design
  • TypeScript for better code quality
  • Modern deployment and development workflows

Tech Stack I Explored

Frontend: Next.js 15, React 19, TypeScript, Tailwind CSS
Backend: Node.js, Express, MongoDB, Socket.io
Authentication: JWT + Google OAuth
Real-time: WebSocket connections
Deployment: Vercel, Docker, AWS
DevOps: CI/CD, Containerization

Getting Started (For Learning)

git clone https://github.com/yourusername/greedy-todo-frontend.git
cd greedy-todo-frontend
npm install

# You'll need the backend running too
echo "NEXT_PUBLIC_API_URL=http://localhost:8000" > .env.local
echo "NEXT_PUBLIC_BACKEND_URL=http://localhost:8000" >> .env.local

npm run dev

Visit http://localhost:3000 (or 3001 if 3000 is busy)

Backend: Check out greedy-todo-backend for the API implementation

Screenshots

Login Dashboard Task Management User Management

Skills I Developed

WebSocket Integration

Before this project, I'd never worked with real-time connections. Learning to handle:

  • Connection states and reconnection logic
  • Event-driven architecture
  • Preventing duplicate notifications
  • Managing multiple concurrent users

This was probably the most challenging part, but also the most rewarding.

Advanced State Management

I experimented with different approaches to managing state:

  • React Context for global state
  • Local state for component-specific data
  • WebSocket state for real-time updates
  • localStorage for persistence

Learning when to use each approach was crucial.

Authentication & Security

I implemented a dual authentication system to understand:

  • JWT token management
  • Google OAuth integration
  • Role-based access control
  • Secure data storage
  • Route protection patterns

Mobile-First Development

Building responsive interfaces taught me:

  • CSS Grid and Flexbox patterns
  • Mobile-specific interactions
  • Adaptive layouts
  • Touch-friendly design
  • Performance considerations

TypeScript Integration

This project helped me understand:

  • Type definitions and interfaces
  • Generic types and utility types
  • Type safety in React components
  • API response typing
  • Error handling with types

Technical Challenges I Tackled

Real-Time Notifications

Problem: How do you show notifications to users without spamming them or showing duplicates?

Learning: I had to understand event filtering, connection management, and state synchronization. The solution involved filtering notifications by ID and implementing proper cleanup.

Dynamic User Roles

Problem: How do you handle role changes that affect the entire UI in real-time?

Learning: This taught me about WebSocket events, localStorage synchronization, and dynamic route protection. Users now see role changes instantly across all devices.

Complex Form Validation

Problem: How do you create forms that validate properly and handle edge cases?

Learning: I explored React Hook Form with Zod schemas, custom validation logic, and error handling patterns. This was my first deep dive into form libraries.

Responsive Data Tables

Problem: How do you make data tables work on mobile devices?

Learning: I had to completely rethink table layouts, implementing adaptive designs that switch between table and card layouts based on screen size.

Date/Time Handling

Problem: How do you properly handle dates and times across different formats and timezones?

Learning: I built utility functions for time conversion, date comparisons, and status calculations. This taught me a lot about JavaScript's Date object and timezone handling.

Architecture Decisions

src/
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ (protected)/          # Protected routes with auth guards
β”‚   β”‚   β”œβ”€β”€ dashboard/        # Main dashboard
β”‚   β”‚   └── users/           # User management
β”‚   └── auth/                # Authentication pages
β”œβ”€β”€ components/              # Reusable UI components
β”œβ”€β”€ contexts/                # Global state management
β”œβ”€β”€ hooks/                   # Custom React hooks
β”œβ”€β”€ lib/                     # WebSocket setup
└── types/                   # TypeScript definitions

I chose this structure to learn about:

  • Next.js App Router patterns
  • Component organization
  • Custom hook patterns
  • TypeScript project structure

The Backend

I built a separate backend to understand full-stack architecture:

  • RESTful API design
  • WebSocket server implementation
  • Database modeling with MongoDB
  • Authentication middleware
  • Error handling patterns

πŸ”— Backend Repository

🚧 Upcoming Learning Goals

I'm planning to expand this project further to learn more advanced concepts:

PWA Implementation

  • Service Workers for offline functionality
  • App-like experience with installable web app
  • Background sync for task updates when offline
  • Caching strategies for better performance

Push Notifications

  • Web Push API integration
  • Real-time notifications even when app is closed
  • Custom notification handling for different task types
  • Cross-platform notification support

Dockerization

  • Containerization of both frontend and backend
  • Docker Compose for local development setup
  • Production deployment with Docker
  • CI/CD pipeline integration

These additions will help me understand modern web development practices, DevOps workflows, and advanced browser APIs.

Contributing

This is a learning project, so feel free to:

  • Fork it and experiment
  • Suggest improvements or different approaches
  • Use it as a reference for your own projects
  • Point out areas where I could improve

Built by Vaishnavi Rastogi as a learning project

GitHub β€’ LinkedIn β€’

About

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages