Skip to content

Instantly share code, notes, and snippets.

@MuhammadZohair
Last active March 5, 2023 19:00
Show Gist options
  • Select an option

  • Save MuhammadZohair/1166d979a25107141141bd8ab4b79a2c to your computer and use it in GitHub Desktop.

Select an option

Save MuhammadZohair/1166d979a25107141141bd8ab4b79a2c to your computer and use it in GitHub Desktop.
Personal Portfolio Documentation

Muhammad Zohair - Portfolio

Hello, and welcome to my personal portfolio documentation! In this documentation I will cover the process and mechnism to create linking between front end and the backend.

Front end is created in Javascript using React JS framework while backend is created in JAVA using Spring Boot framework

If you have any questions please feel free to reach out on my email [email protected] or contact me using my phone number: +92 331 504 15 93.
Shield1 Shield1 Shield1 Shield1



API Url

http://zohairportfolio-env.eba-psgpkwd4.ap-south-1.elasticbeanstalk.com/zohair_portfolio

Swagger Url

http://zohairportfolio-env.eba-psgpkwd4.ap-south-1.elasticbeanstalk.com/zohair_portfolio/swagger-ui/index.html#

Downloads:


1.0 Home Page

The first page is the home. Below is the full image of the page. Home page shows the introduction of the profile and floating icons of the tech stack which I use. I will discuss each components one by one in the later paragraphs.

End Point: [GET] /api/v1/home-page/

HomeScreen Figure 1.0.0

{
  "cvDownload": {
    "linkId": "string",
    "linkName": "string",
    "linkUrl": "string",
    "pictureUrl": "string"
  },
  "flags": [
    {
      "flagId": "string",
      "flagTitle": "string",
      "flagValue": true
    }
  ],
  "floatingIcons": [
    {
      "iconId": "string",
      "iconTitle": "string",
      "pictureUrl": "string"
    }
  ],
  "introPicture": {
    "linkId": "string",
    "linkName": "string",
    "linkUrl": "string",
    "pictureUrl": "string"
  },
  "introTexts": [
    {
      "colorCode": "string",
      "fontName": "string",
      "isBold": true,
      "isItalic": true,
      "isUnderlined": true,
      "sortingOrder": 0,
      "textData": "string",
      "textId": "string",
      "textTitle": "string"
    }
  ],
  "punchLineTexts": [
    {
      "colorCode": "string",
      "fontName": "string",
      "isBold": true,
      "isItalic": true,
      "isUnderlined": true,
      "sortingOrder": 0,
      "textData": "string",
      "textId": "string",
      "textTitle": "string"
    }
  ],
  "scheduleMeeting": {
    "linkId": "string",
    "linkName": "string",
    "linkUrl": "string",
    "pictureUrl": "string"
  },
  "socialMediaIcons": [
    {
      "linkId": "string",
      "linkName": "string",
      "linkUrl": "string",
      "pictureUrl": "string"
    }
  ]
}

code snippet 1.0.0

1.1 Menu Bar

MenuBar Figure 1.1.0

At the top you can see there is a menu bar This is static text which needs to be hard coded from the frontend side.

1.2 Login / Signup Buttons

LoginSignup

Figure 1.2.0

The login and signup button images/text is static and needs to be hard coded while the visibility of this component has to be handled from the backend API as show in the code snippet 1.2.1.

"flags": [
    {
      "flagId": "string",
      "flagTitle": "string",
      "flagValue": true
    }
  ]

code snippet 1.2.0

1.3 Intro Text & Intro Image

IntroTextImage

Figure 1.3.0

Intro Picture

"introPicture": {
    "linkId": "string",
    "linkName": "string",
    "linkUrl": "string",
    "pictureUrl": "string"
  }

code snippet 1.3.0

Intro Text

"introTexts": [
    {
      "colorCode": "string",
      "fontName": "string",
      "isBold": true,
      "isItalic": true,
      "isUnderlined": true,
      "sortingOrder": 0,
      "textData": "string",
      "textId": "string",
      "textTitle": "string"
    }
  ]

code snippet 1.3.1

Please note that the intro text is an array of text and needs to be handled accordingly as you can see that the Intro text "Hello World" is of diffrent color then "I am" is of different color, similarly "Muhammad Zohair" is of different color and bold text. These texts are divided into text blocks with text styling.

1.4 Take me on board

TakeMeOnBoard

Figure 1.4.0

This text and icon is as a whole clickable and will open a form as shown in figure 1.4.1 below.

TakeMeOnBoard

Figure 1.4.1

