diff --git a/package-lock.json b/package-lock.json
index 49a1b60..0bb0c08 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,11 +14,13 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-icons": "^5.2.1",
+ "react-router-dom": "^6.26.0",
"react-scripts": "5.0.1",
"vercel": "^34.3.0",
"web-vitals": "^2.1.4"
},
"devDependencies": {
+ "@babel/plugin-proposal-private-methods": "^7.16.7",
"tailwindcss": "^3.4.4"
}
},
@@ -3767,6 +3769,14 @@
}
}
},
+ "node_modules/@remix-run/router": {
+ "version": "1.19.0",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.0.tgz",
+ "integrity": "sha512-zDICCLKEwbVYTS6TjYaWtHXxkdoUvD/QXvyVZjGCsWz5vyH7aFeONlPffPdW+Y/t6KT0MgXb2Mfjun9YpWN1dA==",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/@rollup/plugin-babel": {
"version": "5.3.1",
"resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz",
@@ -18023,6 +18033,36 @@
"node": ">=0.10.0"
}
},
+ "node_modules/react-router": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.0.tgz",
+ "integrity": "sha512-wVQq0/iFYd3iZ9H2l3N3k4PL8EEHcb0XlU2Na8nEwmiXgIUElEH6gaJDtUQxJ+JFzmIXaQjfdpcGWaM6IoQGxg==",
+ "dependencies": {
+ "@remix-run/router": "1.19.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.0.tgz",
+ "integrity": "sha512-RRGUIiDtLrkX3uYcFiCIxKFWMcWQGMojpYZfcstc63A1+sSnVgILGIm9gNUA6na3Fm1QuPGSBQH2EMbAZOnMsQ==",
+ "dependencies": {
+ "@remix-run/router": "1.19.0",
+ "react-router": "6.26.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
+ }
+ },
"node_modules/react-scripts": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-5.0.1.tgz",
diff --git a/package.json b/package.json
index 8352eaf..5a2bbec 100644
--- a/package.json
+++ b/package.json
@@ -9,6 +9,7 @@
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-icons": "^5.2.1",
+ "react-router-dom": "^6.26.0",
"react-scripts": "5.0.1",
"vercel": "^34.3.0",
"web-vitals": "^2.1.4"
@@ -38,7 +39,7 @@
]
},
"devDependencies": {
- "tailwindcss": "^3.4.4",
- "@babel/plugin-proposal-private-methods": "^7.16.7"
+ "@babel/plugin-proposal-private-methods": "^7.16.7",
+ "tailwindcss": "^3.4.4"
}
}
diff --git a/src/Name/Name.js b/src/Name/Name.js
index e48c1eb..cdc499d 100644
--- a/src/Name/Name.js
+++ b/src/Name/Name.js
@@ -5,6 +5,9 @@ function Name() {
Khushaal
Nandwani
+
+ {/* Subtitle */}
+
Software Developer
);
diff --git a/src/Sections/Projects/ProjectSelector.js b/src/Sections/Projects/ProjectSelector.js
index e7fa594..4ef9c76 100644
--- a/src/Sections/Projects/ProjectSelector.js
+++ b/src/Sections/Projects/ProjectSelector.js
@@ -6,11 +6,13 @@ import ExperienceData from './ExperienceData';
import Frogger from './Frogger';
import RaffleManager from './RaffleManager';
import TPTracker from './TPTracker';
+import TallyToSQL from './TallyToSQL';
const ProjectsDescription = ({ selectedProject }) => {
return (
+ {selectedProject === 'tallyToSQL' &&
}
{selectedProject === 'proxiee' &&
}
{selectedProject === 'learningEngine' &&
}
{selectedProject === 'questionSuggester' &&
}
diff --git a/src/Sections/Projects/ProjectsList.js b/src/Sections/Projects/ProjectsList.js
index e2d658a..5996ad5 100644
--- a/src/Sections/Projects/ProjectsList.js
+++ b/src/Sections/Projects/ProjectsList.js
@@ -4,6 +4,7 @@ function ProjectsList({ handleLinkClick }) {
return (
handleLinkClick('proxiee', 1)}>
Proxiee
Python, Flask
+
handleLinkClick('tallyToSQL', 1)}>
Tally To SQL
XML, SQL
handleLinkClick('learningEngine', 1)}>
Learning Engine
Python, Flask
handleLinkClick('questionSuggester', 1)}>
Question Suggestor
Python, MatPlotLib, SciPy
handleLinkClick('experienceData', 1)}>
Experience Data
Python, Flask
diff --git a/src/Sections/Projects/Proxiee.js b/src/Sections/Projects/Proxiee.js
index 736a3cd..0039dd4 100644
--- a/src/Sections/Projects/Proxiee.js
+++ b/src/Sections/Projects/Proxiee.js
@@ -1,18 +1,32 @@
+import GithubLink from "./_Github";
+
const Proxiee = () => {
- return (
-
-
Proxiee
-
Python, Flask
-
Engineered a secure server gateway, Proxiee, enabling company developers to access online
-APIs such as ChatGPT and those of online internal products through a locally hosted server connected to an internet-enabled
-server.
-
Implemented support for all HTTP method types, integrated API access restrictions, and designed an au-
-thentication system to ensure secure connections along with an extensive logging system and a log analysis
-tool.
-
Has a config file, to assign users credentials, store Authorization keys and dynamically add headers specific to APIs
-
- );
-}
+ return (
+
+
+
Python, Flask
+
+ Engineered a secure server gateway, Proxiee, enabling company developers
+ to access online APIs such as ChatGPT and those of online internal
+ products through a locally hosted server connected to an
+ internet-enabled server.
+
+
+ Implemented support for all HTTP method types, integrated API access
+ restrictions, and designed an au- thentication system to ensure secure
+ connections along with an extensive logging system and a log analysis
+ tool.
+
+
+ Has a config file, to assign users credentials, store Authorization keys
+ and dynamically add headers specific to APIs{" "}
+
+
+ );
+};
export default Proxiee;
-export const tags = ['Python', 'Flask', 'Backend'];
\ No newline at end of file
+export const tags = ["Python", "Flask", "Backend"];
diff --git a/src/Sections/Projects/RaffleManager.js b/src/Sections/Projects/RaffleManager.js
index 0a6f00f..64b327b 100644
--- a/src/Sections/Projects/RaffleManager.js
+++ b/src/Sections/Projects/RaffleManager.js
@@ -1,13 +1,28 @@
+import GithubLink from "./_Github"
+
const RaffleManager = () => {
- return (
-
+ return (
+
+
Raffle Manager
-
Java, MySQL, AWS
-
A Java application to manager raffles, having a participant and an admin side. Create raffles, add participants, and draw winners.
-
Developed with a team of 7. Followed clean coding practices, used design patterns, and satisfied SOLID principles with an easy-to-follow package structure.
-
Hosted using Amazon Web Services (AWS) queried using MySQL. Linked to the Java app using JDBC connector and managed using MySQL Workbench.
-
- );
-}
+
+
+
Java, MySQL, AWS
+
+ A Java application to manager raffles, having a participant and an admin
+ side. Create raffles, add participants, and draw winners.
+
+
+ Developed with a team of 7. Followed clean coding practices, used design
+ patterns, and satisfied SOLID principles with an easy-to-follow package
+ structure.
+
+
+ Hosted using Amazon Web Services (AWS) queried using MySQL. Linked to
+ the Java app using JDBC connector and managed using MySQL Workbench.
+
+
+ );
+};
-export default RaffleManager;
\ No newline at end of file
+export default RaffleManager;
diff --git a/src/Sections/Projects/TPTracker.js b/src/Sections/Projects/TPTracker.js
index d72ed43..a3fdc23 100644
--- a/src/Sections/Projects/TPTracker.js
+++ b/src/Sections/Projects/TPTracker.js
@@ -1,7 +1,12 @@
+import GithubLink from "./_Github";
+
const TPTracker = () => {
return (
-
-
Toilet Paper Tracker
+
+
+
Toilet Paper Tracker
+
+
Python, Adruino
A hardware project made in TartanHacks using Arduino and Python which read live data from the Arduino circuit to detect when the toilet paper would run out.
Once the toilet paper runs out, an email is sent using smtplib, ssl certified to the custodial staff.
diff --git a/src/Sections/Projects/TallyToSQL.js b/src/Sections/Projects/TallyToSQL.js
new file mode 100644
index 0000000..9f64c61
--- /dev/null
+++ b/src/Sections/Projects/TallyToSQL.js
@@ -0,0 +1,22 @@
+import GithubLink from "./_Github"
+
+const TallyToSQL = () => {
+ return (
+
+
+
XML, SQL, Python
+
Developed a Python script to convert Tally - the largest software accounting software in India - export format XML files to an SQL database.
+
Used SQL queries to create tables and insert data into the database while providing an interactive GUI.
+
Wrote XLST scripts, to clean and modify the XML files
+
+
+
+
+ );
+};
+
+export default TallyToSQL;
+export const tags = ["XML", "SQL", "Python"];
diff --git a/src/Sections/Projects/_Github.js b/src/Sections/Projects/_Github.js
new file mode 100644
index 0000000..b6192cb
--- /dev/null
+++ b/src/Sections/Projects/_Github.js
@@ -0,0 +1,19 @@
+import { FaGithub } from "react-icons/fa";
+
+const GithubLink = ({ link }) => {
+ const handleGithubClick = () => {
+ window.open(link, "_blank");
+ };
+
+ return (
+
+
+
+ );
+};
+
+export default GithubLink;
\ No newline at end of file
diff --git a/src/Sections/SectionContainer.js b/src/Sections/SectionContainer.js
index 48075f1..d4a4712 100644
--- a/src/Sections/SectionContainer.js
+++ b/src/Sections/SectionContainer.js
@@ -18,6 +18,7 @@ function SectionContainer() {
projects: "projects",
experience: "experience",
// projects
+ tallyToSQL: "tallyToSQL",
proxiee: "proxiee",
learningEngine: "learningEngine",
questionSuggester: "questionSuggester",
diff --git a/src/Sections/SectionList.js b/src/Sections/SectionList.js
index 0228478..1e9c140 100644
--- a/src/Sections/SectionList.js
+++ b/src/Sections/SectionList.js
@@ -1,6 +1,7 @@
import React from "react";
function SectionList({ handleLinkClick }) {
+ const ResumeLink = "https://drive.google.com/file/d/1tUCYltf8Im0r27ai1YvUVXlqEmFcDh26/view?usp=share_link"
return (
);
}
diff --git a/src/SourceText.json b/src/SourceText.json
deleted file mode 100644
index ebce0a8..0000000
--- a/src/SourceText.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "name": {
- "firstname": "Khushaal",
- "lastname": "Nandwani"
- },
- "about": "Mature Full Stack Developer ",
- "links": {
- "resume": {
- "link": "www.google.com",
- "description": "Resume"
- },
- "linkedin": {
- "link": "www.linkedin.com",
- "description": "LinkedIn"
- },
- "github": {
- "link": "www.github.com",
- "description": "GitHub"
- }
- }
-}
\ No newline at end of file
diff --git a/src/Tip/Tip.js b/src/Tip/Tip.js
index d0148b4..abb16ed 100644
--- a/src/Tip/Tip.js
+++ b/src/Tip/Tip.js
@@ -14,7 +14,7 @@ function Tip({ message, duration }) {
return (
-
{message}