Skip to content

Commit 87299c5

Browse files
authored
✨ feat: Update site configuration, add security headers, implement redirects, enhance portfolio descriptions, and improve service pages for better SEO and user experience.
1 parent 9649dda commit 87299c5

14 files changed

Lines changed: 174 additions & 47 deletions

astro.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const tailwindPlugin = tailwindcss() as unknown as never;
1010

1111
// https://astro.build/config
1212
export default defineConfig({
13-
site: "https://avaabrazzaq.com/", // Your public domain, e.g.: https://my-site.dev/. Used to generate sitemaps and canonical URLs.
13+
site: "https://avaabrazzaq.com", // Used to generate canonical URLs and sitemap entries.
1414
trailingSlash: "always", // Consistent URL format - all URLs end with /
1515
vite: {
1616
plugins: [tailwindPlugin],

public/_headers

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# https://developers.cloudflare.com/pages/platform/headers/
33

44
/*
5+
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
56
X-Content-Type-Options: nosniff
67
X-Frame-Options: SAMEORIGIN
78
X-XSS-Protection: 1; mode=block

public/_redirects

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
# Canonical host and protocol redirects (Netlify-compatible)
2+
http://avaabrazzaq.com/* https://avaabrazzaq.com/:splat 301!
3+
http://www.avaabrazzaq.com/* https://avaabrazzaq.com/:splat 301!
4+
https://www.avaabrazzaq.com/* https://avaabrazzaq.com/:splat 301!

public/robots.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
User-agent: *
22
Allow: /
3+
Sitemap: https://avaabrazzaq.com/sitemap-index.xml
4+
Host: avaabrazzaq.com
35

46
# Search engine crawlers
57
User-agent: Googlebot
@@ -107,5 +109,3 @@ Allow: /
107109

108110
User-agent: ProRataInc
109111
Allow: /
110-
111-
Sitemap: https://avaabrazzaq.com/sitemap-index.xml

src/content/portfolio/ai-workflow-automation.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
"order": 1,
33
"title": "AI Workflow Automation Platform",
44
"category": "Automation",
5-
"summary": "Designed a multi-agent workflow that automated lead qualification, follow-up sequencing, and CRM enrichment.",
6-
"description": "This comprehensive AI automation platform streamlines the entire lead management lifecycle from initial capture to sales handoff. The system uses intelligent multi-agent architecture where specialized AI agents handle distinct tasks: qualification scoring, data enrichment from multiple sources, personalized follow-up sequencing, and CRM synchronization. Built with a focus on reliability and transparency, the platform includes detailed logging, human-in-the-loop approval workflows for high-stakes decisions, and real-time dashboards for monitoring pipeline health.",
7-
"challenge": "The client's sales team was drowning in manual lead processing, spending 15+ hours weekly on data entry, qualification calls, and follow-up scheduling. Lead response times averaged 48 hours, causing significant drop-off in conversion rates. The existing CRM was underutilized due to inconsistent data entry practices.",
8-
"solution": "Implemented a TypeScript-based multi-agent system using OpenAI's function calling for intelligent task routing. The architecture includes webhook listeners for real-time lead capture, enrichment agents that pull data from LinkedIn, company databases, and public records, a scoring engine that evaluates fit and intent signals, and an automated sequencing system that personalizes outreach timing and messaging based on prospect behavior.",
9-
"impact": "Reduced manual ops by 62% while increasing qualified handoffs to sales. Lead response time dropped from 48 hours to under 5 minutes. Sales team productivity increased 3x as they focused on high-intent prospects only.",
5+
"summary": "Designed and launched a multi-agent workflow platform that automated lead qualification, follow-up sequencing, and CRM enrichment for a fast-moving B2B sales team.",
6+
"description": "This project replaced a fragmented spreadsheet-and-inbox process with a production-ready automation platform that handles the full lead lifecycle from form submission to sales handoff. The system was built as a modular TypeScript service running event-driven workflows triggered by inbound leads, website behavior, and lifecycle updates from the CRM. Separate AI agents were assigned to enrichment, scoring, messaging, and routing so each stage could be measured independently and tuned without disrupting the rest of the pipeline. The implementation included deterministic fallbacks for incomplete data, confidence thresholds for escalation, and an approval queue for edge cases to keep quality high while still moving quickly.",
7+
"challenge": "Before launch, the sales team handled qualification manually and had no shared scoring framework. Reps were copying data between forms, LinkedIn, and the CRM, which led to duplicate records, delayed response times, and inconsistent prioritization. The average first-touch delay was 48 hours, and high-intent prospects frequently went cold before a rep followed up. Leadership also lacked visibility into where leads were dropping off because tracking lived across disconnected tools with no unified attribution. The core challenge was to automate repetitive operations without losing context, data quality, or compliance controls.",
8+
"solution": "I implemented a multi-agent orchestration layer using TypeScript, Bun workers, and OpenAI function calling with strict tool schemas. The ingestion layer accepted webhook events, validated payloads, and normalized fields into a canonical lead model. Enrichment agents pulled role and company signals, then a scoring agent applied weighted fit and intent rules tuned with historical conversion data. A sequencing agent generated channel-specific follow-ups and pacing logic, while a sync agent wrote structured updates back to the CRM with audit metadata and retry queues. Operational safeguards included idempotency keys, dead-letter handling, confidence-based routing, and human review checkpoints for high-value accounts. A dashboard surfaced latency, conversion by stage, and agent-level error rates so the team could iterate quickly.",
9+
"impact": "Manual lead-ops work dropped by 62% within the first month, and average first response time fell from 48 hours to under 5 minutes. Qualified handoffs increased by 38% because reps spent their time on high-intent opportunities instead of triage. CRM completeness improved from 61% to 94% on required fields, which enabled cleaner reporting and better campaign attribution. Sales leadership gained real-time visibility into pipeline health, and the team sustained a 3x increase in rep throughput without adding headcount.",
1010
"timeframe": "2025",
1111
"stack": ["TypeScript", "Astro", "Bun", "OpenAI API"],
1212
"proofUrl": "https://github.com/AR10Dev",

src/content/portfolio/social-media-management.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
"order": 4,
33
"title": "Social Media Growth Campaign",
44
"category": "Marketing",
5-
"summary": "Developed and executed multi-platform social media strategy with data-driven content calendar, engagement tactics, and influencer partnerships.",
6-
"description": "A holistic social media transformation that elevated the brand's presence across LinkedIn, Instagram, and Twitter through strategic content creation, community building, and performance analytics. The campaign combined thought leadership content, behind-the-scenes storytelling, interactive formats, and strategic collaborations to build an engaged audience that converts. Every piece of content was optimized based on platform-specific best practices and performance data.",
7-
"challenge": "The brand had minimal social media presence with sporadic posting, no content strategy, and engagement rates well below industry standards. Previous attempts at social media marketing had failed to generate meaningful business results, leading to skepticism about the channel's value. The team needed a sustainable approach that would drive both awareness and qualified leads.",
8-
"solution": "Developed comprehensive content strategy anchored in audience research and competitive analysis. Created content pillars aligned with buyer journey stages: educational posts for awareness, case studies for consideration, and social proof for decision. Implemented systematic engagement protocols to build genuine community. Established influencer partnership program with micro-influencers in target verticals. Built analytics dashboard tracking content performance to business outcomes.",
9-
"impact": "Grew combined following by 340% in 6 months, achieved 8.2% average engagement rate vs. 2.1% industry baseline. LinkedIn became the #2 source of qualified leads. Content regularly achieved viral reach, with top posts generating 500K+ impressions. Established brand as thought leader in the space.",
5+
"summary": "Built and operated a multi-platform social growth campaign with channel-specific content systems, creator partnerships, and attribution tracking tied to qualified pipeline.",
6+
"description": "This engagement transformed an inconsistent posting motion into a repeatable social growth engine across LinkedIn, Instagram, and X. I designed an editorial framework mapped to the buyer journey, then built a weekly operating cadence that paired long-form thought leadership with short-form native content, repurposed assets, and interactive prompts. Each channel had its own content objective, publishing rhythm, and performance guardrails. The workflow included briefing templates, creator collaboration playbooks, comment-response scripts, and a measurement layer that connected engagement signals to lead quality. Instead of chasing vanity metrics, the strategy prioritized audience fit, retention, and conversion momentum.",
7+
"challenge": "The brand started with low posting consistency, weak positioning, and fragmented analytics. Engagement sat below 2.1%, there was no shared definition of qualified social leads, and internal stakeholders viewed social as a cost center rather than a growth channel. Prior campaigns emphasized sporadic promotional content that produced brief spikes but no durable audience lift. The team needed a process that could scale sustainably, maintain brand voice, and prove contribution to revenue without requiring a large in-house media team.",
8+
"solution": "I led discovery interviews, audience analysis, and competitor benchmarking to define three core content pillars: operator education, execution proof, and customer outcomes. From there, I launched a 90-day content production and distribution system using Buffer for scheduling, platform-native analytics for optimization, and weekly review loops for rapid iteration. I introduced a creator program with micro-influencers in adjacent niches, structured co-marketing posts, and referral CTAs tied to dedicated landing pages. Engagement operations were standardized with response SLAs, community prompts, and post-level experimentation on hooks, formats, and CTA placement. Reporting combined reach, saves, profile actions, and assisted conversions so leadership could track contribution by channel and campaign.",
9+
"impact": "The campaign increased combined follower count by 340% in 6 months and sustained an 8.2% average engagement rate versus a 2.1% starting baseline. LinkedIn became the second-largest source of qualified inbound leads, and top-performing posts crossed 500K impressions without paid amplification. Social-assisted pipeline contribution grew 2.7x quarter over quarter, while production efficiency improved through reusable templates and batching. Most importantly, the team shifted from ad-hoc posting to a measurable growth program with clear ownership and repeatable outcomes.",
1010
"timeframe": "2024-2025",
1111
"stack": [
1212
"Meta Business Suite",

src/layouts/BaseLayout.astro

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,19 @@ export interface Props {
2020
readingTime?: string;
2121
}
2222
23-
const siteUrl = "https://avaabrazzaq.com";
23+
const configuredSite = new URL(
24+
Astro.site?.toString() ?? "https://avaabrazzaq.com",
25+
);
26+
configuredSite.protocol = "https:";
27+
28+
const siteUrl = configuredSite.origin;
2429
2530
const normalizeCanonicalUrl = (inputUrl: string) => {
2631
const parsedUrl = new URL(inputUrl, siteUrl);
32+
parsedUrl.protocol = "https:";
33+
parsedUrl.host = configuredSite.host;
34+
parsedUrl.search = "";
35+
parsedUrl.hash = "";
2736
2837
if (!parsedUrl.pathname.endsWith("/") && !parsedUrl.pathname.includes(".")) {
2938
parsedUrl.pathname = `${parsedUrl.pathname}/`;

src/layouts/Layout.astro

Lines changed: 35 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import "../styles/global.css";
99
interface Props {
1010
pageTitle: string;
1111
pageDescription: string;
12-
canonicalUrl: string;
12+
canonicalUrl?: string;
1313
ogImage: string;
1414
structuredData?: Record<string, unknown>;
1515
headerBackground: string;
@@ -23,6 +23,36 @@ const {
2323
structuredData,
2424
headerBackground,
2525
} = Astro.props as Props;
26+
27+
const configuredSite = new URL(
28+
Astro.site?.toString() ?? "https://avaabrazzaq.com",
29+
);
30+
configuredSite.protocol = "https:";
31+
32+
const siteUrl = configuredSite.origin;
33+
34+
const normalizeCanonicalUrl = (inputUrl: string) => {
35+
const parsedUrl = new URL(inputUrl, siteUrl);
36+
parsedUrl.protocol = "https:";
37+
parsedUrl.host = configuredSite.host;
38+
parsedUrl.search = "";
39+
parsedUrl.hash = "";
40+
41+
if (!parsedUrl.pathname.endsWith("/") && !parsedUrl.pathname.includes(".")) {
42+
parsedUrl.pathname = `${parsedUrl.pathname}/`;
43+
}
44+
45+
return parsedUrl.toString();
46+
};
47+
48+
const canonicalUrlResolved = normalizeCanonicalUrl(
49+
canonicalUrl ?? new URL(Astro.url.pathname, siteUrl).toString(),
50+
);
51+
52+
const finalOgImage = ogImage.startsWith("http")
53+
? ogImage
54+
: new URL(ogImage, siteUrl).toString();
55+
2656
const gaMeasurementId =
2757
import.meta.env.PUBLIC_GA_MEASUREMENT_ID?.trim() || "G-LKVQYYL9XZ";
2858
const shouldLoadAnalytics = import.meta.env.PROD && gaMeasurementId.length > 0;
@@ -50,7 +80,7 @@ const shouldLoadAnalytics = import.meta.env.PROD && gaMeasurementId.length > 0;
5080
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
5181
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
5282
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
53-
<link rel="canonical" href={canonicalUrl} />
83+
<link rel="canonical" href={canonicalUrlResolved} />
5484
<link rel="sitemap" href="/sitemap-index.xml" />
5585
<link rel="alternate" type="application/rss+xml" title="Avaab Razzaq Blog RSS Feed" href="/blog/rss.xml" />
5686
<link rel="preconnect" href="https://fonts.googleapis.com" />
@@ -61,8 +91,8 @@ const shouldLoadAnalytics = import.meta.env.PROD && gaMeasurementId.length > 0;
6191
<meta property="og:type" content="website" />
6292
<meta property="og:title" content={pageTitle} />
6393
<meta property="og:description" content={pageDescription} />
64-
<meta property="og:url" content={canonicalUrl} />
65-
<meta property="og:image" content={ogImage} />
94+
<meta property="og:url" content={canonicalUrlResolved} />
95+
<meta property="og:image" content={finalOgImage} />
6696
<meta property="og:image:alt" content={pageTitle} />
6797
<meta property="og:image:width" content="1200" />
6898
<meta property="og:image:height" content="630" />
@@ -72,7 +102,7 @@ const shouldLoadAnalytics = import.meta.env.PROD && gaMeasurementId.length > 0;
72102
<meta name="twitter:card" content="summary_large_image" />
73103
<meta name="twitter:title" content={pageTitle} />
74104
<meta name="twitter:description" content={pageDescription} />
75-
<meta name="twitter:image" content={ogImage} />
105+
<meta name="twitter:image" content={finalOgImage} />
76106

77107
<meta name="theme-color" content="#0e2a47" />
78108

src/layouts/ServiceLayout.astro

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,20 @@ export interface Props {
2626
modifiedTime?: string;
2727
}
2828
29-
const siteUrl = "https://avaabrazzaq.com";
29+
const configuredSite = new URL(
30+
Astro.site?.toString() ?? "https://avaabrazzaq.com",
31+
);
32+
configuredSite.protocol = "https:";
33+
34+
const siteUrl = configuredSite.origin;
3035
const currentYear = new Date().getFullYear();
3136
3237
const normalizeCanonicalUrl = (inputUrl: string) => {
3338
const parsedUrl = new URL(inputUrl, siteUrl);
39+
parsedUrl.protocol = "https:";
40+
parsedUrl.host = configuredSite.host;
41+
parsedUrl.search = "";
42+
parsedUrl.hash = "";
3443
3544
if (!parsedUrl.pathname.endsWith("/") && !parsedUrl.pathname.includes(".")) {
3645
parsedUrl.pathname = `${parsedUrl.pathname}/`;

src/pages/index.astro

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,18 @@ const homepage = homepageEntry.data;
3030
3131
const portfolioItems = (await getCollection("portfolio"))
3232
.sort((a, b) => a.data.order - b.data.order)
33-
.slice(0, 3);
33+
.slice(0, 4);
3434
35-
const siteUrl = "https://avaabrazzaq.com";
35+
const siteUrl = new URL(
36+
Astro.site?.toString() ?? "https://avaabrazzaq.com",
37+
).origin;
3638
const canonicalUrl = new URL(Astro.url.pathname, siteUrl).toString();
3739
const ogImage = new URL("/og-ai-growth-engineer.svg", siteUrl).toString();
3840
const linkedInUrl = "https://www.linkedin.com/in/ar10dev";
3941
const twitterUrl = "https://twitter.com/itsmeAvaab";
4042
const seoTitle = "AI Growth Engineer Services in Miami | Avaab Razzaq";
4143
const seoDescription =
42-
"Hire Avaab Razzaq for AI automation, full-stack web development, and technical SEO in Miami, FL. Book a discovery call to accelerate growth.";
44+
"Hire Avaab Razzaq, an AI Growth Engineer in Miami, for AI automation, full-stack development, and technical SEO systems that drive measurable revenue growth.";
4345
4446
const rolePhrases = [
4547
"web apps that convert.",
@@ -102,6 +104,11 @@ const serviceItems = [
102104
body: "Ship fast, scale smart. I build production-ready web and mobile applications using Astro, React, SolidJS, and modern AI-native architectures.",
103105
href: "/services/full-stack-web-development/",
104106
},
107+
{
108+
title: "Mobile App Development",
109+
body: "I design and ship Flutter and native iOS/Android apps with API integrations, analytics instrumentation, and app-store launch support.",
110+
href: "/services/mobile-app-development/",
111+
},
105112
];
106113
107114
const emergingServiceSlugs = [

0 commit comments

Comments
 (0)