Summer Training Report
Summer Training Report
Summer Training Report
SUMMER TRAINING
GeeksforGeeks
A Project Report
Submitted to
PHAGWARA, PUNJAB
SUBMITTED BY
I, Adarsh Shivam, 12115538, hereby declare that the work done by me on “Full Stack
Development” from May,2023 to July,2023, is a record of original work for the partial
fulfillment of the requirements for the award of the degree, B.Tech CSE.
Dated: 28/07/2023
ACKNOWLEDGEMENT
" !
! !!#!!
+$446&&(44)6..9&1/2.(5('5+(&1634(106.. 5$&-(7(.12/(05
8,5+($&51'( ,7(1)'63$5,108((-4
160'(3((-4)13((-4
+5524/(',$*((-4)13*((-413*&1634(4&(35,),&$5(4&) %%$((& % $&% '&% '2')
List Of Contents:
A software application's "stack" is the collection of technologies, tools, and languages that
were employed in its development. An expert in all of this stack's layers, which often include
the following:
Front-End development: The user interface (UI) and other visually appealing elements of
the application are created. HTML, CSS, and JavaScript are among the technologies used in
front-end development. Front end developers concentrate on making responsive, user-friendly
designs and guaranteeing a seamless user experience.
Back-End Development: The server-side of the program is included in the back end. It
involves managing data, dealing with requests, and managing servers. Back-end developers
use frameworks like Django, Ruby on Rails, Spring, or Express.js as well as server-side
languages like Python, Ruby, Java, and Node.js. To store and retrieve data, they also
communicate with databases.
Storage and databases: Full stack engineers are knowledgeable on a variety of database
formats, including relational databases (like MySQL and PostgreSQL) and NoSQL databases
(like MongoDB). They control data storage and retrieval, making sure that information is
effectively arranged and managed.
Version Control and Collaboration: To successfully manage their codebase and work
collaboratively with other developers, full stack developers frequently utilize version control
tools like Git. This makes it easier to keep track of changes, handle code conflicts, and keep a
codebase stable and well-structured.
Security and performance: To protect the application from flaws and assaults, full stack
developers must be aware of security best practices. In order to make the program work
smoothly and effectively, they also optimize its performance.
Since a single developer may perform a variety of duties, full stack development is ideal for
small teams or projects with limited resources. However, due to the rapid evolution of the
technology landscape, mastering both front-end and back-end technologies calls for a broad
skill set and ongoing learning.
User Interface Design: To transform design thoughts into the real look and feel of the
program, front-end developers work with UI designers. This covers how things are put
together, the colors you choose, the typeface, and other aesthetic factors.
JavaScript and React.js: Facebook created the React.js library, which enables programmers
to create reusable UI components. Complex applications may be handled and kept up to date
more easily thanks to these components, which encompass both the UI and its behavior. The
Virtual DOM is a new idea introduced by React that optimizes updates and improves
performance.
Server Communication: To fetch and send data, React apps frequently interact with back-
end services. The built-in Fetch API and other APIs and frameworks, such as Axios, can be
used for this.
In conclusion, designing dynamic, interactive, and aesthetically pleasing user interfaces for
online apps is the main focus of front-end development, including React.js. React is a strong
and well-known tool in the front-end development environment due to its component-based
approach, emphasis on reusability, and concentration on quick updates.
Server configuration:
• Install Node.js: Node.js comes with the Node Package Manager (npm) for managing
dependencies. Download and install Node.js.
• Initialization of the project: To generate a package.json file, create a project folder and
configure your project using npm init.
Web Frameworks:
• Express.js: A popular Node.js online application framework, Express makes routing,
middleware administration, and request handling easier.
Integration of a database:
• Decide on a database: Depending on the requirements of your application, choose a
database like MySQL, PostgreSQL, MongoDB, or another one.
• Database connectivity: To create connections and carry out CRUD tasks, use database
drivers and libraries.
Middleware:
• Use middleware to carry out responsibilities like request validation, authentication,
and logging.
• Create bespoke middleware to satisfy particular application requirements.
Capabilities in real-time:
• Implement real-time communication utilizing tools like WebSockets, which are
frequently made possible by frameworks like Socket.io.
You may create dependable, scalable, and high-performance server-side apps using Node.js
backend development. Because of its broad package ecosystem and asynchronous nature,
Node.js is a flexible option for developing a variety of backend solutions.
• Databases: Databases are structured collections of data that are arranged to make it
easier to store, retrieve, edit, and delete data.
MongoDB:
• Type: MongoDB is a NoSQL database, therefore it doesn't depend on the
conventional relational schema with tables. Instead, an adaptable document-based
data model is utilized.
• Key characteristics:
o Schema Flexibility: It is excellent for agile development since developers
can change document structures without affecting existing data.
o Scalability: MongoDB has a high data handling capacity and supports
horizontal scaling across several servers or nodes.
o MongoDB's query language offers indexing for quick data retrieval and
supports complicated queries.
o MongoDB's geospatial indexing and querying capabilities make it suited
for location-based applications.
o Aggregation Framework: Offers strong data transformation and
aggregation skills.
Integration in Full Stack Development:
• Back End:
o The MongoDB database server is installed, and the right drivers and modules
(like Mongoose for Node.js) are used by backend developers to communicate
with the database.
o Through APIs, they establish data models, produce collections, and manage
CRUD (Create, Read, Update, Delete) operations.
• Front End:
o Through API calls to the back end, front-end developers can indirectly interact
with MongoDB.
o They transfer user inputs back to the back end for processing and storage
while displaying data taken from MongoDB in the user interface.
Data Flow:
• Reading Data:
o Through API calls, the front end asks the back end for data.
o The request is processed by the back end, which then uses the appropriate
driver or library to access the MongoDB database and returns the requested
data to the front end.
• Writing Data:
o Through API calls, the front end transmits data to the back end.
o The data is verified, processed, and stored in document form in MongoDB on
the back end.
• Performance Optimization:
o The efficiency of data retrieval from MongoDB can be enhanced by properly
indexing frequently searched fields.
o To improve the performance of an application, backend developers utilize caching
techniques and optimize queries.
In conclusion, MongoDB is a flexible NoSQL data store that works well with full stack
development. It is ideal for a wide range of applications, from small-scale projects to big,
data-intensive systems, thanks to its document-oriented structure, flexibility, and scalability.
CSS (Cascading Style Sheets): CSS is used to style and format the HTML content. Front-
end developers use CSS to control the visual appearance of elements, including fonts, colors,
spacing, layout, and responsive design for different screen sizes.
Responsive Design: Front-end developers ensure that websites and applications are
accessible and usable across various devices and screen sizes. This involves using CSS media
queries and flexible layouts to adapt the content to different resolutions and orientations.
Version Control and Collaboration: Front-end developers often use version control systems
like Git to collaborate with other developers and track changes in the codebase. This helps
manage code contributions and maintain a history of code revisions.
Web Performance and Accessibility: Ensuring that web applications are accessible to all
users, including those with disabilities, is a critical aspect of front-end development. This
involves adhering to web accessibility standards (like WCAG) and using practices that make
the application usable by everyone.
In summary, front-end development involves creating the visual and interactive components
of a website or web application to provide users with an engaging and user-friendly
experience. It requires proficiency in HTML, CSS, JavaScript, as well as a good
understanding of design principles, user experience, and web performance optimization.
Headings: HTML provides six levels of headings, from <h1> (highest importance) to <h6>
(lowest importance):
<h1>Main Heading</h1>
<h2>Subheading</h2>
<!-- ... -->
<h6>Minor Heading</h6>
Lists: HTML supports both unordered (bulleted) and ordered (numbered) lists:
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
<ol>
<li>First</li>
<li>Second</li>
</ol>
Divs and Spans: These are generic containers for grouping and styling content:
<div class="container">
<!-- content goes here -->
</div>
<p>This is <span class="highlight">highlighted</span> text.</p>
Semantic Elements: HTML5 introduced semantic elements for better page structure:
<header>
<nav>
<!-- navigation links -->
</nav>
</header>
<article>
<!-- main content of an article -->
</article>
<footer>
<!-- footer content -->
</footer>
Selectors and Rules: CSS uses selectors to target HTML elements and apply styles to them.
A rule consists of a selector followed by a set of declarations enclosed in curly braces. Each
declaration consists of a property and a value.
Inline, Internal, and External CSS: CSS can be applied in various ways. Inline CSS is
added directly to an HTML element using the style attribute. Internal CSS is placed within a
<style> element in the <head> section of an HTML document. External CSS is stored in
separate .css files and linked to HTML documents using the <link> element.
Styling Properties: CSS offers a wide range of properties to control the appearance of
elements, including:
• Color: Changing text and background colors.
• Typography: Setting fonts, font sizes, and text alignment.
• Margins and Padding: Controlling spacing around elements.
• Borders: Adding borders around elements.
• Backgrounds: Defining background colors or images.
• Positioning: Controlling element placement on the page.
• Layout: Creating responsive layouts with flexible boxes (Flexbox) and grid systems
(CSS Grid).
• Transitions and Animations: Adding motion and effects to elements.
Class and ID Selectors: You can apply styles to specific elements using class and ID
selectors. Classes are denoted with a dot (.) and can be used on multiple elements, while IDs
are denoted with a hash (#) and should be unique on a page.
Media Queries: Media queries allow you to apply different styles based on the device's
screen size or other characteristics. This is crucial for creating responsive designs that adapt
to various devices.
Pseudo-classes and Pseudo-elements: Pseudo-classes are used to define styles for specific
states of an element, such as when it's hovered over or clicked. Pseudo-elements are used to
style parts of an element, such as the first line or first letter.
HISTORY OF JAVASCRIPT:
1995: JavaScript is introduced by Brendan Eich at Netscape Communications. Originally
called "Mocha," then "LiveScript," and finally "JavaScript," it adds interactivity to web
pages.
Early 2000s: The rise of AJAX (Asynchronous JavaScript and XML) enables more dynamic
web applications by allowing data exchange without page reloads.
Mid-2000s: JavaScript libraries like jQuery gain popularity, simplifying DOM manipulation.
2009: Node.js is introduced, enabling server-side JavaScript development and revolutionizing
backend programming.
2015: ECMAScript 2015 (ES6) is released, bringing major language enhancements like
arrow functions, classes, and modules.
Present: JavaScript is the cornerstone of web development, with numerous libraries and
frameworks (e.g., React, Angular, Vue.js) simplifying complex application building.
Future: JavaScript remains integral to the web, with ongoing efforts to improve
performance, security, and developer experience. WebAssembly expands possibilities by
enabling languages beyond JavaScript for web applications.
BASIC SYNTAX :
IDENTIFIERS:
General rules for constructing identifiers(case-sensitive) are:
● Names can contain letters, digits, underscores, and dollar signs.
● Names must begin with a letter but can also begin with $ and _.
COMMENTS :
JS comments can be used to explain JavaScript code, and to make it more readable. JS
comments can also be used to prevent execution, when testing alternative code. There are
two types:
1. Single Line Comments: It start with //. Any text between // and the end of the line
will be ignored by JS (will not be executed). Example:
// no value (undefined)
var carName;
2. Multi-line Comments: It start with /* and end with */. Any text between /* and */
will be ignored by JS. This example uses a multi-line comment (a comment block)
to explain the code. Example:
/* A variable declared without a value will have the value undefined. */
DATA TYPES :
JavaScript variables can hold different data types: numbers, strings, objects and more. In
programming, data types is an important concept. To be able to operate on variables, it is
important to know something about the type. JavaScript has dynamic types. This means
that the same variable can be used to hold different data types.
● Strings: A string (or a text string) is a series of characters like "John Doe". Strings
are written with quotes. You can use single or double quotes. Example:
var carName1 = "Volvo XC60"; // Using double quotes
var carName2 = 'Volvo XC60'; // Using single quotes
var answer3 = 'He is called "Johnny"'; // Double quotes inside single quotes
● Numbers: JS has only one type of numbers. Numbers can be written with, or
without decimals. Example:
● Arrays: JS arrays are written with square brackets []. Array items are separated by
commas. The following code declares (creates) an array called cars, containing
three items (car names). Example:
var cars = ["Saab", "Volvo", "BMW"];
● Objects: JavaScript objects are written with curly braces {}. Object properties are
written as name:value pairs, separated by commas. Example:
var person = {firstName:"Adarsh", lastName:"Shivam", age:20,
eyeColor:"black"};
OPERATORS :
JavaScript provides a variety of operators that allow you to perform operations on data.
Here's an overview of the different types of operators in JavaScript:
• Arithmetic Operators:
Arithmetic operators perform mathematical calculations.
o let addition = 5 + 3; // Addition
o let subtraction = 10 - 4; // Subtraction
o let multiplication = 6 * 2; // Multiplication
o let division = 15 / 3; // Division
o let remainder = 17 % 5; // Modulus (remainder of division)
• Assignment Operators:
Assignment operators are used to assign values to variables.
let x = 10; // Assigns the value 10 to variable x
o x += 5; // Adds 5 to x: x = x + 5
o x -= 3; // Subtracts 3 from x: x = x - 3
o x *= 2; // Multiplies x by 2: x = x * 2
o x /= 4; // Divides x by 4: x = x / 4
• Comparison Operators:
Comparison operators are used to compare values and return boolean results.
o let isEqual = 5 === 5; // Equality (strict)
o let notEqual = 5 !== 8; // Inequality (strict)
o let greaterThan = 10 > 7; // Greater than
• Logical Operators:
Logical operators perform logical operations on boolean values
o let logicalAnd = true && false; // Logical AND
o let logicalOr = true || false; // Logical OR
o let logicalNot = !true; // Logical NOT
• Unary Operators:
Unary operators work with a single operand.
o let increment = 5;
o increment++; // Increment by 1
o let decrement = 8;
o decrement--; // Decrement by 1
o let negative = -10; // Negation
• Conditional (Ternary) Operator:
The ternary operator is a concise way to write conditional expressions.
o let (age >= 18) ? "Adult" : "Minor";
if (condition1) {
// block of code to be executed if condition1 is true
} else if (condition2) {
// block of code to be executed if the condition1 is false and
condition2 is true
} else {
// block of code to be executed if the condition1 is false and
condition2 is false
}
SWITCH STATEMENT :
The switch statement in JavaScript is a control structure that allows you to evaluate an
expression against multiple possible cases and execute different blocks of code based
on the matched case. Here's how the switch statement works:
EXAMPLE:-
switch (new Date().getDay()) {
case 0:
day = "Sunday"; break;
case 1:
day = "Monday"; break;
case 2:
day = "Tuesday"; break;
case 3:
day = "Wednesday"; break;
case 4:
day = "Thursday"; break;
case 5:
day = "Friday"; break;
case 6:
day = "Saturday";
}
LOOPS:
JS loops can execute a block of code a number of times. Kinds:
● for - loops through a block of code a number of times.
● for/in - loops through the properties of an object. (Will be covered in objects topic)
● for/of - loops through the values of an iterable object. It lets you loop over Arrays,
Strings, Maps, NodeLists, and more. (Will be covered in arrays topic)
● do/while - will execute the code block once, before checking if the condition is true,
then it will repeat the loop as long as the condition is true.
● FOR LOOP :
A for loop in JavaScript is a control structure that allows you to execute a block of
code repeatedly for a specific number of iterations. It consists of three parts:
initialization, condition, and iteration, all defined within the loop's parentheses.
Here's a brief description of the for loop's components and how it works:
for (initialization; condition; iteration) {
// Code to be executed in each iteration
}
1.Initialization: This part is executed before the loop starts. It typically involves
declaring and initializing a loop control variable.
2.Condition: The condition is evaluated before each iteration. If the condition
evaluates to true, the loop continues; otherwise, it terminates.
3.Iteration: The iteration part is executed after each iteration. It's usually used to
modify the loop control variable in preparation for the next iteration.
• WHILE LOOP :
A while loop in JavaScript is a control structure that repeatedly executes a block of
code as long as a specified condition evaluates to true. The loop continues to execute
as long as the condition remains true.
Here's a brief description of how the while loop works:
while (condition) {
// Code to be executed as long as the condition is true
}
1.Condition: The condition is evaluated before each iteration. If the condition
evaluates to true, the loop body is executed. If the condition evaluates to false, the
loop terminates, and the program continues with the code following the loop.
• DO-WHILE LOOP:
A do-while loop in JavaScript is a control structure that is similar to the while loop,
but it guarantees that the loop's code block is executed at least once, regardless of
whether the specified condition is true or false. After the initial execution, the loop
continues as long as the condition evaluates to true.
Here's a brief description of how the do-while loop works:
do {
// Code to be executed at least once
} while (condition);
1.Code Block: The code block inside the do section is executed first, regardless of the
condition.
2.Condition: After executing the code block, the condition in the while section is
evaluated. If the condition is true, the loop will execute the code block again. If the
condition is false, the loop terminates.
FUNCTIONS :
• Function Definition:
At its essence, a function is a self-contained unit of code designed to execute a
specific task. By encapsulating functionality, functions promote code organization and
contribute to the creation of modular applications.
EXAMPLE:-
function greet(name) {
console.log("Hello, " + name + "!");
}
greet("Alice"); // Outputs: Hello, Alice!
• Return Statement:
The return statement within a function marks the point at which the function
concludes and sends a value back to the caller. This allows functions to be both data
processors and providers.
EXAMPLE:-
function add(x, y) {
return x + y;
}
let sum = add(3, 5); // sum is 8
• Function Expressions:
Function expressions involve defining functions within variables, fostering a flexible
approach to coding. Anonymous functions—functions without explicit names—are
commonly employed in this context.
EXAMPLE:-
const multiply = function(a, b) {
return a * b;
};
let result = multiply(3, 5); // result is 15
• Arrow Functions (ES6):
Arrow functions, introduced in ECMAScript 2015 (ES6), provide a succinct syntax
for writing functions. These concise expressions are particularly valuable for short,
one-line operations.
EXAMPLE:-
const add = (x, y) => x + y;
METHODS:
• Method Definition:
Methods are functions intrinsically linked to objects. They allow objects to
encapsulate behavior, offering a means to interact with and manipulate their
associated data.
• Invoking Methods:
Methods are accessed via the dot notation, which enables the invocation of a specific
method associated with an object. Arguments can be passed within the parentheses.
• Introduction:
Arrays are fundamental data structures in JavaScript that allow developers to store
and manipulate collections of values. They are versatile and play a crucial role in
managing data in web applications. Sorting is a common operation applied to
arrays to organize their elements in a particular order. In this article, we will
explore arrays, their creation, manipulation, and the process of sorting arrays in
JavaScript.
• Array Creation:
Arrays are created using square brackets [], and they can hold various types of
data, including numbers, strings, objects, and even other arrays.
EXAMPLE:-
let numbers = [1, 2, 3, 4, 5];
let names = ["Alice", "Bob", "Charlie"];
• Modifying Arrays:
Arrays are mutable, meaning you can change their elements, add new elements, or
remove existing ones.
EXAMPLE:-
let colors = ["red", "green", "blue"];
colors[1] = "yellow"; // Modifying an element
colors.push("purple"); // Adding an element to the end
colors.pop(); // Removing the last element
SORTING:
• Sorting Arrays:
Sorting arrays rearranges their elements in a specified order, commonly in
ascending or descending order. JavaScript provides built-in methods for sorting
arrays.
EXAMPLE:-
let numbers = [4, 2, 8, 5, 1];
numbers.sort(); // [1, 2, 4, 5, 8] (ascending order)
• Custom Sorting:
For complex sorting requirements, JavaScript allows you to define custom
comparison functions.
EXAMPLE:-
let students = [
{ name: "Alice", score: 85 },
{ name: "Bob", score: 70 },
{ name: "Charlie", score: 92 }
];
students.sort((a, b) => a.score - b.score); // Sorting by score
• Sorting Algorithms:
JavaScript's sorting methods implement underlying sorting algorithms, such as
quicksort, to efficiently arrange array elements.
Databases:
Databases are organized collections of structured data that are designed to facilitate data
storage, retrieval, modification, and deletion. In backend development, databases serve as a
central repository for application data, ensuring data integrity and enabling efficient data
management. There are various types of databases, including relational, NoSQL, and
NewSQL databases:
1. Relational Databases: Relational databases use structured tables with rows and
columns to store data. They ensure data consistency and integrity through predefined
relationships and constraints. Examples of relational databases are MySQL,
PostgreSQL, and Microsoft SQL Server.
2. NoSQL Databases: NoSQL databases offer a more flexible approach to data storage,
allowing for various data models like key-value, document, column-family, and
graph. They are particularly suitable for applications that require scalability and
dynamic data structures. Examples include MongoDB, Cassandra, and Redis.
1. File Systems: File systems are often used for storing user-uploaded files like images,
documents, and videos. In some cases, direct filesystem storage might be sufficient
for smaller-scale applications.
2. Content Delivery Networks (CDNs): CDNs are networks of distributed servers that
cache and deliver content (like images and videos) closer to the user, improving load
times and reducing the load on the main server.
3. Cloud Storage Services: Cloud storage services like Amazon S3, Google Cloud
Storage, and Microsoft Azure Blob Storage offer scalable and reliable storage
solutions. They're particularly useful for applications that require large-scale data
storage.
4. Database Storage: Databases store structured data, and in some cases, they can also
store binary data such as images and files. While not optimal for large files, databases
can be used to manage smaller binary data.
5. Session and Cache Storage: Backend applications often use in-memory storage for
caching frequently accessed data or storing session-related information to improve
performance and user experience.
6. Data Encryption and Security: Storing sensitive user data requires careful
consideration of encryption and security measures to protect against unauthorized
access and data breaches.
7. Backup and Disaster Recovery: Implementing backup strategies and disaster
recovery plans ensures that valuable data is preserved in case of hardware failures,
data corruption, or other unforeseen events.
In summary, databases and storage are fundamental components of backend development that
allow applications to manage, retrieve, and persist data efficiently. The choice of the right
database type and storage solution depends on the application's requirements, scalability
needs, and the type of data being handled. Properly managed databases and storage solutions
contribute to the overall performance, security, and user experience of web applications.
3.5: MamgoDB:
MongoDB is a popular open-source NoSQL database that is designed to handle unstructured
or semi-structured data. It stores data in a flexible JSON-like format called BSON (Binary
JSON), allowing developers to work with data that can evolve over time. MongoDB is
particularly well-suited for applications that require scalability, high performance, and the
ability to handle large amounts of data. Here's a detailed description of MongoDB with an
example:
2. Schema Flexibility: MongoDB's dynamic schema allows you to add or modify fields
in documents without the need for a predefined schema.
4. Query Language: MongoDB supports a powerful query language that allows you to
retrieve and manipulate data using various criteria.
5. Indexing: Indexes can be created to improve the speed of data retrieval and querying.
6. Aggregation Framework: MongoDB provides a robust aggregation framework for
performing complex data manipulations and transformations.
Example Usage:
Let's walk through a simple example of using MongoDB for a backend application. Suppose
you're building a blogging platform where users can create posts and comment on them.
1. Setting Up MongoDB: First, you need to install MongoDB and start the database
server. You can then interact with the MongoDB database using its native shell or a
graphical interface like MongoDB Compass.
3. Inserting Documents: Insert a sample post and comments into their respective
collections.
// Connect to MongoDB
const MongoClient = require('mongodb').MongoClient;
const uri = "mongodb://localhost:27017/myblog";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology:
true });
client.connect(err => {
if (err) throw err;
const db = client.db("myblog");
// Insert a post
const post = {
title: "Introduction to MongoDB",
content: "MongoDB is a NoSQL database",
author: "Adarsh Shivam"
};
db.collection("posts").insertOne(post, (err, res) => {
if (err) throw err;
console.log("Post inserted:", res.insertedId);
});
// Insert comments for the post
const comments = [
{ text: "Great article!", author: "Pratham" },
{ text: "Thanks for sharing!", author: "Thakur" }
];
db.collection("comments").insertMany(comments, (err, res) => {
if (err) throw err;
console.log("Comments inserted:", res.insertedCount);
client.close();
});
});
4. Querying Documents: Retrieve the post along with its comments using queries.
Feature:
Pay your Bills: You can pay your by filling up the form that includes name , address, mobile
number and amount details.
Consumption History: You can also check your consumption like how much electricity you
have consumpted in a month or in a year.
Nearest Service: You can also contact your nearest possible electric office of any queries and
for more information.
New Connection: You can also get new connection by applying online and feeling the form.
Technologies:
• HTML
• CSS
• JavaScript Framework
CHAPTER 7: REFERENCES
Websites and Documentation:
1. W3Schools - Offers comprehensive tutorials and references for web development
technologies.
2. Stack Overflow - A popular community for asking and answering programming-
related questions.
Online Communities:
1. Reddit's r/webdev - A subreddit dedicated to web development discussions,
questions, and resources.
2. Dev.to - A platform where developers share their insights, tutorials, and experiences.
3. GitHub - A place to discover and contribute to open-source projects related to full-
stack development.
4. GFG: Full Stack web development using React js and node js(Live).
THANK YOU:)