Following is the data which is available in API to make Schedule Meeting & Download CV functional.

"cvDownload": {
    "linkId": "string",
    "linkName": "string",
    "linkUrl": "string",
    "pictureUrl": "string"
  },
"scheduleMeeting": {
    "linkId": "string",
    "linkName": "string",
    "linkUrl": "string",
    "pictureUrl": "string"
  }

code snippet 1.4.0

1.5 Submit Query

Name & Email field is mandatory for the user to enter, Once the user clicks on submit following data will be passed to API

End Point: [POST] /api/v1/home-page/submit-query
{
   "name":"String",
   "email":"String",
   "message":"String"
}

code snippet 1.5.0

1.6 Gif Icons

Following icons are gifs and should be moving not static in the code.

GifIcons

Figure 1.6.0

Please download the gifs from Here

1.7 Floating Icons

The icons which will be floating in the background of home page should only be floating behind home screen boundaries and should back bounce from the corners Following is the code snippet for icons

"floatingIcons": [
    {
      "iconId": "string",
      "iconTitle": "string",
      "pictureUrl": "string"
    }
  ]

code snippet 1.7.0


2.0 Social Media Sticky Icons

Social Media Icons on the right end will be sticky with scrolling as showin in the figure below. These icons are clickable and their click action URL is also given in the json file.

End Point: [GET] /api/v1/home-page/

SocialMediaIcons

Figure 2.0.0

Hyperlinks for these icons is available in the home api as per following json code snippet

"socialMediaIcons": [
    {
      "linkId": "string",
      "linkName": "string",
      "linkUrl": "string",
      "pictureUrl": "string"
    }
  ]

code snippet 2.0.0


3.0 Projects

The second page is the projects. Below is the full image of the page. Project section displays the top picks of the categories. Right now there are in total 3 categories, each will show at max of 6 projects and will be scrollable horizontally.

End Point: [GET] /api/v1/projects/

Image

Figure 3.0.0

3.1 Project Categories

As you can see in the figure 2.0.0 there are in total 3 categories of projects; Crown jewels (also referred as top-projects), Long-standing(also referred as legacy) and Probono.

To fetch top projects:

End Point: [GET] /api/v1/projects/{tag}/{limit}

Tag refers to the category mentioned above and the limit will be 6 by default, so for example if we want to fetch Crown jewels, the end point will be:

[GET] /api/v1/projects/top-projects/6
  • For legacy:
[GET] /api/v1/projects/legacy/6
  • For probono:
[GET] /api/v1/projects/probono/6

The API response will be as follows. There is an array of projects and each project will have attributes (not all attributes will be required in this screen)

[
  {
    "briefDesc": "string",
    "clientName": "string",
    "detailedDesc": "string",
    "duration": "string",
    "endDate": 0,
    "projectAppGalleryUrl": "string",
    "projectAppStoreUrl": "string",
    "projectCategory": "string",
    "projectId": "string",
    "projectLocation": "string",
    "projectMedia": [
      {
        "fileLink": "string",
        "height": 0,
        "mediaId": "string",
        "size": 0,
        "width": 0
      }
    ],
    "projectName": "string",
    "projectPlayStoreUrl": "string",
    "projectTitle": "string",
    "projectUrl": "string",
    "startDate": 0,
    "tags": "string"
  }
]

code snippet 3.0.0


4.0 Expertise

The third page is the expertise. Below is the full image of the page. Expertise section displays the all the skills and technologies which I have used or have hands on experience on. The image scroller will NOT auto scroll instead the user will be able to scroll by the buttons or the holding the cursor and moving left or right animation. Also if any tab is selected/ clicked then its data will be displayed.

To fetch expertise:

End Point: [GET] /api/v1/expertise

Image

API response:

[
  {
    "briefDesc": "string",
    "detailedDesc": "string",
    "expTitle": "string",
    "experience": "string",
    "expertiseId": "string",
    "isEnabled": true,
    "pictureUrl": "string"
  }
]

code snippet 4.0.0


5.0 Work Timeline

To fetch work timeline:

End Point: [GET] /api/v1/work-history

Image

API response:

[
  {
    "briefDesc": "string",
    "companyName": "string",
    "companyWebsite": "string",
    "designation": "string",
    "detailedDesc": "string",
    "endingDate": "string",
    "endingYear": 0,
    "isEnabled": true,
    "location": "string",
    "pictureUrl": "string",
    "startingDate": "string",
    "startingYear": 0,
    "workHistoryId": "string"
  }
]

code snippet 5.0.0


6.0 Education & Certifications

To fetch education and certifications:

