├── components
├── AppLayout
│ ├── index.js
│ └── AppLayout.js
├── GoogleAnalytics
│ └── index.js
├── BlogItem
│ └── index.js
└── EmailSubscribeForm
│ └── index.js
├── .eslintrc.json
├── public
├── favicon.ico
├── devle-app.jpg
├── assets
│ ├── gpt-4.avif
│ ├── ai-projects.png
│ ├── chatbots-course.png
│ └── coming-soon-banner.png
├── abraham-tavarez-logo-mini.png
├── React-Shorts-YouTube-Thumbnail.png
├── efren-tavarez-aws-nyc-Abraham-Tavarez-1000x978.png
├── vercel.svg
└── next.svg
├── postcss.config.js
├── pages
├── _document.tsx
├── api
│ └── hello.ts
├── _app.js
├── post
│ └── [postId].js
├── blogs.js
├── contact.js
├── projects.js
├── index.js
└── courses.js
├── .gitignore
├── next.config.js
├── tsconfig.json
├── tailwind.config.ts
├── package.json
├── hooks
└── useWindowSize.js
├── README.md
├── styles
└── globals.css
└── blogsData
└── blogs.js
/components/AppLayout/index.js:
--------------------------------------------------------------------------------
1 | export * from './AppLayout';
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "next/core-web-vitals"
3 | }
4 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbeTavarez/devp/main/public/favicon.ico
--------------------------------------------------------------------------------
/public/devle-app.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbeTavarez/devp/main/public/devle-app.jpg
--------------------------------------------------------------------------------
/public/assets/gpt-4.avif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbeTavarez/devp/main/public/assets/gpt-4.avif
--------------------------------------------------------------------------------
/public/assets/ai-projects.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbeTavarez/devp/main/public/assets/ai-projects.png
--------------------------------------------------------------------------------
/public/assets/chatbots-course.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbeTavarez/devp/main/public/assets/chatbots-course.png
--------------------------------------------------------------------------------
/postcss.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/public/abraham-tavarez-logo-mini.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbeTavarez/devp/main/public/abraham-tavarez-logo-mini.png
--------------------------------------------------------------------------------
/public/assets/coming-soon-banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbeTavarez/devp/main/public/assets/coming-soon-banner.png
--------------------------------------------------------------------------------
/public/React-Shorts-YouTube-Thumbnail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbeTavarez/devp/main/public/React-Shorts-YouTube-Thumbnail.png
--------------------------------------------------------------------------------
/public/efren-tavarez-aws-nyc-Abraham-Tavarez-1000x978.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AbeTavarez/devp/main/public/efren-tavarez-aws-nyc-Abraham-Tavarez-1000x978.png
--------------------------------------------------------------------------------
/pages/_document.tsx:
--------------------------------------------------------------------------------
1 | import { Html, Head, Main, NextScript } from 'next/document'
2 |
3 | export default function Document() {
4 | return (
5 |
6 |
8 |
11 | ) {
12 | res.status(200).json({ name: 'John Doe' })
13 | }
14 |
--------------------------------------------------------------------------------
/.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 |
30 | # vercel
31 | .vercel
32 |
33 | # typescript
34 | *.tsbuildinfo
35 | next-env.d.ts
36 |
--------------------------------------------------------------------------------
/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/pages/_app.js:
--------------------------------------------------------------------------------
1 | import "@/styles/globals.css";
2 | import { Roboto, Monoton } from "next/font/google";
3 |
4 | const roboto = Roboto({
5 | weight: ["400"],
6 | subsets: ["latin"],
7 | variable: '--font-roboto'
8 | });
9 | const monoton = Monoton({
10 | weight: ["400"],
11 | subsets: ["latin"],
12 | variable: '--font-monoton'
13 | });
14 |
15 | export default function App({ Component, pageProps }) {
16 | const getLayout = Component.getLayout || ((page) => page);
17 |
18 | return (
19 |
20 | {getLayout( , pageProps)}
21 |
22 | );
23 | }
24 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | // /** @type {import('next').NextConfig} */
2 | // const nextConfig = {
3 | // reactStrictMode: true,
4 | // // images: {
5 | // // remotePatterns: [
6 | // // {
7 | // // protocol: 'https',
8 | // // hostname: 'images.unsplash',
9 | // // // port: '',
10 | // // // pathname: '/account123/**',
11 | // // },
12 | // // ],
13 | // // },
14 | // images: {
15 | // domains: ['images.unsplash'],
16 | // },
17 | // }
18 |
19 | // module.exports = nextConfig
20 |
21 | module.exports = {
22 | reactStrictMode: true,
23 | images: {
24 | domains: ['images.unsplash.com']
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/components/GoogleAnalytics/index.js:
--------------------------------------------------------------------------------
1 | import Script from "next/script";
2 |
3 | const GoogleAnalytics = ({ ga_id }) => (
4 | <>
5 |
10 |
22 | >
23 | );
24 | export default GoogleAnalytics;
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": ["dom", "dom.iterable", "esnext"],
5 | "allowJs": true,
6 | "skipLibCheck": true,
7 | "strict": true,
8 | "forceConsistentCasingInFileNames": true,
9 | "noEmit": true,
10 | "esModuleInterop": true,
11 | "module": "esnext",
12 | "moduleResolution": "bundler",
13 | "resolveJsonModule": true,
14 | "isolatedModules": true,
15 | "jsx": "preserve",
16 | "incremental": true,
17 | "paths": {
18 | "@/*": ["./*"]
19 | }
20 | },
21 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", "pages/_app.js", "pages/index.js", "pages/home.js"],
22 | "exclude": ["node_modules"]
23 | }
24 |
--------------------------------------------------------------------------------
/tailwind.config.ts:
--------------------------------------------------------------------------------
1 | import type { Config } from 'tailwindcss'
2 |
3 | const config: Config = {
4 | // darkMode: ['class', '[data-mode="dark"]'],
5 | darkMode: 'class',
6 | content: [
7 | './pages/**/*.{js,ts,jsx,tsx,mdx}',
8 | './components/**/*.{js,ts,jsx,tsx,mdx}',
9 | './app/**/*.{js,ts,jsx,tsx,mdx}',
10 | ],
11 | theme: {
12 | extend: {
13 | colors: {
14 | 'blk-dark': '#181818'
15 | },
16 | backgroundImage: {
17 | 'gradient-radial': 'radial-gradient(var(--tw-gradient-stops))',
18 | 'gradient-conic':
19 | 'conic-gradient(from 180deg at 50% 50%, var(--tw-gradient-stops))',
20 | },
21 | darkMode: 'class'
22 | },
23 | darkMode: 'class'
24 | },
25 | plugins: [],
26 | }
27 | export default config
28 |
--------------------------------------------------------------------------------
/components/BlogItem/index.js:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import Link from "next/link";
3 |
4 | export default function BlogItem({title, img, date, metaDescription, postId}) {
5 | return (
6 |
7 |
14 |
15 |
16 |
20 | {title}
21 |
22 |
23 |
24 | {metaDescription}
25 |
26 |
27 |
28 | On: {date}
29 |
30 |
31 |
32 | );
33 | }
34 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "dev-porfolio-2023",
3 | "version": "0.1.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint"
10 | },
11 | "dependencies": {
12 | "@emailjs/browser": "^3.11.0",
13 | "@fortawesome/fontawesome-svg-core": "^6.4.2",
14 | "@fortawesome/free-brands-svg-icons": "^6.4.2",
15 | "@fortawesome/free-solid-svg-icons": "^6.4.2",
16 | "@fortawesome/react-fontawesome": "^0.2.0",
17 | "@types/node": "20.4.9",
18 | "@types/react": "18.2.20",
19 | "@types/react-dom": "18.2.7",
20 | "autoprefixer": "10.4.14",
21 | "eslint": "8.47.0",
22 | "eslint-config-next": "13.4.13",
23 | "next": "13.4.13",
24 | "postcss": "8.4.27",
25 | "react": "18.2.0",
26 | "react-dom": "18.2.0",
27 | "react-icons": "^4.10.1",
28 | "react-mailchimp-subscribe": "^2.1.3",
29 | "tailwindcss": "3.3.3",
30 | "typescript": "5.1.6"
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/hooks/useWindowSize.js:
--------------------------------------------------------------------------------
1 | import { useState, useEffect } from "react";
2 |
3 | export function useWindowSize() {
4 | // Initialize state with undefined width/height so server and client renders match
5 | // Learn more here: https://joshwcomeau.com/react/the-perils-of-rehydration/
6 | const [windowSize, setWindowSize] = useState({
7 | width: undefined,
8 | height: undefined,
9 | });
10 |
11 | useEffect(() => {
12 | // only execute all the code below in client side
13 | // Handler to call on window resize
14 | function handleResize() {
15 | // Set window width/height to state
16 | setWindowSize({
17 | width: window.innerWidth,
18 | height: window.innerHeight,
19 | });
20 | }
21 |
22 | // Add event listener
23 | window.addEventListener("resize", handleResize);
24 |
25 | // Call handler right away so state gets updated with initial window size
26 | handleResize();
27 |
28 | // Remove event listener on cleanup
29 | return () => window.removeEventListener("resize", handleResize);
30 | }, []); // Empty array ensures that effect is only run on mount
31 | return windowSize;
32 | }
--------------------------------------------------------------------------------
/public/next.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
2 |
3 | ## Getting Started
4 |
5 | First, run the development server:
6 |
7 | ```bash
8 | npm run dev
9 | # or
10 | yarn dev
11 | # or
12 | pnpm dev
13 | ```
14 |
15 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
16 |
17 | You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file.
18 |
19 | [API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`.
20 |
21 | The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.
22 |
23 | This project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.
24 |
25 | ## Learn More
26 |
27 | To learn more about Next.js, take a look at the following resources:
28 |
29 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
30 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
31 |
32 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!
33 |
34 | ## Deploy on Vercel
35 |
36 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
37 |
38 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
39 |
--------------------------------------------------------------------------------
/pages/post/[postId].js:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import { blogs } from "../../blogsData/blogs";
3 | import { AppLayout } from "../../components/AppLayout";
4 | import Link from "next/link";
5 |
6 | export default function Post(props) {
7 | const { postContent, img } = props.post;
8 | return (
9 |
10 |
11 |
12 | Back
13 |
14 |
21 |
22 |
25 |
26 |
27 | );
28 | }
29 |
30 | Post.getLayout = function getLayout(page, pageProps) {
31 | return {page} ;
32 | };
33 |
34 | // first we need to create a list of paths.
35 | // https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-paths
36 | export const getStaticPaths = async () => {
37 | const paths = blogs.map((post) => ({
38 | params: { postId: post.postId },
39 | }));
40 | return {
41 | paths,
42 | fallback: false, // false or "blocking"
43 | };
44 | };
45 |
46 | // then we find the post by postId
47 | // https://nextjs.org/docs/pages/building-your-application/data-fetching/get-static-props
48 | export async function getStaticProps(ctx) {
49 | const post = blogs.find((post) => post.postId === ctx.params.postId);
50 | return {
51 | props: {
52 | post,
53 | },
54 | };
55 | }
56 |
--------------------------------------------------------------------------------
/styles/globals.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
5 | :root {
6 | --foreground-rgb: 0, 0, 0;
7 | --background-start-rgb: 214, 219, 220;
8 | --background-end-rgb: 255, 255, 255;
9 | }
10 |
11 | @layer base {
12 | a:hover {
13 | @apply underline
14 | }
15 | h1, h2, h3, h4, h5, h6 {
16 | @apply my-6 font-bold;
17 | }
18 |
19 | h1 {
20 | @apply text-4xl;
21 | }
22 |
23 | h2 {
24 | @apply text-3xl;
25 | }
26 |
27 | h3 {
28 | @apply text-2xl;
29 | }
30 |
31 | h4 {
32 | @apply text-xl;
33 | }
34 |
35 | h6 {
36 | @apply text-lg;
37 | }
38 |
39 | p {
40 | @apply my-2;
41 | }
42 |
43 | ul, ol {
44 | @apply my-4;
45 | }
46 |
47 | ul {
48 | list-style-type: disc;
49 | }
50 |
51 | ol {
52 | list-style-type: decimal;
53 | }
54 |
55 | li {
56 | @apply my-2;
57 | }
58 |
59 | }
60 |
61 | @layer components {
62 | .btn {
63 | @apply bg-violet-400 font-bold border-b p-1 hover:translate-x-2 mt-2 dark:bg-slate-500 w-[50%]
64 | }
65 |
66 | .nav-link {
67 | @apply font-bold mx-20 border-b p-1 hover:scale-125 hover:text-[#5EC9CC] mt-2 text-white dark:text-slate-900 transition-all
68 | }
69 |
70 |
71 | }
72 |
73 | @media (prefers-color-scheme: dark) {
74 | :root {
75 | --foreground-rgb: 255, 255, 255;
76 | --background-start-rgb: 0, 0, 0;
77 | --background-end-rgb: 0, 0, 0;
78 | }
79 | }
80 |
81 | body {
82 | color: rgb(var(--foreground-rgb));
83 | background: linear-gradient(
84 | to bottom,
85 | transparent,
86 | rgb(var(--background-end-rgb))
87 | )
88 | rgb(var(--background-start-rgb));
89 | }
90 |
91 | .toggle-checkbox:checked {
92 | right: 0;
93 | border-color: #5EC9CC;
94 | }
95 | .toggle-checkbox:checked + .toggle-label {
96 | background: #5EC9CC;
97 | }
98 |
99 |
--------------------------------------------------------------------------------
/components/EmailSubscribeForm/index.js:
--------------------------------------------------------------------------------
1 | import MailchimpSubscribe from "react-mailchimp-subscribe";
2 | import { useRef } from "react";
3 |
4 | export default function EmailSubscribeForm({ status, message, onValidated }) {
5 | const email = useRef();
6 | const name = useRef();
7 |
8 | const handleSubmit = () => {
9 | email &&
10 | name &&
11 | email.current.value.indexOf("@") > -1 &&
12 | onValidated({
13 | EMAIL: email.current.value,
14 | NAME: name.current.value
15 | });
16 |
17 | }
18 |
19 | return (
20 |
70 | );
71 | }
72 |
--------------------------------------------------------------------------------
/pages/blogs.js:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import { Inter } from "next/font/google";
3 | import { AppLayout } from "../components/AppLayout";
4 | import {blogs} from '../blogsData/blogs';
5 | import BlogItem from '../components/BlogItem'
6 |
7 | // const inter = Inter({ subsets: ["latin"] });
8 |
9 | export default function Blogs() {
10 | return (
11 |
12 |
13 |
14 | Blogs
15 |
16 |
17 | {blogs && (
18 | blogs.map(blog => )
19 | )}
20 |
21 |
22 |
23 | );
24 | }
25 |
26 | Blogs.getLayout = function getLayout(page, pageProps) {
27 | return {page} ;
28 | };
29 |
30 |
31 | {/*
32 |
33 |
34 |
41 |
42 |
43 |
44 |
45 |
46 |
53 |
54 |
55 |
56 |
57 |
58 |
65 |
66 |
67 |
68 |
69 |
70 |
77 |
78 |
79 |
80 |
81 |
82 |
89 |
90 |
91 |
92 |
93 |
94 |
101 |
*/}
--------------------------------------------------------------------------------
/blogsData/blogs.js:
--------------------------------------------------------------------------------
1 | export const blogs = [
2 | {
3 | postId: "1",
4 | title: "How to Start Learning Programming: A Guide for Beginners",
5 | img: "https://images.unsplash.com/photo-1515378960530-7c0da6231fb1?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1470&q=80",
6 | date: '03/11/2023',
7 | metaDescription: "Are you interested in learning programming but don't know where to start? In this guide, we'll cover the basics of programming, the best first programming language to learn, and how to become a web developer.",
8 | postContent: "How to Start Learning Programming: A Guide for Beginners Are you interested in learning programming but don't know where to start? You're not alone! Programming can seem intimidating, but with the right resources and guidance, anyone can learn how to code. In this guide, we'll cover the basics of programming, the best first programming language to learn, and how to become a web developer.
What is Programming? Programming is the process of writing instructions for a computer to execute. These instructions are written in a programming language, which is a set of commands that tell the computer what to do. Programming languages are used to create software, websites, and apps.
What is the Best First Programming Language to Learn? When it comes to learning programming, the best first language to learn is often debated. Some popular choices include Python, JavaScript, and Java. Each language has its own advantages and disadvantages, so it's important to do your research and decide which language is best for you. Python is a great choice for beginners because it is easy to learn and has a wide range of applications. JavaScript is also popular and is used to create interactive websites and apps. Java is a more complex language, but it is widely used and can be used to create a variety of applications.
How to Become a Web Developer If you're interested in becoming a web developer, the first step is to learn a programming language. Once you have a good understanding of a language, you can start building websites and apps. You'll need to learn HTML, CSS, and JavaScript to create the front-end of a website, and a server-side language such as PHP or Ruby to create the back-end. You'll also need to learn how to use databases and frameworks such as WordPress or Django. Once you have the necessary skills, you can start looking for web development jobs.
Conclusion Learning programming can seem daunting, but with the right resources and guidance, anyone can learn how to code. The best first programming language to learn is often debated, but popular choices include Python, JavaScript, and Java. To become a web developer, you'll need to learn a programming language, HTML, CSS, JavaScript, and a server-side language. With the right skills and dedication, you can become a successful web developer.
"
9 | },
10 | {
11 | postId: "2",
12 | title: "How to Prepare for a Full Stack Developer Interview",
13 | img: "https://images.unsplash.com/photo-1497032628192-86f99bcd76bc?ixlib=rb-1.2.1&ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&auto=format&fit=crop&w=1470&q=80",
14 | date: '01/11/2023',
15 | metaDescription: "Are you looking to become a full stack developer? If so, you'll need to be prepared for the interview process. Learn how to prepare for a full stack developer interview, including understanding the basics of React, JavaScript, HTML, and CSS, practicing problem-solving, and being prepared to talk about your projects.",
16 | postContent: "How to Start Learning Programming: A Guide for Beginners Are you interested in learning programming but don't know where to start? You're not alone! Programming can seem intimidating, but with the right resources and guidance, anyone can learn how to code. In this guide, we'll cover the basics of programming, the best first programming language to learn, and how to become a web developer.
What is Programming? Programming is the process of writing instructions for a computer to execute. These instructions are written in a programming language, which is a set of commands that tell the computer what to do. Programming languages are used to create software, websites, and apps.
What is the Best First Programming Language to Learn? When it comes to learning programming, the best first language to learn is often debated. Some popular choices include Python, JavaScript, and Java. Each language has its own advantages and disadvantages, so it's important to do your research and decide which language is best for you. Python is a great choice for beginners because it is easy to learn and has a wide range of applications. JavaScript is also popular and is used to create interactive websites and apps. Java is a more complex language, but it is widely used and can be used to create a variety of applications.
How to Become a Web Developer If you're interested in becoming a web developer, the first step is to learn a programming language. Once you have a good understanding of a language, you can start building websites and apps. You'll need to learn HTML, CSS, and JavaScript to create the front-end of a website, and a server-side language such as PHP or Ruby to create the back-end. You'll also need to learn how to use databases and frameworks such as WordPress or Django. Once you have the necessary skills, you can start looking for web development jobs.
Conclusion Learning programming can seem daunting, but with the right resources and guidance, anyone can learn how to code. The best first programming language to learn is often debated, but popular choices include Python, JavaScript, and Java. To become a web developer, you'll need to learn a programming language, HTML, CSS, JavaScript, and a server-side language. With the right skills and dedication, you can become a successful web developer.
"
17 | },
18 |
19 | ]
--------------------------------------------------------------------------------
/pages/contact.js:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import { Inter } from "next/font/google";
3 | import { AppLayout } from "../components/AppLayout";
4 | import emailjs from '@emailjs/browser';
5 | import {useRef} from 'react';
6 |
7 | // const inter = Inter({ subsets: ["latin"] });
8 |
9 | export default function Contact() {
10 | const formRef = useRef();
11 | const sendEmail = async (e) => {
12 | e.preventDefault();
13 | try {
14 | const res = await emailjs.sendForm("service_usjsgia", "contact_template", formRef.current, "lCFaHU7UWsFAHhH4t");
15 | console.log(res);
16 | } catch (e) {
17 | console.log(e);
18 | }
19 | }
20 | return (
21 |
24 |
25 |
26 |
27 |
28 | Get in touch
29 |
30 |
31 |
122 |
123 |
124 |
125 | );
126 | }
127 |
128 | Contact.getLayout = function getLayout(page, pageProps) {
129 | return {page} ;
130 | };
--------------------------------------------------------------------------------
/pages/projects.js:
--------------------------------------------------------------------------------
1 | import { AppLayout } from "../components/AppLayout";
2 | import { faChalkboardUser } from "@fortawesome/free-solid-svg-icons";
3 | import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
4 |
5 | export default function Projects() {
6 | return (
7 |
8 |
9 | Projects
10 |
11 |
12 |
13 | {/* BETA PROJECT */}
14 |
15 |
16 |
21 |
22 |
23 | With Compose Beta Version SAAS
24 |
25 |
26 | Chat GPT-4 AI-powered SAAS solution to help you get your tasks
27 | done in minutes.{" "}
28 |
29 | Created with OpenAI, NextJS, Auth0 and MongoDB.
30 |
31 |
32 |
36 |
37 |
41 |
42 | Visit{" "}
43 |
44 |
45 |
46 |
47 |
48 |
49 | {/* MOBILE APP */}
50 |
51 |
52 |
57 |
58 | Devle Mobile App
59 |
60 |
61 | Keep learning tech while having fun with Devle, FREE on iOS &
62 | Android.{" "}
63 |
64 | Created with React Native, JavaScript and Kotlin.
65 |
66 |
67 |
123 |
124 |
125 |
126 |
127 | );
128 | }
129 |
130 | Projects.getLayout = function getLayout(page, pageProps) {
131 | return {page} ;
132 | };
133 |
--------------------------------------------------------------------------------
/components/AppLayout/AppLayout.js:
--------------------------------------------------------------------------------
1 | import { useRef, useState } from "react";
2 | import { useRouter } from "next/router";
3 | import Link from "next/link";
4 | import Image from "next/image";
5 | import Logo from "../../public/abraham-tavarez-logo-mini.png";
6 | import { FaLinkedin, FaGithub, FaMoon, FaYoutube } from "react-icons/fa6";
7 | import { useWindowSize } from "../../hooks/useWindowSize";
8 | import GoogleAnalytics from "../GoogleAnalytics";
9 |
10 | export const AppLayout = ({ children }) => {
11 | const [showDropDown, setShowDropDown] = useState(false);
12 | const router = useRouter(); // router
13 | const size = useWindowSize();
14 |
15 | // handle dark mode
16 | const toggleRef = useRef();
17 | const handleChange = () => {
18 | if (toggleRef.current.checked) {
19 | toggleRef.current.style.right = 0;
20 | toggleRef.current.style.left = "";
21 | document.documentElement.classList.add("dark");
22 | } else {
23 | document.documentElement.classList.remove("dark");
24 | toggleRef.current.style.left = 0;
25 | toggleRef.current.style.right = "";
26 | }
27 | };
28 |
29 | return (
30 |
31 |
32 | {process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS ? (
33 |
34 | ) : null}
35 |
36 |
37 |
44 |
45 | {/* DROPDOWM MENU */}
46 | {/* ********* NAVIGATION BAR AND DROP DOWN **************** */}
47 | {size.width < 1100 && (
48 |
49 |
50 |
51 |
77 |
78 |
79 | {showDropDown && (
80 |
87 |
88 | setShowDropDown(!showDropDown)}
99 | >
100 | Home
101 |
102 | setShowDropDown(!showDropDown)}
113 | >
114 | Projects
115 |
116 | setShowDropDown(!showDropDown)}
127 | >
128 | Courses
129 |
130 | setShowDropDown(!showDropDown)}
141 | >
142 | Blogs
143 |
144 | setShowDropDown(!showDropDown)}
155 | >
156 | Contact
157 |
158 |
159 |
160 | )}
161 |
162 |
163 |
164 | )}
165 |
166 |
167 | {size.width > 1100 && (
168 |
169 |
177 | Home
178 |
179 |
180 |
188 | Projects
189 |
190 |
198 | Courses
199 |
200 |
208 | Blogs
209 |
210 |
218 | Contact
219 |
220 |
221 | )}
222 |
223 | {/* TOGGLE BUTTON */}
224 |
225 |
226 |
234 |
235 |
239 |
240 | Slate
241 |
242 |
243 |
244 |
245 | {children}
246 | {/*
*/}
252 |
253 | );
254 | };
255 |
--------------------------------------------------------------------------------
/pages/index.js:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import { Inter } from "next/font/google";
3 | import { AppLayout } from "../components/AppLayout";
4 | import MyPhoto from "../public/efren-tavarez-aws-nyc-Abraham-Tavarez-1000x978.png";
5 | import { FaLinkedin, FaGithub, FaYoutube } from "react-icons/fa6";
6 | import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
7 | import { faChalkboardUser } from "@fortawesome/free-solid-svg-icons";
8 | import Link from "next/link";
9 |
10 | const inter = Inter({ subsets: ["latin"] });
11 |
12 | export default function Home() {
13 | return (
14 |
17 | {/* Left SECTION */}
18 |
19 |
20 |
21 | Abraham E Tavarez
22 |
23 |
29 | {/* SOCIAL LINKS */}
30 |
31 |
32 |
37 |
38 |
39 |
40 |
45 |
46 |
47 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 | Hello I'm{" "}
60 | Abraham 🐛
61 |
62 | I enjoy building and maintaining applications.
63 |
64 |
65 |
66 | Cloud and I.T.
67 |
68 |
69 |
70 | Manage and maintain the organization' IT infrastructure,
71 | including servers, networks, and systems, to ensure uninterrupted
72 | operations and data security on premises and the cloud.
73 |
74 |
75 |
Developer
76 |
77 |
78 | Develop and maintain responsive web applications using React and
79 | React Native, ensuring seamless user experiences across various
80 | devices and browsers.
81 |
82 |
83 |
84 | Tech Instructor
85 |
86 |
87 |
88 | Deliver engaging and comprehensive technical training sessions,
89 | leveraging in-depth knowledge of the subject matter to effectively
90 | convey complex concepts to learners.
91 |
92 |
93 |
94 |
95 |
96 | {/* WHOAMI SECTION */}
97 |
98 |
99 | Professional Summary
100 |
101 | Experienced React Frontend Developer with a passion for crafting
102 | dynamic and visually appealing user interfaces. Proficient in
103 | translating design concepts into responsive and engaging web
104 | applications using modern web technologies. Adept at collaborating
105 | with cross-functional teams to deliver high-quality software
106 | solutions that enhance user experiences. Skilled in optimizing
107 | application performance, staying up-to-date with industry trends,
108 | and continuously refining development processes. Ready to contribute
109 | creativity and technical expertise to drive innovation and elevate
110 | user-centric frontend development.
111 |
112 |
113 |
114 |
115 | {/* RECENT PROJECTS SECTION */}
116 |
117 |
118 | Feature Projects
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 | With Compose Beta Version SAAS
129 |
130 |
131 | Chat GPT-4 AI-powered SAAS solution to help you get your tasks done
132 | in minutes. Created with OpenAI, NextJS, Auth0 and MongoDB.
133 |
134 |
138 |
139 |
143 |
144 | Visit{" "}
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 | {/* MOBILE APP */}
153 |
154 |
155 |
160 |
161 | Devle Mobile App
162 |
163 |
164 | Keep learning tech while having fun with Devle, FREE on iOS &
165 | Android.{" "}
166 |
167 | Created with React Native, JavaScript and Kotlin.
168 |
169 |
170 |
226 |
227 |
228 |
229 |
230 |
231 | );
232 | }
233 |
234 | Home.getLayout = function getLayout(page, pageProps) {
235 | return {page} ;
236 | };
237 |
--------------------------------------------------------------------------------
/pages/courses.js:
--------------------------------------------------------------------------------
1 | import Image from "next/image";
2 | import { AppLayout } from "../components/AppLayout";
3 | import ComingSoon from "../public/assets/coming-soon-banner.png";
4 | import ReactShorts from "../public/React-Shorts-YouTube-Thumbnail.png";
5 | import GPT4 from "../public/assets/gpt-4.avif";
6 | import ChatbotsProjects from '../public/assets/chatbots-course.png';
7 | import AIProjects from '../public/assets/ai-projects.png';
8 | import MailchimpSubscribe from "react-mailchimp-subscribe";
9 | import EmailSubscribeForm from "../components/EmailSubscribeForm";
10 |
11 | export default function Courses() {
12 | return (
13 |
14 |
15 | Free Courses
16 |
17 |
18 |
19 | {/* CARD */}
20 |
21 |
22 |
23 |
29 |
30 |
31 | Building Intelligent Bots!
32 |
33 |
34 |
35 | $200
36 |
37 |
FREE
38 |
39 |
40 | Develop Intelligent Bots using NextJS, and OpenAI GPT4 models.
41 |
42 |
43 |
50 | View on YouTube
51 |
52 | {/*
57 | Download app
58 | */}
59 |
60 |
61 |
62 |
63 |
64 | {/* CARD */}
65 |
108 |
109 | {/* CARD */}
110 |
152 |
153 | {/* CARD */}
154 |
155 |
156 |
157 |
163 |
164 |
165 | "React Shorts" Full React Course
166 |
167 |
168 |
169 | $200
170 |
171 |
FREE
172 |
173 |
174 | Beginner friendly React Course! Take a fresh looks at React.
175 |
176 |
177 |
183 | View on YouTube
184 |
185 | {/*
190 | Download app
191 | */}
192 |
193 |
194 |
195 |
196 |
197 | {/* JS and TS Course CARD */}
198 |
243 |
244 |
245 | {/* JS and TS Course CARD */}
246 |
247 |
248 |
249 |
255 |
256 |
257 |
258 | Cloud Developer: React & Amazon AWS
259 |
260 |
261 |
262 |
263 | $200
264 |
265 |
FREE
266 |
267 |
268 | Develop Cloud Based Applications using Amazon AWS!
269 |
270 |
271 |
277 | Coming Soon!
278 |
279 | {/*
284 | Download app
285 | */}
286 |
287 |
288 |
289 |
290 |
291 | {/* NEWSLETTER */}
292 | {/* (
295 | subscribe(formData)}
299 | />
300 | )}
301 | /> */}
302 |
303 | {/* JS and TS Course CARD */}
304 |
305 |
306 |
307 |
313 |
314 |
315 |
316 | React Native: Mobile Development
317 |
318 |
319 |
320 |
321 | $200
322 |
323 |
FREE
324 |
325 |
326 | Launch your own cross mobile apps for Android and iOS using
327 | React Native!
328 |
329 |
330 |
336 | Coming Soon!
337 |
338 | {/*
343 | Download app
344 | */}
345 |
346 |
347 |
348 |
349 |
350 | {/* JS and TS Course CARD */}
351 |
352 |
353 |
354 |
360 |
361 |
362 |
363 | TypeScript for JavaScript Developers
364 |
365 |
366 |
367 |
368 | $200
369 |
370 |
FREE
371 |
372 |
373 | Learn fast by converting JavaScript apps to TypeScript apps!
374 |
375 |
376 |
382 | Coming Soon!
383 |
384 | {/*
389 | Download app
390 | */}
391 |
392 |
393 |
394 |
395 |
396 |
397 | );
398 | }
399 |
400 | Courses.getLayout = function getLayout(page, pageProps) {
401 | return {page} ;
402 | };
403 |
--------------------------------------------------------------------------------