├── .gitignore
├── LICENSE
├── README.md
├── build
├── bundle.js
├── media
│ ├── deeptiman.png
│ ├── github.png
│ ├── github_logo.png
│ ├── github_text.png
│ ├── linkedin.png
│ ├── linkedin_text.png
│ ├── medium.png
│ ├── medium_logo.png
│ ├── medium_text.png
│ ├── mobile_skills.png
│ ├── portfolio.png
│ ├── skills.png
│ ├── stackoverflow.png
│ ├── stackoverflow_text.png
│ ├── twitter.png
│ └── twitter_text.png
└── public
│ ├── client_bundle.js
│ └── media
│ ├── deeptiman.png
│ ├── github.png
│ ├── github_logo.png
│ ├── github_text.png
│ ├── linkedin.png
│ ├── linkedin_text.png
│ ├── medium.png
│ ├── medium_logo.png
│ ├── medium_text.png
│ ├── mobile_skills.png
│ ├── portfolio.png
│ ├── skills.png
│ ├── stackoverflow.png
│ ├── stackoverflow_text.png
│ ├── twitter.png
│ └── twitter_text.png
├── database
└── projects.json
├── package.json
├── screenshots
└── banner_my_portfolio.png
├── src
├── client
│ ├── App.css
│ ├── App.js
│ ├── App.test.js
│ ├── actions
│ │ ├── constants.js
│ │ └── index.js
│ ├── components
│ │ ├── ContactComponent.js
│ │ ├── DashboardComponent.js
│ │ ├── ProfileComponent.js
│ │ ├── ProjectsComponent.js
│ │ └── TechnicalSkillsComponent.js
│ ├── images
│ │ ├── alphabet_app.png
│ │ ├── android_studio.png
│ │ ├── beat_station.png
│ │ ├── burp_suite.png
│ │ ├── deeptiman.png
│ │ ├── deeptiman_pattnaik_profile.png
│ │ ├── dictionary_banner.png
│ │ ├── fellowprap_banner.png
│ │ ├── fellowregister_banner.png
│ │ ├── github.png
│ │ ├── github_logo.png
│ │ ├── github_text.png
│ │ ├── golang.png
│ │ ├── golang_logo.png
│ │ ├── hyperledger_multi_org_banner.png
│ │ ├── hyperledger_offchain_data_banner.png
│ │ ├── hyperledger_private_org_banner.png
│ │ ├── hyperledger_single_org.png
│ │ ├── linkedin.png
│ │ ├── linkedin_text.png
│ │ ├── medium.png
│ │ ├── medium_logo.png
│ │ ├── medium_text.png
│ │ ├── medium_text_logo.png
│ │ ├── mobile_skills.png
│ │ ├── parser_tool.png
│ │ ├── port_swigger.png
│ │ ├── portfolio.png
│ │ ├── react-native.png
│ │ ├── realm.jpg
│ │ ├── skills.png
│ │ ├── skills_banner.png
│ │ ├── stackoverflow.png
│ │ ├── stackoverflow_text.png
│ │ ├── sur_sadhana_banner.png
│ │ ├── todolist_app.png
│ │ ├── travis-ci.png
│ │ ├── twitter.png
│ │ ├── twitter_text.png
│ │ └── webpack.png
│ ├── index.css
│ ├── index.js
│ ├── reducers
│ │ ├── index.js
│ │ └── portfolioReducer.js
│ ├── routes.js
│ ├── serviceWorker.js
│ ├── setupTests.js
│ └── store
│ │ └── index.js
└── server
│ ├── index.js
│ └── projects
│ ├── projects.json
│ ├── projects_routes.js
│ └── schema.js
├── webpack.client.js
└── webpack.server.js
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | /build
13 |
14 | /publish
15 |
16 | # misc
17 | .DS_Store
18 | .env.local
19 | .env.development.local
20 | .env.test.local
21 | .env.production.local
22 |
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Deeptiman Pattnaik
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # My Portfolio
2 |
3 | My Portfolio is a **MERN** based Full-Stack web application where users can see all the projects that I have completed as a Professional Software Developer. The web application developed using **Node.js** as backend service, **MongoDB** as cloud database and **ReactJS** as a front-end framework and **Webpack** as a module bundler.
4 |
5 |
6 |
7 | ### MongoDB Import
8 |
9 | git clone https://github.com/Deeptiman/react-myportfolio
10 | cd reactjs-myportfolio/database
11 | mongoimport --uri "mongodb://127.0.0.1:27017/poccoder_portfolio" --collection projects --jsonArray --file projects.json
12 |
13 | ### Installation
14 | ```
15 | cd reactjs-myportfolio
16 |
17 | npm install
18 | npm run start
19 | ```
20 | Then, type "http://localhost:9004" in the browser
21 |
22 | ### Follow me
23 |
24 |
25 |
License
26 | This project is licensed under the MIT License
27 |
28 |
--------------------------------------------------------------------------------
/build/bundle.js:
--------------------------------------------------------------------------------
1 | !function(e){var n={};function t(i){if(n[i])return n[i].exports;var a=n[i]={i:i,l:!1,exports:{}};return e[i].call(a.exports,a,a.exports,t),a.l=!0,a.exports}t.m=e,t.c=n,t.d=function(e,n,i){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:i})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var a in e)t.d(i,a,function(n){return e[n]}.bind(null,a));return i},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="/build",t(t.s=19)}([function(e,n){e.exports=require("react")},function(e,n){e.exports=require("@babel/runtime/helpers/defineProperty")},function(e,n,t){(n=t(15)(!1)).push([e.i,"@import url(https://fonts.googleapis.com/css2?family=Raleway&display=swap);"]),n.push([e.i,"html, body {\n font-family: 'Raleway', sans-serif;\n margin: 0;\n scroll-behavior: smooth;\n overflow-x: hidden; \n}\n\n.dashboard-parent-container {\n width: 100vw;\n margin: 0em;\n height: auto;\n display: flex;\n flex-direction: column;\n}\n\n.mobile-parent-container {\n display: none;\n}\n\n.mobile-header-container {\n display: none;\n}\n\n.dashboard-header-container {\n width: 100vw;\n height: auto;\n margin: 0px;\n}\n\n.dashboard-skills-container {\n width: 100vw;\n height: auto; \n padding: 2em; \n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n}\n\n.desktop-skills-background {\n height: 30em;\n margin-top: 2em;\n}\n\n.mobile-skills-background {\n display: none;\n}\n\n.tech-skills-div {\n width: 100vw;\n height: auto;\n margin-bottom: 0em;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n}\n\n.tech-skills-container {\n width: 15em;\n display: flex;\n padding: 0.8em;\n border-radius: 5em;\n margin-top: 1em;\n flex-direction: row;\n align-items: flex-start;\n justify-content: center;\n background-color: #0c0b0b;\n}\n\n.tech-skills {\n font-weight: bold;\n font-size: 1.1rem;\n color: #fff;\n \n}\n\n.desktop-parent-container {\n width: 100%;\n height: auto;\n display: block;\n}\n\n.desktop-dashboard-profile-div {\n width: 100vw;\n height: auto;\n margin-top: 5em;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column; \n}\n\n.dashboard-profile-container {\n width: 100vw;\n height: auto;\n background: #ffffff;\n}\n\n.dashboard-profile-details-container {\n width: 100%;\n height: auto;\n margin-top: 0em;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n}\n\n.dashboard-profile {\n \n}\n\n.bubble-tech-name-container {\n width: 8em;\n padding: 0.5em;\n margin-top: 1.9em;\n border-radius: 0.3em;\n flex-direction: column;\n align-items: flex-start;\n justify-content: center;\n font-weight: 700;\n font-size: 0.7rem;\n color: #000;\n font-weight: 300;\n \n background-color: #7c7c7b;\n}\n\n.bubble-image {\n width: 8em;\n height: 1.5em;\n}\n\n.bubble-tech-name {\n font-weight: 700;\n font-size: 1.0rem;\n color: #000;\n font-weight: 300;\n \n}\n\n.profile-name-container {\n width: 40em;\n display: flex;\n margin-top: 2em;\n flex-direction: row;\n align-items: flex-start;\n justify-content: center;\n}\n\n.profile-name {\n font-weight: 100;\n font-size: 2.0rem;\n color: rgb(53, 53, 53);\n}\n\n.profile-designation-container {\n width: 15em;\n display: flex;\n padding: 0.8em;\n border-radius: 5em;\n margin-top: 1em;\n flex-direction: row;\n align-items: flex-start;\n justify-content: center;\n background-color: #0c0b0b;\n}\n\n.profile-designation {\n font-weight: 700;\n font-size: 0.9rem;\n color: #fff;\n font-weight: 300; \n}\n\n.desktop-social-profile-container {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-top: 1em;\n margin-left: 0em;\n border-radius: 0%;\n}\n\n.mobile-social-profile-container {\n display: none;\n}\n\n.desktop-github-social-icon {\n height: 3.2em;\n padding: 1em;\n}\n\n.desktop-stackoverflow-social-icon {\n height: 2.5em;\n padding: 1em;\n}\n\n.desktop-linkedin-social-icon {\n height: 2em;\n padding: 1em;\n}\n\n.desktop-medium-social-icon {\n height: 1.5em;\n padding: 1em;\n}\n\n.desktop-twitter-social-icon {\n height: 1.5em;\n padding: 1em;\n}\n\n.profile-description-container {\n width: 60%;\n height: auto;\n margin-left: 4em;\n}\n\n.profile-description {\n font-size: 1rem;\n color: rgb(59, 59, 59);\n line-height: 1.7em;\n position: relative; \n}\n\n.menu-bar-container {\n width: 100vw;\n height: 3.5em;\n z-index: 3000;\n position: fixed;\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n border-bottom: 0.5px solid #b6b5b5;\n background-color: white;\n}\n\n.menu-portfolio-logo-container {\n width: 40%;\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n}\n\n.portfolio-logo {\n width: auto;\n height: 1.8em;\n margin-left: 6em;\n}\n\n.mobile-portfolio-logo {\n width: auto;\n height: 1.8em;\n margin-left: 0em;\n}\n\n.menu-label-item-container {\n width: 90%;\n display: flex;\n flex-direction: row;\n justify-content: flex-end;\n align-items: center;\n margin-right: 15em;\n}\n\n.menu-label-text {\n font-size: 0.8rem;\n font-weight: bold;\n color: rgb(44, 44, 44);\n text-decoration: none;\n padding: 1em;\n}\n\n.menu-label-text:hover {\n font-size: 0.8rem;\n color: #4285F4;\n text-decoration: none;\n cursor: pointer;\n padding: 1em;\n}\n\n.profile {\n width: 12em;\n height: 12em;\n border-radius: 50%;\n}\n\n.mobile-profile {\n display: none;\n}\n\n.profile-image {\n height: auto;\n display: flex;\n justify-content: flex-end;\n align-items: center; \n}\n\n.tab-menu-item-container {\n width: 33.33%;\n padding: 0.3em;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n border-top: 2px solid #CCC;\n}\n\n.tab-menu-item-selected-container {\n width: 33.33%;\n padding: 0.3em;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n border-top: 2px solid #4285F4;\n}\n\n.tab-menu-item-selected-txt {\n font-size: 0.85rem;\n font-weight: bold;\n color: #4285F4;\n text-decoration: none;\n padding: 1em;\n}\n\n.tab-menu-label-text {\n font-size: 0.85rem;\n font-weight: bold;\n color: rgb(44, 44, 44);\n text-decoration: none;\n padding: 1em;\n}\n\n.banner {\n width: 32em;\n height: 18em;\n -webkit-box-shadow: 19px 24px 29px -6px rgba(0,0,0,0.35);\n -moz-box-shadow: 19px 24px 29px -6px rgba(0,0,0,0.35);\n box-shadow: 19px 24px 29px -6px rgba(0,0,0,0.35);\n border-radius: 1.0em;\n}\n\n.projects-list {\n width: 100vw;\n height: auto;\n}\n\n.project-layout-container {\n width: 100vw;\n height: auto;\n display: row;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background-color: #f0f0f0;\n}\n\n.project-list-container {\n width: 100vw;\n height: auto;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center; \n}\n\n.project-label-container {\n width: 15em;\n display: flex;\n padding: 0.8em;\n border-radius: 5em;\n margin-top: 3em;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n background-color: #0c0b0b;\n}\n\n.project-label {\n font-weight: bold;\n font-size: 1.1rem;\n color: #fff;\n \n}\n\n.mobile-project-items-container {\n display: none;\n}\n\n.project-even-items-container {\n width: 82vw; \n height: auto;\n padding: 1.4em;\n margin: 5em;\n display: grid;\n grid-template-columns: 55% 50%; \n}\n\n.project-odd-items-container {\n width: 82vw; \n height: auto;\n padding: 1.4em;\n margin: 5em;\n display: grid;\n grid-template-columns: 55% 50%; \n}\n\n.project-thumbnail-item {\n width: 100%;\n height: auto;\n}\n\n.project-odd-thumbnail-item {\n width: 100%;\n height: auto;\n margin-left: 3em;\n}\n\n.project-details-container {\n width: 100%;\n height: auto;\n display: column; \n}\n\n.project-name-container {\n width: 100%;\n height: 3em;\n}\n\n.project-description-container {\n width: 100%;\n height: auto; \n margin-top: 1em;\n justify-content: center;\n align-items: center;\n}\n\n.project-description {\n font-size: 1rem;\n font-weight: 300; \n color: #000000;\n line-height: 2em;\n position: relative; \n text-shadow: 0.3px 0.3px #ccc;\n}\n\n.project-even-tools-container {\n height: auto; \n display: flex;\n flex-direction: row;\n margin-top: 1em; \n}\n\n.project-odd-tools-container {\n height: auto; \n display: flex;\n flex-direction: row;\n margin-top: 1em; \n}\n\n.project-tools-item {\n padding-left: 1em;\n padding-right: 1em;\n padding-top: 0.1em;\n padding-bottom: 0.3em;\n border-radius: 5em;\n border: 0.5px solid #0c0b0b;\n display: flex;\n justify-content: center;\n align-items: center;\n display: block;\n background: #0c0b0b;\n}\n\n.project-tools {\n font-weight: bold;\n font-size: 0.7rem;\n color: #fff;\n}\n\n.project-link-container {\n height: auto;\n margin-top: 1em; \n display: flex;\n flex-direction: column; \n}\n\n.personal-project-container {\n display: flex;\n flex-direction: row;\n}\n\n.medium {\n width: 6em;\n height: 6em; \n}\n\n.medium-blog-container {\n}\n\n.github-repo-container {\n width: 100%;\n height: 4em;\n display: flex;\n flex-direction: column; \n}\n\n.github-logo-buttton {\n width: 12em;\n height: 4em; \n justify-content: center;\n align-items: center;\n}\n\n.github-badge-container {\n width: 11vw; \n height: auto;\n display: flex; \n}\n\n.mobile-github-badge-container {\n display: none;\n}\n\n.github-badge-icon {\n padding: 0.5em;\n}\n\n.playstore-badge-icon {\n height: 4em; \n}\n\n.contact-container {\n width: 100vw;\n height: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n background-color: rgb(228, 228, 228);\n}\n\n.contact-item-container{\n width: 70vw;\n height: auto;\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n\n.contact-label-container {\n width: 15em;\n display: flex;\n padding: 0.8em;\n border-radius: 5em;\n margin-top: 1em;\n flex-direction: row;\n align-items: flex-start;\n justify-content: center;\n background-color: #0c0b0b;\n}\n\n.contact-label {\n font-weight: bold;\n font-size: 1.1rem;\n color: #fff;\n}\n\n.contact-social-icon {\n width: 3em;\n height: 3em;\n margin: 1em;\n}\n\n.contact-github-social-icon {\n width: 3.5em;\n height: 3.5em;\n margin: 0.5em;\n}\n\n.contact-medium-social-icon {\n width: 2.8em;\n height: 2.8em;\n margin: 1em;\n}\n\n.contact-footer-container {\n width: 50em;\n height: 0.1px;\n margin-top: 3em;\n background:rgb(19, 19, 19);\n}\n\n.contact-footer-text {\n font-size: 0.8rem;\n color: rgb(19, 19, 19);\n margin-top: 1em;\n}\n\n\n/******************************* Mobile View ***************************************/\n\n@media only screen and (max-width: 1000px) {\n\n .desktop-parent-container {\n display: none;\n }\n\n .mobile-parent-container {\n width: 100vw;\n height: 100vh;\n display: flex;\n flex-direction: column;\n }\n\n .mobile-header-container {\n width: 100vw;\n height: 10vh;\n top: 0;\n z-index: 1000;\n display: flex;\n justify-content: center;\n align-items: center;\n border-bottom: 0.5px solid #b6b5b5;\n }\n\n .mobile-body-container {\n width: 100vw;\n height: 100vh;\n display: flex;\n overflow-y: auto;\n justify-content: center;\n align-items: flex-start;\n }\n\n .mobile-footer-container {\n width: 100vw;\n height: 8vh;\n position: fixed;\n display: flex;\n justify-content: center;\n align-items: center;\n bottom: 0;\n background-color: white;\n }\n\n .mobile-profile {\n width: 8em;\n height: 8em;\n border-radius: 50%;\n }\n\n .dashboard-profile-container {\n width: 95vw;\n height: auto;\n background: #ffffff;\n }\n\n .dashboard-profile-details-container {\n height: auto;\n z-index: 50;\n display: flex;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n margin-bottom: 5em;\n }\n\n .profile {\n width: 10em;\n height: 10em;\n margin-top: 3em;\n border-radius: 50%;\n }\n\n .profile-image {\n height: 10em;\n display: flex;\n justify-content: flex-end;\n align-items: center; \n }\n\n .profile-name-container {\n width: auto;\n display: flex;\n margin-top: 2.2em;\n flex-direction: row;\n align-items: flex-start;\n justify-content: center;\n }\n\n .profile-name {\n font-weight: 100;\n font-size: 1.8rem;\n color: rgb(53, 53, 53);\n }\n\n .profile-designation-container {\n width: 12em;\n display: flex;\n padding: 0.8em;\n border-radius: 5em;\n margin-top: 1em;\n flex-direction: row;\n align-items: flex-start;\n justify-content: center;\n background-color: #0c0b0b;\n }\n \n .profile-designation {\n font-weight: 700;\n font-size: 0.8rem;\n color: #fff;\n font-weight: 300; \n }\n\n .desktop-social-profile-container{\n display: none;\n }\n\n .mobile-social-profile-container {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-top: 1em;\n margin-left: 0em;\n border-radius: 0%;\n }\n\n .mobile-github-social-icon {\n height: 3.2em;\n padding: 0.7em;\n }\n \n .mobile-stackoverflow-social-icon {\n height: 2.8em;\n padding: 1em;\n }\n \n .mobile-linkedin-social-icon {\n height: 2.9em;\n padding: 1em;\n }\n \n .mobile-medium-social-icon {\n height: 2.6em;\n padding: 1em;\n }\n \n .mobile-twitter-social-icon {\n height: 2.8em;\n padding: 1em;\n }\n\n .profile-description-container {\n width: 90vw;\n height: auto;\n margin-left: 0em;\n }\n \n .profile-description {\n font-size: 1rem;\n color: rgb(59, 59, 59);\n line-height: 1.7em;\n position: relative; \n }\n\n .project-label-container {\n display: none;\n }\n\n .project-even-items-container {\n display: none;\n }\n\n .project-odd-items-container {\n display: none;\n }\n\n .mobile-project-items-container {\n width: 82vw; \n height: auto;\n padding: 0.4em;\n display: flex; \n justify-content: center;\n align-items: center;\n flex-direction: column;\n }\n\n .mobile-project-details-container {\n width: 100vw;\n height: auto;\n margin: 1em;\n border-radius: 1.0em;\n display: flex; \n justify-content: center;\n align-items: flex-start;\n flex-direction: column;\n }\n\n .mobile-banner {\n width: 25em;\n height: 15em;\n margin-left: 0.3em;\n border-radius: 0em;\n }\n\n .projects-list {\n display: none;\n }\n\n .project-layout-container {\n width: 80vw;\n height: auto;\n margin-top: 3em;\n display: row;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n background-color: #f0f0f0;\n }\n\n .project-list-container {\n width: 80vw;\n height: auto;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center; \n margin-bottom: 5em;\n }\n\n .mobile-project-thumbnail-item {\n width: 80vw;\n height: auto;\n }\n \n .mobile-project-description-container {\n width: 95vw;\n height: auto; \n margin-top: 1em;\n margin-left: 1em;\n justify-content: center;\n align-items: center;\n }\n \n .mobile-project-description {\n font-size: 1rem;\n font-weight: 300;\n color: #000000;\n line-height: 2em;\n position: relative; \n text-shadow: 0.3px 0.3px #ccc;\n }\n\n .mobile-project-tools-container {\n width: 100vw;\n height: auto; \n display: flex;\n flex-direction: row;\n margin-top: 0.5em; \n }\n \n .mobile-project-tools-item {\n padding-left: 0.7em;\n padding-right: 0.7em;\n padding-top: 0.1em;\n padding-bottom: 0.3em;\n border-radius: 3em;\n border: 0.3px solid #0c0b0b;\n display: flex;\n justify-content: center;\n align-items: center;\n display: block;\n background: #0c0b0b;\n }\n \n .mobile-project-tools {\n font-weight: bold;\n font-size: 0.56rem;\n color: #fff;\n }\n\n .project-link-container {\n width: 100vw;\n height: auto;\n margin-top: 1em; \n display: flex;\n flex-direction: column; \n }\n\n .personal-project-container {\n display: flex;\n flex-direction: row;\n }\n\n .medium {\n width: 6em;\n height: 6em; \n }\n\n .github-repo-container {\n width: 100vw;\n height: 4em;\n display: flex;\n flex-direction: column; \n }\n\n .github-logo-buttton {\n width: 15em;\n height: 5em;\n margin-top: 0.5em; \n justify-content: center;\n align-items: center;\n }\n\n .github-badge-container {\n display: none;\n }\n\n .mobile-github-badge-container {\n width: 11vw; \n height: auto;\n display: flex; \n }\n\n .mobile-github-badge-icon {\n padding: 0.5em;\n }\n \n .tech-skills-container {\n display: none;\n }\n\n .desktop-skills-background {\n display: none;\n }\n\n .tech-skills-div {\n width: 100vw;\n height: 100vh;\n margin-bottom: 2em;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: flex-start;\n }\n\n .mobile-skills-background {\n height: 40em;\n margin-top: 2em;\n display: flex;\n }\n\n .contact-label-container {\n display: none;\n }\n}",""]),e.exports=n},function(e,n){e.exports=require("redux")},function(e,n){e.exports=require("express")},function(e,n){e.exports=require("react-redux")},function(e,n){e.exports=require("react-router-dom")},function(e,n){e.exports=require("mongoose")},function(e,n){e.exports=require("body-parser")},function(e,n){e.exports=require("react-dom/server")},function(e,n){e.exports=require("react-router")},function(e,n){e.exports=require("@babel/runtime/helpers/extends")},function(e,n){e.exports=require("redux-thunk")},function(e,n){e.exports=require("redux-logger")},function(e,n){e.exports=require("@babel/polyfill")},function(e,n,t){"use strict";e.exports=function(e){var n=[];return n.toString=function(){return this.map((function(n){var t=function(e,n){var t=e[1]||"",i=e[3];if(!i)return t;if(n&&"function"==typeof btoa){var a=(r=i,c=btoa(unescape(encodeURIComponent(JSON.stringify(r)))),l="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(c),"/*# ".concat(l," */")),o=i.sources.map((function(e){return"/*# sourceURL=".concat(i.sourceRoot||"").concat(e," */")}));return[t].concat(o).concat([a]).join("\n")}var r,c,l;return[t].join("\n")}(n,e);return n[2]?"@media ".concat(n[2]," {").concat(t,"}"):t})).join("")},n.i=function(e,t,i){"string"==typeof e&&(e=[[null,e,""]]);var a={};if(i)for(var o=0;o{o.find({},(function(e,t){e||n.json(t)}))}),e.exports=i},function(e,n,t){var i=t(7),a=new i.Schema({name:{type:String,text:!0},description:{type:String,text:!0},tools:[{name:{type:String,text:!0},link:{type:String,text:!0}}],github:{type:String,text:!0},github_badges_last_commit:{type:String,text:!0},github_badges_language_count:{type:String,text:!0},github_badges_top_language:{type:String,text:!0},github_badges_forks:{type:String,text:!0},medium:{type:String,text:!0},playstore:{type:String,text:!0},hasGithub:{type:Boolean},hasMedium:{type:Boolean},hasPlaystore:{type:Boolean}});e.exports=i.model("Projects",a)},function(e,n,t){"use strict";t.r(n);var i=t(4),a=t.n(i),o=t(8),r=t.n(o),c=(t(14),t(0)),l=t.n(c),s=t(9),m=t.n(s),d=t(10),p=t(11),g=t.n(p),h=t(6),f=t(1),u=t.n(f);t(2);class b extends c.Component{render(){return l.a.createElement("div",{className:"dashboard-profile-container"},l.a.createElement("div",{className:"dashboard-profile-details-container"},l.a.createElement("div",{className:"profile-image"},l.a.createElement("img",{src:"/media/deeptiman.png",className:"profile"})),l.a.createElement("div",{className:"profile-name-container"},l.a.createElement("span",{className:"profile-name"},"Deeptiman Pattnaik")),l.a.createElement("div",{className:"profile-designation-container"},l.a.createElement("span",{className:"profile-designation"},"Senior Software Developer")),l.a.createElement("div",{className:"desktop-social-profile-container"},l.a.createElement("a",{href:"https://github.com/deeptiman",target:"_blank"},l.a.createElement("img",{src:"/media/github_text.png",className:"desktop-github-social-icon"})),l.a.createElement("a",{href:"https://stackoverflow.com/users/1453704/deeptimancode",target:"_blank"},l.a.createElement("img",{src:"/media/stackoverflow_text.png",className:"desktop-stackoverflow-social-icon"})),l.a.createElement("a",{href:"https://www.linkedin.com/in/deeptiman123/",target:"_blank"},l.a.createElement("img",{src:"/media/linkedin_text.png",className:"desktop-linkedin-social-icon"})),l.a.createElement("a",{href:"https://medium.com/@deeptiman",target:"_blank"},l.a.createElement("img",{src:"/media/medium_text.png",className:"desktop-medium-social-icon"})),l.a.createElement("a",{href:"https://twitter.com/deeptimancode",target:"_blank"},l.a.createElement("img",{src:"/media/twitter_text.png",className:"desktop-twitter-social-icon"}))),l.a.createElement("div",{className:"mobile-social-profile-container"},l.a.createElement("a",{href:"https://github.com/deeptiman",target:"_blank"},l.a.createElement("img",{src:"/media/github.png",className:"mobile-github-social-icon"})),l.a.createElement("a",{href:"https://stackoverflow.com/users/1453704/deeptimancode",target:"_blank"},l.a.createElement("img",{src:"/media/stackoverflow.png",className:"mobile-stackoverflow-social-icon"})),l.a.createElement("a",{href:"https://www.linkedin.com/in/deeptiman123/",target:"_blank"},l.a.createElement("img",{src:"/media/linkedin.png",className:"mobile-linkedin-social-icon"})),l.a.createElement("a",{href:"https://medium.com/@deeptiman",target:"_blank"},l.a.createElement("img",{src:"/media/medium.png",className:"mobile-medium-social-icon"})),l.a.createElement("a",{href:"https://twitter.com/deeptimancode",target:"_blank"},l.a.createElement("img",{src:"/media/twitter.png",className:"mobile-twitter-social-icon"}))),l.a.createElement("div",{className:"profile-description-container"},l.a.createElement("p",{className:"profile-description"},"I have extensive software development experience in both Mobile & Web application frameworks. Developed various mobile smartphone applications using Android, React-Native cross-platform framework. In Web development, worked on ReactJS as a major front-end JavaScript UI framework and Node.js, Golang as the backend scripting languages to build REST APIs with cloud deployment at Amazon AWS, Google Cloud Platform, and Heroku."),l.a.createElement("p",{className:"profile-description"},"I am very much curious to learn and build Blockchain applications and recently developed a few projects using Hyperledger Fabric Distributed Ledger Technology that demonstrate the working techniques of a Permissioned based Blockchain network. Also, writing blogs at Medium to explain the brief concepts of Hyperledger Fabric."))))}}var w=t(5);class y extends c.Component{constructor(){super(...arguments),u()(this,"checkServer",e=>!0===e.hasGithub?l.a.createElement("div",{className:"project-link-container"},l.a.createElement("div",{className:"personal-project-container"},!0===e.hasMedium&&l.a.createElement("div",{className:"medium-blog-container"},l.a.createElement("a",{href:e.medium,target:"_blank"},l.a.createElement("img",{src:"/media/medium_logo.png",className:"medium"}))),l.a.createElement("div",{className:"github-repo-container",style:!0===e.hasMedium?{marginLeft:"1em"}:{}},l.a.createElement("a",{href:e.github,target:"_blank"},l.a.createElement("img",{src:"/media/github_logo.png",className:"github-logo-buttton"})),l.a.createElement("div",{className:"github-badge-container"},l.a.createElement("img",{alt:"GitHub last commit",src:e.github_badges_last_commit,className:"github-badge-icon"}),l.a.createElement("img",{alt:"GitHub language count",src:e.github_badges_language_count,className:"github-badge-icon"}),l.a.createElement("img",{alt:"GitHub top language",src:e.github_badges_top_language,className:"github-badge-icon"}),l.a.createElement("img",{alt:"GitHub forks",src:e.github_badges_forks,className:"github-badge-icon"})))),l.a.createElement("div",{className:"mobile-github-badge-container",style:!1===e.hasMedium?{marginTop:"1.5em"}:{}},l.a.createElement("img",{alt:"GitHub language count",src:e.github_badges_language_count,className:"mobile-github-badge-icon"}),l.a.createElement("img",{alt:"GitHub top language",src:e.github_badges_top_language,className:"mobile-github-badge-icon"}),l.a.createElement("img",{alt:"GitHub forks",src:e.github_badges_forks,className:"mobile-github-badge-icon"}))):!0===e.hasPlaystore?l.a.createElement("div",{className:"project-link-container"},l.a.createElement("a",{href:e.playstore,target:"_blank"},l.a.createElement("img",{alt:"Get it on Google Play",src:"https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png",className:"playstore-badge-icon"}))):void 0),u()(this,"projectTools",e=>{if(e.length>0)return e.map((e,n)=>l.a.createElement("a",{key:e.name,href:e.link,style:{textDecoration:"none"},target:"_blank"},l.a.createElement("div",{className:"project-tools-item",style:0!=n?{marginLeft:"1em"}:{}},l.a.createElement("span",{className:"project-tools"},e.name))))}),u()(this,"projectToolsMobileView",e=>{if(e.length>0)return e.map((e,n)=>l.a.createElement("a",{key:e.name,href:e.link,style:{textDecoration:"none"},target:"_blank"},l.a.createElement("div",{className:"mobile-project-tools-item",style:{marginLeft:"0.5em"}},l.a.createElement("span",{className:"mobile-project-tools"},e.name))))}),u()(this,"renderEvenPortfolioDetails",(e,n)=>l.a.createElement("div",{className:"project-even-items-container"},l.a.createElement("div",{className:"project-thumbnail-item"},l.a.createElement("img",{src:e.banner,className:"banner"})),l.a.createElement("div",{className:"project-details-container"},l.a.createElement("div",{className:"project-description-container"},l.a.createElement("p",{className:"project-description"}," ",e.description," ")),l.a.createElement("div",{className:"project-even-tools-container"},this.projectTools(e.tools)),this.checkServer(e)))),u()(this,"renderOddPortfolioDetails",(e,n)=>l.a.createElement("div",{className:"project-odd-items-container"},l.a.createElement("div",{className:"project-details-container"},l.a.createElement("div",{className:"project-description-container"},l.a.createElement("p",{className:"project-description"}," ",e.description," ")),l.a.createElement("div",{className:"project-odd-tools-container"},this.projectTools(e.tools)),this.checkServer(e)),l.a.createElement("div",{className:"project-odd-thumbnail-item"},l.a.createElement("img",{src:e.banner,className:"banner"})))),u()(this,"renderPortfolioLists",e=>{if(e.length>0)return e.map((e,n)=>{var t=n+1;return t%2==0?l.a.createElement("div",{key:t,className:"projects-list"},this.renderEvenPortfolioDetails(e,n)):t%2!=0?l.a.createElement("div",{key:t,className:"projects-list"},this.renderOddPortfolioDetails(e,n)):void 0})}),u()(this,"renderPortfolioMobileView",e=>{if(e.length>0)return e.map((e,n)=>l.a.createElement("div",{key:e,className:"mobile-project-items-container"},l.a.createElement("div",{className:"mobile-project-details-container"},l.a.createElement("div",{className:"mobile-project-thumbnail-item"},l.a.createElement("img",{src:e.banner,className:"mobile-banner"})),l.a.createElement("div",{className:"mobile-project-description-container"},l.a.createElement("p",{className:"mobile-project-description"}," ",e.description," ")),l.a.createElement("div",{className:"mobile-project-tools-container"},this.projectToolsMobileView(e.tools)),this.checkServer(e))))})}componentDidMount(){this.props.fetchPortfolioLists()}render(){var e=JSON.parse(JSON.stringify(this.props.portfolioLists)).portfolioLists;return l.a.createElement("div",{className:"project-list-container"},l.a.createElement("div",{className:"project-label-container"},l.a.createElement("span",{className:"project-label"},"Projects")),this.renderPortfolioLists(e),this.renderPortfolioMobileView(e))}}var x=Object(w.connect)(e=>({portfolioLists:e.portfolioLists}),e=>({fetchPortfolioLists:()=>e(e=>{fetch("http://localhost:9004/api/projects").then(e=>e.json()).then(n=>{console.log("Projects Reponse >>> "+JSON.stringify(n)),e({type:"FETCH_PORTFOLIO",payload:n})}).catch(e=>{console.log("Error Projects Res ::: "+JSON.stringify(e))})})}))(y);class v extends c.Component{render(){return l.a.createElement("div",{className:"tech-skills-div"},l.a.createElement("div",{className:"tech-skills-container"},l.a.createElement("span",{className:"tech-skills"},"Technical Skills")),l.a.createElement("img",{src:"/media/skills.png",className:"desktop-skills-background"}),l.a.createElement("img",{src:"/media/mobile_skills.png",className:"mobile-skills-background"}))}}class E extends c.Component{render(){return l.a.createElement("div",{className:"contact-item-container"},l.a.createElement("div",{className:"contact-label-container"},l.a.createElement("span",{className:"contact-label"},"Contacts")),l.a.createElement("div",{className:"social-profile-container"},l.a.createElement("a",{href:"https://github.com/deeptiman",target:"_blank"},l.a.createElement("img",{src:"/media/github.png",className:"contact-github-social-icon"})),l.a.createElement("a",{href:"https://stackoverflow.com/users/1453704/deeptimancode",target:"_blank"},l.a.createElement("img",{src:"/media/stackoverflow.png",className:"contact-social-icon"})),l.a.createElement("a",{href:"https://www.linkedin.com/in/deeptiman123/",target:"_blank"},l.a.createElement("img",{src:"/media/linkedin.png",className:"contact-social-icon"})),l.a.createElement("a",{href:"https://medium.com/@deeptiman",target:"_blank"},l.a.createElement("img",{src:"/media/medium.png",className:"contact-medium-social-icon"})),l.a.createElement("a",{href:"https://twitter.com/deeptimancode",target:"_blank"},l.a.createElement("img",{src:"/media/twitter.png",className:"contact-social-icon"}))),l.a.createElement("div",{className:"contact-footer-container"}),l.a.createElement("p",{className:"contact-footer-text"},"© 2020 POCCODER. ALL RIGHTS RESERVED."))}}class k extends c.Component{constructor(e){super(e),u()(this,"showPortfolioTabView",()=>{var e=this.state.tabSelected;return"Profile"===e?l.a.createElement(b,null):"Projects"===e?l.a.createElement(x,null):"Technical Skills"===e?l.a.createElement(v,null):void 0}),u()(this,"setSelectedPortfolioTab",e=>{this.setState({tabSelected:e})}),this.state={portfolioTabs:["Profile","Projects","Technical Skills"],tabSelected:"Profile"}}render(){return l.a.createElement("div",{className:"dashboard-parent-container"},l.a.createElement("div",{className:"mobile-parent-container"},l.a.createElement("div",{className:"mobile-header-container"},l.a.createElement("img",{src:"/media/portfolio.png",className:"mobile-portfolio-logo"})),l.a.createElement("div",{className:"mobile-body-container"},this.showPortfolioTabView()),l.a.createElement("div",{className:"mobile-footer-container"},this.state.portfolioTabs.map(e=>l.a.createElement("div",{key:e,className:this.state.tabSelected===e?"tab-menu-item-selected-container":"tab-menu-item-container",onClick:this.setSelectedPortfolioTab.bind(this,e)},l.a.createElement("span",{className:this.state.tabSelected===e?"tab-menu-item-selected-txt":"tab-menu-label-text"},e))))),l.a.createElement("div",{className:"desktop-parent-container"},l.a.createElement("div",{className:"dashboard-header-container"},l.a.createElement("div",{className:"menu-bar-container"},l.a.createElement("div",{className:"menu-portfolio-logo-container"},l.a.createElement("img",{src:"/media/portfolio.png",className:"portfolio-logo"})),l.a.createElement("div",{className:"menu-label-item-container"},l.a.createElement("a",{href:"#",className:"menu-label-text"},l.a.createElement("span",null,"Profile")),l.a.createElement("a",{href:"#projects",className:"menu-label-text"},l.a.createElement("span",null,"Projects")),l.a.createElement("a",{href:"#technical-skills",className:"menu-label-text"},l.a.createElement("span",null,"Technical Skills")),l.a.createElement("a",{href:"#contacts",className:"menu-label-text"},l.a.createElement("span",null,"Contacts"))))),l.a.createElement("div",{className:"desktop-dashboard-profile-div"},l.a.createElement(b,null),l.a.createElement("div",{id:"projects",className:"project-layout-container"},l.a.createElement(x,null)),l.a.createElement("div",{id:"technical-skills",className:"dashboard-skills-container"},l.a.createElement(v,null)),l.a.createElement("div",{id:"contacts",className:"contact-container"},l.a.createElement(E,null)))))}}var j=[{path:"/",exact:!0,component:k}],N=t(3),_=t(12),S=t.n(_),P=t(13),O=t.n(P);function T(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);n&&(i=i.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,i)}return t}function z(e){for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:R,n=arguments.length>1?arguments[1]:void 0;switch(n.type){case"FETCH_PORTFOLIO":var t=z(z({},e),{},{portfolioLists:n.payload});return t;default:return e}},M=Object(N.combineReducers)({portfolioLists:C}),L=Object(N.applyMiddleware)(S.a,O.a),D=Object(N.createStore)(M,L);class q extends l.a.Component{render(){return l.a.createElement(w.Provider,{store:D},l.a.createElement(h.Switch,null,j.map((e,n)=>l.a.createElement(h.Route,g()({key:n},e)))))}}var G=q,H=t(16),I=a()(),F=process.env.PORT||9004,A=t(17);I.use("/api/projects",A),I.use(r.a.json()),I.use(H()),I.use(a.a.static("build/public")),I.get("*",(e,n)=>{var t="My Portfolio | MERN Application | POCCODER",i="My Portfolio is a MERN based Full-Stack web application where users can see all the projects that I have completed as a professional Software Developer.",a="http://assets.poccoder.com/images/banner_my_portfolio.png",o="https://portfolio.poccoder.com",r=m.a.renderToString(l.a.createElement(d.StaticRouter,{location:e.url,context:{}},l.a.createElement(G,null))),c='\n \n \n \n \n \n \n '.concat(t,'\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ').concat(r,'
\n
68 |
69 | `;
70 |
71 | res.send(html);
72 | })
73 |
74 | app.listen(PORT, () => {
75 | console.log(`Server listening on ${PORT}`);
76 | })
--------------------------------------------------------------------------------
/src/server/projects/projects.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "name": "My Portfolio | MERN Application | POCCODER",
4 | "description": "My Portfolio is a MERN based Full-Stack web application where users can see all the projects that I have completed as a professional Software Developer. The application developed using Node.js as backend service, MongoDB as cloud storage, and ReactJS as a front-end framework.",
5 | "banner": "http://assets.poccoder.com/images/banner_my_portfolio.png",
6 | "tools": [
7 | {
8 | "name": "reactjs",
9 | "link": "https://reactjs.org/docs/getting-started.html"
10 | },
11 | {
12 | "name": "redux",
13 | "link": "https://redux.js.org/introduction/getting-started"
14 | },
15 | {
16 | "name": "nodejs",
17 | "link": "https://nodejs.org/en/docs/"
18 | },
19 | {
20 | "name": "mongodb",
21 | "link": "https://docs.mongodb.com/"
22 | },
23 | {
24 | "name": "webpack",
25 | "link": "https://webpack.js.org/guides/getting-started/"
26 | }
27 | ],
28 | "github": "https://github.com/Deeptiman/react-myportfolio",
29 | "github_badges_last_commit": "https://img.shields.io/github/last-commit/Deeptiman/react-myportfolio",
30 | "github_badges_language_count": "https://img.shields.io/github/languages/count/Deeptiman/react-myportfolio",
31 | "github_badges_top_language": "https://img.shields.io/github/languages/top/Deeptiman/react-myportfolio",
32 | "github_badges_forks": "https://img.shields.io/github/forks/Deeptiman/react-myportfolio?label=Fork&style=social",
33 | "hasGithub": true,
34 | "hasMedium": false,
35 | "medium": "",
36 | "hasPlaystore": false,
37 | "playstore": "",
38 | "timestamp": 1578769350
39 | },
40 | {
41 | "name": "React-Native TODO List Application",
42 | "description": "The TODO list application is a cross-platform mobile application developed using the React-Native framework with Redux implementation. The application has features to create a calendar in both Google & Microsoft cloud platforms, users can also receive a push notification from the server based on topic subscription.",
43 | "banner": "http://assets.poccoder.com/images/todolist_app.png",
44 | "tools": [
45 | {
46 | "name": "react-native",
47 | "link": "https://reactnative.dev/docs/0.5/getting-started"
48 | },
49 | {
50 | "name": "redux",
51 | "link": "https://redux.js.org/introduction/getting-started"
52 | },
53 | {
54 | "name": "google-calendar-api",
55 | "link": "https://developers.google.com/calendar/v3/reference/events"
56 | },
57 | {
58 | "name": "microsoft-graph-api",
59 | "link": "https://docs.microsoft.com/en-us/graph/api/calendar-post-events?view=graph-rest-1.0&tabs=http"
60 | }
61 | ],
62 | "github": "https://github.com/Deeptiman/react-native-todolist",
63 | "github_badges_last_commit": "https://img.shields.io/github/last-commit/Deeptiman/react-native-todolist",
64 | "github_badges_language_count": "https://img.shields.io/github/languages/count/Deeptiman/react-native-todolist",
65 | "github_badges_top_language": "https://img.shields.io/github/languages/top/Deeptiman/react-native-todolist",
66 | "github_badges_forks": "https://img.shields.io/github/forks/Deeptiman/react-native-todolist?label=Fork&style=social",
67 | "hasGithub": true,
68 | "hasMedium": false,
69 | "medium": "",
70 | "hasPlaystore": false,
71 | "playstore": "",
72 | "timestamp": 1591028375
73 | },
74 | {
75 | "name": "Hyperledger Fabric - Single Organization Demo",
76 | "description": "The Blockchain application is written in Go language to demonstrate the Hyperledger Fabric Blockchain framework. The project has been developed to upload employee records into the blockchain and also has the functionality to update, delete the record stored securely in the Hyperledger framework.",
77 | "banner": "http://assets.poccoder.com/images/hyperledger_single_org.png",
78 | "tools": [
79 | {
80 | "name": "blockchain",
81 | "link": "https://hyperledger-fabric.readthedocs.io/en/release-2.2/blockchain.html"
82 | },
83 | {
84 |
85 | "name": "hyperledger",
86 | "link": "https://hyperledger-fabric.readthedocs.io/"
87 | },
88 | {
89 | "name": "docker",
90 | "link": "https://docs.docker.com/"
91 | },
92 | {
93 | "name": "golang",
94 | "link": "https://golang.org/doc/"
95 | }
96 | ],
97 | "github": "https://github.com/Deeptiman/employeeledger",
98 | "github_badges_last_commit": "https://img.shields.io/github/last-commit/Deeptiman/employeeledger",
99 | "github_badges_language_count": "https://img.shields.io/github/languages/count/Deeptiman/employeeledger",
100 | "github_badges_top_language": "https://img.shields.io/github/languages/top/Deeptiman/employeeledger",
101 | "github_badges_forks": "https://img.shields.io/github/forks/Deeptiman/employeeledger?label=Fork&style=social",
102 | "hasGithub": true,
103 | "hasMedium": true,
104 | "medium": "https://medium.com/@deeptiman/a-single-organization-application-in-hyperledger-fabric-146c351b04b7",
105 | "hasPlaystore": false,
106 | "playstore": "",
107 | "timestamp": 1561220375
108 | },
109 | {
110 | "name": "Hyperledger Fabric - Multi Organization Demo",
111 | "description": "The Blockchain network consists of four organizations joined with a single channel. The ledger data created in an organization can be accessible by the other participating organization in the network. So, all the peers of any organization can commit a block as a transaction into the ledger.",
112 | "banner": "http://assets.poccoder.com/images/hyperledger_multi_org_banner.png",
113 | "tools": [
114 | {
115 | "name": "blockchain",
116 | "link": "https://hyperledger-fabric.readthedocs.io/en/release-2.2/blockchain.html"
117 | },
118 | {
119 | "name": "hyperledger",
120 | "link": "https://hyperledger-fabric.readthedocs.io/"
121 | },
122 | {
123 | "name": "docker",
124 | "link": "https://docs.docker.com/"
125 | },
126 | {
127 | "name": "golang",
128 | "link": "https://golang.org/doc/"
129 | }
130 | ],
131 | "github": "https://github.com/Deeptiman/multiorgledger",
132 | "github_badges_last_commit": "https://img.shields.io/github/last-commit/Deeptiman/multiorgledger",
133 | "github_badges_language_count": "https://img.shields.io/github/languages/count/Deeptiman/multiorgledger",
134 | "github_badges_top_language": "https://img.shields.io/github/languages/top/Deeptiman/multiorgledger",
135 | "github_badges_forks": "https://img.shields.io/github/forks/Deeptiman/multiorgledger?label=Fork&style=social",
136 | "hasGithub": true,
137 | "hasMedium": true,
138 | "medium": "https://medium.com/@deeptiman/a-multi-organization-application-in-hyperledger-fabric-8612cef5bbae",
139 | "hasPlaystore": false,
140 | "playstore": "",
141 | "timestamp": 1564762775
142 | },
143 | {
144 | "name": "Hyperledger Fabric - Privacy and Confidentiality",
145 | "description": "The Blockchain application will store the records in a private network that the ledger data will only be accessible to the organization that has committed the block into the ledger. The records can be shared with other organizations in the network. The project will demonstrate Privacy and Confidentiality in Hyperledger Fabric.",
146 | "banner": "http://assets.poccoder.com/images/hyperledger_private_org_banner.png",
147 | "tools": [
148 | {
149 | "name": "private-blockchain",
150 | "link": "https://hyperledger-fabric.readthedocs.io/en/release-2.2/blockchain.html"
151 | },
152 | {
153 | "name": "hyperledger",
154 | "link": "https://hyperledger-fabric.readthedocs.io/"
155 | },
156 | {
157 | "name": "docker",
158 | "link": "https://docs.docker.com/"
159 | },
160 | {
161 | "name": "golang",
162 | "link": "https://golang.org/doc/"
163 | },
164 | {
165 | "name": "gdpr",
166 | "link": "https://www.ibm.com/downloads/cas/GNQZVQR3"
167 | }
168 | ],
169 | "github": "https://github.com/Deeptiman/privateledger",
170 | "github_badges_last_commit": "https://img.shields.io/github/last-commit/Deeptiman/privateledger",
171 | "github_badges_language_count": "https://img.shields.io/github/languages/count/Deeptiman/privateledger",
172 | "github_badges_top_language": "https://img.shields.io/github/languages/top/Deeptiman/privateledger",
173 | "github_badges_forks": "https://img.shields.io/github/forks/Deeptiman/privateledger?label=Fork&style=social",
174 | "hasGithub": true,
175 | "hasMedium": true,
176 | "medium": "https://medium.com/@deeptiman/confidentiality-and-private-data-in-hyperledger-fabric-1279c8e2e57f",
177 | "hasPlaystore": false,
178 | "playstore": "",
179 | "timestamp": 1564762775
180 | },
181 | {
182 | "name": "Hyperledger Fabric - Offchain Storage",
183 | "description": "The Blockchain application is a sample demonstration to understand the concept of implementing offchain storage and the capability in the Hyperledger fabric Blockchain network. So, this project will work as a peer block event listener and will store the block details in the CouchDB that can be query through MapReduce.",
184 | "banner": "http://assets.poccoder.com/images/hyperledger_offchain_data_banner.png",
185 | "tools": [
186 | {
187 | "name": "blockchain",
188 | "link": "https://hyperledger-fabric.readthedocs.io/en/release-2.2/blockchain.html"
189 | },
190 | {
191 | "name": "offchain-storage",
192 | "link": "https://www.ibm.com/downloads/cas/RXOVXAPM"
193 | },
194 | {
195 | "name": "couchdb",
196 | "link": "https://docs.couchdb.org/"
197 | },
198 | {
199 | "name": "mapreduce",
200 | "link": "https://en.wikipedia.org/wiki/MapReduce"
201 | },
202 | {
203 | "name": "grpc-go",
204 | "link": "https://grpc.io/docs/languages/go/basics/"
205 | }
206 | ],
207 | "github": "https://github.com/Deeptiman/offchaindata",
208 | "github_badges_last_commit": "https://img.shields.io/github/last-commit/Deeptiman/offchaindata",
209 | "github_badges_language_count": "https://img.shields.io/github/languages/count/Deeptiman/offchaindata",
210 | "github_badges_top_language": "https://img.shields.io/github/languages/top/Deeptiman/offchaindata",
211 | "github_badges_forks": "https://img.shields.io/github/forks/Deeptiman/offchaindata?label=Fork&style=social",
212 | "hasGithub": true,
213 | "hasMedium": true,
214 | "medium": "https://medium.com/@deeptiman/offchain-storage-in-hyperledger-fabric-77e28bd99e0c",
215 | "hasPlaystore": false,
216 | "playstore": "",
217 | "timestamp": 1582733975
218 | },
219 | {
220 | "name": "Sur Sadhana",
221 | "description": "The application will allow the singers to learn a different set of tunes of Sa Re Ga Ma Pa in a various range of the notes. The singer can analyze his/her singing skill from the real-time graphical view that plot based on the singer's voice. The application has a learning module that the singer can watch as a lesson before practicing on their own.",
222 | "banner": "http://assets.poccoder.com/images/sur_sadhana_banner.png",
223 | "tools": [
224 | {
225 | "name": "android",
226 | "link": "https://developer.android.com/"
227 | },
228 | {
229 | "name": "android-audio-record",
230 | "link": "https://developer.android.com/reference/android/media/AudioRecord"
231 | },
232 | {
233 | "name": "achartengine",
234 | "link": "https://github.com/ddanny/achartengine"
235 | },
236 | {
237 | "name": "standard-deviation",
238 | "link": "https://en.wikipedia.org/wiki/Standard_deviation"
239 | }
240 | ],
241 | "github": "",
242 | "github_badges_last_commit": "",
243 | "github_badges_language_count": "",
244 | "github_badges_top_language": "",
245 | "github_badges_forks": "",
246 | "hasGithub": false,
247 | "hasMedium": false,
248 | "hasPlaystore": true,
249 | "playstore": "https://play.google.com/store/apps/details?id=com.shankarmahadevanacademy.sursadhana.swara",
250 | "timestamp": 1432657175
251 | },
252 | {
253 | "name": "Beat Station",
254 | "description": "BeatStation is a music app where people can listen to their favorite Genre online. The application is built with large storage of music mp3 files in the server that sync with the mobile application for the streaming of the music files.",
255 | "banner": "http://assets.poccoder.com/images/beat_station.png",
256 | "tools": [
257 | {
258 | "name": "play-audio-android",
259 | "link": "https://developer.android.com/guide/topics/media/mediaplayer"
260 | },
261 | {
262 | "name": "stream-mp3-android",
263 | "link": "https://developer.android.com/guide/topics/media/mediaplayer"
264 | },
265 | {
266 | "name": "aws-s3-bucket",
267 | "link": "https://aws.amazon.com/s3/"
268 | }
269 | ],
270 | "github": "",
271 | "github_badges_last_commit": "",
272 | "github_badges_language_count": "",
273 | "github_badges_top_language": "",
274 | "github_badges_forks": "",
275 | "hasGithub": false,
276 | "hasMedium": false,
277 | "hasPlaystore": true,
278 | "playstore": "https://play.google.com/store/apps/details?id=com.mdotbuz",
279 | "timestamp": 1417450775
280 | },
281 | {
282 | "name": "PHP Dom Parser and Translation Tool",
283 | "description": "The web application is developed to demonstrate translation in live web pages by parsing through HTML DOM and extracting the text element and match them with an English to Odia dictionary that is stored in a local database. The complete parsing result will preview as a translated webpage for a website.",
284 | "banner": "http://assets.poccoder.com/images/parser_tool.png",
285 | "tools": [
286 | {
287 | "name": "php",
288 | "link": "https://www.php.net/docs.php"
289 | },
290 | {
291 | "name": "dom-parser",
292 | "link": "https://www.w3schools.com/php/php_xml_dom.asp"
293 | },
294 | {
295 | "name": "statistical-machine-translation",
296 | "link": "https://en.wikipedia.org/wiki/Statistical_machine_translation"
297 | },
298 | {
299 | "name": "parallel-corpus",
300 | "link": "https://en.wikipedia.org/wiki/Parallel_text"
301 | }
302 | ],
303 | "github": "https://github.com/Deeptiman/php-dom-parser-translation-tool",
304 | "github_badges_last_commit": "https://img.shields.io/github/last-commit/Deeptiman/php-dom-parser-translation-tool",
305 | "github_badges_language_count": "https://img.shields.io/github/languages/count/Deeptiman/php-dom-parser-translation-tool",
306 | "github_badges_top_language": "https://img.shields.io/github/languages/top/Deeptiman/php-dom-parser-translation-tool",
307 | "github_badges_forks": "https://img.shields.io/github/forks/Deeptiman/php-dom-parser-translation-tool?label=Fork&style=social",
308 | "hasGithub": true,
309 | "hasMedium": false,
310 | "hasPlaystore": false,
311 | "playstore": "",
312 | "timestamp": 1378052375
313 | },
314 | {
315 | "name": "Android Alphabet learning App",
316 | "description": "The application is an Odia letter learning app that is helpful for people to learn Odia letters writing. The app has a learning module to understand the exact writing of an Odia letter. The application will provide ratings to the user for each writing session.",
317 | "banner": "http://assets.poccoder.com/images/alphabet_app.png",
318 | "tools": [
319 | {
320 | "name": "android-application",
321 | "link": "https://developer.android.com/"
322 | },
323 | {
324 | "name": "android-ndk",
325 | "link": "https://developer.android.com/ndk"
326 | },
327 | {
328 | "name": "gesture-recognition",
329 | "link": "https://developer.android.com/training/gestures/detector"
330 | },
331 | {
332 | "name": "odia-alphabet",
333 | "link": "https://en.wikipedia.org/wiki/Odia_script"
334 | }
335 | ],
336 | "github": "https://github.com/Deeptiman/Alphabet-Learning-Android-Application",
337 | "github_badges_last_commit": "https://img.shields.io/github/last-commit/Deeptiman/Alphabet-Learning-Android-Application",
338 | "github_badges_language_count": "https://img.shields.io/github/languages/count/Deeptiman/Alphabet-Learning-Android-Application",
339 | "github_badges_top_language": "https://img.shields.io/github/languages/top/Deeptiman/Alphabet-Learning-Android-Application",
340 | "github_badges_forks": "https://img.shields.io/github/forks/Deeptiman/Alphabet-Learning-Android-Application?label=Fork&style=social",
341 | "hasGithub": true,
342 | "hasMedium": false,
343 | "hasPlaystore": false,
344 | "playstore": "",
345 | "timestamp": 1519921175
346 | },
347 | {
348 | "name": "Online Examination App",
349 | "description": "The application is an examination platform where a student can give an assessment online. The teachers can set questions and time for the assessment from the mobile application.",
350 | "banner": "http://assets.poccoder.com/images/banner_fellowprap.png",
351 | "tools": [
352 | {
353 | "name": "android-application",
354 | "link": "https://developer.android.com/"
355 | },
356 | {
357 | "name": "rest-api",
358 | "link": "https://developers.google.com/android/guides/http-auth"
359 | },
360 | {
361 | "name": "json",
362 | "link": "https://www.json.org/"
363 | },
364 | {
365 | "name": "sqlite",
366 | "link": "https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase"
367 | },
368 | {
369 | "name": "amazon-aws",
370 | "link": "https://aws.amazon.com/"
371 | }
372 | ],
373 | "github": "",
374 | "github_badges_last_commit": "",
375 | "github_badges_language_count": "",
376 | "github_badges_top_language": "",
377 | "github_badges_forks": "",
378 | "hasGithub": false,
379 | "hasMedium": false,
380 | "hasPlaystore": true,
381 | "playstore": "https://play.google.com/store/apps/details?id=com.mindtree.kefprap",
382 | "timestamp": 1407783750
383 | },
384 | {
385 | "name": "TODO List Planner App",
386 | "description": "In this application, the user can plan, schedule daily activity. There is also a Calendar feature where the user can view their planned activity status with different distinct colors.",
387 | "banner": "http://assets.poccoder.com/images/fellowregister_banner.png",
388 | "tools": [
389 | {
390 | "name": "android-sync-adapter",
391 | "link": "https://developer.android.com/training/sync-adapters/creating-sync-adapter"
392 | },
393 | {
394 | "name": "rest-api",
395 | "link": "https://developers.google.com/android/guides/http-auth"
396 | },
397 | {
398 | "name": "json",
399 | "link": "https://www.json.org/"
400 | },
401 | {
402 | "name": "sqlite",
403 | "link": "https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase"
404 | },
405 | {
406 | "name": "amazon-aws",
407 | "link": "https://aws.amazon.com/"
408 | }
409 | ],
410 | "github": "",
411 | "github_badges_last_commit": "",
412 | "github_badges_language_count": "",
413 | "github_badges_top_language": "",
414 | "github_badges_forks": "",
415 | "hasGithub": false,
416 | "hasMedium": false,
417 | "hasPlaystore": true,
418 | "playstore": "https://play.google.com/store/apps/details?id=com.mindtree.keffellowregister",
419 | "timestamp": 1402513350
420 | },
421 | {
422 | "name": "English to Odia Dictionary",
423 | "description": "The dictionary application has a very simple user interface where the user can enter English words to get the Odia meaning. The application has more than 1 million downloads in Google Playstore.",
424 | "banner": "http://assets.poccoder.com/images/odia_dictionary.png",
425 | "tools": [
426 | {
427 | "name": "android",
428 | "link": "https://developer.android.com/training/sync-adapters/creating-sync-adapter"
429 | },
430 | {
431 | "name": "sqlite",
432 | "link": "https://developer.android.com/reference/android/database/sqlite/SQLiteDatabase"
433 | }
434 | ],
435 | "github": "",
436 | "github_badges_last_commit": "",
437 | "github_badges_language_count": "",
438 | "github_badges_top_language": "",
439 | "github_badges_forks": "",
440 | "hasGithub": false,
441 | "hasMedium": false,
442 | "hasPlaystore": true,
443 | "playstore": "https://play.google.com/store/apps/details?id=com.ori.dic",
444 | "timestamp": 1392194658
445 | }
446 | ]
--------------------------------------------------------------------------------
/src/server/projects/projects_routes.js:
--------------------------------------------------------------------------------
1 | var express = require("express");
2 | var router = express.Router();
3 | var mongoose = require("mongoose");
4 |
5 | var Projects = require("./schema");
6 | mongoose.connect("mongodb://127.0.0.1:27017/poccoder_portfolio");
7 |
8 | router.get("/", (req, res) => {
9 | Projects.find({}, function(err, results) {
10 | if (err) return;
11 | res.json(results);
12 | });
13 | });
14 |
15 | module.exports = router;
--------------------------------------------------------------------------------
/src/server/projects/schema.js:
--------------------------------------------------------------------------------
1 | const mongoose = require("mongoose");
2 |
3 | const schema = new mongoose.Schema({
4 |
5 | name: {
6 | type: String,
7 | text: true
8 | },
9 | description: {
10 | type: String,
11 | text: true
12 | },
13 | tools: [
14 | {
15 | name: {
16 | type: String,
17 | text: true
18 | },
19 | link: {
20 | type: String,
21 | text: true
22 | }
23 | }
24 | ],
25 | github: {
26 | type: String,
27 | text: true
28 | },
29 | github_badges_last_commit: {
30 | type: String,
31 | text: true
32 | },
33 | github_badges_language_count: {
34 | type: String,
35 | text: true
36 | },
37 | github_badges_top_language: {
38 | type: String,
39 | text: true
40 | },
41 | github_badges_forks: {
42 | type: String,
43 | text: true
44 | },
45 | medium: {
46 | type: String,
47 | text: true
48 | },
49 | playstore: {
50 | type: String,
51 | text: true
52 | },
53 | hasGithub: {
54 | type: Boolean
55 | },
56 | hasMedium: {
57 | type: Boolean
58 | },
59 | hasPlaystore: {
60 | type: Boolean
61 | }
62 | })
63 | module.exports = mongoose.model("Projects", schema);
64 |
--------------------------------------------------------------------------------
/webpack.client.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 |
3 | module.exports = {
4 | target: 'node',
5 | entry: './src/client/index.js',
6 | output: {
7 | filename: 'client_bundle.js',
8 | path: path.resolve(__dirname, 'build/public'),
9 | publicPath: '/build/public'
10 | },
11 | module: {
12 | rules: [
13 | {
14 | test: [/\.svg$/, /\.gif$/, /\.jpe?g$/, /\.png$/],
15 | loader: "file-loader",
16 | options: {
17 | name: "/media/[name].[ext]",
18 | publicPath: url => url.replace(/build/, "")
19 | }
20 | },
21 | {
22 | test: /\.js$/,
23 | loader: 'babel-loader',
24 | exclude: '/node_modules/',
25 | options: {
26 | presets: [
27 | '@babel/preset-react',
28 | '@babel/env'
29 | ],
30 | "plugins": [
31 | "@babel/plugin-proposal-class-properties"
32 | ]
33 | }
34 | },
35 | {
36 | test: /\.css$/i,
37 | loader: ['style-loader', 'css-loader']
38 | },
39 | {
40 | test: /\.scss$/,
41 | loader: 'style-loader!css-loader!sass-loader'
42 | },
43 | {
44 | test: /\.(woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/,
45 | use: [{
46 | loader: 'file-loader',
47 | options: {
48 | name: '[name].[ext]',
49 | outputPath: './fonts/'
50 | }
51 | }]
52 | }
53 | ]
54 | }
55 | }
--------------------------------------------------------------------------------
/webpack.server.js:
--------------------------------------------------------------------------------
1 | const path = require('path');
2 | const webpackNodeExternals = require('webpack-node-externals');
3 |
4 | module.exports = {
5 | target: 'node',
6 | entry: './src/server/index.js',
7 | output: {
8 | filename: 'bundle.js',
9 | path: path.resolve(__dirname, 'build'),
10 | publicPath: '/build'
11 | },
12 | module: {
13 | rules: [
14 | {
15 | test: [/\.svg$/, /\.gif$/, /\.jpe?g$/, /\.png$/],
16 | loader: "file-loader",
17 | options: {
18 | name: "/media/[name].[ext]",
19 | publicPath: url => url.replace(/build/, ""),
20 | emit: false
21 | }
22 | },
23 | {
24 | test: /\.js$/,
25 | loader: 'babel-loader',
26 | exclude: '/node_modules/',
27 | options: {
28 | "presets": [
29 | ['@babel/preset-env', {
30 | "targets": {
31 | "esmodules": true,
32 | },
33 | }],
34 | '@babel/preset-react'
35 | ],
36 | plugins: [
37 | ["@babel/plugin-proposal-class-properties"],
38 | ["@babel/transform-regenerator"],
39 | ["@babel/transform-runtime", {
40 | "regenerator": true
41 | }]
42 | ]
43 | }
44 | },
45 | {
46 | test: /\.css$/,
47 | use: [
48 | {
49 | loader: "css-loader"
50 | }
51 | ]
52 | },
53 | {
54 | test: /\.(woff(2)?|ttf|eot|svg)(\?v=\d+\.\d+\.\d+)?$/,
55 | use: [{
56 | loader: 'file-loader',
57 | options: {
58 | name: '[name].[ext]',
59 | outputPath: './fonts/'
60 | }
61 | }]
62 | }
63 | ]
64 | },
65 | externals: [webpackNodeExternals()]
66 | }
--------------------------------------------------------------------------------