End Point: [GET] /api/v1/academics

Image

API response:

[
  {
    "academicId": "string",
    "academicType": 0,
    "dateCreated": 0,
    "dateUpdated": 0,
    "degreeName": "string",
    "endingDate": "string",
    "institutionName": "string",
    "isEnabled": true,
    "pictureUrl": "string",
    "sortingOrder": 0,
    "startingDate": "string",
    "validationUrl": "string"
  }
]

code snippet 6.0.0


7.0 About Me

This section have a lot of data inside and is the most important of all. The page can be divided into 2 sections mainly. On the left there are buttons with dynamic links which are being given in the API response. Firstly there is the Image, the URL for that image is "myPictureUrl". Then Buy me a coffee for that you have to get json from object "buyMeCoffee". All the naming convention is self explainatory.

To fetch about-me:

End Point: [GET] /api/v1/about-me

Image

API Response:

{
  "aboutMeDesc": [
    {
      "colorCode": "string",
      "fontName": "string",
      "isBold": true,
      "isItalic": true,
      "isUnderlined": true,
      "sortingOrder": 0,
      "textData": "string",
      "textId": "string",
      "textTitle": "string"
    }
  ],
  "buyMeCoffee": {
    "linkId": "string",
    "linkName": "string",
    "linkUrl": "string",
    "pictureUrl": "string"
  },
  "coreSkillsText": [
    {
      "colorCode": "string",
      "fontName": "string",
      "isBold": true,
      "isItalic": true,
      "isUnderlined": true,
      "sortingOrder": 0,
      "textData": "string",
      "textId": "string",
      "textTitle": "string"
    }
  ],
  "cvDownload": {
    "linkId": "string",
    "linkName": "string",
    "linkUrl": "string",
    "pictureUrl": "string"
  },
  "designationText": [
    {
      "colorCode": "string",
      "fontName": "string",
      "isBold": true,
      "isItalic": true,
      "isUnderlined": true,
      "sortingOrder": 0,
      "textData": "string",
      "textId": "string",
      "textTitle": "string"
    }
  ],
  "developmentStats": {
    "dailyAverage": "string",
    "totalDevelopmentHours": "string"
  },
  "fiverr": {
    "linkId": "string",
    "linkName": "string",
    "linkUrl": "string",
    "pictureUrl": "string"
  },
  "freelancer": {
    "linkId": "string",
    "linkName": "string",
    "linkUrl": "string",
    "pictureUrl": "string"
  },
  "hackerRankStats": {
    "totalSolved": 0
  },
  "leetCodeStats": {
    "acceptanceRate": 0,
    "contributionGraph": {
      "additionalProp1": {},
      "additionalProp2": {},
      "additionalProp3": {}
    },
    "contributionPoints": 0,
    "leetCodeUrl": "string",
    "message": "string",
    "ranking": 0,
    "reputation": 0,
    "totalSolved": 0
  },
  "myPictureUrl": "string",
  "nameText": [
    {
      "colorCode": "string",
      "fontName": "string",
      "isBold": true,
      "isItalic": true,
      "isUnderlined": true,
      "sortingOrder": 0,
      "textData": "string",
      "textId": "string",
      "textTitle": "string"
    }
  ],
  "scheduleMeeting": {
    "linkId": "string",
    "linkName": "string",
    "linkUrl": "string",
    "pictureUrl": "string"
  },
  "upwork": {
    "linkId": "string",
    "linkName": "string",
    "linkUrl": "string",
    "pictureUrl": "string"
  }
}

code snippet 7.0.0

7.1 Textual Representation

On the right side there are in total 4 type of texts:

- Name (nameText)
- Designation Text (designationText)
- Core Skills (coreSkillsText)
- AboutMe Description (aboutMeDesc)

Each text block has its own array of text, this is very similar to the text logic in the home-page, please refer to that if you have any confusion.

7.3 Coding Heat Map

🔴❗ **Not available right now (Still underdevelopment)**❗🔴

7.4 Development Status

Development stats are the circles which are showin in the figure 7.0.0 Right now it is only 2 circles which shows HackerRank and LeetCode but later on there will be more and will be scrolling within the view. These circles shows the total number of solved questions and can be fetched from the API with the key hackerRankStats & leetCodeStats respectively. Adjacent to these circles there are two text blocks which shows total development hours and daily average. These can be fetched from the same API with the key developmentStats.

7.5 Footer

In the footer there are two buttons, Let's connect and Back to Top Lets connect shows the same popup showed in figure 1.4.1. While Back to Top scrolls user to top of the page with a speedy animation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment