diff --git a/README.md b/README.md
index 4ac906833..8b1378917 100644
--- a/README.md
+++ b/README.md
@@ -1,211 +1 @@
-# Reactfolio V1.2 👩🏽🚀
-Reactfolio is a modern and customizable personal portfolio web template built using the popular React library. It provides an easy way for developers, designers, and creatives to showcase their work, skills, and achievements in a professiona and visually appealing way. With its responsive design and clean code, Reactfolio can be easily tailored to suit individual needs and preferences, making it an ideal choice for anyone looking to create a stunning online portfolio.
-
-
-
-
-
-Live demo here: reactfolio.tharindu.dev
-
-Readme here: tharindu.dev/portfolio/reactfolio/
-
-- [Features](#-features)
-- [Getting started](#-getting-started)
-- [Installation and Setup Instructions](#-installation-and-setup-instructions)
-- [Folder structure](#-folder-structure)
-- [Configurations](#-configurations)
-- [Google Analytics](#-google-analytics)
-- [Building the React App](#-building-the-react-app)
-- [FAQ](#-faq)
-- [Contribution](#-contribution)
-
-## 📙 Features
-
-- 📖 Multi-Page Layout
- - Home
- - About
- - Projects
- - Articles
- - Contact
-- 📱 Fully Responsive
-- 🛠 Easy configurations
-
-## 📚 Getting started
-
-Clone down this repository. You will need `NodeJS` and `git` installed globally on your machine.
-
-## 🛠 Installation and Setup Instructions
-
-1. Installation: `npm install`
-
-2. Run the project: `npm start`
-
-Runs the app in the development mode.\
-Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
-The page will reload if you make edits.
-
-## 📁 Folder structure
-
-- `/public`: publicly accessible contents (ex: images, media).
-- `/src`: all the components used in this project.
- - `/src/components/`: each reusable components of each pages.
- - `/src/data`: configurations of the web app.
- - `/src/pages`: pages that include in the web app.
-
-## ⚙️ Configurations
-
-Since this is a public and open source project, you can make any changes to it. If you are a ReactJS developer you can do it easily. But if you are a beginner, I have extracted the configurable data into a single directory, so you can edit the files in that directory to configure the entire web application.
-
-Directory: `/src/data/`
-
-- `user.js`
-
- From this you can change the content of each page of the web application.
-
-- `articles.js`
-
- From this you can add your articles to the web application.
-
- Instructions:
-
- - Add new article
-
- 1. Create a new function starts with `article_`. For example you can add new function named `article_3`.
-
- 2. Then add the data accordingly.
-
- - Add `` tag and it's closing tags in body.
- - In React there has no keyword `class`, so you should use `className` to define html classes.
-
- ```js
- function article_3() {
- return {
- date: "7 May 2023",
- title: "The Benefits of Cloud Computing",
- description: "Why businesses are turning to the cloud.",
- style: `
- .random-image {
- align-self: center;
- outline: 2px solid red;
- }
- `,
- body: (
-
-
-
- Content of article 1
-
-
-
-
- ),
- };
- }
- ```
-
- 3. In the last lines you will see an array to which you need to add your new `articles` function.
-
- ```js
- const myArticles = [article_1, article_2, article_3];
- ```
-
-- `seo.js`
-
- The SEO.js file is a module that contains an array of objects, with each object representing metadata for a specific page of a React website. The purpose of this file is to centralize and manage the SEO (Search Engine Optimization) information for different pages.
-
- Each object in the SEO array has the following properties:
-
- `page`: Represents the page name or identifier. It helps in mapping the SEO data to the appropriate page.
-
- `title`: Specifies the title of the page. This title is typically displayed in the browser's title bar and is an important element for search engines.
-
- `description`: Provides a concise and informative description of the page content. This description is often displayed in search engine results and can greatly influence click-through rates.
- keywords: Contains an array of keywords relevant to the page's content. Keywords can help search engines understand the topics covered on the page and can impact its visibility in search results.
- By storing the SEO information in the SEO.js file, you can easily manage and update the metadata for different pages of your React website. This approach allows you to keep the SEO data separate from the components and reuse it across the application, ensuring consistent and optimized metadata for each page.
-
- Example:
-
- ```js
- const SEO = [
- {
- page: "home",
- description:
- "I am a backend developer with expertise in Node.js. I have experience in building scalable, secure and reliable web applications using various frameworks and technologies.",
- keywords: ["Tharindu", "Tharindu N", "Tharindu Nayanajith"],
- },
- ];
- ```
-
-- `styles.css`
-
- From this you can change the font colors and font families of the web application.
-
- ```css
- :root {
- /* ------- colors ------- */
- --primary-color: #27272a;
- --secondary-color: #65656d;
- --tertiary-color: #acacb4;
- --quaternary-color: #e4e4e7;
- --link-color: #14b8a6;
- /* ---------------------- */
-
- /* ------- fonts ------- */
- --primary-font: "Heebo", sans-serif;
- --secondary-font: "Roboto", sans-serif;
- /* --------------------- */
- }
- ```
-
-## 📈 Google Analytics
-
-Add your Google Analytics 4 MEASUREMENT ID to `/src/data/tracking.js`.
-
-How to find the Google Analytics 4 MEASUREMENT ID ?
-
-[https://support.google.com/analytics/answer/9539598?hl=en](https://support.google.com/analytics/answer/9539598?hl=en)
-
-## 🚀 Building the React App
-
-To build the React app, you can use the `npm run build` command. This will create a production-ready build of your app in the `build/` directory.
-
-Here are the steps to follow:
-
-1. Open a terminal window and navigate to the root directory of your React app.
-2. Run the `npm run build` command to create a production build of your app. This will generate a static bundle of your app in the `build/` directory.
-3. Copy the contents of the `build/` directory to your server's public directory. You can do this using an FTP client or by running a command like `scp` to transfer the files to your server. Make sure to replace `example.com` and `/var/www/html` with your server's domain name and public directory, respectively:
-
- ```bash
- scp -r build/* user@example.com:/var/www/html
- ```
-
-4. Your portfolio app should now be accessible from your server's domain name. You can verify this by opening a web browser and navigating to http://example.com (replace example.com with your server's domain name).
-
-That's it! Your React portfolio app should now be up and running on your server. Note that you may need to configure your server's web server (e.g., Apache or Nginx) to serve the index.html file in the build/ directory as the default page for your domain.
-
-## 🤔 FAQ
-
-**Q1. Subpages can only be accessed through links on the homepage or navigation bar, but those pages are not accessible through direct links.**
-
-If you are using Apache as your web server, you can insert this into your .htaccess file:
-
-```c
-
- RewriteEngine On
- RewriteBase /
- RewriteRule ^index\.html$ - [L]
- RewriteCond %{REQUEST_FILENAME} !-f
- RewriteCond %{REQUEST_FILENAME} !-d
- RewriteCond %{REQUEST_FILENAME} !-l
- RewriteRule . /index.html [L]
-
-```
-
-## 🌱 Contribution
-
-If you have any suggestions on what to improve in Reactfolio and would like to share them, feel free to leave an issue or fork project to implement your own ideas
diff --git a/package-lock.json b/package-lock.json
index e95ac91d4..8358321c6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -17,6 +17,9 @@
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
+ "caniuse-lite": "^1.0.30001607",
+ "dotenv": "^16.4.5",
+ "emailjs-com": "^3.2.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-ga4": "^2.1.0",
@@ -24,6 +27,7 @@
"react-router-dom": "^6.11.1",
"react-scripts": "5.0.1",
"styled-components": "^5.3.10",
+ "tailwindcss": "^3.4.1",
"web-vitals": "^2.1.4"
}
},
@@ -5770,9 +5774,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001482",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001482.tgz",
- "integrity": "sha512-F1ZInsg53cegyjroxLNW9DmrEQ1SuGRTO1QlpA0o2/6OpQ0gFeDRoq1yFmnr8Sakn9qwwt9DmbxHB6w167OSuQ==",
+ "version": "1.0.30001607",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001607.tgz",
+ "integrity": "sha512-WcvhVRjXLKFB/kmOFVwELtMxyhq3iM/MvmXcyCe2PNf166c39mptscOc/45TTS96n2gpNV2z7+NakArTWZCQ3w==",
"funding": [
{
"type": "opencollective",
@@ -6918,11 +6922,14 @@
}
},
"node_modules/dotenv": {
- "version": "10.0.0",
- "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz",
- "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==",
+ "version": "16.4.5",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz",
+ "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==",
"engines": {
- "node": ">=10"
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://dotenvx.com"
}
},
"node_modules/dotenv-expand": {
@@ -6959,6 +6966,15 @@
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.382.tgz",
"integrity": "sha512-czMavlW52VIPgutbVL9JnZIZuFijzsG1ww/1z2Otu1r1q+9Qe2bTsH3My3sZarlvwyqHM6+mnZfEnt2Vr4dsIg=="
},
+ "node_modules/emailjs-com": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/emailjs-com/-/emailjs-com-3.2.0.tgz",
+ "integrity": "sha512-Prbz3E1usiAwGjMNYRv6EsJ5c373cX7/AGnZQwOfrpNJrygQJ15+E9OOq4pU8yC977Z5xMetRfc3WmDX6RcjAA==",
+ "deprecated": "The SDK name changed to @emailjs/browser",
+ "engines": {
+ "node": ">=12.0.0"
+ }
+ },
"node_modules/emittery": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz",
@@ -8034,9 +8050,9 @@
"integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
},
"node_modules/fast-glob": {
- "version": "3.2.12",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
- "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -11689,9 +11705,9 @@
}
},
"node_modules/jiti": {
- "version": "1.18.2",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz",
- "integrity": "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==",
+ "version": "1.21.0",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
+ "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
"bin": {
"jiti": "bin/jiti.js"
}
@@ -14652,6 +14668,14 @@
}
}
},
+ "node_modules/react-scripts/node_modules/dotenv": {
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz",
+ "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==",
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/react-side-effect": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz",
@@ -16026,19 +16050,19 @@
"integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="
},
"node_modules/tailwindcss": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz",
- "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==",
+ "version": "3.4.1",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz",
+ "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==",
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2",
"chokidar": "^3.5.3",
"didyoumean": "^1.2.2",
"dlv": "^1.1.3",
- "fast-glob": "^3.2.12",
+ "fast-glob": "^3.3.0",
"glob-parent": "^6.0.2",
"is-glob": "^4.0.3",
- "jiti": "^1.18.2",
+ "jiti": "^1.19.1",
"lilconfig": "^2.1.0",
"micromatch": "^4.0.5",
"normalize-path": "^3.0.0",
@@ -16050,7 +16074,6 @@
"postcss-load-config": "^4.0.1",
"postcss-nested": "^6.0.1",
"postcss-selector-parser": "^6.0.11",
- "postcss-value-parser": "^4.2.0",
"resolve": "^1.22.2",
"sucrase": "^3.32.0"
},
diff --git a/package.json b/package.json
index c8fcdbdd5..e5ec82872 100644
--- a/package.json
+++ b/package.json
@@ -18,6 +18,9 @@
"@testing-library/jest-dom": "^5.16.5",
"@testing-library/react": "^13.4.0",
"@testing-library/user-event": "^13.5.0",
+ "caniuse-lite": "^1.0.30001607",
+ "dotenv": "^16.4.5",
+ "emailjs-com": "^3.2.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-ga4": "^2.1.0",
@@ -25,6 +28,7 @@
"react-router-dom": "^6.11.1",
"react-scripts": "5.0.1",
"styled-components": "^5.3.10",
+ "tailwindcss": "^3.4.1",
"web-vitals": "^2.1.4"
},
"scripts": {
diff --git a/public/RavkeeratSinghCV.pdf b/public/RavkeeratSinghCV.pdf
new file mode 100644
index 000000000..c38427f58
Binary files /dev/null and b/public/RavkeeratSinghCV.pdf differ
diff --git a/public/index.html b/public/index.html
index 3fdf6203b..3e7a7178a 100644
--- a/public/index.html
+++ b/public/index.html
@@ -5,7 +5,7 @@
- Reactfolio
+ Ravkeerat Singh Portfolio
diff --git a/src/App.js b/src/App.js
index 0ad30befb..0487b8e9e 100644
--- a/src/App.js
+++ b/src/App.js
@@ -5,8 +5,7 @@ import ReactGA from "react-ga4";
import Homepage from "./pages/homepage";
import About from "./pages/about";
import Projects from "./pages/projects";
-import Articles from "./pages/articles";
-import ReadArticle from "./pages/readArticle";
+
import Contact from "./pages/contact";
import Notfound from "./pages/404";
@@ -26,8 +25,6 @@ function App() {
} />
} />
} />
- } />
- } />
} />
} />
diff --git a/src/app.css b/src/app.css
index aec0543b7..2fd832f17 100644
--- a/src/app.css
+++ b/src/app.css
@@ -65,10 +65,6 @@
margin-top: 25px;
}
-.page-footer {
- position: block;
-}
-
.page-footer::before {
content: "";
position: absolute;
diff --git a/src/components/about/socials.jsx b/src/components/about/socials.jsx
index 70f403262..503152127 100644
--- a/src/components/about/socials.jsx
+++ b/src/components/about/socials.jsx
@@ -1,12 +1,7 @@
import React from "react";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faEnvelope } from "@fortawesome/free-solid-svg-icons";
-import {
- faTwitter,
- faGithub,
- faLinkedin,
- faInstagram,
-} from "@fortawesome/free-brands-svg-icons";
+import { faGithub, faLinkedin } from "@fortawesome/free-brands-svg-icons";
import INFO from "../../data/user";
@@ -15,17 +10,7 @@ import "./styles/socials.css";
const Socials = () => {
return (
-
+ >
);
};
diff --git a/src/pages/projects.jsx b/src/pages/projects.jsx
index 9c423b230..b3df1f154 100644
--- a/src/pages/projects.jsx
+++ b/src/pages/projects.jsx
@@ -1,9 +1,11 @@
import React, { useEffect } from "react";
import { Helmet } from "react-helmet";
+import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
+import { faGithub } from "@fortawesome/free-brands-svg-icons";
+import { faArrowRight } from "@fortawesome/free-solid-svg-icons";
import NavBar from "../components/common/navBar";
import Footer from "../components/common/footer";
-import Logo from "../components/common/logo";
import AllProjects from "../components/projects/allProjects";
import INFO from "../data/user";
@@ -28,43 +30,37 @@ const Projects = () => {
content={currentSEO.keywords.join(", ")}
/>
+
+
+
+
Projects
-
-
-
-
-
-
-
+
+ Here, you'll find a curated list of projects I've
+ developed using the{" "}
+
+ MERN (MongoDB, Express.js, React.js, Node.js) stack
+
+ . These projects showcase my proficiency in building
+ full-stack web applications, employing modern
+ technologies and best practices. One of the notable
+ projects is my{" "}
+ Capstone project, "Time Master", which
+ demonstrates my skills in creating user-centric
+ applications for efficient time management.
-
-
- Things I’ve made trying to put my dent in the
- universe.
-
-
- I've worked on a variety of projects over the years
- and I'm proud of the progress I've made. Many of
- these projects are open-source and available for
- others to explore and contribute to. If you're
- interested in any of the projects I've worked on,
- please feel free to check out the code and suggest
- any improvements or enhancements you might have in
- mind. Collaborating with others is a great way to
- learn and grow, and I'm always open to new ideas and
- feedback.
-