Skip to content

ryanbcommits/shopping-list-app

Repository files navigation

Shopping List App

Status Version

A full-stack shopping list application built with vanilla JavaScript and Firebase, featuring real-time data synchronization, user authentication, and comprehensive CRUD operations.

πŸŽ‰ Version 1.3.0 Release Notes

New Features

  • βœ… Live Search: Real-time filtering as you type, case-insensitive match against item names
  • βœ… Combined Filters: Search and category filter work simultaneously
  • βœ… Clear Button: X appears when search has text, resets list on click
  • βœ… No Results Message: Appears when nothing matches, disappears when results exist

πŸŽ‰ Version 1.2.0 Release Notes

New Features

  • βœ… Category Filter System: Filter your shopping list by category using dynamic filter buttons. Select any category to narrow the list, or hit "All" to return to the full view.

πŸŽ‰ Version 1.1.0 Release Notes

New Features

  • βœ… Complete Edit Functionality: Users can now edit items inline with full Edit/Save/Cancel workflow
  • Dynamic State Management: Edit mode tracked via data-edit-mode attribute
  • Improved UX: Delete button hidden during edit mode to prevent accidental deletions
  • Timestamp Updates: Edited items now update timestamps in the database
  • Google Sign-In Branding: Updated to meet Google's official branding guidelines

Bug Fixes

  • Fixed cancel button event listener scope issues
  • Resolved UI state inconsistencies when canceling edits without changes
  • Corrected double-click requirement bug in cancel functionality

πŸ“¦ Installation

  1. Clone the repository

    git clone https://github.com/ryanbcommits/shopping-list-app.git
    cd shopping-list-app
  2. Install dependencies

    npm install
  3. Set up environment variables

    cp .env.example .env
  4. Run Development server

    npx vite

Then open your browser to the localhost URL that Vite provides (usually http://localhost:5173).

πŸš€ Live Demo

The app is deployed at: https://app.ryanbcommits.com

Current Status: Production-Ready (v1.2.0)

  • βœ… HTTPS/SSL certificate active
  • βœ… Full CRUD operations implemented
  • βœ… Mobile compatibility tested
  • βœ… Environment variables secured

✨ Features

Core Functionality

  • User Authentication: Email/Password and Google Sign-In
  • Real-time Sync: Shopping list items sync across devices via Firestore
  • Full CRUD Operations:
    • Create new items
    • Read/display items
    • Update/edit existing items
    • Category filtering by item type (NEW in v1.2.0!)
    • Delete items (soft delete)
  • Security Features:
    • Session timeout after 15 minutes of inactivity
    • Rate limiting to prevent spam
    • XSS protection via textContent sanitization
    • Password validation with complexity requirements

User Experience

  • Inline Editing: Click Edit to modify items without leaving the list
  • Visual Feedback: Loading states, error messages, and success indicators
  • Keyboard Support: Enter key to add items
  • Responsive Design: Works on desktop and mobile devices
  • Data Persistence: All data saved to cloud, survives logout/login
  • Live Search: Real-time filtering as you type with clear button
  • Smart Filtering: Search and category filters work simultaneously

πŸ› οΈ Technology Stack

  • Frontend: Vanilla JavaScript, HTML5, CSS3
  • Backend: Firebase (Authentication & Firestore)
  • Build Tool: Vite
  • Deployment: Netlify

πŸ“š Key Learnings

Recent Development (v1.3.0)

  • Dual Filter State: currentFilter and currentSearch both feed the same filter stage simultaneously without interfering
  • Event-driven rendering: loadUserData() is called on every keystroke β€” no manual loop needed

Recent Development (v1.2.0)

  • Collect β†’ Filter β†’ Display Pipeline: Refactored data loading into three stages β€” non-hidden items are collected into an allItems[] array, filtered against currentFilter using Array.filter(), then rendered to the DOM
  • Module-level State: currentFilter lives outside all functions so both the button listeners and loadUserData() can read and update it

Recent Development (v1.1.0)

  • State Management: Single source of truth using data-edit-mode attribute
  • Event Listener Scope: Importance of defining listeners at component creation level
  • UI State Coordination: Managing visibility of multiple elements based on editing state
  • Database Updates: Using updateDoc() for partial updates with timestamp refresh

JavaScript Mastery

  • Event listeners and DOM manipulation
  • Async/await with Firebase operations
  • Function scope and hoisting
  • Element visibility control
  • Attribute manipulation for state tracking

Firebase Skills

  • Authentication flow (Email/Password + OAuth)
  • Firestore CRUD operations
  • User-specific data organization
  • Soft delete patterns for data recovery

πŸ“‹ Development Roadmap

βœ… Completed (v1.3.0)

  • Real-time search with case-insensitive matching
  • Combined search + category filter working simultaneously
  • Clear search button
  • No results message

βœ… Completed (v1.2.0)

  • Category filter system with dynamic buttons and active state
  • Categories/tags for items

βœ… Completed (v1.1.0)

  • User authentication system
  • Add items functionality
  • Delete items (soft delete)
  • Data persistence
  • Rate limiting & security
  • Edit/Update items with full Save/Cancel workflow
  • Google Sign-In integration
  • Production deployment with HTTPS

πŸ”„ In Progress

  • Input validation for special characters
  • Enhanced mobile UI

πŸ“‹ Planned Features

  • Drag-and-drop reordering
  • Shopping list sharing
  • Quantity tracking
  • Purchase history
  • Offline mode support
  • Progressive Web App (PWA) functionality

πŸ› Known Issues

  • Minor typo in code comments
  • Firestore Security Rules need production hardening
  • Special character validation pending implementation
  • alert modal creates timeout error.
  • blank category can be submitted to list

πŸ’‘ AI Disclosure

This project uses Claude AI as a learning assistant, not as a code generator. My approach:

Method: Code-first development with AI assistance only when stuck on specific problems.

How I Use AI:

  • As a tutor for complex concepts
  • To debug error messages
  • To learn best practices
  • To understand API differences

What's My Own Work:

  • All initial code attempts
  • Project architecture decisions
  • Problem-solving approaches
  • Feature implementation

πŸ™ Acknowledgments

  • Firebase documentation for excellent guides
  • Claude AI for patient tutoring during roadblocks
  • The JavaScript community for invaluable resources

πŸ“§ Contact

Ryan Burns - GitHub


Last Updated: May 2026 | Version: 1.3.0

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors