Skip to content

Commit 106dca0

Browse files
authored
✨ feat: Add new services for Programmatic SEO and SaaS MVP Development; enhance SEO Growth and Technical SEO Audit services with FAQs; improve web development service details; update about, contact, and blog pages for consistency and clarity.
1 parent 554162c commit 106dca0

34 files changed

Lines changed: 3236 additions & 132 deletions

biome.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
}
1313
},
1414
"files": {
15-
"includes": ["**", "!dist", "!.astro", "!node_modules"]
15+
"includes": ["**", "!dist", "!.astro", "!node_modules", "!**/*.css"]
1616
},
1717
"overrides": [
1818
{

src/components/HeaderNav.astro

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,16 @@
22
import { Image } from "astro:assets";
33
import logo from "@assets/logo.png";
44
import { ICON_BUTTON_CLASSES } from "@lib/constants";
5-
import Navigation from "@solid-components/Navigation";
65
import type { NavLink } from "@solid-components/Navigation";
6+
import Navigation from "@solid-components/Navigation";
77
88
export interface Props {
99
background?: string;
1010
currentPath?: string;
1111
}
1212
13-
const { background = "", currentPath = Astro.url.pathname } = Astro.props as Props;
13+
const { background = "", currentPath = Astro.url.pathname } =
14+
Astro.props as Props;
1415
1516
const navLinks: NavLink[] = [
1617
{ label: "Home", href: "/" },
@@ -21,7 +22,9 @@ const navLinks: NavLink[] = [
2122
{ label: "Contact", href: "/contact/" },
2223
];
2324
24-
const headerBackground = background || "bg-[var(--surface-elevated)]/90 backdrop-blur supports-[backdrop-filter]:bg-[var(--surface-elevated)]/75 border-b border-[var(--border-strong)]";
25+
const headerBackground =
26+
background ||
27+
"bg-[var(--surface-elevated)]/90 backdrop-blur supports-[backdrop-filter]:bg-[var(--surface-elevated)]/75 border-b border-[var(--border-strong)]";
2528
---
2629

2730
<header class={`fixed inset-x-0 top-0 z-50 w-full transition-all duration-300 ${headerBackground}`}>

src/components/solid/Navigation.tsx

Lines changed: 42 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -38,14 +38,15 @@ const Navigation: Component<NavigationProps> = (props) => {
3838

3939
const baseClass =
4040
"inline-flex items-center justify-center rounded-[0.65rem] border border-transparent px-[0.85rem] py-[0.5rem] text-[0.78rem] font-semibold tracking-[0.04em] text-[var(--text-muted)] transition-all duration-200 hover:border-[var(--border-strong)] hover:bg-[color-mix(in_srgb,var(--surface-panel)_76%,transparent)] hover:text-[var(--text-strong)]";
41-
41+
4242
const activeClass =
4343
"!text-white border-[color-mix(in_srgb,var(--accent-strong)_70%,var(--border-strong))] bg-[color-mix(in_srgb,var(--accent-strong)_86%,#10243d)] shadow-[0_0_0_1px_color-mix(in_srgb,var(--accent-strong)_55%,transparent)]";
4444

4545
const mobileBaseClass =
4646
"block w-full px-4 py-3 text-left text-base font-semibold text-[var(--text-muted)] transition-colors hover:bg-[var(--surface-elevated)] hover:text-[var(--text-strong)]";
47-
48-
const mobileActiveClass = "!text-[var(--accent-strong)] bg-[var(--surface-elevated)]";
47+
48+
const mobileActiveClass =
49+
"!text-[var(--accent-strong)] bg-[var(--surface-elevated)]";
4950

5051
return (
5152
<nav class="flex items-center" aria-label="Main navigation">
@@ -78,14 +79,34 @@ const Navigation: Component<NavigationProps> = (props) => {
7879
<Show
7980
when={isOpen()}
8081
fallback={
81-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
82+
<svg
83+
width="20"
84+
height="20"
85+
viewBox="0 0 24 24"
86+
fill="none"
87+
stroke="currentColor"
88+
stroke-width="2"
89+
stroke-linecap="round"
90+
stroke-linejoin="round"
91+
aria-label="Menu"
92+
>
8293
<line x1="3" y1="6" x2="21" y2="6" />
8394
<line x1="3" y1="12" x2="21" y2="12" />
8495
<line x1="3" y1="18" x2="21" y2="18" />
8596
</svg>
8697
}
8798
>
88-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
99+
<svg
100+
width="20"
101+
height="20"
102+
viewBox="0 0 24 24"
103+
fill="none"
104+
stroke="currentColor"
105+
stroke-width="2"
106+
stroke-linecap="round"
107+
stroke-linejoin="round"
108+
aria-label="Close menu"
109+
>
89110
<line x1="18" y1="6" x2="6" y2="18" />
90111
<line x1="6" y1="6" x2="18" y2="18" />
91112
</svg>
@@ -94,12 +115,11 @@ const Navigation: Component<NavigationProps> = (props) => {
94115

95116
{/* Mobile Menu Overlay */}
96117
<Show when={isOpen()}>
97-
<div
118+
<button
119+
type="button"
98120
class="fixed inset-0 z-40 bg-black/50 backdrop-blur-sm md:hidden"
99121
onClick={() => setIsOpen(false)}
100122
onKeyDown={handleKeyDown}
101-
role="button"
102-
tabIndex={-1}
103123
aria-label="Close menu"
104124
/>
105125
<div
@@ -110,14 +130,26 @@ const Navigation: Component<NavigationProps> = (props) => {
110130
aria-label="Mobile navigation menu"
111131
>
112132
<div class="flex items-center justify-between border-b border-[var(--border-strong)] p-4">
113-
<span class="text-lg font-bold text-[var(--text-strong)]">Menu</span>
133+
<span class="text-lg font-bold text-[var(--text-strong)]">
134+
Menu
135+
</span>
114136
<button
115137
type="button"
116138
class="inline-flex h-9 w-9 items-center justify-center rounded-lg text-[var(--text-muted)] hover:bg-[var(--surface-panel)] hover:text-[var(--text-strong)]"
117139
onClick={() => setIsOpen(false)}
118140
aria-label="Close menu"
119141
>
120-
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
142+
<svg
143+
width="20"
144+
height="20"
145+
viewBox="0 0 24 24"
146+
fill="none"
147+
stroke="currentColor"
148+
stroke-width="2"
149+
stroke-linecap="round"
150+
stroke-linejoin="round"
151+
aria-label="Close menu"
152+
>
121153
<line x1="18" y1="6" x2="6" y2="18" />
122154
<line x1="6" y1="6" x2="18" y2="18" />
123155
</svg>

src/content.config.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,14 +33,14 @@ const servicesCollection = defineCollection({
3333
z.object({
3434
title: z.string(),
3535
description: z.string(),
36-
})
36+
}),
3737
),
3838
services: z.array(
3939
z.object({
4040
name: z.string(),
4141
description: z.string(),
4242
icon: z.string(),
43-
})
43+
}),
4444
),
4545
technologies: z.array(z.string()),
4646
cta: z.object({
@@ -49,6 +49,17 @@ const servicesCollection = defineCollection({
4949
buttonText: z.string(),
5050
buttonLink: z.string(),
5151
}),
52+
faqs: z
53+
.array(
54+
z.object({
55+
question: z.string(),
56+
answer: z.string(),
57+
}),
58+
)
59+
.optional(),
60+
parentService: z.string().optional(),
61+
relatedServices: z.array(z.string()).optional(),
62+
relatedBlogPosts: z.array(z.string()).optional(),
5263
}),
5364
});
5465

@@ -93,6 +104,7 @@ const blogCollection = defineCollection({
93104
draft: z.boolean().default(false),
94105
featured: z.boolean().default(false),
95106
readingTime: z.number().optional(),
107+
relatedService: z.string().optional(),
96108
}),
97109
});
98110

0 commit comments

Comments
 (0)