From 5edbc52c0c3a2ace3baf9ea7796fe5c6a44a1692 Mon Sep 17 00:00:00 2001 From: Vitalii Bulyzhyn Date: Wed, 18 Dec 2024 14:43:03 +0100 Subject: [PATCH 1/4] Update devhunt base url to env variable --- README.md | 4 +++- app/blog/[slug]/page.tsx | 8 ++++++-- app/blog/category/[slug]/page.tsx | 8 ++++++-- app/blog/sitemap.xml/route.tsx | 7 +++++-- app/blog/tag/[slug]/page.tsx | 8 ++++++-- 5 files changed, 26 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 92e981a..fff3b3a 100644 --- a/README.md +++ b/README.md @@ -15,16 +15,18 @@ Visit the [DevHunt Blog](https://devhunt.org/blog?utm_source=github) to check ou ## Environment Setup -First, set up your SEObot API Key environment variable. Create a `.env.local` file for local development: +First, set up your SEObot API Key and base url environment variables. Create a `.env.local` file for local development: ```bash SEOBOT_API_KEY= +BASE_URL= ``` ⚠️ You can use following **DEMO** SEOBOT_API_KEY for local development: ```bash SEOBOT_API_KEY=a8c58738-7b98-4597-b20a-0bb1c2fe5772 +BASE_URL=http://localhost:3000/ ``` ## Running the Development Server diff --git a/app/blog/[slug]/page.tsx b/app/blog/[slug]/page.tsx index dce81d8..0e54bca 100644 --- a/app/blog/[slug]/page.tsx +++ b/app/blog/[slug]/page.tsx @@ -7,6 +7,8 @@ import NotFound from '@/components/NotFound'; import HighlightCode from '@/components/HighlightCode'; import '../blog.css'; +const BASE_URL = process.env.BASE_URL + async function getPost(slug: string) { const key = process.env.SEOBOT_API_KEY; if (!key) throw Error('SEOBOT_API_KEY enviroment variable must be set. You can use the DEMO key a8c58738-7b98-4597-b20a-0bb1c2fe5772 for testing - please set it in the root .env.local file'); @@ -18,6 +20,8 @@ async function getPost(slug: string) { export const fetchCache = 'force-no-store'; export async function generateMetadata({ params: { slug } }: { params: { slug: string } }): Promise { + if (!BASE_URL) throw Error('BASE_URL enviroment variable must be set.'); + const post = await getPost(slug); if (!post) return {}; @@ -26,7 +30,7 @@ export async function generateMetadata({ params: { slug } }: { params: { slug: s return { title, description, - metadataBase: new URL('https://devhunt.org'), + metadataBase: new URL(BASE_URL), alternates: { canonical: `/blog/${slug}`, }, @@ -35,7 +39,7 @@ export async function generateMetadata({ params: { slug } }: { params: { slug: s title, description, images: [post.image], - url: `https://devhunt.org/blog/${slug}`, + url: `${BASE_URL}/blog/${slug}`, }, twitter: { title, diff --git a/app/blog/category/[slug]/page.tsx b/app/blog/category/[slug]/page.tsx index 45422c1..07cba22 100644 --- a/app/blog/category/[slug]/page.tsx +++ b/app/blog/category/[slug]/page.tsx @@ -4,6 +4,8 @@ import { type Metadata } from 'next'; import Link from 'next/link'; import { BlogClient } from 'seobot'; +const BASE_URL = process.env.BASE_URL + async function getPosts(slug: string, page: number) { const key = process.env.SEOBOT_API_KEY; if (!key) throw Error('SEOBOT_API_KEY enviroment variable must be set. You can use the DEMO key a8c58738-7b98-4597-b20a-0bb1c2fe5772 for testing - please set it in the root .env.local file'); @@ -19,10 +21,12 @@ function deslugify(str: string) { export const fetchCache = 'force-no-store'; export async function generateMetadata({ params: { slug } }: { params: { slug: string } }): Promise { + if (!BASE_URL) throw Error('BASE_URL enviroment variable must be set'); + const title = `${deslugify(slug)} - DevHunt Blog`; return { title, - metadataBase: new URL('https://devhunt.org'), + metadataBase: new URL(BASE_URL), alternates: { canonical: `/blog/category/${slug}`, }, @@ -31,7 +35,7 @@ export async function generateMetadata({ params: { slug } }: { params: { slug: s title, // description: '', // images: [], - url: `https://devhunt.org/blog/category/${slug}`, + url: `${BASE_URL}/blog/category/${slug}`, }, twitter: { title, diff --git a/app/blog/sitemap.xml/route.tsx b/app/blog/sitemap.xml/route.tsx index d476995..a1db65f 100644 --- a/app/blog/sitemap.xml/route.tsx +++ b/app/blog/sitemap.xml/route.tsx @@ -1,4 +1,4 @@ -const BASE_URL = 'https://devhunt.org'; +const BASE_URL = process.env.BASE_URL; async function getSitemap() { const key = process.env.SEOBOT_API_KEY; @@ -24,7 +24,10 @@ async function generateSiteMap() { return ` - https://devhunt.org/blog + ${BASE_URL} + + + ${BASE_URL}/blog ${blogSitemap.articles.map((i: SitemapItem) => toSitemapRecord(`/blog/${i.slug}`, i.lastmod))} ${blogSitemap.categories.map((i: SitemapItem) => toSitemapRecord(`/blog/category/${i.slug}`, i.lastmod))} diff --git a/app/blog/tag/[slug]/page.tsx b/app/blog/tag/[slug]/page.tsx index f6e1c68..833b511 100644 --- a/app/blog/tag/[slug]/page.tsx +++ b/app/blog/tag/[slug]/page.tsx @@ -4,6 +4,8 @@ import { type Metadata } from 'next'; import Link from 'next/link'; import { BlogClient } from 'seobot'; +const BASE_URL = process.env.BASE_URL + async function getPosts(slug: string, page: number) { const key = process.env.SEOBOT_API_KEY; if (!key) throw Error('SEOBOT_API_KEY enviroment variable must be set. You can use the DEMO key a8c58738-7b98-4597-b20a-0bb1c2fe5772 for testing - please set it in the root .env.local file.'); @@ -19,10 +21,12 @@ function deslugify(str: string) { export const fetchCache = 'force-no-store'; export async function generateMetadata({ params: { slug } }: { params: { slug: string } }): Promise { + if (!BASE_URL) throw Error('BASE_URL enviroment variable must be set.'); + const title = `${deslugify(slug)} - DevHunt Blog`; return { title, - metadataBase: new URL('https://devhunt.org'), + metadataBase: new URL(BASE_URL), alternates: { canonical: `/blog/tag/${slug}`, }, @@ -31,7 +35,7 @@ export async function generateMetadata({ params: { slug } }: { params: { slug: s title, // description: '', // images: [], - url: `https://devhunt.org/blog/tag/${slug}`, + url: `${BASE_URL}/blog/tag/${slug}`, }, twitter: { title, From d49f0a3d52d4d465b0786cba6974b30947a0b8c5 Mon Sep 17 00:00:00 2001 From: Vitalii Bulyzhyn Date: Wed, 18 Dec 2024 14:47:30 +0100 Subject: [PATCH 2/4] Update next js config with new hostname --- next.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/next.config.js b/next.config.js index 60c4c51..06d1fbf 100644 --- a/next.config.js +++ b/next.config.js @@ -4,7 +4,7 @@ const nextConfig = { remotePatterns: [ { protocol: 'https', - hostname: 'mars-images.imgix.net', + hostname: 'assets.seobotai.com', port: '', pathname: '/**' } From b4acaea760e0d9f1542c2d1e90853726af2e4e41 Mon Sep 17 00:00:00 2001 From: Vitalii Bulyzhyn Date: Wed, 18 Dec 2024 14:50:13 +0100 Subject: [PATCH 3/4] Update style to display tables --- app/blog/blog.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/blog/blog.css b/app/blog/blog.css index 7b3bd0d..76a9fab 100644 --- a/app/blog/blog.css +++ b/app/blog/blog.css @@ -152,6 +152,8 @@ table { font-size: 15px; border-collapse: collapse; width: 100%; + overflow-x: auto; + display: block; } th, From 7b190918e8b6e20c742a83929161a1e59751c5f4 Mon Sep 17 00:00:00 2001 From: Vitalii Bulyzhyn Date: Wed, 18 Dec 2024 15:00:02 +0100 Subject: [PATCH 4/4] Remove route --- app/blog/sitemap.xml/route.tsx | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/blog/sitemap.xml/route.tsx b/app/blog/sitemap.xml/route.tsx index a1db65f..5f41879 100644 --- a/app/blog/sitemap.xml/route.tsx +++ b/app/blog/sitemap.xml/route.tsx @@ -23,9 +23,6 @@ async function generateSiteMap() { const blogSitemap = await getSitemap(); return ` - - ${BASE_URL} - ${BASE_URL}/blog