├── .env.example ├── .eslintrc.json ├── .github └── FUNDING.yml ├── .gitignore ├── README.md ├── app ├── api │ ├── contact │ │ └── route.js │ └── google │ │ └── route.js ├── blog │ ├── [slug] │ │ └── page.js │ └── page.js ├── components │ ├── footer.jsx │ ├── helper │ │ ├── animation-lottie.jsx │ │ ├── glow-card.jsx │ │ └── scroll-to-top.jsx │ ├── homepage │ │ ├── about │ │ │ └── index.jsx │ │ ├── blog │ │ │ ├── blog-card.jsx │ │ │ └── index.jsx │ │ ├── contact │ │ │ ├── contact-with-captcha.jsx │ │ │ ├── contact-without-captcha.jsx │ │ │ └── index.jsx │ │ ├── education │ │ │ └── index.jsx │ │ ├── experience │ │ │ └── index.jsx │ │ ├── hero-section │ │ │ └── index.jsx │ │ ├── projects │ │ │ ├── index.jsx │ │ │ ├── project-card.jsx │ │ │ └── single-project.jsx │ │ └── skills │ │ │ └── index.jsx │ └── navbar.jsx ├── css │ ├── card.scss │ └── globals.scss ├── favicon.ico ├── layout.js └── page.js ├── jsconfig.json ├── next.config.js ├── package-lock.json ├── package.json ├── postcss.config.js ├── public ├── blur-23.svg ├── card.png ├── grid.svg ├── hero.svg ├── image │ ├── ayla.jpg │ ├── crefin.jpg │ ├── portfolio.gif │ ├── real-estate.jpg │ ├── screen.png │ └── travel.jpg ├── lottie │ ├── build.json │ ├── code.json │ ├── coding.json │ ├── contact.json │ ├── development.json │ ├── education.json │ ├── js.json │ ├── lotti.json │ └── study.json ├── next.svg ├── png │ └── placeholder.png ├── profile.png ├── section.svg ├── svg │ ├── contactsImage.svg │ ├── education │ │ ├── eduBlack.svg │ │ ├── eduBlue.svg │ │ ├── eduGreen.svg │ │ ├── eduImgBlack.svg │ │ ├── eduImgWhite.svg │ │ ├── eduOrange.svg │ │ ├── eduPink.svg │ │ ├── eduPurple.svg │ │ ├── eduRed.svg │ │ ├── eduTwitter.svg │ │ └── eduYellow.svg │ ├── experience │ │ ├── expBlack.svg │ │ ├── expBlue.svg │ │ ├── expGreen.svg │ │ ├── expImgBlack.svg │ │ ├── expImgWhite.svg │ │ ├── expOrange.svg │ │ ├── expPink.svg │ │ ├── expPurple.svg │ │ ├── expRed.svg │ │ ├── expTwitter.svg │ │ └── expYellow.svg │ ├── projects │ │ ├── eight.svg │ │ ├── eleven.svg │ │ ├── five.svg │ │ ├── four.svg │ │ ├── nine.svg │ │ ├── one.svg │ │ ├── sample.svg │ │ ├── seven.svg │ │ ├── six.svg │ │ ├── ten.svg │ │ ├── thirteen.svg │ │ ├── three.svg │ │ ├── twelve.svg │ │ └── two.svg │ └── skills │ │ ├── adobe-xd.svg │ │ ├── adobeaudition.svg │ │ ├── after-effects.svg │ │ ├── angular.svg │ │ ├── aws.svg │ │ ├── azure.svg │ │ ├── blender.svg │ │ ├── bootstrap.svg │ │ ├── bulma.svg │ │ ├── c.svg │ │ ├── canva.svg │ │ ├── capacitorjs.svg │ │ ├── coffeescript.svg │ │ ├── cplusplus.svg │ │ ├── csharp.svg │ │ ├── css.svg │ │ ├── dart.svg │ │ ├── deno.svg │ │ ├── django.svg │ │ ├── docker.svg │ │ ├── fastify.svg │ │ ├── figma.svg │ │ ├── firebase.svg │ │ ├── flutter.svg │ │ ├── gcp.svg │ │ ├── gimp.svg │ │ ├── git.svg │ │ ├── go.svg │ │ ├── graphql.svg │ │ ├── haxe.svg │ │ ├── html.svg │ │ ├── illustrator.svg │ │ ├── ionic.svg │ │ ├── java.svg │ │ ├── javascript.svg │ │ ├── julia.svg │ │ ├── kotlin.svg │ │ ├── lightroom.svg │ │ ├── markdown.svg │ │ ├── materialui.svg │ │ ├── matlab.svg │ │ ├── memsql.svg │ │ ├── microsoftoffice.svg │ │ ├── mongoDB.svg │ │ ├── mysql.svg │ │ ├── nextJS.svg │ │ ├── nginx.svg │ │ ├── numpy.svg │ │ ├── nuxtJS.svg │ │ ├── opencv.svg │ │ ├── photoshop.svg │ │ ├── php.svg │ │ ├── picsart.svg │ │ ├── postgresql.svg │ │ ├── premierepro.svg │ │ ├── python.svg │ │ ├── pytorch.svg │ │ ├── react.svg │ │ ├── ruby.svg │ │ ├── selenium.svg │ │ ├── sketch.svg │ │ ├── sqlite.svg │ │ ├── strapi.svg │ │ ├── svelte.svg │ │ ├── swift.svg │ │ ├── tailwind.svg │ │ ├── tensorflow.svg │ │ ├── typescript.svg │ │ ├── unity.svg │ │ ├── vitejs.svg │ │ ├── vue.svg │ │ ├── vuetifyjs.svg │ │ ├── webix.svg │ │ ├── wolframalpha.svg │ │ └── wordpress.svg ├── top-bg.svg └── vercel.svg ├── tailwind.config.js └── utils ├── check-email.js ├── data ├── contactsData.js ├── educations.js ├── experience.js ├── personal-data.js ├── projects-data.js └── skills.js ├── skill-image.js └── time-converter.js /.env.example: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_EMAILJS_SERVICE_ID = 2 | NEXT_PUBLIC_EMAILJS_TEMPLATE_ID = 3 | NEXT_PUBLIC_EMAILJS_PUBLIC_KEY = 4 | NEXT_PUBLIC_GTM = 5 | NEXT_PUBLIC_APP_URL = "http://127.0.0.1:3000" 6 | NEXT_PUBLIC_RECAPTCHA_SECRET_KEY = 7 | NEXT_PUBLIC_RECAPTCHA_SITE_KEY = -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 12 | polar: # Replace with a single Polar username 13 | buy_me_a_coffee: # Replace with a single Buy Me a Coffee username 14 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 15 | -------------------------------------------------------------------------------- /.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 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | 27 | # local env files 28 | .env*.local 29 | .env 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | next-env.d.ts 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |
3 |
15 | © Developer Portfolio by Abu Said 16 |
17 |19 | Who I am? 20 |
21 |22 | {personalData.description} 23 |
24 |{timeConverter(blog.published_at)}
25 |
27 |
32 |
40 | {blog.title} 41 |
42 | 43 |44 | {`${blog.reading_time_minutes} Min Read`} 45 |
46 |47 | {blog.description} 48 |
49 | {/*58 | Contact with me 59 |
60 |62 | {"If you have any questions or concerns, please don't hesitate to contact me. I am open to any work opportunities that align with my skills and interests."} 63 |
64 |Please provide a valid email!
94 | } 95 |113 | Email and Message are required! 114 |
115 | } 116 | 124 |
31 |
38 |
47 |
59 | {education.duration} 60 |
61 |68 | {education.title} 69 |
70 |{education.institution}
71 |54 | {experience.duration} 55 |
56 |63 | {experience.title} 64 |
65 |66 | {experience.company} 67 |
68 |20 | {project.name} 21 |
22 |
25 |
26 | const
27 | project
28 | =
29 | {'{'}
30 |
31 |
32 | name:
33 | {`'`}
34 | {project.name}
35 | {`',`}
36 |
37 |
38 |
39 | tools:
40 | {` ['`}
41 | {
42 | project.tools.map((tag, i) => (
43 |
44 | {tag}
45 | {
46 | project.tools.length - 1 !== i &&
47 | {`', '`}
48 | }
49 |
50 | ))
51 | }
52 | {"],"}
53 |
54 |
55 | myRole:
56 | {project.role}
57 | ,
58 |
59 |
60 | Description:
61 | {' ' + project.description}
62 | ,
63 |
64 | {`};`}
65 |
66 |