Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
54f1c77
Setup backend project
Zobeir-Rigi Jun 19, 2026
26e8f49
nodemon, express installed, get, and post endpoint created
Zobeir-Rigi Jun 23, 2026
f5d7cb9
saving messages with the same structure
Zobeir-Rigi Jun 23, 2026
c7c5214
key , and val are same so allowed to name, message
Zobeir-Rigi Jun 23, 2026
c88dbfd
Implement WebSocket server and broadcast messages to connected clients
Zobeir-Rigi Jun 23, 2026
f245b51
add timestamp
Zobeir-Rigi Jun 23, 2026
cfcaa1f
i also add timestamp to the res, and deleted an unnecessary line
Zobeir-Rigi Jun 24, 2026
389432d
fetching data from backend
Zobeir-Rigi Jun 24, 2026
9072ec2
cors installed and imported
Zobeir-Rigi Jun 24, 2026
f7a111a
fetching data from backend to frontend
Zobeir-Rigi Jun 24, 2026
25014c9
frontend can send message
Zobeir-Rigi Jun 24, 2026
f2aa893
reload messages, and inputs clear
Zobeir-Rigi Jun 24, 2026
e260d79
when key, and value are same u are alowed to do name in js
Zobeir-Rigi Jun 24, 2026
7770879
websocket added to show messages instantly, and broadcasting
Zobeir-Rigi Jun 24, 2026
34c512d
changed tags name, and added a simple css
Zobeir-Rigi Jun 24, 2026
9f87449
added validation
Zobeir-Rigi Jun 24, 2026
d9e903b
added validation
Zobeir-Rigi Jun 24, 2026
28f4ebd
deleted dead code and comments
Zobeir-Rigi Jun 24, 2026
b2ff7a9
deleted comment to be ready to deploy
Zobeir-Rigi Jun 24, 2026
3259f33
Dockerfile added, start added to package, and const Port
Zobeir-Rigi Jun 24, 2026
d285aa0
port updated
Zobeir-Rigi Jun 25, 2026
f87b360
updated urls
Zobeir-Rigi Jun 25, 2026
0bbd61d
updated urls
Zobeir-Rigi Jun 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions chat-app/backend/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node_modules
20 changes: 20 additions & 0 deletions chat-app/backend/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# Use Node
FROM node:18

# Create app folder
WORKDIR /app

# Copy package files
COPY package*.json ./

# Install dependencies
RUN npm install

# Copy all files
COPY . .

# Expose port
EXPOSE 3000

# Start server
CMD ["node", "app.js"]
78 changes: 78 additions & 0 deletions chat-app/backend/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
const WebSocket = require("ws");
const express = require("express");
const cors = require('cors');

const app = express();
app.use(express.json())
app.use(cors());

const allMessages = []

const fetchAllMessages = () => {
return allMessages
}

app.get("/messages", (req, res) => {
const messages = fetchAllMessages()
res.json(messages)
})

const clients = [];

app.post("/message", (req, res) => {
const { message, name } = req.body

if (!message.trim() || !name.trim()) {
return res.status(400).json({
error: "Name and message are required"
})
}
const timestamp = new Date();
console.log(`Received message: ${name} ${message}`);
allMessages.push({
name, message, timestamp
})
console.log(allMessages)

clients.forEach(client => {
client.send(JSON.stringify({
name,
message,
timestamp
}))
})

res.send({
status: "success",
message: message,
name: name,
timestamp: timestamp
})

})

//webSocket

const http = require("http");
const server = http.createServer(app);

const PORT = process.env.PORT || 3000;

server.listen(PORT, () => {
console.log("server is running");
});


const wss = new WebSocket.Server({ server });

wss.on("connection", (ws) => {
console.log("New client connected");
clients.push(ws);

ws.on("close", () => {
console.log("Client disconnected");
const index = clients.indexOf(ws);
clients.splice(index, 1);
});

});
Loading
Loading