A web app for selling items and promoting events locally. This is a multi-page React application
- Project Overview
- Build
- Tech Stack
- Development Tools
- Installation & Setup
- Workflow
- Extending the Project
- Testing
- Architecture
- Contribution Guidelines
- Design Decisions
- Known Bugs
This app allows users to:
-
Buy and sell items locally through the Shop page
-
Create and browse community event posts
-
Upload images to listings and posts via Cloudinary
-
save community events to Google Calendar, Apple Calendar, and Outlook
-
Sign up and log in using Firebase Authentication
-
Create listings that are stored in a Firestore database
The project was developed as part of ESOF 423 and demonstrates integration of modern web development tools including React, Firebase, Cloudinary, and component-based UI design
The current deployed version of the application can be accessed here:
https://csci423project1.netlify.app/
The build is automatically deployed through Netlify when updates are pushed to the main GitHub branch.
- Frontend: React with MUI, Tailwind CSS
- Build Tool: Vite
- Routing: React Router v6
- State Management: React Hooks
- Authentication: Firebase Authentication
- Database: Firebase Firestore
- Image Storage: Cloudinary
- Deployment: Netlify
IDE
- IntelliJ IDEA — Primary edidtor
- Visual Studio Code — recommended alternative for development
Frameworks & Libraries
- React — frontend framework
- Material UI (MUI) — component library
- Tailwind CSS — utility-first CSS
- Vite — build tool and dev server
- React Router v6 — client-side routing
- Firebase — authentication and Firestore database
- Cloudinary — image upload and hosting
- MUI X Date Pickers — date selection components
- Day.js — date formatting and manipulation
Utilities
- npm — package manager
- Git — version control
- GitHub — repository hosting and pull request management
- Netlify — hosting and continuous deployment
Make sure the following are installed on your machine before starting:
- Clone the repo:
git clone https://github.com/423S26/project1.git- Navigate to project folder
cd project1- Install dependencies
npm install-
Firebase and Cloudianry are already configured in
src. No additional setup is required for development unless you are creating a new project. -
Run project
npm run dev- Opens at http://localhost:5173 by default
- Default landing page: Home page with nav and points of interest
main— production branch, auto-deploys to Netlify on every push- Feature branches should be named descriptively, e.g.
feat/image-uploadorfix/cors-error
- Create a new branch from
mainfor your feature or fix - Make and test your changes locally
- Push your branch and open a pull request on GitHub
- Request a review from a team member before merging
- Squash and merge into
mainonce approved
- Issues are tracked via GitHub Issues
- Clearly state what the issue is, where it may occur, and the steps taken to fix
- Create a new file in
src/pages/, e.g.src/pages/NewPage.jsx - Add a route in
src/App.jsx:
} />- Add a navigation link in
src/components/nav.jsxusing the existingNavItemcomponent
- Define the collection name as a constant
- Use
collection(db, 'collectionName')with Firebase'saddDoc/getDocsas used inShop.jsxandCommunity.jsx - Request update to Firestore rules in the Firebase Console if needed
- Global MUI theme settings are in
src/components/shared-theme/ - Color primitives (sage, peach, lavender, etc.) are defined in
themePrimitives.jsand can be imported into any component
Small automated tests designed through Playwright and stored in src/Tests
Testing has also been conducted via:
- Manual white-box testing during development
- Local testing using the Vite development server
- Live testing on the deployed Netlify build to verify production behavior
- User testing with a small group of users to validate UI flow and usability
src/
├─ components/ # Reusable UI elements
│ ├─ navItem.jsx # Reusable nav link component
│ ├─ nav.jsx # Top navigation bar
│ ├─ Popup.jsx # Reusable modal/popup component
│ ├─ RequireAuth/ # Restricts actions to authenticated users
│ ├─ sign-in/ # Firebase sign-in form
│ ├─ sign-up/ # Firebase sign-up form with validation
│ └─ shared-theme/ # MUI theme and color primitives
├─ pages/ # Page-level components
│ ├─ Home.jsx
│ ├─ Shop.jsx
│ ├─ Community.jsx
│ ├─ Contact.jsx
│ ├─ Documentation.jsx
│ ├─ SignUp.jsx
│ └─ SignIn.jsx
├─ firebase.js # Firebase configuration and initialization
├─ App.jsx # Root component with routing
├─ index.css # Tailwind imports
└─ index.jsx # Entry point
public/
└─ _redirects # Netlify routing fix for React Router
index.html # Vite HTML entry
vite.config.js # Vite configuration
.env # Local environment variables (not committed to Git)
- Create a new branch for any feature or bug fix
- Follow consistent React component structure
- Test changes locally before committing
- Use descriptive commit messages
- Submit a pull request for review before merging into
main - Do not commit
.envfiles or API keys to the repository
- Vite was chosen for its fast development server and build times over Create React App
- Tailwind CSS was used for fast, utility-first styling
- MUI was used for pre-built accessible components and consistent theming
- Firebase was selected to simplify backend development — it provides authentication and a managed NoSQL database without needing a custom server
- Cloudinary was selected for image storage as a free alternative to Firebase Storage, which requires a paid Blaze plan
- React Router handles all client-side routing; a
_redirectsfile inpublic/ensures Netlify servesindex.htmlfor all routes - NavItem.jsx was created as a reusable component to simplify
nav.jsxand make adding new links easier
- The search bar on the Shop and Community pages is not currently functional. Users can use the Sort By dropdown as a workaround
Developed by:
Sylvia Hutzler and Kaylee Wood
Course:
ESOF 423
Semester:
Spring 2026