Assignment 1: Recipe Sharing Platform (HTML and CSS)
Description:
The Recipe Sharing Platform is a user-friendly website designed to enable users to explore, share, and interact with various recipes. The primary goal is to create a visually appealing and responsive interface to showcase recipes in different categories like Breakfast, Lunch, and Desserts.
Technologies:
HTML: Structure and content of the website.
CSS: Styling and layout customization, including hover effects and responsive design.
Bootstrap: For responsive design and pre-built components like cards, buttons, and navigation bars.
Features:
Interactive Elements: Hover effects on recipe cards.
Grid for Layout: Bootstrap's grid system is used to organize recipe cards and categories effectively.
Challenges and Solutions:
Consistent Image Size:
Challenge: Different recipe images were of varying dimensions, causing layout inconsistencies.
Solution: Implemented CSS properties (object-fit: cover;, fixed width and height) to standardize image dimensions.
Responsive Design:
Challenge: Ensuring proper alignment and spacing on different screen sizes.
Solution: Utilized Bootstrap's grid system and tested the design on various device emulators.
Navigation Bar:
Challenge: Making the navbar functional on smaller screens.
Solution: Added a Bootstrap collapsible navbar for mobile responsiveness.
Reflection of Learing:
How to utilize Bootstrap for responsive web design effectively.
How to create consistent card layouts with interactive features.
Enhanced understanding of combining CSS and Bootstrap for styling challenges.
Assignment 2: Interactive To-Do List (JavaScript)
Description:
A fully interactive to-do list application that empowers users to efficiently manage their tasks. Users can perform essential CRUD operations (Create, Read, Update, Delete), mark tasks as complete, and sort or filter tasks for better organization.
Technologies:
HTML: Basic structure of the application.
CSS: Styling for an intuitive user interface.
JavaScript: Logic and interactivity, including DOM manipulation, event handling, and local storage.
Features:
Add Tasks: Users can add new tasks by entering text and clicking a button.
Edit Tasks: Users can modify existing tasks.
Delete Tasks: Users can remove tasks from the list.
Mark Complete: Users can mark tasks as done, visually differentiating them.
Challenges and Solutions:
Dynamic Task Updates:
Challenge: Handling DOM updates efficiently when adding, editing, or deleting tasks.
Solution: Used event delegation and isolated DOM manipulations for better performance.
Local Storage Integration:
Challenge: Persisting task data across browser sessions.
Solution: Leveraged localStorage to save and retrieve tasks as JSON strings.
User-Friendly UI:
Challenge: Making the app visually appealing and intuitive for users.
Solution: Enhanced UI with CSS styles and clear visual cues for task status.
Reflection of Learing:
Mastered JavaScript DOM manipulation techniques.
Used addEventListener for real-time event handling.
Learned to serialize and deserialize data for local storage using JSON.stringify and JSON.parse.
Implemented modular functions for reusability and readability.
Assignment 3: Node.js & Express (RESTful API)
Description:
This project is a back-end RESTful API designed to manage notes or blog posts. The API supports creating, reading, updating, and deleting (CRUD) operations for notes while incorporating basic middleware for validation. The goal is to create a simple, user-friendly interface for managing notes without relying on unique identifiers, using titles instead.
Technologies:
Node.js: Server-side JavaScript runtime.
Express.js: Lightweight framework for building RESTful APIs.
MongoDB with Mongoose: Database for storing notes.
Dotenv: Manage environment variables securely.
Features:
Create: Add a new note using the POST /api/notes.
Read: Retrieve all notes or a specific note by title using GET /api/notes and GET /api/notes/:title.
Update: Modify the content of a note by title using POST /api/notes/:title/edit.
Delete: Remove a note by title using DELETE /api/notes/:title.
Custom middleware ensures both title and content are provided when creating or updating notes.
Challenges and Solutions:
Dynamic Note Updates:
Challenge: Efficiently handling the DOM updates when adding, editing, or deleting notes.
Solution: Used direct manipulation of the DOM with methods like innerHTML for rendering notes, and event delegation for handling dynamic updates on buttons (edit, delete).
Data Persistence:
Challenge: Persisting note data across application restarts and ensuring data remains available between sessions.
Solution: Used MongoDB as the database to persist notes and ensure they are retained even after server restarts. For local testing or quick changes, localStorage could be used for front-end persistence, but for this backend-only setup, the database is the primary storage.
Reflection of Learing:
Middleware Design: Learned to create reusable and modular middleware for validation and authorization.
RESTful Routing: Improved understanding of designing clean, resource-oriented routes.
Error Handling: Developed strategies to manage errors effectively using proper status codes and messages.
MongoDB: Gained insights into managing documents in MongoDB and using Mongoose methods like findOneAndUpdate and findOneAndDelete.
Assignment 4: React – Interactive Front-End Application
The Dog Search App is an interactive, single-page React application that allows users to explore different dog breeds and their characteristics. The app fetches data from a third-party API (Dog API) and dynamically displays information about the breeds, including images, names, and attributes like age and descriptions. Users can select a breed from a dropdown menu, and the app presents a grid of visually appealing dog images with essential details for each dog.
React: The app is built using React for its component-based architecture and state management.
CSS: Styling is done using modern CSS techniques, including flexbox and grid layouts, to create a responsive and visually appealing design.
Third-party API: The Dog API (https://dog.ceo/dog-api/) is used to fetch breed information and dog images dynamically.
State Management with React Hooks:
useState is used to manage the selected breed, fetched images, random dog details, loading state, and errors.
useEffect is utilized for API calls to fetch data when the app loads and when the user selects a breed.
Dynamic Rendering Based on User Input:
Users can select a dog breed from a dropdown menu, and the app fetches and displays corresponding images and details.
Dog details like names, ages, and descriptions are dynamically generated for a personalized touch.
Responsive Grid Layout:
The app displays dog images in a uniform grid layout, ensuring all images have the same size for consistency.
The design includes interactive hover effects and light blue glowing borders around the images.
Interactive User Interface:
The app is styled with a pitch-black background, vibrant yellow title text, and glowing elements for an engaging dark-themed aesthetic.
1. State Management:
Managing multiple states, such as the selected breed, dog images, loading state, and errors, required careful organization.
Solution:
React’s useState hook allowed efficient state handling, while useEffect ensured proper synchronization between state updates and API calls.
2. Asynchronous API Calls:
Fetching data from the Dog API asynchronously and ensuring error handling was a challenge.
Solution:
Using async/await streamlined API calls, and wrapping them in a try/catch block handled potential errors gracefully. Loading indicators and error messages ensured a smooth user experience.
3. Responsive and Consistent Design:
Maintaining consistent image sizes and responsive layouts was challenging due to varied image dimensions.
Solution:
CSS properties like object-fit: cover and fixed height/width ensured all images were uniformly displayed. Flexbox and grid layouts made the app responsive.
React Hooks: Working with useState and useEffect deepened my understanding of React’s state management and lifecycle. These hooks enabled me to build an interactive app that dynamically updated based on user input.
API Integration: Integrating the Dog API and handling asynchronous data fetching taught me to work effectively with APIs. Managing dynamic state updates based on fetched data improved my skills in handling real-time updates in web apps.
UI/UX Design: Designing a dark-themed UI with CSS, ensuring uniformity in image layouts, and incorporating interactive glowing effects helped me learn more about creating visually engaging and user-friendly applications.
Problem-Solving: Tackling challenges like responsive design, dynamic rendering, and error handling enhanced my problem-solving skills and reinforced the importance of planning and debugging in development.
Assignment 5: React MERN Application
For my Full-Stack MERN Application, I built an Expense Tracker app that integrates both the front-end and back-end using the MERN stack (MongoDB, Express, React, Node.js).
MongoDB for storing expense data
Express.js for building the API
React for the user interface
Node.js for the back-end server
User Authentication: I used JWT for secure user login and registration.
CRUD Operations: Users can add, view, edit, and delete expenses.
Basic Styling: The app is styled using Material-UI and custom CSS for a clean, responsive design.
State Management: Used React’s useState and useEffect to manage and update the expense data dynamically.
API Integration: Integrated React with the back-end using axios for API calls, handling CRUD operations.
Authentication: Implemented secure JWT-based authentication to protect user data and routes.
This project helped me improve my full-stack skills by handling front-to-back integration, state management with React, and working with MongoDB for data storage.
This app demonstrates my ability to build a complete MERN stack application with user authentication and real-time data updates.