From 6490fab6e6ba5dc16758a258dc432c9c78e7f6ad Mon Sep 17 00:00:00 2001 From: LaxmiB Date: Mon, 5 Jan 2026 15:49:34 +0530 Subject: [PATCH] Add core project files --- .env | 2 + .gitattributes | 9 + .gitignore | Bin 0 -> 101 bytes ...814374-Goal Setting_Swapnil Dahiphale.docx | Bin 0 -> 36003 bytes contacts.json | 3 + gallery-media/1755343085623-cert1.jpg | 3 + gallery-media/1755343137920-cert2.jpg | 3 + gallery-media/1755343165376-cert3.jpg | 3 + gallery-media/1755343199753-cert4.jpg | 3 + ...tsApp Image 2025-08-09 at 12.17.33 PM.jpeg | 3 + ...atsApp Image 2023-09-27 at 5.04.05 PM.jpeg | 3 + ...uccessfully completed and commissioned.png | 3 + ...30-1765627312122-Government Of Goa (1).jpg | 3 + ...atsApp Image 2025-12-16 at 5.24.07 PM.jpeg | 3 + gallery.json | 3 + jobs.json | 3 + package-lock.json | 3 + package.json | 3 + projects.json | 3 + routes/contactRoutes.js | 8 + server.js | 743 ++++++++++++++++++ ...p Image 2025-08-12 at 12.53.21 PM (1).jpeg | 3 + ...4-186cb905-d126-4fec-8868-ea6e5da71581.jpg | 3 + ...7-b3025d0b-ef97-4d6a-9270-4db7c022b1b1.jpg | 3 + ...1-c9304466-d3b4-4497-8340-1a4ec4e6994a.jpg | 3 + ...4-e811b15b-9d53-4c92-b2b0-280c724bec3b.jpg | 3 + ...0-2a9cc942-939e-4b2a-8ed8-6fdb99cbe919.jpg | 3 + ...5-0e10027f-7b22-46c3-82d0-fd25ed88cd37.jpg | 3 + ...tsApp Image 2025-08-12 at 12.53.21 PM.jpeg | 3 + ...p Image 2025-08-12 at 12.53.21 PM (1).jpeg | 3 + ...p Image 2025-08-12 at 12.53.15 PM (1).jpeg | 3 + ...tsApp Image 2025-08-12 at 12.53.15 PM.jpeg | 3 + ...tsApp Image 2025-08-12 at 12.53.16 PM.jpeg | 3 + ...p Image 2025-08-12 at 12.53.18 PM (1).jpeg | 3 + ...p Image 2025-08-09 at 12.30.50 PM (1).jpeg | 3 + ...service_res_p4PJo.5e769222e35913528376.jpg | 3 + ...28-Sewage-WT1.c1c508759572132379bf (1).jpg | 3 + ...589273-Jack-wells.ae632a5749ccfb960389.jpg | 3 + ...treatment-plants-.e452887dc76a9c77aa01.jpg | 3 + ...atment_plan_QDiP2.e7a8e82ec7e3a4e3c148.jpg | 3 + ...tsApp Image 2025-08-09 at 12.30.48 PM.jpeg | 3 + ...atsApp Image 2025-08-18 at 3.25.18 PM.jpeg | 3 + ...atsApp Image 2025-08-18 at 3.25.17 PM.jpeg | 3 + ...pp Image 2025-08-18 at 3.25.17 PM (1).jpeg | 3 + ...atsApp Image 2025-08-18 at 3.25.13 PM.jpeg | 3 + ...atsApp Image 2025-08-18 at 2.24.17 PM.jpeg | 3 + uploads/1755670485689-Picture1.jpg | 3 + uploads/1755670494409-Picture2.png | 3 + uploads/1755670504954-Picture3.jpg | 3 + uploads/1755673960238-Picture4.png | 3 + uploads/1755673968590-Picture5.png | 3 + uploads/1755673977434-Picture6.png | 3 + uploads/1755674126708-image (2).jpg | 3 + ...3-04da8a50-98a3-4516-86de-e8f8f46594b8.jpg | 3 + ...tsApp Image 2025-09-18 at 12.33.26 PM.jpeg | 3 + ...tsApp Image 2025-11-05 at 12.48.03 PM.jpeg | 3 + .../1762603614967-New-chhindwara-image.png | 3 + .../1762603765339-new1-chhindwara-image.png | 3 + .../1762750708567-final-chhindwara-image.png | 3 + ...emini_Generated_Image_l7v50ml7v50ml7v5.png | 3 + ...emini_Generated_Image_l7v50ml7v50ml7v5.png | 3 + ...atsApp Image 2025-11-10 at 3.18.34 PM.jpeg | 3 + ...atsApp Image 2025-11-10 at 3.18.33 PM.jpeg | 3 + uploads/1765176502539-Screenshot (363).png | 3 + uploads/1765178845236-47894 -UTR.jpeg | 3 + ...tsApp Image 2025-12-10 at 10.17.44 AM.jpeg | 3 + uploads/1766058099192-Photo 40.jpeg | 3 + uploads/1766058106951-Photo 39.jpeg | 3 + uploads/1766058118709-Photo 28.jpeg | 3 + ...atsApp Image 2025-12-17 at 1.16.29 PM.jpeg | 3 + ...tsApp Image 2025-12-17 at 11.14.20 AM.jpeg | 3 + ...atsApp Image 2025-12-17 at 1.20.15 PM.jpeg | 3 + ...atsApp Image 2025-12-17 at 1.16.24 PM.jpeg | 3 + ...atsApp Image 2025-12-17 at 6.56.08 PM.jpeg | 3 + ...p Image 2025-12-17 at 10.23.09 AM (1).jpeg | 3 + ...p Image 2025-12-17 at 10.23.09 AM (2).jpeg | 3 + ...tsApp Image 2025-12-17 at 10.23.00 AM.jpeg | 3 + ...atsApp Image 2025-12-17 at 5.44.30 PM.jpeg | 3 + ...atsApp Image 2025-12-17 at 5.44.03 PM.jpeg | 3 + ...tsApp Image 2025-12-17 at 11.14.21 AM.jpeg | 3 + uploads/1766137224615-electro.png | 3 + ...pp Image 2025-12-17 at 1.16.29 PM (1).jpeg | 3 + ...atsApp Image 2025-12-17 at 1.16.29 PM.jpeg | 3 + utils/fileHandler.js | 15 + 84 files changed, 1008 insertions(+) create mode 100644 .env create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 career-applications/1755776814374-Goal Setting_Swapnil Dahiphale.docx create mode 100644 contacts.json create mode 100644 gallery-media/1755343085623-cert1.jpg create mode 100644 gallery-media/1755343137920-cert2.jpg create mode 100644 gallery-media/1755343165376-cert3.jpg create mode 100644 gallery-media/1755343199753-cert4.jpg create mode 100644 gallery-media/1755343250133-WhatsApp Image 2025-08-09 at 12.17.33 PM.jpeg create mode 100644 gallery-media/1755764880241-WhatsApp Image 2023-09-27 at 5.04.05 PM.jpeg create mode 100644 gallery-media/1762603729917-CERTIFICATE OF APPRECIATION from HON. CHIEF MINISTER OF GOA for JJM Work successfully completed and commissioned.png create mode 100644 gallery-media/1767252843430-1765627312122-Government Of Goa (1).jpg create mode 100644 gallery-media/1767252907045-1765890800285-WhatsApp Image 2025-12-16 at 5.24.07 PM.jpeg create mode 100644 gallery.json create mode 100644 jobs.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 projects.json create mode 100644 routes/contactRoutes.js create mode 100644 server.js create mode 100644 uploads/1754988232733-WhatsApp Image 2025-08-12 at 12.53.21 PM (1).jpeg create mode 100644 uploads/1754996141204-186cb905-d126-4fec-8868-ea6e5da71581.jpg create mode 100644 uploads/1754996151857-b3025d0b-ef97-4d6a-9270-4db7c022b1b1.jpg create mode 100644 uploads/1754996169691-c9304466-d3b4-4497-8340-1a4ec4e6994a.jpg create mode 100644 uploads/1754996200514-e811b15b-9d53-4c92-b2b0-280c724bec3b.jpg create mode 100644 uploads/1754996228890-2a9cc942-939e-4b2a-8ed8-6fdb99cbe919.jpg create mode 100644 uploads/1754996248875-0e10027f-7b22-46c3-82d0-fd25ed88cd37.jpg create mode 100644 uploads/1754996269898-WhatsApp Image 2025-08-12 at 12.53.21 PM.jpeg create mode 100644 uploads/1754996282022-WhatsApp Image 2025-08-12 at 12.53.21 PM (1).jpeg create mode 100644 uploads/1754996302853-WhatsApp Image 2025-08-12 at 12.53.15 PM (1).jpeg create mode 100644 uploads/1754996311723-WhatsApp Image 2025-08-12 at 12.53.15 PM.jpeg create mode 100644 uploads/1754996321265-WhatsApp Image 2025-08-12 at 12.53.16 PM.jpeg create mode 100644 uploads/1754996330755-WhatsApp Image 2025-08-12 at 12.53.18 PM (1).jpeg create mode 100644 uploads/1754996358949-WhatsApp Image 2025-08-09 at 12.30.50 PM (1).jpeg create mode 100644 uploads/1755338545753-elevated_service_res_p4PJo.5e769222e35913528376.jpg create mode 100644 uploads/1755338571628-Sewage-WT1.c1c508759572132379bf (1).jpg create mode 100644 uploads/1755338589273-Jack-wells.ae632a5749ccfb960389.jpg create mode 100644 uploads/1755338632341-Non-conventional-water-treatment-plants-.e452887dc76a9c77aa01.jpg create mode 100644 uploads/1755339600135-water_treatment_plan_QDiP2.e7a8e82ec7e3a4e3c148.jpg create mode 100644 uploads/1755339786779-WhatsApp Image 2025-08-09 at 12.30.48 PM.jpeg create mode 100644 uploads/1755511883147-WhatsApp Image 2025-08-18 at 3.25.18 PM.jpeg create mode 100644 uploads/1755511898241-WhatsApp Image 2025-08-18 at 3.25.17 PM.jpeg create mode 100644 uploads/1755511910980-WhatsApp Image 2025-08-18 at 3.25.17 PM (1).jpeg create mode 100644 uploads/1755511923123-WhatsApp Image 2025-08-18 at 3.25.13 PM.jpeg create mode 100644 uploads/1755511932814-WhatsApp Image 2025-08-18 at 2.24.17 PM.jpeg create mode 100644 uploads/1755670485689-Picture1.jpg create mode 100644 uploads/1755670494409-Picture2.png create mode 100644 uploads/1755670504954-Picture3.jpg create mode 100644 uploads/1755673960238-Picture4.png create mode 100644 uploads/1755673968590-Picture5.png create mode 100644 uploads/1755673977434-Picture6.png create mode 100644 uploads/1755674126708-image (2).jpg create mode 100644 uploads/1755764796583-04da8a50-98a3-4516-86de-e8f8f46594b8.jpg create mode 100644 uploads/1759311688470-WhatsApp Image 2025-09-18 at 12.33.26 PM.jpeg create mode 100644 uploads/1762428793443-WhatsApp Image 2025-11-05 at 12.48.03 PM.jpeg create mode 100644 uploads/1762603614967-New-chhindwara-image.png create mode 100644 uploads/1762603765339-new1-chhindwara-image.png create mode 100644 uploads/1762750708567-final-chhindwara-image.png create mode 100644 uploads/1762768031427-Gemini_Generated_Image_l7v50ml7v50ml7v5.png create mode 100644 uploads/1762768071841-Gemini_Generated_Image_l7v50ml7v50ml7v5.png create mode 100644 uploads/1762768156046-WhatsApp Image 2025-11-10 at 3.18.34 PM.jpeg create mode 100644 uploads/1762768163944-WhatsApp Image 2025-11-10 at 3.18.33 PM.jpeg create mode 100644 uploads/1765176502539-Screenshot (363).png create mode 100644 uploads/1765178845236-47894 -UTR.jpeg create mode 100644 uploads/1765451094363-WhatsApp Image 2025-12-10 at 10.17.44 AM.jpeg create mode 100644 uploads/1766058099192-Photo 40.jpeg create mode 100644 uploads/1766058106951-Photo 39.jpeg create mode 100644 uploads/1766058118709-Photo 28.jpeg create mode 100644 uploads/1766058132956-WhatsApp Image 2025-12-17 at 1.16.29 PM.jpeg create mode 100644 uploads/1766058179433-WhatsApp Image 2025-12-17 at 11.14.20 AM.jpeg create mode 100644 uploads/1766058290034-WhatsApp Image 2025-12-17 at 1.20.15 PM.jpeg create mode 100644 uploads/1766058353154-WhatsApp Image 2025-12-17 at 1.16.24 PM.jpeg create mode 100644 uploads/1766058376000-WhatsApp Image 2025-12-17 at 6.56.08 PM.jpeg create mode 100644 uploads/1766058395987-WhatsApp Image 2025-12-17 at 10.23.09 AM (1).jpeg create mode 100644 uploads/1766058429903-WhatsApp Image 2025-12-17 at 10.23.09 AM (2).jpeg create mode 100644 uploads/1766058519485-WhatsApp Image 2025-12-17 at 10.23.00 AM.jpeg create mode 100644 uploads/1766058540797-WhatsApp Image 2025-12-17 at 5.44.30 PM.jpeg create mode 100644 uploads/1766058565737-WhatsApp Image 2025-12-17 at 5.44.03 PM.jpeg create mode 100644 uploads/1766137181418-WhatsApp Image 2025-12-17 at 11.14.21 AM.jpeg create mode 100644 uploads/1766137224615-electro.png create mode 100644 uploads/1766137282043-WhatsApp Image 2025-12-17 at 1.16.29 PM (1).jpeg create mode 100644 uploads/1766137297588-WhatsApp Image 2025-12-17 at 1.16.29 PM.jpeg create mode 100644 utils/fileHandler.js diff --git a/.env b/.env new file mode 100644 index 0000000..648d634 --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +EMAIL_USER=laxmibamnale2002@gmail.com +EMAIL_PASS=smqcwjwdsuiywrse \ No newline at end of file diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..331c8bd --- /dev/null +++ b/.gitattributes @@ -0,0 +1,9 @@ +*.pdf filter=lfs diff=lfs merge=lfs -text +*.jpeg filter=lfs diff=lfs merge=lfs -text +*.jpg filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.mp4 filter=lfs diff=lfs merge=lfs -text +applications/*.pdf filter=lfs diff=lfs merge=lfs -text +applications/1759231228167-_[[:space:]]kerala[[:space:]]package[[:space:]]_[[:space:]]4n-5d.pdf filter=lfs diff=lfs merge=lfs -text +*.json filter=lfs diff=lfs merge=lfs -text +uploads/* filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..14bfeea813fc4359da03b90cb46b5ebca267398c GIT binary patch literal 101 zcmaKjK?;B%5CG>a_?3K;WV=M9ZeaWWBszDSVVG{BxtVy?kz!cbIk?FbRyIzYi$o;w Q*E)uv^J_0Tb=vsO2Yk8{qW}N^ literal 0 HcmV?d00001 diff --git a/career-applications/1755776814374-Goal Setting_Swapnil Dahiphale.docx b/career-applications/1755776814374-Goal Setting_Swapnil Dahiphale.docx new file mode 100644 index 0000000000000000000000000000000000000000..578cec3f109db96abb3d8922a039c4aa2eb6ac5e GIT binary patch literal 36003 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 { + try { + await fs.access(filePath); // check if file exists + const data = await fs.readFile(filePath, "utf-8"); + return JSON.parse(data); + } catch { + return []; + } +}; + +const saveData = async (filePath, data) => { + await fs.writeFile(filePath, JSON.stringify(data, null, 2)); +}; + +// ====================== GALLERY API ====================== // + +const galleryStorage = multer.diskStorage({ + destination: async (req, file, cb) => { + const dir = "./gallery-media"; + fs.mkdir(dir, { recursive: true }) // async, safe + cb(null, dir); + }, +}); + +const uploadGallery = multer({ + storage: galleryStorage, + fileFilter: (req, file, cb) => { + const filetypes = /jpeg|jpg|png|gif|mp4|mov|avi/; + const extname = filetypes.test(path.extname(file.originalname).toLowerCase()); + const mimetype = filetypes.test(file.mimetype); + + if (extname && mimetype) { + return cb(null, true); + } else { + cb(new Error("Only images (JPEG, JPG, PNG, GIF) and videos (MP4, MOV, AVI) are allowed")); + } + }, + limits: { fileSize: 500 * 1024 * 1024 } // 500MB limit +}); + +// Get all gallery items with filtering by category +app.get("/api/gallery", async (req, res) => { + const items = await loadData(GALLERY_DATA_FILE); + + if (req.query.category) { + const filtered = items.filter(item => item.category === req.query.category); + return res.json(filtered); + } + + res.json(items); +}); + + +// Add new gallery item +app.post("/api/gallery", uploadGallery.single("media"), async (req, res) => { + const { category, caption, date } = req.body; + const mediaFile = req.file; + + if (!category || !mediaFile) { + return res.status(400).json({ error: "Category and media file are required" }); + } + + const mediaType = mediaFile.mimetype.startsWith("video") ? "video" : "image"; + + const newItem = { + id: uuid(), + category, + caption: caption || "", + date: date || "", + type: mediaType, + url: `/gallery-media/${mediaFile.filename}`, + createdAt: new Date().toISOString() + }; + + const items = await loadData(GALLERY_DATA_FILE); // ✅ now safe + items.push(newItem); + await saveData(GALLERY_DATA_FILE, items); // also await + + res.status(201).json({ message: "Gallery item added successfully", item: newItem }); +}); + + + +// Update gallery item +app.put("/api/gallery/:id", uploadGallery.single("media"), async (req, res) => { + const itemId = req.params.id; + const { category, caption, date } = req.body; + const mediaFile = req.file; + + let items = await loadData(GALLERY_DATA_FILE); + const itemIndex = items.findIndex(item => item.id === itemId); + + if (itemIndex === -1) { + return res.status(404).json({ error: "Gallery item not found" }); + } + + const existingItem = items[itemIndex]; + let mediaType = existingItem.type; + let mediaUrl = existingItem.url; + + if (mediaFile) { + const oldFilename = existingItem.url.split("/").pop(); + const oldPath = path.join(__dirname, "gallery-media", oldFilename); + if (await fs.stat(oldPath).catch(() => false)) { + await fs.unlink(oldPath); + } + + mediaType = mediaFile.mimetype.startsWith("video") ? "video" : "image"; + mediaUrl = `/gallery-media/${mediaFile.filename}`; + } + + items[itemIndex] = { + ...existingItem, + category: category || existingItem.category, + caption: caption || existingItem.caption, + date: date || existingItem.date, + type: mediaType, + url: mediaUrl, + updatedAt: new Date().toISOString() + }; + + await saveData(GALLERY_DATA_FILE, items); + + res.json({ message: "Gallery item updated successfully", item: items[itemIndex] }); +}); + + +// Delete gallery item +app.delete("/api/gallery/:id", async (req, res) => { + const itemId = parseInt(req.params.id); + const items = await loadData(GALLERY_DATA_FILE); + const itemIndex = items.findIndex(item => item.id === itemId); + + if (itemIndex === -1) { + return res.status(404).json({ error: "Gallery item not found" }); + } + + const filename = items[itemIndex].url.split("/").pop(); + const filePath = path.join(__dirname, "gallery-media", filename); + if (await fs.stat(filePath).catch(() => false)) { + await fs.unlink(filePath); + } + + items.splice(itemIndex, 1); + await saveData(GALLERY_DATA_FILE, items); + + res.json({ message: "Gallery item deleted successfully" }); +}); + + +// ========= CONTACT FORM ========= // +app.post("/contact", async (req, res) => { + const { name, email, contact, message } = req.body; + + // Validation + if (!name || !email || !contact || !message) { + return res.status(400).json({ success: false, error: "All fields are required" }); + } + + // Additional validation + if (name.length < 2) { + return res.status(400).json({ success: false, error: "Name must be at least 2 characters" }); + } + + if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) { + return res.status(400).json({ success: false, error: "Invalid email format" }); + } + + const digits = contact.replace(/\D/g, ""); + if (digits.length < 7) { + return res.status(400).json({ success: false, error: "Contact number must have at least 7 digits" }); + } + + if (message.length < 10) { + return res.status(400).json({ success: false, error: "Message must be at least 10 characters" }); + } + + try { + // Use environment variables for email credentials + const emailUser = process.env.EMAIL_USER || "laxmibamnale2002@gmail.com"; + const emailPass = process.env.EMAIL_PASS || "smqcwjwdsuiywrse"; + + if (!emailPass) { + console.error("Email password not configured"); + return res.status(500).json({ success: false, message: "Server configuration error" }); + } + + const transporter = nodemailer.createTransport({ + service: "gmail", + auth: { + user: process.env.EMAIL_USER, + pass: process.env.EMAIL_PASS, + }, +}); + + + // Verify connection configuration + await transporter.verify(); + + const mailToOwner = { + from: emailUser, // Use your email as from address to avoid authentication issues + replyTo: email, // Set reply-to to customer's email + to: emailUser, + subject: `New Contact Form Submission from ${name}`, + html: ` +

New Contact Form Submission

+

Name: ${name}

+

Email: ${email}

+

Contact: ${contact}

+

Message:

+

${message.replace(/\n/g, "
")}

+

Received on: ${new Date().toLocaleString()}

+ `, + }; + + await transporter.sendMail(mailToOwner); + + const autoReply = { + from: emailUser, + to: email, + subject: "Thank you for contacting Laxmi Civil Engineering Services!", + html: ` +
+

Thank You for Contacting Us!

+

Dear ${name},

+

Thank you for reaching out to Laxmi Civil Engineering Services Pvt. Ltd. We have received your message and will get back to you within 24-48 hours.

+

For urgent inquiries, please call us at 0231-2521554 or 0231-2683900.

+

Summary of your message:

+
+ ${message.replace(/\n/g, "
")} +
+

Best regards,
Team Laxmi Civil Engineering Services

+
+

+ Laxmi Civil Engineering Services Pvt. Ltd.
+ 1148, E. Sykes Extension, Kolhapur 416 001, Maharashtra, India.
+ Phone: 0231-2521554, 2683900 | Email: laxmibamnale2002@gmail.com +

+
+ `, + }; + + await transporter.sendMail(autoReply); + + res.status(200).json({ success: true, message: "Message sent successfully" }); + } catch (err) { + console.error("Error sending email:", err); + + if (err.code === "EAUTH") { + res.status(500).json({ success: false, message: "Email authentication failed" }); + } else if (err.code === "EENVELOPE") { + res.status(400).json({ success: false, message: "Invalid email address" }); + } else { + res.status(500).json({ success: false, message: "Server error while sending email" }); + } + } +}); +// ========= PROJECT UPLOAD ========= // +const storage = multer.diskStorage({ + destination: (req, file, cb) => { + const dir = "./uploads"; + fs.mkdir(dir, { recursive: true }) // creates dir if not exists + cb(null, dir); + }, + filename: (req, file, cb) => { + const uniqueName = Date.now() + "-" + file.originalname; + cb(null, uniqueName); + }, +}); +const upload = multer({ storage }); + +const loadProjects = async () => { + try { + await fs.access(DATA_FILE); + const data = await fs.readFile(DATA_FILE, "utf-8"); + return JSON.parse(data); + } catch { + return []; + } +}; + +const saveProjects = async (projects) => { + await fs.writeFile(DATA_FILE, JSON.stringify(projects, null, 2)); +}; + + +app.post("/api/projects", upload.single("image"), async (req, res) => { + const { sector } = req.body; + const image = req.file ? `/uploads/${req.file.filename}` : ""; + + if (!sector || !image) { + return res.status(400).json({ error: "Sector and image are required" }); + } + + const newProject = { id: uuid(), sector, image }; + + const projects = await loadProjects(); // ✅ await + projects.push(newProject); + await saveProjects(projects); // ✅ await + + res.status(201).json({ message: "Project added successfully", project: newProject }); +}); + + +app.get("/api/projects", async (req, res) => { + const projects = await loadProjects(); // ✅ await + res.json(projects); +}); + +app.post("/api/projects/update/:id", upload.single("image"), (req, res) => { +const projectId = req.params.id; + const { sector } = req.body; + + let projects = loadProjects(); + const projectIndex = projects.findIndex((p) => p.id === projectId); + + if (projectIndex === -1) { + return res.status(404).json({ error: "Project not found" }); + } + + const existingProject = projects[projectIndex]; + + projects[projectIndex] = { + ...existingProject, + sector, + image: req.file ? `/uploads/${req.file.filename}` : existingProject.image, + }; + + saveProjects(projects); + + res.json({ message: "Project updated successfully", project: projects[projectIndex] }); +}); + +app.delete("/api/projects/:id", (req, res) => { + const projectId = parseInt(req.params.id); + + let projects = loadProjects(); + const updatedProjects = projects.filter((project) => project.id !== projectId); + + if (projects.length === updatedProjects.length) { + return res.status(404).json({ error: "Project not found" }); + } + + saveProjects(updatedProjects); + res.json({ message: "Project deleted successfully" }); +}); + +// ========= JOB APPLICATION UPLOAD ========= // +const applicationStorage = multer.diskStorage({ + destination: (req, file, cb) => { + const dir = "./applications"; + fs.mkdir(dir, { recursive: true }) // creates dir if not exists + cb(null, dir); + }, + filename: (req, file, cb) => { + const uniqueName = Date.now() + "-" + file.originalname; + cb(null, uniqueName); + }, +}); + +const uploadApplication = multer({ storage: applicationStorage }); + +app.post("/send-application", uploadApplication.single("resume"), async (req, res) => { + const { + fullName, + email, + phone, + address, + education, + skill, + interest, + totalExperience, + expectedSalary, + currentCompany, + currentDesignation, + } = req.body; + + if (!fullName || !email || !phone || !education || !skill || !totalExperience || !req.file) { + return res.status(400).json({ success: false, message: "Missing required fields" }); + } + + const resumePath = path.join(__dirname, "applications", req.file.filename); + + try { + const transporter = nodemailer.createTransport({ + service: "gmail", + auth: { + user: process.env.EMAIL_USER, + pass: process.env.EMAIL_PASS, + }, + }); + + const mailOptions = { + from: email, + to: "laxmibamnale2002@gmail.com", + subject: `New Job Application from ${fullName}`, + text: `Full Name: ${fullName} +Email: ${email} +Phone: ${phone} +Address: ${address} +Education: ${education} +Skill: ${skill} +Interest: ${interest} +Experience: ${totalExperience} +Expected Salary: ${expectedSalary} +Current Company: ${currentCompany} +Current Designation: ${currentDesignation}`, + attachments: [ + { + filename: req.file.originalname, + path: resumePath, + }, + ], + }; + + await transporter.sendMail(mailOptions); + + const autoReply = { + from: "laxmibamnale2002@gmail.com", + to: email, + subject: "Application Received - Laxmi Civil Engineering Services", + text: `Dear ${fullName}, + +Thank you for applying to Laxmi Civil Engineering Services Pvt. Ltd. + +We have received your application and resume. Our HR team will review your profile and get back to you shortly if shortlisted. + +Best regards, +Laxmi Civil Engineering Services Pvt. Ltd.`, + }; + + await transporter.sendMail(autoReply); + + res.status(200).json({ success: true, message: "Application submitted successfully" }); + } catch (err) { + console.error("Error submitting application:", err); + res.status(500).json({ success: false, message: "Server error" }); + } +}); + +// ========= ENHANCED JOB POSTINGS API ========= // + +const loadJobs = async () => { + try { + await fs.access(JOBS_DATA_FILE); + const data = await fs.readFile(JOBS_DATA_FILE, "utf-8"); + return JSON.parse(data); + } catch { + return []; + } +}; + +const saveJobs = async (jobs) => { + await fs.writeFile(JOBS_DATA_FILE, JSON.stringify(jobs, null, 2)); +}; + + +// Get all jobs with automatic status updates +app.get("/api/jobs", async (req, res) => { + let jobs = await loadJobs(); // ✅ await + const currentDate = new Date(); + + jobs = jobs.map(job => { + if (job.closingDate && new Date(job.closingDate) < currentDate) { + return { ...job, isActive: false }; + } + return job; + }); + + await saveJobs(jobs); // ✅ await + res.json(jobs); +}); + + +// Create new job posting with enhanced fields +app.post("/api/jobs", (req, res) => { + const { + positionName, + qualification, + experience, + location, + skills, + numberOfOpenings, + jobDescription, + postingDate, + closingDate, + isActive = true + } = req.body; + + if ( + !positionName || + !qualification || + !experience || + !location || + !Array.isArray(skills) || + skills.length === 0 || + !numberOfOpenings || + !jobDescription || + !postingDate + ) { + return res.status(400).json({ error: "Missing required fields" }); + } + + const jobs = loadJobs(); + + const newJob = { + id: uuid(), + positionName, + qualification, + experience, + location, + skills, + numberOfOpenings, + jobDescription, + postingDate, + closingDate: closingDate || null, + isActive: closingDate ? new Date(closingDate) >= new Date() : isActive + }; + + jobs.push(newJob); + saveJobs(jobs); + + res.status(201).json({ message: "Job created", job: newJob }); +}); + +// Update existing job posting with enhanced fields +app.put("/api/jobs/:id", (req, res) => { + const jobId = parseInt(req.params.id); + const { + positionName, + qualification, + experience, + location, + skills, + + numberOfOpenings, + jobDescription, + postingDate, + closingDate, + isActive + } = req.body; + + const jobs = loadJobs(); + const index = jobs.findIndex((job) => job.id === jobId); + + if (index === -1) { + return res.status(404).json({ error: "Job not found" }); + } + + if ( + !positionName || + !qualification || + !experience || + !location || + !Array.isArray(skills) || + skills.length === 0 || + !numberOfOpenings || + !jobDescription || + !postingDate + ) { + return res.status(400).json({ error: "Missing required fields" }); + } + + const currentDate = new Date(); + const closingDateObj = closingDate ? new Date(closingDate) : null; + const actualIsActive = closingDateObj ? closingDateObj >= currentDate : isActive; + + jobs[index] = { + id: jobId, + positionName, + qualification, + experience, + location, + skills, + numberOfOpenings, + jobDescription, + postingDate, + closingDate: closingDate || null, + isActive: actualIsActive + }; + + saveJobs(jobs); + + res.json({ message: "Job updated", job: jobs[index] }); +}); + +// Toggle job active status +app.patch("/api/jobs/:id/toggle-active", (req, res) => { + const jobId = parseInt(req.params.id); + const jobs = loadJobs(); + const index = jobs.findIndex((job) => job.id === jobId); + + if (index === -1) { + return res.status(404).json({ error: "Job not found" }); + } + + // Don't allow toggling if there's a closing date in the past + const currentDate = new Date(); + if (jobs[index].closingDate && new Date(jobs[index].closingDate) < currentDate) { + return res.status(400).json({ error: "Cannot activate job with expired closing date" }); + } + + jobs[index].isActive = !jobs[index].isActive; + saveJobs(jobs); + + res.json({ message: "Job status updated", job: jobs[index] }); +}); + +// Delete job posting +app.delete("/api/jobs/:id", (req, res) => { + const jobId = parseInt(req.params.id); + let jobs = loadJobs(); + const initialLength = jobs.length; + jobs = jobs.filter((job) => job.id !== jobId); + + if (jobs.length === initialLength) { + return res.status(404).json({ error: "Job not found" }); + } + + saveJobs(jobs); + + res.json({ message: "Job deleted" }); +}); + +// ========= CAREER CONTACT FORM ========= // +const careerStorage = multer.diskStorage({ + destination: (req, file, cb) => { + const dir = "./career-applications"; + fs.mkdir(dir, { recursive: true }) // creates dir if not exists + cb(null, dir); + }, + filename: (req, file, cb) => { + const uniqueName = Date.now() + "-" + file.originalname; + cb(null, uniqueName); + }, +}); + +const uploadCareer = multer({ + storage: careerStorage, + limits: { fileSize: 10 * 1024 * 1024 }, + fileFilter: (req, file, cb) => { + const allowedExt = ['.pdf', '.doc', '.docx']; + const ext = path.extname(file.originalname).toLowerCase(); + if (allowedExt.includes(ext)) { + cb(null, true); + } else { + cb(new Error('Only PDF/DOC/DOCX files are allowed')); + } + } +}); + +app.post('/api/careers/contact', uploadCareer.single('resume'), async (req, res) => { + try { + const { fullName, email, phone } = req.body; + const resumeFile = req.file; + + if (!fullName || !email || !resumeFile) { + return res.status(400).json({ success: false, error: 'Missing required fields or resume.' }); + } + + const transporter = nodemailer.createTransport({ + service: "gmail", + auth: { + user: process.env.EMAIL_USER, + pass: process.env.EMAIL_PASS, + }, + }); + + const mailOptions = { + from: '"Career Contact Form" ', + to: "laxmibamnale2002@gmail.com", + subject: `New Career Contact from ${fullName}`, + text: ` + You have received a new career contact form submission. + + Full Name: ${fullName} + Email: ${email} + Phone: ${phone || 'Not provided'} + + Resume is attached. + `, + attachments: [ + { + filename: resumeFile.originalname, + path: resumeFile.path, + }, + ], + }; + + await transporter.sendMail(mailOptions); + + const autoReply = { + from: "", + to: email, + subject: "Thank you for contacting Laxmi Civil Engineering Services", + text: `Dear ${fullName}, + +Thank you for reaching out to us via the Career Contact form. We have received your details and resume. + +Our HR team will review and get back to you soon. + +Best regards, +Laxmi Civil Engineering Services Pvt. Ltd.`, + }; + + await transporter.sendMail(autoReply); + + fs.unlink(resumeFile.path, (err) => { + if (err) console.error('Error deleting uploaded resume:', err); + }); + + res.json({ success: true, message: 'Career contact form submitted successfully.' }); + } catch (error) { + console.error('Error in /api/careers/contact:', error); + res.status(500).json({ success: false, message: 'Server error' }); + } +}); + +// ========= START SERVER ========= // +app.listen(PORT, "0.0.0.0", () => { + console.log(`Server running on http://0.0.0.0:${PORT}`); +}); diff --git a/uploads/1754988232733-WhatsApp Image 2025-08-12 at 12.53.21 PM (1).jpeg b/uploads/1754988232733-WhatsApp Image 2025-08-12 at 12.53.21 PM (1).jpeg new file mode 100644 index 0000000..c334741 --- /dev/null +++ b/uploads/1754988232733-WhatsApp Image 2025-08-12 at 12.53.21 PM (1).jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b18868133b335ea2090a0f979a237ffbc55e126cd838e6674e55c079ff211f01 +size 136480 diff --git a/uploads/1754996141204-186cb905-d126-4fec-8868-ea6e5da71581.jpg b/uploads/1754996141204-186cb905-d126-4fec-8868-ea6e5da71581.jpg new file mode 100644 index 0000000..3ec55c1 --- /dev/null +++ b/uploads/1754996141204-186cb905-d126-4fec-8868-ea6e5da71581.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d7f81aa3c405fe8a1530a32162e46e70cecb6879c45886b73ab5470805c87d0d +size 95483 diff --git a/uploads/1754996151857-b3025d0b-ef97-4d6a-9270-4db7c022b1b1.jpg b/uploads/1754996151857-b3025d0b-ef97-4d6a-9270-4db7c022b1b1.jpg new file mode 100644 index 0000000..a6c2824 --- /dev/null +++ b/uploads/1754996151857-b3025d0b-ef97-4d6a-9270-4db7c022b1b1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:971601aca01935b4252c71bc6046a190e9ce363e1fdcb3e0c3191f98151e3d0c +size 117116 diff --git a/uploads/1754996169691-c9304466-d3b4-4497-8340-1a4ec4e6994a.jpg b/uploads/1754996169691-c9304466-d3b4-4497-8340-1a4ec4e6994a.jpg new file mode 100644 index 0000000..8b69b1c --- /dev/null +++ b/uploads/1754996169691-c9304466-d3b4-4497-8340-1a4ec4e6994a.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89854e5ffb6247fdbc2daa425eaa07582259841044f32c8a3b82190f9a01dbc2 +size 106340 diff --git a/uploads/1754996200514-e811b15b-9d53-4c92-b2b0-280c724bec3b.jpg b/uploads/1754996200514-e811b15b-9d53-4c92-b2b0-280c724bec3b.jpg new file mode 100644 index 0000000..81a3959 --- /dev/null +++ b/uploads/1754996200514-e811b15b-9d53-4c92-b2b0-280c724bec3b.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06ead77138dc9b9e39fbb4f9a4e1f89e88a974659017c89a0a1cdc2a8d401639 +size 40215 diff --git a/uploads/1754996228890-2a9cc942-939e-4b2a-8ed8-6fdb99cbe919.jpg b/uploads/1754996228890-2a9cc942-939e-4b2a-8ed8-6fdb99cbe919.jpg new file mode 100644 index 0000000..28f994a --- /dev/null +++ b/uploads/1754996228890-2a9cc942-939e-4b2a-8ed8-6fdb99cbe919.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aa1a201f199ad52ff266d1f7d86cd52b40a268b5c067e56d8e9bb312d8f78d78 +size 77916 diff --git a/uploads/1754996248875-0e10027f-7b22-46c3-82d0-fd25ed88cd37.jpg b/uploads/1754996248875-0e10027f-7b22-46c3-82d0-fd25ed88cd37.jpg new file mode 100644 index 0000000..141d233 --- /dev/null +++ b/uploads/1754996248875-0e10027f-7b22-46c3-82d0-fd25ed88cd37.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f9f44f85a7fe7847a32aeead56bcf5a183e2b96726cf7c18b1ca982c833bce07 +size 41260 diff --git a/uploads/1754996269898-WhatsApp Image 2025-08-12 at 12.53.21 PM.jpeg b/uploads/1754996269898-WhatsApp Image 2025-08-12 at 12.53.21 PM.jpeg new file mode 100644 index 0000000..5c6c03e --- /dev/null +++ b/uploads/1754996269898-WhatsApp Image 2025-08-12 at 12.53.21 PM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:353a56addc86cf52057f96d712a1e9c284603e48cb6659b270d1795d9d844a65 +size 217645 diff --git a/uploads/1754996282022-WhatsApp Image 2025-08-12 at 12.53.21 PM (1).jpeg b/uploads/1754996282022-WhatsApp Image 2025-08-12 at 12.53.21 PM (1).jpeg new file mode 100644 index 0000000..a1af96d --- /dev/null +++ b/uploads/1754996282022-WhatsApp Image 2025-08-12 at 12.53.21 PM (1).jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa95b026a5572e1981a34fa471c0db1ef5f7d5cd2a70ae3126eefe04877ba577 +size 270148 diff --git a/uploads/1754996302853-WhatsApp Image 2025-08-12 at 12.53.15 PM (1).jpeg b/uploads/1754996302853-WhatsApp Image 2025-08-12 at 12.53.15 PM (1).jpeg new file mode 100644 index 0000000..d1de8ca --- /dev/null +++ b/uploads/1754996302853-WhatsApp Image 2025-08-12 at 12.53.15 PM (1).jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0969ee184ba4d08fbfe22b0b2a9d49dffca13430bf3b0b4cccbc0f278801c4c8 +size 266050 diff --git a/uploads/1754996311723-WhatsApp Image 2025-08-12 at 12.53.15 PM.jpeg b/uploads/1754996311723-WhatsApp Image 2025-08-12 at 12.53.15 PM.jpeg new file mode 100644 index 0000000..a38c5aa --- /dev/null +++ b/uploads/1754996311723-WhatsApp Image 2025-08-12 at 12.53.15 PM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:545b067a2f79fe311739ee81b5e1996e7b39ee0a487c69195e73036fe7120e25 +size 388066 diff --git a/uploads/1754996321265-WhatsApp Image 2025-08-12 at 12.53.16 PM.jpeg b/uploads/1754996321265-WhatsApp Image 2025-08-12 at 12.53.16 PM.jpeg new file mode 100644 index 0000000..a38c7d9 --- /dev/null +++ b/uploads/1754996321265-WhatsApp Image 2025-08-12 at 12.53.16 PM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53a0edd4dc4098523d53726512853e22ef552d745f4aed4522e3eff07c82ab2b +size 184279 diff --git a/uploads/1754996330755-WhatsApp Image 2025-08-12 at 12.53.18 PM (1).jpeg b/uploads/1754996330755-WhatsApp Image 2025-08-12 at 12.53.18 PM (1).jpeg new file mode 100644 index 0000000..03a861d --- /dev/null +++ b/uploads/1754996330755-WhatsApp Image 2025-08-12 at 12.53.18 PM (1).jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc28513a19968b279285647f01ba195d63c469671f273639ad18fd416514d483 +size 136512 diff --git a/uploads/1754996358949-WhatsApp Image 2025-08-09 at 12.30.50 PM (1).jpeg b/uploads/1754996358949-WhatsApp Image 2025-08-09 at 12.30.50 PM (1).jpeg new file mode 100644 index 0000000..c5be8a4 --- /dev/null +++ b/uploads/1754996358949-WhatsApp Image 2025-08-09 at 12.30.50 PM (1).jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4157cf889539b71cfdb6d071cb7a770aac8f048294010032b250c25e51fe0e92 +size 74954 diff --git a/uploads/1755338545753-elevated_service_res_p4PJo.5e769222e35913528376.jpg b/uploads/1755338545753-elevated_service_res_p4PJo.5e769222e35913528376.jpg new file mode 100644 index 0000000..80d4d9d --- /dev/null +++ b/uploads/1755338545753-elevated_service_res_p4PJo.5e769222e35913528376.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be0e72ab911a5b5d3e38ef303fe3e12577aa2375c4a678b29638c7d87b8be425 +size 30905 diff --git a/uploads/1755338571628-Sewage-WT1.c1c508759572132379bf (1).jpg b/uploads/1755338571628-Sewage-WT1.c1c508759572132379bf (1).jpg new file mode 100644 index 0000000..584c8a0 --- /dev/null +++ b/uploads/1755338571628-Sewage-WT1.c1c508759572132379bf (1).jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0d1472f857f577deccbb5238db41ce83c70725e59a27852ced86e38aba96972 +size 490294 diff --git a/uploads/1755338589273-Jack-wells.ae632a5749ccfb960389.jpg b/uploads/1755338589273-Jack-wells.ae632a5749ccfb960389.jpg new file mode 100644 index 0000000..0941fde --- /dev/null +++ b/uploads/1755338589273-Jack-wells.ae632a5749ccfb960389.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f42ff8a40a2029248dbbf537bc61f808bccff06433495f401010489d54bb870c +size 33340 diff --git a/uploads/1755338632341-Non-conventional-water-treatment-plants-.e452887dc76a9c77aa01.jpg b/uploads/1755338632341-Non-conventional-water-treatment-plants-.e452887dc76a9c77aa01.jpg new file mode 100644 index 0000000..1ac7ab1 --- /dev/null +++ b/uploads/1755338632341-Non-conventional-water-treatment-plants-.e452887dc76a9c77aa01.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ebf1121ad3b28d5f203e08af0053c081cae1d16a0f3d944d440ec0b9dae02c9 +size 79635 diff --git a/uploads/1755339600135-water_treatment_plan_QDiP2.e7a8e82ec7e3a4e3c148.jpg b/uploads/1755339600135-water_treatment_plan_QDiP2.e7a8e82ec7e3a4e3c148.jpg new file mode 100644 index 0000000..9d20786 --- /dev/null +++ b/uploads/1755339600135-water_treatment_plan_QDiP2.e7a8e82ec7e3a4e3c148.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:016a9b7de9e0c53a62eceae8dccda11b580e86b1e04737cebc05593503c39ad3 +size 68559 diff --git a/uploads/1755339786779-WhatsApp Image 2025-08-09 at 12.30.48 PM.jpeg b/uploads/1755339786779-WhatsApp Image 2025-08-09 at 12.30.48 PM.jpeg new file mode 100644 index 0000000..b8d3230 --- /dev/null +++ b/uploads/1755339786779-WhatsApp Image 2025-08-09 at 12.30.48 PM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7bfd53cb52febcecef8fdbf6b271fd96ce6e9f52fd273e2535a93034b46df764 +size 574646 diff --git a/uploads/1755511883147-WhatsApp Image 2025-08-18 at 3.25.18 PM.jpeg b/uploads/1755511883147-WhatsApp Image 2025-08-18 at 3.25.18 PM.jpeg new file mode 100644 index 0000000..298a63f --- /dev/null +++ b/uploads/1755511883147-WhatsApp Image 2025-08-18 at 3.25.18 PM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af819c90ab29c7bf2577e804bddd74f449be8359925eaf1548835016896750cb +size 93085 diff --git a/uploads/1755511898241-WhatsApp Image 2025-08-18 at 3.25.17 PM.jpeg b/uploads/1755511898241-WhatsApp Image 2025-08-18 at 3.25.17 PM.jpeg new file mode 100644 index 0000000..8e87139 --- /dev/null +++ b/uploads/1755511898241-WhatsApp Image 2025-08-18 at 3.25.17 PM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2218e865746cf08c666663e772e748e54566f668d728dc0993a5a502a3f9a99 +size 158030 diff --git a/uploads/1755511910980-WhatsApp Image 2025-08-18 at 3.25.17 PM (1).jpeg b/uploads/1755511910980-WhatsApp Image 2025-08-18 at 3.25.17 PM (1).jpeg new file mode 100644 index 0000000..006d1ef --- /dev/null +++ b/uploads/1755511910980-WhatsApp Image 2025-08-18 at 3.25.17 PM (1).jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:911178bbdf45d142ff44f5ee2908f868027aa812ac5eaf436b62d7efada1c412 +size 115016 diff --git a/uploads/1755511923123-WhatsApp Image 2025-08-18 at 3.25.13 PM.jpeg b/uploads/1755511923123-WhatsApp Image 2025-08-18 at 3.25.13 PM.jpeg new file mode 100644 index 0000000..c20d1ae --- /dev/null +++ b/uploads/1755511923123-WhatsApp Image 2025-08-18 at 3.25.13 PM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5bb053a2b168271db97b5dd825c39b2df1a49dc340bccf23f0a76e302f7f0ea +size 274756 diff --git a/uploads/1755511932814-WhatsApp Image 2025-08-18 at 2.24.17 PM.jpeg b/uploads/1755511932814-WhatsApp Image 2025-08-18 at 2.24.17 PM.jpeg new file mode 100644 index 0000000..e0950fc --- /dev/null +++ b/uploads/1755511932814-WhatsApp Image 2025-08-18 at 2.24.17 PM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0dfc6b5fd10587629e067afdc9086503e3086b0cb88be4546e2824cfef3c4e66 +size 229604 diff --git a/uploads/1755670485689-Picture1.jpg b/uploads/1755670485689-Picture1.jpg new file mode 100644 index 0000000..1e1078c --- /dev/null +++ b/uploads/1755670485689-Picture1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:34927bb18c3b47e65ed4ff8fd0883aee7c54915709b6e4433b746c38ed851090 +size 145817 diff --git a/uploads/1755670494409-Picture2.png b/uploads/1755670494409-Picture2.png new file mode 100644 index 0000000..ef8b7e6 --- /dev/null +++ b/uploads/1755670494409-Picture2.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de82b69aabc58848077a790ed8c4874c5398a42118990b2d0c5bf6017ad10816 +size 772511 diff --git a/uploads/1755670504954-Picture3.jpg b/uploads/1755670504954-Picture3.jpg new file mode 100644 index 0000000..bd1d96c --- /dev/null +++ b/uploads/1755670504954-Picture3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9bb99fc68316b0c51ea7ddaf06f4a60347bf3a3aa4b1029c633d0d29562d0cae +size 118059 diff --git a/uploads/1755673960238-Picture4.png b/uploads/1755673960238-Picture4.png new file mode 100644 index 0000000..b833120 --- /dev/null +++ b/uploads/1755673960238-Picture4.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f0fc2085eaac95b19d87dbb716d6880101679e0d60820aa5357e4a21d674f5c +size 248825 diff --git a/uploads/1755673968590-Picture5.png b/uploads/1755673968590-Picture5.png new file mode 100644 index 0000000..31dad7a --- /dev/null +++ b/uploads/1755673968590-Picture5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c538761aa7c28c070da0a18cdfaecc38b88638064a78126883fcd637c496f44c +size 291194 diff --git a/uploads/1755673977434-Picture6.png b/uploads/1755673977434-Picture6.png new file mode 100644 index 0000000..f854c3a --- /dev/null +++ b/uploads/1755673977434-Picture6.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3033c81e52b8bd1d8fef279fee695a7abc4aa01af5515c58691c2cb2c063e161 +size 238091 diff --git a/uploads/1755674126708-image (2).jpg b/uploads/1755674126708-image (2).jpg new file mode 100644 index 0000000..e7ce4bb --- /dev/null +++ b/uploads/1755674126708-image (2).jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f0509d8451f0de35d5e2b8d2fcafde5d918989fe4a05c456cef036d432a162da +size 265880 diff --git a/uploads/1755764796583-04da8a50-98a3-4516-86de-e8f8f46594b8.jpg b/uploads/1755764796583-04da8a50-98a3-4516-86de-e8f8f46594b8.jpg new file mode 100644 index 0000000..725ce41 --- /dev/null +++ b/uploads/1755764796583-04da8a50-98a3-4516-86de-e8f8f46594b8.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbfc91893f43f579745a167c8271e99c15bc859d0542cc0cc1c6e945429411e1 +size 81411 diff --git a/uploads/1759311688470-WhatsApp Image 2025-09-18 at 12.33.26 PM.jpeg b/uploads/1759311688470-WhatsApp Image 2025-09-18 at 12.33.26 PM.jpeg new file mode 100644 index 0000000..db6a470 --- /dev/null +++ b/uploads/1759311688470-WhatsApp Image 2025-09-18 at 12.33.26 PM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6604eaa800b5b64e97a7e5a7e5c77ff13927455692cc69070ccdcd12dff2c5e1 +size 341134 diff --git a/uploads/1762428793443-WhatsApp Image 2025-11-05 at 12.48.03 PM.jpeg b/uploads/1762428793443-WhatsApp Image 2025-11-05 at 12.48.03 PM.jpeg new file mode 100644 index 0000000..2421649 --- /dev/null +++ b/uploads/1762428793443-WhatsApp Image 2025-11-05 at 12.48.03 PM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:920ceaebc2f90401cee2d5b0c26c4fc2f9beada7d9a17dd90843a472111c2eed +size 150356 diff --git a/uploads/1762603614967-New-chhindwara-image.png b/uploads/1762603614967-New-chhindwara-image.png new file mode 100644 index 0000000..d387802 --- /dev/null +++ b/uploads/1762603614967-New-chhindwara-image.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e181286a94a43674cc5f91f53dc7993a0b35deabc1676b76f6a95d2a82f09dd6 +size 1296332 diff --git a/uploads/1762603765339-new1-chhindwara-image.png b/uploads/1762603765339-new1-chhindwara-image.png new file mode 100644 index 0000000..c7bdb6e --- /dev/null +++ b/uploads/1762603765339-new1-chhindwara-image.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4647cc03eb202cd888fa41ba400e9ff4bfcc8b563280cfbf3035f2fb0fb3893 +size 1308696 diff --git a/uploads/1762750708567-final-chhindwara-image.png b/uploads/1762750708567-final-chhindwara-image.png new file mode 100644 index 0000000..1621ea9 --- /dev/null +++ b/uploads/1762750708567-final-chhindwara-image.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8652fc37c2ca1cd4d186e61d5dcaf0528dea22cbc0026704a195f8f091678d4d +size 1399820 diff --git a/uploads/1762768031427-Gemini_Generated_Image_l7v50ml7v50ml7v5.png b/uploads/1762768031427-Gemini_Generated_Image_l7v50ml7v50ml7v5.png new file mode 100644 index 0000000..92c4676 --- /dev/null +++ b/uploads/1762768031427-Gemini_Generated_Image_l7v50ml7v50ml7v5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff2674a0961bce76365d05311048c2866bbfb8e8d0059ede2f5484302eae3be9 +size 1643635 diff --git a/uploads/1762768071841-Gemini_Generated_Image_l7v50ml7v50ml7v5.png b/uploads/1762768071841-Gemini_Generated_Image_l7v50ml7v50ml7v5.png new file mode 100644 index 0000000..92c4676 --- /dev/null +++ b/uploads/1762768071841-Gemini_Generated_Image_l7v50ml7v50ml7v5.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff2674a0961bce76365d05311048c2866bbfb8e8d0059ede2f5484302eae3be9 +size 1643635 diff --git a/uploads/1762768156046-WhatsApp Image 2025-11-10 at 3.18.34 PM.jpeg b/uploads/1762768156046-WhatsApp Image 2025-11-10 at 3.18.34 PM.jpeg new file mode 100644 index 0000000..9e9b4f2 --- /dev/null +++ b/uploads/1762768156046-WhatsApp Image 2025-11-10 at 3.18.34 PM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be3d05534aa1434da4744a377e3d2cfd5360d075e7d23a3405812dd62794959d +size 258388 diff --git a/uploads/1762768163944-WhatsApp Image 2025-11-10 at 3.18.33 PM.jpeg b/uploads/1762768163944-WhatsApp Image 2025-11-10 at 3.18.33 PM.jpeg new file mode 100644 index 0000000..934fe00 --- /dev/null +++ b/uploads/1762768163944-WhatsApp Image 2025-11-10 at 3.18.33 PM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:722ac9b0e5c4ac59a7e098ac380b99bd28b8983a994ce66ab836f3a4ddb5b3a4 +size 220027 diff --git a/uploads/1765176502539-Screenshot (363).png b/uploads/1765176502539-Screenshot (363).png new file mode 100644 index 0000000..4badc83 --- /dev/null +++ b/uploads/1765176502539-Screenshot (363).png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d2d6b89d56c55b32fb1fb11f3dc4300e8a53882be08579782ce5866bb2a80a8 +size 163622 diff --git a/uploads/1765178845236-47894 -UTR.jpeg b/uploads/1765178845236-47894 -UTR.jpeg new file mode 100644 index 0000000..0ffbbc2 --- /dev/null +++ b/uploads/1765178845236-47894 -UTR.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:49dda7fbecd085642f0f78e9c5d28730cf0a9cdb44098e9a651cbefcc68c503e +size 312187 diff --git a/uploads/1765451094363-WhatsApp Image 2025-12-10 at 10.17.44 AM.jpeg b/uploads/1765451094363-WhatsApp Image 2025-12-10 at 10.17.44 AM.jpeg new file mode 100644 index 0000000..e620c2e --- /dev/null +++ b/uploads/1765451094363-WhatsApp Image 2025-12-10 at 10.17.44 AM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d0704c9283aea311467fed713cf5bec5b1a62c501842a5054ecee148588d25b +size 143013 diff --git a/uploads/1766058099192-Photo 40.jpeg b/uploads/1766058099192-Photo 40.jpeg new file mode 100644 index 0000000..ba40f95 --- /dev/null +++ b/uploads/1766058099192-Photo 40.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4a3fff41cc800142586b213149acbc460d9020c3a26c8c5a52ba27b310e07ad +size 198794 diff --git a/uploads/1766058106951-Photo 39.jpeg b/uploads/1766058106951-Photo 39.jpeg new file mode 100644 index 0000000..7942db4 --- /dev/null +++ b/uploads/1766058106951-Photo 39.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6a8da8fa8dd2242160f7a82f0e84fa50f940bb9bb98757d0af005d9fae7e2527 +size 224299 diff --git a/uploads/1766058118709-Photo 28.jpeg b/uploads/1766058118709-Photo 28.jpeg new file mode 100644 index 0000000..818889e --- /dev/null +++ b/uploads/1766058118709-Photo 28.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30430e08b449c6ef0a3191f76d763316957f931e60630e3e70112d1a8a20cabf +size 171577 diff --git a/uploads/1766058132956-WhatsApp Image 2025-12-17 at 1.16.29 PM.jpeg b/uploads/1766058132956-WhatsApp Image 2025-12-17 at 1.16.29 PM.jpeg new file mode 100644 index 0000000..a1af96d --- /dev/null +++ b/uploads/1766058132956-WhatsApp Image 2025-12-17 at 1.16.29 PM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fa95b026a5572e1981a34fa471c0db1ef5f7d5cd2a70ae3126eefe04877ba577 +size 270148 diff --git a/uploads/1766058179433-WhatsApp Image 2025-12-17 at 11.14.20 AM.jpeg b/uploads/1766058179433-WhatsApp Image 2025-12-17 at 11.14.20 AM.jpeg new file mode 100644 index 0000000..a1c33d6 --- /dev/null +++ b/uploads/1766058179433-WhatsApp Image 2025-12-17 at 11.14.20 AM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71d73cc2e658f634c63e967e84f9040be5ba6fc1e8711d0aaad4689689b7d06d +size 244264 diff --git a/uploads/1766058290034-WhatsApp Image 2025-12-17 at 1.20.15 PM.jpeg b/uploads/1766058290034-WhatsApp Image 2025-12-17 at 1.20.15 PM.jpeg new file mode 100644 index 0000000..dce7acd --- /dev/null +++ b/uploads/1766058290034-WhatsApp Image 2025-12-17 at 1.20.15 PM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9a998d16ba7715aebef07321902b0dbf7d79e5e218c1ad4e98e37f7a82a98bc +size 195839 diff --git a/uploads/1766058353154-WhatsApp Image 2025-12-17 at 1.16.24 PM.jpeg b/uploads/1766058353154-WhatsApp Image 2025-12-17 at 1.16.24 PM.jpeg new file mode 100644 index 0000000..a38c5aa --- /dev/null +++ b/uploads/1766058353154-WhatsApp Image 2025-12-17 at 1.16.24 PM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:545b067a2f79fe311739ee81b5e1996e7b39ee0a487c69195e73036fe7120e25 +size 388066 diff --git a/uploads/1766058376000-WhatsApp Image 2025-12-17 at 6.56.08 PM.jpeg b/uploads/1766058376000-WhatsApp Image 2025-12-17 at 6.56.08 PM.jpeg new file mode 100644 index 0000000..77d6d47 --- /dev/null +++ b/uploads/1766058376000-WhatsApp Image 2025-12-17 at 6.56.08 PM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:175b8d6158b2d800e0de03337810367e7d6f84eee5bffc1fab29449a9f2be425 +size 196030 diff --git a/uploads/1766058395987-WhatsApp Image 2025-12-17 at 10.23.09 AM (1).jpeg b/uploads/1766058395987-WhatsApp Image 2025-12-17 at 10.23.09 AM (1).jpeg new file mode 100644 index 0000000..67690a2 --- /dev/null +++ b/uploads/1766058395987-WhatsApp Image 2025-12-17 at 10.23.09 AM (1).jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2bc83397b5da254b5cde16bfb86012f150600d4cb1fc440519631fd80de47aaa +size 194412 diff --git a/uploads/1766058429903-WhatsApp Image 2025-12-17 at 10.23.09 AM (2).jpeg b/uploads/1766058429903-WhatsApp Image 2025-12-17 at 10.23.09 AM (2).jpeg new file mode 100644 index 0000000..dc74466 --- /dev/null +++ b/uploads/1766058429903-WhatsApp Image 2025-12-17 at 10.23.09 AM (2).jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:38c83d7a6909fc5404684fdb3aeb53858447bc4a30194d1176c7c5cb73e3f1e7 +size 155144 diff --git a/uploads/1766058519485-WhatsApp Image 2025-12-17 at 10.23.00 AM.jpeg b/uploads/1766058519485-WhatsApp Image 2025-12-17 at 10.23.00 AM.jpeg new file mode 100644 index 0000000..88ee172 --- /dev/null +++ b/uploads/1766058519485-WhatsApp Image 2025-12-17 at 10.23.00 AM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9196f24a766e07e8b3fb9e46a3a6e4b6ac583c2eb4521c50e9888bec2b5acd7 +size 695000 diff --git a/uploads/1766058540797-WhatsApp Image 2025-12-17 at 5.44.30 PM.jpeg b/uploads/1766058540797-WhatsApp Image 2025-12-17 at 5.44.30 PM.jpeg new file mode 100644 index 0000000..9f522d1 --- /dev/null +++ b/uploads/1766058540797-WhatsApp Image 2025-12-17 at 5.44.30 PM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:267eca9db020fabcb0479b64ab51cd76c26a0afeac137b8c0dae08b0cb77354f +size 266099 diff --git a/uploads/1766058565737-WhatsApp Image 2025-12-17 at 5.44.03 PM.jpeg b/uploads/1766058565737-WhatsApp Image 2025-12-17 at 5.44.03 PM.jpeg new file mode 100644 index 0000000..a8476bd --- /dev/null +++ b/uploads/1766058565737-WhatsApp Image 2025-12-17 at 5.44.03 PM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:670b1ab2113c16a332d369ace1c1bf5bd593d8410ebb3f420dee5687e4d459df +size 247663 diff --git a/uploads/1766137181418-WhatsApp Image 2025-12-17 at 11.14.21 AM.jpeg b/uploads/1766137181418-WhatsApp Image 2025-12-17 at 11.14.21 AM.jpeg new file mode 100644 index 0000000..b0e0b37 --- /dev/null +++ b/uploads/1766137181418-WhatsApp Image 2025-12-17 at 11.14.21 AM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ae818d036da6886c461772a64b4d1a0667937d178df2b3f8c3e2c54038a622a +size 376889 diff --git a/uploads/1766137224615-electro.png b/uploads/1766137224615-electro.png new file mode 100644 index 0000000..205f010 --- /dev/null +++ b/uploads/1766137224615-electro.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:061fb64bacdab2875d69fb93d173ea9e37660ddd8bb5a61470cb80c7ba82056f +size 38986 diff --git a/uploads/1766137282043-WhatsApp Image 2025-12-17 at 1.16.29 PM (1).jpeg b/uploads/1766137282043-WhatsApp Image 2025-12-17 at 1.16.29 PM (1).jpeg new file mode 100644 index 0000000..5c6c03e --- /dev/null +++ b/uploads/1766137282043-WhatsApp Image 2025-12-17 at 1.16.29 PM (1).jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:353a56addc86cf52057f96d712a1e9c284603e48cb6659b270d1795d9d844a65 +size 217645 diff --git a/uploads/1766137297588-WhatsApp Image 2025-12-17 at 1.16.29 PM.jpeg b/uploads/1766137297588-WhatsApp Image 2025-12-17 at 1.16.29 PM.jpeg new file mode 100644 index 0000000..c84ee09 --- /dev/null +++ b/uploads/1766137297588-WhatsApp Image 2025-12-17 at 1.16.29 PM.jpeg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b2c3909ccaf45150a8fdc370f6d345c1198151f6523d1016e2c8486e4ebdd6c +size 239400 diff --git a/utils/fileHandler.js b/utils/fileHandler.js new file mode 100644 index 0000000..ae0ca34 --- /dev/null +++ b/utils/fileHandler.js @@ -0,0 +1,15 @@ +const fs = require('fs').promises; +const path = require('path'); + +const dataPath = path.join(__dirname, '../data/applications.json'); + +const readApplications = async () => { + const data = await fs.readFile(dataPath, 'utf-8'); + return JSON.parse(data); +}; + +const writeApplications = async (data) => { + await fs.writeFile(dataPath, JSON.stringify(data, null, 2), 'utf-8'); +}; + +module.exports = { readApplications, writeApplications };