Skip to content

Commit ba84551

Browse files
Fix: Enable dark mode in Tailwind and apply global dark theme styles
1 parent cd93a65 commit ba84551

6 files changed

Lines changed: 142 additions & 109 deletions

File tree

app/blog/[slug]/page.tsx

Lines changed: 47 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,12 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {
2525
keywords: post.keywords.join(', '),
2626
authors: [{ name: post.author }],
2727
alternates: {
28-
canonical: `https://abusufyan-netizen.github.io/blog/${post.slug}/`,
28+
canonical: `https://wtkpro.site/blog/${post.slug}/`,
2929
},
3030
openGraph: {
3131
title: post.title,
3232
description: post.description,
33-
url: `https://abusufyan-netizen.github.io/blog/${post.slug}/`,
33+
url: `https://wtkpro.site/blog/${post.slug}/`,
3434
siteName: 'WebToolkit Pro',
3535
type: 'article',
3636
publishedTime: post.date,
@@ -67,11 +67,11 @@ export async function generateMetadata({ params }: Props): Promise<Metadata> {
6767
}
6868

6969
const categoryColors: { [k: string]: string } = {
70-
'Tools': 'bg-blue-100 text-blue-700 border-blue-200',
71-
'Tutorials': 'bg-purple-100 text-purple-700 border-purple-200',
72-
'Security': 'bg-red-100 text-red-700 border-red-200',
73-
'SEO': 'bg-green-100 text-green-700 border-green-200',
74-
'CSS': 'bg-orange-100 text-orange-700 border-orange-200',
70+
'Tools': 'bg-blue-100 dark:bg-blue-900/30 text-blue-700 dark:text-blue-400 border-blue-200 dark:border-blue-800',
71+
'Tutorials': 'bg-purple-100 dark:bg-purple-900/30 text-purple-700 dark:text-purple-400 border-purple-200 dark:border-purple-800',
72+
'Security': 'bg-red-100 dark:bg-red-900/30 text-red-700 dark:text-red-400 border-red-200 dark:border-red-800',
73+
'SEO': 'bg-green-100 dark:bg-green-900/30 text-green-700 dark:text-green-400 border-green-200 dark:border-green-800',
74+
'CSS': 'bg-orange-100 dark:bg-orange-900/30 text-orange-700 dark:text-orange-400 border-orange-200 dark:border-orange-800',
7575
}
7676

7777
export default async function BlogPostPage({ params }: Props) {
@@ -91,27 +91,27 @@ export default async function BlogPostPage({ params }: Props) {
9191
})
9292

9393
return (
94-
<article className="py-12 px-4 sm:px-6 lg:px-8">
94+
<article className="py-12 px-4 sm:px-6 lg:px-8 bg-white dark:bg-slate-950 transition-colors duration-300 min-h-screen">
9595
<div className="max-w-3xl mx-auto">
9696
{/* Breadcrumb Navigation */}
9797
<nav aria-label="Breadcrumb" className="mb-8">
98-
<ol className="flex items-center gap-2 text-sm text-gray-400" itemScope itemType="https://schema.org/BreadcrumbList">
98+
<ol className="flex items-center gap-2 text-sm text-gray-400 dark:text-slate-500" itemScope itemType="https://schema.org/BreadcrumbList">
9999
<li itemProp="itemListElement" itemScope itemType="https://schema.org/ListItem">
100-
<Link href="/" className="hover:text-blue-600 transition-colors" itemProp="item">
100+
<Link href="/" className="hover:text-blue-600 dark:hover:text-blue-400 transition-colors" itemProp="item">
101101
<span itemProp="name">Home</span>
102102
</Link>
103103
<meta itemProp="position" content="1" />
104104
</li>
105-
<li className="text-gray-300">/</li>
105+
<li className="text-gray-300 dark:text-slate-700">/</li>
106106
<li itemProp="itemListElement" itemScope itemType="https://schema.org/ListItem">
107-
<Link href="/blog/" className="hover:text-blue-600 transition-colors" itemProp="item">
107+
<Link href="/blog/" className="hover:text-blue-600 dark:hover:text-blue-400 transition-colors" itemProp="item">
108108
<span itemProp="name">Blog</span>
109109
</Link>
110110
<meta itemProp="position" content="2" />
111111
</li>
112-
<li className="text-gray-300">/</li>
112+
<li className="text-gray-300 dark:text-slate-700">/</li>
113113
<li itemProp="itemListElement" itemScope itemType="https://schema.org/ListItem">
114-
<span className="text-gray-600 font-medium" itemProp="name">{post.title}</span>
114+
<span className="text-gray-600 dark:text-slate-300 font-medium" itemProp="name">{post.title}</span>
115115
<meta itemProp="position" content="3" />
116116
</li>
117117
</ol>
@@ -120,21 +120,21 @@ export default async function BlogPostPage({ params }: Props) {
120120
{/* Post Header */}
121121
<header className="mb-10">
122122
<div className="flex items-center gap-3 mb-5">
123-
<span className={`text-xs font-bold px-3 py-1.5 rounded-full border ${categoryColors[post.category] || 'bg-gray-100 text-gray-700 border-gray-200'}`}>
123+
<span className={`text-[10px] font-bold px-3 py-1.5 rounded-full border uppercase tracking-wider ${categoryColors[post.category] || 'bg-gray-100 dark:bg-slate-800 text-gray-700 dark:text-slate-400 border-gray-200 dark:border-slate-700'}`}>
124124
{post.category}
125125
</span>
126-
<span className="text-sm text-gray-400">{post.readTime}</span>
126+
<span className="text-[10px] uppercase font-bold tracking-widest text-gray-400 dark:text-slate-500">{post.readTime}</span>
127127
</div>
128128

129-
<h1 className="text-4xl sm:text-5xl font-extrabold text-gray-900 mb-5 leading-tight">
129+
<h1 className="text-4xl sm:text-5xl font-extrabold text-gray-900 dark:text-white mb-5 leading-tight tracking-tight">
130130
{post.title}
131131
</h1>
132132

133-
<p className="text-lg text-gray-500 leading-relaxed mb-6">
133+
<p className="text-lg text-gray-500 dark:text-slate-400 leading-relaxed mb-6">
134134
{post.description}
135135
</p>
136136

137-
<div className="flex items-center gap-4 text-sm text-gray-400 pb-6 border-b border-gray-100">
137+
<div className="flex items-center gap-4 text-xs font-bold uppercase tracking-widest text-gray-400 dark:text-slate-500 pb-6 border-b border-gray-100 dark:border-slate-800">
138138
<time dateTime={post.date} itemProp="datePublished">
139139
{formattedDate}
140140
</time>
@@ -150,69 +150,64 @@ export default async function BlogPostPage({ params }: Props) {
150150

151151
{/* Article Content */}
152152
<div
153-
className="prose prose-lg prose-gray max-w-none
154-
prose-headings:font-bold prose-headings:text-gray-900
153+
className="prose prose-lg dark:prose-invert max-w-none
154+
prose-headings:font-bold prose-headings:text-gray-900 dark:prose-headings:text-white
155155
prose-h2:text-2xl prose-h2:mt-10 prose-h2:mb-4
156156
prose-h3:text-xl prose-h3:mt-8 prose-h3:mb-3
157-
prose-p:text-gray-600 prose-p:leading-relaxed prose-p:mb-5
158-
prose-a:text-blue-600 prose-a:font-semibold prose-a:no-underline hover:prose-a:underline
159-
prose-strong:text-gray-900
160-
prose-code:bg-gray-100 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded prose-code:text-sm prose-code:text-pink-600
161-
prose-pre:bg-gray-900 prose-pre:text-gray-100 prose-pre:rounded-xl prose-pre:shadow-lg
162-
prose-ul:text-gray-600 prose-ol:text-gray-600
157+
prose-p:text-gray-600 dark:prose-p:text-slate-300 prose-p:leading-relaxed prose-p:mb-5
158+
prose-a:text-blue-600 dark:prose-a:text-blue-400 prose-a:font-semibold prose-a:no-underline hover:prose-a:underline
159+
prose-strong:text-gray-900 dark:prose-strong:text-white
160+
prose-code:bg-gray-100 dark:prose-code:bg-slate-800 prose-code:px-1.5 prose-code:py-0.5 prose-code:rounded prose-code:text-sm prose-code:text-pink-600 dark:prose-code:text-pink-400
161+
prose-pre:bg-gray-900 dark:prose-pre:bg-black prose-pre:text-gray-100 dark:prose-pre:text-slate-200 prose-pre:rounded-xl prose-pre:shadow-lg
162+
prose-ul:text-gray-600 dark:prose-ul:text-slate-300 prose-ol:text-gray-600 dark:prose-ol:text-slate-300
163163
prose-li:mb-2
164164
prose-table:border-collapse
165-
prose-th:bg-gray-50 prose-th:p-3 prose-th:text-left prose-th:font-bold prose-th:border prose-th:border-gray-200
166-
prose-td:p-3 prose-td:border prose-td:border-gray-200
167-
prose-blockquote:border-l-blue-500 prose-blockquote:bg-blue-50 prose-blockquote:rounded-r-lg prose-blockquote:py-1
165+
prose-th:bg-gray-50 dark:prose-th:bg-slate-800 prose-th:p-3 prose-th:text-left prose-th:font-bold prose-th:border prose-th:border-gray-200 dark:prose-th:border-slate-700
166+
prose-td:p-3 prose-td:border prose-td:border-gray-200 dark:prose-td:border-slate-700
167+
prose-blockquote:border-l-blue-500 dark:prose-blockquote:border-l-blue-400 prose-blockquote:bg-blue-50 dark:prose-blockquote:bg-blue-900/10 prose-blockquote:rounded-r-lg prose-blockquote:py-1
168168
prose-img:rounded-xl prose-img:shadow-md"
169169
dangerouslySetInnerHTML={{ __html: post.htmlContent || '' }}
170170
/>
171171

172172
{/* Tags Section */}
173-
<div className="mt-12 pt-8 border-t border-gray-100">
174-
<h3 className="text-sm font-bold text-gray-500 uppercase tracking-wider mb-3">Tags</h3>
173+
<div className="mt-12 pt-8 border-t border-gray-100 dark:border-slate-800">
174+
<h3 className="text-xs font-bold text-gray-400 dark:text-slate-500 uppercase tracking-widest mb-4">Article Tags</h3>
175175
<div className="flex flex-wrap gap-2">
176176
{post.tags.map((tag) => (
177177
<span
178178
key={tag}
179-
className="text-sm bg-gray-50 text-gray-600 px-3 py-1.5 rounded-full border border-gray-100 hover:bg-gray-100 transition-colors"
179+
className="text-[10px] font-bold uppercase tracking-wider bg-gray-50 dark:bg-slate-900 text-gray-500 dark:text-slate-400 px-3 py-1.5 rounded-full border border-gray-100 dark:border-slate-800 hover:bg-gray-100 dark:hover:bg-slate-800 transition-colors"
180180
>
181181
#{tag}
182182
</span>
183183
))}
184184
</div>
185185
</div>
186186

187-
{/* Keywords (hidden, for SEO) */}
188-
<div className="sr-only" aria-hidden="true">
189-
<p>Keywords: {post.keywords.join(', ')}</p>
190-
</div>
191-
192187
{/* Ad Slot - Bottom of Article */}
193188
<div className="mt-12 min-h-[250px] flex items-center justify-center">
194189
{/* AdSense In-Article Bottom */}
195190
</div>
196191

197192
{/* Related Posts */}
198193
{relatedPosts.length > 0 && (
199-
<section className="mt-16 pt-12 border-t border-gray-100" aria-label="Related articles">
200-
<h2 className="text-2xl font-bold text-gray-900 mb-8">Continue Reading</h2>
194+
<section className="mt-16 pt-12 border-t border-gray-100 dark:border-slate-800" aria-label="Related articles">
195+
<h2 className="text-2xl font-bold text-gray-900 dark:text-white mb-8">Continue Reading</h2>
201196
<div className="grid grid-cols-1 sm:grid-cols-3 gap-6">
202197
{relatedPosts.map((related) => (
203198
<Link
204199
key={related.slug}
205200
href={`/blog/${related.slug}/`}
206201
className="group block"
207202
>
208-
<article className="bg-white rounded-xl border border-gray-100 p-5 hover:shadow-lg hover:-translate-y-0.5 transition-all duration-300">
209-
<span className={`text-xs font-bold px-2 py-0.5 rounded-full ${categoryColors[related.category] || 'bg-gray-100 text-gray-700'}`}>
203+
<article className="bg-white dark:bg-slate-900 rounded-3xl border border-gray-100 dark:border-slate-800 p-6 hover:shadow-xl dark:hover:shadow-blue-900/10 hover:-translate-y-1 transition-all duration-300 h-full">
204+
<span className={`text-[10px] font-bold px-2 py-0.5 rounded-full uppercase tracking-wider ${categoryColors[related.category] || 'bg-gray-100 dark:bg-slate-800 text-gray-700 dark:text-slate-400'}`}>
210205
{related.category}
211206
</span>
212-
<h3 className="text-sm font-bold text-gray-900 mt-3 mb-2 group-hover:text-blue-600 transition-colors leading-snug">
207+
<h3 className="text-lg font-bold text-gray-900 dark:text-white mt-3 mb-2 group-hover:text-blue-600 dark:group-hover:text-blue-400 transition-colors leading-snug">
213208
{related.title}
214209
</h3>
215-
<span className="text-xs text-gray-400">{related.readTime}</span>
210+
<span className="text-[10px] uppercase font-bold tracking-widest text-gray-400 dark:text-slate-500">{related.readTime}</span>
216211
</article>
217212
</Link>
218213
))}
@@ -224,7 +219,7 @@ export default async function BlogPostPage({ params }: Props) {
224219
<div className="mt-12 text-center">
225220
<Link
226221
href="/blog/"
227-
className="inline-flex items-center gap-2 text-blue-600 font-semibold hover:gap-3 transition-all"
222+
className="inline-flex items-center gap-2 text-blue-600 dark:text-blue-400 font-bold hover:gap-3 transition-all"
228223
>
229224
← Back to All Articles
230225
</Link>
@@ -244,21 +239,21 @@ export default async function BlogPostPage({ params }: Props) {
244239
'author': {
245240
'@type': 'Organization',
246241
'name': post.author,
247-
'url': 'https://abusufyan-netizen.github.io',
242+
'url': 'https://wtkpro.site',
248243
},
249244
'publisher': {
250245
'@type': 'Organization',
251246
'name': 'WebToolkit Pro',
252-
'url': 'https://abusufyan-netizen.github.io',
247+
'url': 'https://wtkpro.site',
253248
},
254249
'mainEntityOfPage': {
255250
'@type': 'WebPage',
256-
'@id': `https://abusufyan-netizen.github.io/blog/${post.slug}/`,
251+
'@id': `https://wtkpro.site/blog/${post.slug}/`,
257252
},
258253
'keywords': post.keywords.join(', '),
259254
'articleSection': post.category,
260255
'inLanguage': 'en-US',
261-
'url': `https://abusufyan-netizen.github.io/blog/${post.slug}/`,
256+
'url': `https://wtkpro.site/blog/${post.slug}/`,
262257
}),
263258
}}
264259
/>
@@ -275,19 +270,19 @@ export default async function BlogPostPage({ params }: Props) {
275270
'@type': 'ListItem',
276271
'position': 1,
277272
'name': 'Home',
278-
'item': 'https://abusufyan-netizen.github.io',
273+
'item': 'https://wtkpro.site',
279274
},
280275
{
281276
'@type': 'ListItem',
282277
'position': 2,
283278
'name': 'Blog',
284-
'item': 'https://abusufyan-netizen.github.io/blog/',
279+
'item': 'https://wtkpro.site/blog/',
285280
},
286281
{
287282
'@type': 'ListItem',
288283
'position': 3,
289284
'name': post.title,
290-
'item': `https://abusufyan-netizen.github.io/blog/${post.slug}/`,
285+
'item': `https://wtkpro.site/blog/${post.slug}/`,
291286
},
292287
],
293288
}),

0 commit comments

Comments
 (0)