├── src ├── common │ ├── UIElements │ │ ├── embeds │ │ │ └── index.js │ │ ├── markdownRenderer │ │ │ ├── index.js │ │ │ ├── CustomCode.jsx │ │ │ └── MarkdownRenderer.jsx │ │ ├── index.js │ │ ├── ErrorBox.jsx │ │ ├── TagCard.jsx │ │ ├── Searchbar.jsx │ │ ├── SnippetCard.jsx │ │ ├── CategoryCard.jsx │ │ ├── SocialShareLinks.jsx │ │ └── ArticleCard.jsx │ ├── components │ │ ├── misc │ │ │ ├── index.js │ │ │ ├── Banner.jsx │ │ │ ├── Comment.jsx │ │ │ └── Newsletter.jsx │ │ ├── footer │ │ │ ├── CopyrightNotice.jsx │ │ │ └── Footer.jsx │ │ └── navbar │ │ │ ├── Navbar.jsx │ │ │ └── SearchResultsDisplay.jsx │ └── utils │ │ ├── schemaMarkup │ │ ├── index.js │ │ ├── BreadcrumbSchemaMarkup.jsx │ │ └── ArticleSchemaMarkup.jsx │ │ ├── index.js │ │ ├── cloudinary.js │ │ ├── apolloClient.js │ │ ├── Analytics.jsx │ │ ├── AdSense.jsx │ │ └── SEO.jsx ├── components │ ├── supportMe │ │ ├── components │ │ │ ├── index.js │ │ │ └── KofiWidget.jsx │ │ └── SupportMePage.jsx │ ├── post │ │ ├── components │ │ │ ├── index.js │ │ │ ├── MoreArticles.jsx │ │ │ └── Post.jsx │ │ └── PostPage.jsx │ ├── snippet │ │ ├── components │ │ │ ├── index.js │ │ │ ├── MoreSnippets.jsx │ │ │ └── Snippet.jsx │ │ └── SnippetPage.jsx │ ├── search │ │ ├── components │ │ │ ├── index.js │ │ │ ├── SearchPageHeader.jsx │ │ │ └── SearchPageBody.jsx │ │ ├── queries.js │ │ └── SearchPage.jsx │ ├── home │ │ ├── components │ │ │ ├── index.js │ │ │ ├── LatestSnippets.jsx │ │ │ ├── LatestArticles.jsx │ │ │ └── Hero.jsx │ │ └── HomePage.jsx │ └── externalArticles │ │ ├── ExternalArticlesPage.jsx │ │ └── ExternalArticleCard.jsx ├── assets │ ├── fonts │ │ └── Alliance2.ttf │ └── icons │ │ ├── index.js │ │ ├── CircleIcon.js │ │ └── MyOnePostIcon.js ├── styles │ └── globals.css ├── theme │ ├── Fonts.jsx │ └── index.js ├── pages │ ├── _app.js │ ├── _document.js │ ├── support-me.js │ ├── tags │ │ └── index.js │ ├── categories │ │ └── index.js │ ├── snippets │ │ ├── index.js │ │ └── [snippetSlug].js │ ├── index.js │ ├── articles │ │ └── index.js │ ├── external-articles.js │ ├── legal │ │ └── [legalSlug].js │ └── [postSlug].js └── data │ ├── cookie-policy.md │ ├── terms-and-conditions.md │ └── privacy-policy.md ├── .yarnrc.yml ├── .eslintrc.json ├── giscus.json ├── public ├── ads.txt ├── favicon.ico ├── apple-icon.png ├── robots.txt ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon-96x96.png ├── ms-icon-70x70.png ├── apple-icon-57x57.png ├── apple-icon-60x60.png ├── apple-icon-72x72.png ├── apple-icon-76x76.png ├── home-page-light.png ├── ms-icon-144x144.png ├── ms-icon-150x150.png ├── ms-icon-310x310.png ├── post-page-light.png ├── android-icon-36x36.png ├── android-icon-48x48.png ├── android-icon-72x72.png ├── android-icon-96x96.png ├── apple-icon-114x114.png ├── apple-icon-120x120.png ├── apple-icon-144x144.png ├── apple-icon-152x152.png ├── apple-icon-180x180.png ├── search-page-light.png ├── snippet-page-light.png ├── android-icon-144x144.png ├── android-icon-192x192.png ├── apple-icon-precomposed.png ├── blog-logo-maskable-512x512.png ├── browserconfig.xml └── manifest.json ├── .yarn └── install-state.gz ├── .dockerignore ├── .prettierrc ├── next-sitemap.config.mjs ├── docker-compose.yml ├── next.config.js ├── .prettierignore ├── jsconfig.json ├── .env.example ├── .gitignore ├── .github ├── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md ├── FUNDING.yml └── pull_request_template.md ├── LICENSE ├── Dockerfile ├── package.json ├── config └── site.config.js └── README.md /src/common/UIElements/embeds/index.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /giscus.json: -------------------------------------------------------------------------------- 1 | { 2 | "origins": ["https://blog.itsrakesh.com"] 3 | } 4 | -------------------------------------------------------------------------------- /public/ads.txt: -------------------------------------------------------------------------------- 1 | google.com, pub-5607528168839545, DIRECT, f08c47fec0942fa0 -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /.yarn/install-state.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/.yarn/install-state.gz -------------------------------------------------------------------------------- /public/apple-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/apple-icon.png -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Allow: / 3 | Sitemap: https://blog.itsrakesh.com/site-map 4 | -------------------------------------------------------------------------------- /public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/favicon-32x32.png -------------------------------------------------------------------------------- /public/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/favicon-96x96.png -------------------------------------------------------------------------------- /public/ms-icon-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/ms-icon-70x70.png -------------------------------------------------------------------------------- /src/components/supportMe/components/index.js: -------------------------------------------------------------------------------- 1 | export { default as KofiWidget } from './KofiWidget'; 2 | -------------------------------------------------------------------------------- /public/apple-icon-57x57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/apple-icon-57x57.png -------------------------------------------------------------------------------- /public/apple-icon-60x60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/apple-icon-60x60.png -------------------------------------------------------------------------------- /public/apple-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/apple-icon-72x72.png -------------------------------------------------------------------------------- /public/apple-icon-76x76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/apple-icon-76x76.png -------------------------------------------------------------------------------- /public/home-page-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/home-page-light.png -------------------------------------------------------------------------------- /public/ms-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/ms-icon-144x144.png -------------------------------------------------------------------------------- /public/ms-icon-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/ms-icon-150x150.png -------------------------------------------------------------------------------- /public/ms-icon-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/ms-icon-310x310.png -------------------------------------------------------------------------------- /public/post-page-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/post-page-light.png -------------------------------------------------------------------------------- /public/android-icon-36x36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/android-icon-36x36.png -------------------------------------------------------------------------------- /public/android-icon-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/android-icon-48x48.png -------------------------------------------------------------------------------- /public/android-icon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/android-icon-72x72.png -------------------------------------------------------------------------------- /public/android-icon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/android-icon-96x96.png -------------------------------------------------------------------------------- /public/apple-icon-114x114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/apple-icon-114x114.png -------------------------------------------------------------------------------- /public/apple-icon-120x120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/apple-icon-120x120.png -------------------------------------------------------------------------------- /public/apple-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/apple-icon-144x144.png -------------------------------------------------------------------------------- /public/apple-icon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/apple-icon-152x152.png -------------------------------------------------------------------------------- /public/apple-icon-180x180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/apple-icon-180x180.png -------------------------------------------------------------------------------- /public/search-page-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/search-page-light.png -------------------------------------------------------------------------------- /public/snippet-page-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/snippet-page-light.png -------------------------------------------------------------------------------- /public/android-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/android-icon-144x144.png -------------------------------------------------------------------------------- /public/android-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/android-icon-192x192.png -------------------------------------------------------------------------------- /src/assets/fonts/Alliance2.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/src/assets/fonts/Alliance2.ttf -------------------------------------------------------------------------------- /public/apple-icon-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/apple-icon-precomposed.png -------------------------------------------------------------------------------- /.dockerignore: -------------------------------------------------------------------------------- 1 | Dockerfile 2 | .dockerignore 3 | node_modules 4 | npm-debug.log 5 | README.md 6 | .next 7 | .git 8 | yarn-error.log -------------------------------------------------------------------------------- /public/blog-logo-maskable-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RakeshPotnuru/blog/HEAD/public/blog-logo-maskable-512x512.png -------------------------------------------------------------------------------- /src/assets/icons/index.js: -------------------------------------------------------------------------------- 1 | export { default as CircleIcon } from './CircleIcon'; 2 | export { default as MyOnePostIcon } from './MyOnePostIcon'; 3 | -------------------------------------------------------------------------------- /src/components/post/components/index.js: -------------------------------------------------------------------------------- 1 | export { default as Post } from './Post'; 2 | export { default as MoreArticles } from './MoreArticles'; 3 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "bracketSpacing": true, 3 | "printWidth": 80, 4 | "singleQuote": true, 5 | "trailingComma": "none", 6 | "tabWidth": 2 7 | } 8 | -------------------------------------------------------------------------------- /src/components/snippet/components/index.js: -------------------------------------------------------------------------------- 1 | export { default as Snippet } from './Snippet'; 2 | export { default as MoreSnippets } from './MoreSnippets'; 3 | -------------------------------------------------------------------------------- /next-sitemap.config.mjs: -------------------------------------------------------------------------------- 1 | const config = { 2 | siteUrl: process.env.NEXT_PUBLIC_SITE_URL, 3 | generateRobotsTxt: true 4 | }; 5 | 6 | export default config; 7 | -------------------------------------------------------------------------------- /src/common/UIElements/markdownRenderer/index.js: -------------------------------------------------------------------------------- 1 | export { default as MarkdownRenderer } from './MarkdownRenderer'; 2 | export { default as CustomCode } from './CustomCode'; -------------------------------------------------------------------------------- /src/components/search/components/index.js: -------------------------------------------------------------------------------- 1 | export { default as SearchPageHeader } from './SearchPageHeader'; 2 | export { default as SearchPageBody } from './SearchPageBody'; 3 | -------------------------------------------------------------------------------- /src/common/components/misc/index.js: -------------------------------------------------------------------------------- 1 | export { default as Comment } from './Comment'; 2 | export { default as Newsletter } from './Newsletter'; 3 | export { default as Banner } from './Banner'; 4 | -------------------------------------------------------------------------------- /src/common/utils/schemaMarkup/index.js: -------------------------------------------------------------------------------- 1 | export { default as ArticleSchemaMarkup } from './ArticleSchemaMarkup'; 2 | export { default as BreadcrumbSchemaMarkup } from './BreadcrumbSchemaMarkup'; 3 | -------------------------------------------------------------------------------- /src/components/home/components/index.js: -------------------------------------------------------------------------------- 1 | export { default as Hero } from './Hero'; 2 | export { default as LatestArticles } from './LatestArticles'; 3 | export { default as LatestSnippets } from './LatestSnippets'; 4 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.8' 2 | services: 3 | blog: 4 | build: 5 | context: ./ 6 | target: runner 7 | volumes: 8 | - .:/app 9 | command: yarn dev 10 | ports: 11 | - "3000:3000" 12 | environment: 13 | NODE_ENV: development 14 | -------------------------------------------------------------------------------- /src/common/utils/index.js: -------------------------------------------------------------------------------- 1 | export { default as SEO } from './SEO'; 2 | export { default as client } from './apolloClient'; 3 | export { default as Analytics } from './Analytics'; 4 | export { default as buildImage } from './cloudinary'; 5 | export { default as AdSense } from './AdSense'; 6 | -------------------------------------------------------------------------------- /public/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | #ffffff -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | 3 | module.exports = { 4 | reactStrictMode: true, 5 | images: { 6 | domains: ['ik.imagekit.io', 'res.cloudinary.com'] 7 | }, 8 | i18n: { 9 | locales: ['en'], 10 | defaultLocale: 'en' 11 | }, 12 | output: 'standalone' 13 | }; 14 | -------------------------------------------------------------------------------- /src/assets/icons/CircleIcon.js: -------------------------------------------------------------------------------- 1 | import { Icon } from '@chakra-ui/react'; 2 | 3 | const CircleIcon = (props) => ( 4 | 5 | 9 | 10 | ); 11 | 12 | export default CircleIcon; 13 | -------------------------------------------------------------------------------- /src/styles/globals.css: -------------------------------------------------------------------------------- 1 | * { 2 | margin: 0; 3 | padding: 0; 4 | box-sizing: border-box; 5 | } 6 | 7 | *::-webkit-scrollbar { 8 | width: 0.7rem; 9 | } 10 | 11 | *::-webkit-scrollbar-track { 12 | background-color: #7968e62c; 13 | } 14 | 15 | *::-webkit-scrollbar-thumb { 16 | border-radius: 10px; 17 | background-color: #7868e6; 18 | } 19 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # Ignore artifacts: 2 | build 3 | coverage 4 | dist 5 | 6 | # Ignore all HTML files: 7 | *.html 8 | 9 | LICENSE 10 | README.md 11 | .editorconfig 12 | .eslintignore 13 | .gitattributes 14 | .gitignore 15 | .gitkeep 16 | .prettierignore 17 | .github/ 18 | *.yml 19 | *.yaml 20 | package*.json 21 | node_modules/ 22 | public/ 23 | package-lock.json 24 | yarn.lock 25 | .dockerignore -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": "./src", 4 | "paths": { 5 | "@/*": ["components/*"], 6 | "@/components/*": ["common/components/*"], 7 | "@/utils/*": ["common/utils/"], 8 | "@/schemaMarkup/*": ["common/utils/schemaMarkup/*"], 9 | "@/UIElements/*": ["common/UIElements/*"], 10 | "@/icons/*": ["assets/icons/*"] 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/common/utils/cloudinary.js: -------------------------------------------------------------------------------- 1 | import { Cloudinary } from '@cloudinary/url-gen'; 2 | 3 | const cld = new Cloudinary({ 4 | cloud: { 5 | cloudName: process.env.NEXT_PUBLIC_CLOUDINARY_CLOUDNAME 6 | }, 7 | url: { 8 | secure: true 9 | } 10 | }); 11 | 12 | const buildImage = (src) => { 13 | return cld.image(src).quality('auto').format('auto'); 14 | }; 15 | 16 | export default buildImage; 17 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | NEXT_PUBLIC_HYGRAPH_CONTENT_API_URL= 2 | NEXT_PUBLIC_HYGRAPH_AUTH_TOKEN= 3 | 4 | NEXT_PUBLIC_GOOGLE_ANALYTICS_MEASUREMENT_ID= 5 | 6 | NEXT_PUBLIC_SITE_URL= 7 | 8 | NEXT_PUBLIC_GISCUS_REPO= 9 | NEXT_PUBLIC_GISCUS_REPO_ID= 10 | NEXT_PUBLIC_GISCUS_CATEGORY= 11 | NEXT_PUBLIC_GISCUS_CATEGORY_ID= 12 | 13 | NEXT_PUBLIC_KOFI_WIDGET_EMBED_URL= 14 | 15 | NEXT_PUBLIC_CLOUDINARY_CLOUDNAME= 16 | 17 | NEXT_PUBLIC_SUBSTACK_URL= -------------------------------------------------------------------------------- /src/common/UIElements/index.js: -------------------------------------------------------------------------------- 1 | export { default as Searchbar } from './Searchbar'; 2 | export { default as ArticleCard } from './ArticleCard'; 3 | export { default as SnippetCard } from './SnippetCard'; 4 | export { default as CategoryCard } from './CategoryCard'; 5 | export { default as TagCard } from './TagCard'; 6 | export { default as SocialShareLinks } from './SocialShareLinks'; 7 | export { default as ErrorBox } from './ErrorBox'; 8 | -------------------------------------------------------------------------------- /src/common/UIElements/ErrorBox.jsx: -------------------------------------------------------------------------------- 1 | import { Box, HStack, Text } from '@chakra-ui/react'; 2 | import { WarningIcon } from '@chakra-ui/icons'; 3 | 4 | const ErrorBox = ({ error }) => { 5 | return ( 6 | 7 | 8 | 9 | {error} 10 | 11 | 12 | ); 13 | }; 14 | 15 | export default ErrorBox; 16 | -------------------------------------------------------------------------------- /src/common/utils/apolloClient.js: -------------------------------------------------------------------------------- 1 | import { ApolloClient, InMemoryCache, HttpLink } from '@apollo/client'; 2 | 3 | const cache = new InMemoryCache(); 4 | const link = new HttpLink({ 5 | uri: `${process.env.NEXT_PUBLIC_HYGRAPH_CONTENT_API_URL}`, 6 | headers: { 7 | authorization: `Bearer ${process.env.NEXT_PUBLIC_HYGRAPH_AUTH_TOKEN}` 8 | } 9 | }); 10 | 11 | const client = new ApolloClient({ 12 | cache, 13 | link 14 | }); 15 | 16 | export default client; 17 | -------------------------------------------------------------------------------- /.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 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | .idea -------------------------------------------------------------------------------- /src/common/components/misc/Banner.jsx: -------------------------------------------------------------------------------- 1 | import { Box, Center, Link } from '@chakra-ui/react'; 2 | 3 | const Banner = () => { 4 | return ( 5 | 6 |
7 | Open for hire 8 | 14 | Contact me 15 | 16 |
17 |
18 | ); 19 | }; 20 | 21 | export default Banner; 22 | -------------------------------------------------------------------------------- /src/theme/Fonts.jsx: -------------------------------------------------------------------------------- 1 | import { Global } from '@emotion/react'; 2 | 3 | const Fonts = () => ( 4 | 16 | ); 17 | 18 | export default Fonts; 19 | -------------------------------------------------------------------------------- /src/components/supportMe/components/KofiWidget.jsx: -------------------------------------------------------------------------------- 1 | import { Box } from '@chakra-ui/react'; 2 | 3 | const KofiWidget = () => { 4 | return ( 5 | 12 | 21 | 22 | ); 23 | }; 24 | 25 | export default KofiWidget; 26 | -------------------------------------------------------------------------------- /src/components/post/PostPage.jsx: -------------------------------------------------------------------------------- 1 | import { Center } from '@chakra-ui/react'; 2 | 3 | import { ErrorBox } from '@/UIElements/index.js'; 4 | import { Post, MoreArticles } from './components'; 5 | import { Comment } from '@/components/misc'; 6 | 7 | const PostPage = ({ post, posts, error }) => { 8 | return ( 9 | <> 10 | {error ? ( 11 |
12 | 13 |
14 | ) : ( 15 | <> 16 | 17 | 18 | 19 | 20 | )} 21 | 22 | ); 23 | }; 24 | 25 | export default PostPage; 26 | -------------------------------------------------------------------------------- /src/common/UIElements/TagCard.jsx: -------------------------------------------------------------------------------- 1 | import { Badge, Link, Skeleton } from '@chakra-ui/react'; 2 | import NextLink from 'next/link'; 3 | import { motion } from 'framer-motion'; 4 | 5 | const TagCard = ({ tag }) => { 6 | return ( 7 | 8 | 9 | 18 | #{tag} 19 | 20 | 21 | 22 | ); 23 | }; 24 | 25 | export default TagCard; 26 | -------------------------------------------------------------------------------- /src/theme/index.js: -------------------------------------------------------------------------------- 1 | import { extendTheme, theme as base } from '@chakra-ui/react'; 2 | 3 | import siteConfig from '../../config/site.config'; 4 | 5 | const colors = { 6 | brand: siteConfig.branding.colors.brand, 7 | text: siteConfig.branding.colors.text, 8 | twitter: '#1DA1F2', 9 | linkedin: '#0077B5', 10 | facebook: '#1877F2' 11 | }; 12 | 13 | const fonts = { 14 | heading: `${siteConfig.branding.fonts.heading}, ${base.fonts?.heading}`, 15 | body: `${siteConfig.branding.fonts.body}, ${base.fonts?.body}` 16 | }; 17 | 18 | const config = { 19 | useSystemColorMode: true 20 | }; 21 | 22 | const theme = extendTheme({ colors, fonts, config }); 23 | 24 | export default theme; 25 | -------------------------------------------------------------------------------- /src/components/snippet/SnippetPage.jsx: -------------------------------------------------------------------------------- 1 | import { Center } from '@chakra-ui/react'; 2 | 3 | import { ErrorBox } from '@/UIElements/index.js'; 4 | import { Snippet, MoreSnippets } from './components'; 5 | import { Comment } from '@/components/misc'; 6 | 7 | const SnippetPage = ({ snippet, snippets, error }) => { 8 | return ( 9 | <> 10 | {error ? ( 11 |
12 | 13 |
14 | ) : ( 15 | <> 16 | 17 | 18 | 19 | 20 | )} 21 | 22 | ); 23 | }; 24 | 25 | export default SnippetPage; 26 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /src/components/home/HomePage.jsx: -------------------------------------------------------------------------------- 1 | import { Center } from '@chakra-ui/react'; 2 | 3 | import { ErrorBox } from '@/UIElements/index.js'; 4 | import { Hero, LatestArticles, LatestSnippets } from './components'; 5 | 6 | const HomePage = ({ featuredPost, posts, snippets, categories, error }) => { 7 | return ( 8 | <> 9 | {error ? ( 10 |
11 | 12 |
13 | ) : ( 14 | <> 15 | 16 | 17 | 18 | 19 | )} 20 | 21 | ); 22 | }; 23 | 24 | export default HomePage; 25 | -------------------------------------------------------------------------------- /src/common/utils/Analytics.jsx: -------------------------------------------------------------------------------- 1 | import Script from 'next/script'; 2 | 3 | const Analytics = () => { 4 | return ( 5 | <> 6 | 18 | 19 | ); 20 | }; 21 | 22 | export default Analytics; 23 | -------------------------------------------------------------------------------- /src/components/externalArticles/ExternalArticlesPage.jsx: -------------------------------------------------------------------------------- 1 | import { Box, Heading, SimpleGrid, Text } from '@chakra-ui/react'; 2 | import ExternalArticleCard from './ExternalArticleCard'; 3 | 4 | const ExternalArticlesPage = ({ articles }) => { 5 | return ( 6 | 7 | EXTERNAL ARTICLES 8 | Read articles written by me on other sites. 9 | 10 | {articles.map((article) => ( 11 | 12 | ))} 13 | 14 | 15 | ); 16 | }; 17 | 18 | export default ExternalArticlesPage; 19 | -------------------------------------------------------------------------------- /src/pages/_app.js: -------------------------------------------------------------------------------- 1 | import { ApolloProvider } from '@apollo/client'; 2 | import { ChakraProvider } from '@chakra-ui/react'; 3 | 4 | import { Banner } from '@/components/misc'; 5 | import { client } from '@/utils/index.js'; 6 | import siteConfig from '../../config/site.config'; 7 | import '../styles/globals.css'; 8 | import theme from '../theme'; 9 | import Fonts from '../theme/Fonts'; 10 | 11 | const MyApp = ({ Component, pageProps }) => { 12 | return ( 13 | 14 | 15 | 16 | {siteConfig.showBanner && } 17 | 18 | 19 | 20 | ); 21 | }; 22 | 23 | export default MyApp; 24 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: RakeshPotnuru 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: itsrakesh 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 | otechie: # Replace with a single Otechie username 12 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 13 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 14 | -------------------------------------------------------------------------------- /src/common/utils/schemaMarkup/BreadcrumbSchemaMarkup.jsx: -------------------------------------------------------------------------------- 1 | import Script from 'next/script'; 2 | 3 | const BreadcrumbSchemaMarkup = ({ items }) => { 4 | return ( 5 |