├── .env.example ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── .vscode ├── extensions.json └── settings.json ├── README.md ├── components.json ├── gatsby-browser.js ├── gatsby-config.ts ├── gatsby-node.ts ├── graphql.config.js ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── src ├── assets │ └── icons │ │ ├── action.tsx │ │ ├── general.tsx │ │ ├── index.ts │ │ ├── nav.tsx │ │ └── social.tsx ├── components │ ├── common │ │ ├── body.tsx │ │ ├── comment-box.tsx │ │ ├── cta.tsx │ │ ├── dev-tools │ │ │ └── breakpoint-viewer.tsx │ │ ├── donation-box.tsx │ │ ├── footer.tsx │ │ ├── layout.tsx │ │ ├── nav.tsx │ │ ├── seo.tsx │ │ ├── social-items.tsx │ │ └── subscribe.tsx │ ├── modules │ │ ├── about │ │ │ ├── intro.tsx │ │ │ └── timeline.tsx │ │ ├── blog │ │ │ ├── post │ │ │ │ ├── footer.tsx │ │ │ │ ├── header.tsx │ │ │ │ ├── post-item.tsx │ │ │ │ └── sidebar.tsx │ │ │ ├── posts-list.tsx │ │ │ ├── series-list.tsx │ │ │ └── series │ │ │ │ ├── body.tsx │ │ │ │ ├── header.tsx │ │ │ │ └── index.tsx │ │ ├── contact │ │ │ └── index.tsx │ │ ├── home │ │ │ ├── hero.tsx │ │ │ ├── latest-blog-posts.tsx │ │ │ ├── latest-snippets.tsx │ │ │ ├── past-clients.tsx │ │ │ ├── recent-projects.tsx │ │ │ └── why-hire-me.tsx │ │ ├── projects │ │ │ ├── project │ │ │ │ ├── body.tsx │ │ │ │ ├── header.tsx │ │ │ │ └── project-item.tsx │ │ │ └── projects-list.tsx │ │ └── snippets │ │ │ ├── snippet-item.tsx │ │ │ └── snippets-list.tsx │ └── ui │ │ ├── center.tsx │ │ ├── col.tsx │ │ ├── heading.tsx │ │ ├── reusables │ │ ├── aspect-ratio.tsx │ │ ├── badge.tsx │ │ ├── button.tsx │ │ ├── carousel.tsx │ │ ├── dialog.tsx │ │ ├── dropdown-menu.tsx │ │ ├── form.tsx │ │ ├── input.tsx │ │ ├── label.tsx │ │ ├── sonner.tsx │ │ └── textarea.tsx │ │ ├── row.tsx │ │ └── scroll-to-top.tsx ├── config │ └── site.ts ├── hooks │ ├── use-copy-to-clipboard.tsx │ └── use-site-metadata.tsx ├── images │ ├── ad.png │ ├── avatar.png │ ├── collaborative.png │ ├── communicative.png │ ├── featured.jpeg │ ├── icon.png │ ├── self-motivation.png │ ├── upi-logo.svg │ ├── upi.png │ └── work-ethic.png ├── pages │ ├── 404.tsx │ ├── about.tsx │ ├── blog │ │ ├── index.tsx │ │ └── series.tsx │ ├── contact.tsx │ ├── index.tsx │ ├── projects.tsx │ └── snippets.tsx ├── styles │ └── global.css ├── templates │ ├── post.tsx │ ├── project.tsx │ ├── series.tsx │ └── snippet.tsx └── utils │ ├── cn.ts │ └── shorten-text.ts ├── static ├── og.png ├── resume.pdf └── robots.txt ├── tailwind.config.js └── tsconfig.json /.env.example: -------------------------------------------------------------------------------- 1 | CONTENTFUL_SPACE_ID= 2 | CONTENTFUL_ACCESS_TOKEN= 3 | GATSBY_BACKEND_URL= 4 | GA_MEASUREMENT_ID= 5 | CLOUDINARY_CLOUD_NAME= -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | # Ignore built files 2 | public/ 3 | .cache/ 4 | 5 | # Ignore node_modules 6 | node_modules/ 7 | 8 | # Ignore environment variables 9 | .env 10 | .env.*.local 11 | 12 | # Ignore logs 13 | logs/ 14 | *.log 15 | 16 | # Ignore temporary files 17 | *.tmp 18 | *.swp -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | globals: { 3 | __PATH_PREFIX__: true, 4 | }, 5 | extends: `react-app`, 6 | plugins: ["simple-import-sort"], 7 | rules: { 8 | "simple-import-sort/imports": "warn", 9 | "simple-import-sort/exports": "warn", 10 | }, 11 | }; 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .cache/ 3 | public/ 4 | src/gatsby-types.d.ts 5 | .env.development 6 | .env.production 7 | .DS_Store -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "graphql.vscode-graphql", 4 | "esbenp.prettier-vscode", 5 | "bradlc.vscode-tailwindcss" 6 | ] 7 | } 8 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "cSpell.words": ["CONTENTFUL", "INLINES", "reusables"] 3 | } 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
88 | {children}
89 |
90 | );
91 | }
92 |
--------------------------------------------------------------------------------
/src/components/common/comment-box.tsx:
--------------------------------------------------------------------------------
1 | import Giscus from "@giscus/react";
2 | import React from "react";
3 |
4 | import { Heading } from "../ui/heading";
5 |
6 | export default function CommentBox() {
7 | return (
8 | <>
9 | Loved this post?
16 |
18 | Hi there! Thanks for stopping by.
19 |
20 | I'm Rakesh, a software engineer, tech enthusiast, and product
21 | creator with a passion for building innovative tools and solutions. With
22 | experience across a wide range of technologies, I've worked on
23 | projects of all sizes, from small prototypes to large-scale systems.
24 | Whether it's system design, development, or even marketing, I
25 | handle it all.
26 |
I regularly share my insights and experiences on my{" "}
27 |
32 | blog
33 |
34 | , where I discuss everything from technical deep dives to lessons
35 | learned in product development. I'm also an active contributor to
36 | developer communities and open source projects, having participated in{" "}
37 |
42 | workshops, events,
43 | {" "}
44 | and collaborative initiatives.
45 |
50 | -{" "} 51 | {endDate ? : "Present"} 52 |
53 |{company}
58 | {tag && ( 59 |66 | {description} 67 |
68 | )} 69 |73 | {shortenText(excerpt!, isSeries ? 100 : 160)} 74 |
75 |42 | {shortenText(description!, 160)} 43 |
44 | 45 | 46 | 47 | ); 48 | } 49 | -------------------------------------------------------------------------------- /src/components/modules/blog/series/body.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import { PostItem } from "@/components/modules/blog/post/post-item"; 4 | import Col from "@/components/ui/col"; 5 | 6 | export default function Body({ 7 | contentfulBlogSeries, 8 | }: Queries.SeriesBySlugQuery) { 9 | return ( 10 |Hey!
19 |{item.description}
71 | 72 | ))} 73 |{description}
26 |161 | {body} 162 |
163 | ) 164 | }) 165 | FormMessage.displayName = "FormMessage" 166 | 167 | export { 168 | Form, 169 | FormControl, 170 | FormDescription, 171 | FormField, 172 | FormItem, 173 | FormLabel, 174 | FormMessage, 175 | useFormField, 176 | } 177 | -------------------------------------------------------------------------------- /src/components/ui/reusables/input.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | import { cn } from "@/utils/cn" 4 | 5 | const Input = React.forwardRef