@@ -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
6969const 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
7777export 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