-
-
Notifications
You must be signed in to change notification settings - Fork 2
Update SEO Data Structure #43
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
92715be
da62200
3a8dc77
6a28017
7f234e6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -13,6 +13,7 @@ import { BorderBeam } from "@components/ui/border-beam"; | |||||
| import { GridPattern } from "@components/ui/grid-pattern"; | ||||||
| import { Ripple } from "@components/ui/ripple"; | ||||||
| import { ContactHero } from "@components/heros/contact-hero"; | ||||||
| import { cn } from "@lib/utils"; | ||||||
|
|
||||||
| export default function ContactPage() { | ||||||
| // Form state | ||||||
|
|
@@ -133,7 +134,7 @@ export default function ContactPage() { | |||||
| <> | ||||||
| <NavigationBar/> | ||||||
| <ContactHero/> | ||||||
| <main className="min-h-screen relative pt-24 bg-gradient-to-b from-background via-muted/30 to-background"> | ||||||
| <main className="relative pt-24 bg-gradient-to-b from-background via-muted/30 to-background"> | ||||||
| <div className="absolute inset-0 pointer-events-none" aria-hidden="true"> | ||||||
| <GridPattern | ||||||
| width={30} | ||||||
|
|
@@ -147,20 +148,20 @@ export default function ContactPage() { | |||||
| <div className="absolute overflow-hidden inset-0 pointer-events-none" aria-hidden="true"> | ||||||
| <Ripple mainCircleSize={300} numCircles={10} className="opacity-30"/> | ||||||
| </div> | ||||||
| <BlurFade delay={0.7} className="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8"> | ||||||
| <BlurFade delay={0.2} className="max-w-3xl mx-auto px-4 sm:px-6 lg:px-8"> | ||||||
| <div> | ||||||
| {/* Contact Form */} | ||||||
| <div className="translate-y-2"> | ||||||
| <Card className="overflow-hidden bg-background/90 backdrop-blur-sm relative rounded-3xl border-border/50 shadow-lg shadow-primary/5"> | ||||||
| <Card className="overflow-hidden bg-background/80 backdrop-blur-3xl relative rounded-4xl border-border/50 shadow-lg shadow-primary/5"> | ||||||
| <CardContent className="p-6 sm:px-8"> | ||||||
| {submitted ? ( | ||||||
| <div className="text-center py-12"> | ||||||
| <div className="inline-flex items-center justify-center w-16 h-16 bg-primary/10 rounded-full text-primary mb-4"> | ||||||
| <svg className="w-8 h-8" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> | ||||||
| <div className="text-center pb-12 pt-5"> | ||||||
| <div className="inline-flex items-center justify-center size-20 bg-primary/10 rounded-full text-primary mb-4"> | ||||||
| <svg className="size-8" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> | ||||||
| <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M5 13l4 4L19 7" /> | ||||||
| </svg> | ||||||
| </div> | ||||||
| <h3 className="text-2xl font-semibold mb-2">Message Sent!</h3> | ||||||
| <h3 className="text-2xl font-semibold mb-4">Message Sent!</h3> | ||||||
| <p className="text-muted-foreground mb-2">Thank you for reaching out. Your message has been sent to:</p> | ||||||
| <p className="font-medium text-primary mb-6">[email protected]</p> | ||||||
| <p className="text-sm text-muted-foreground mb-6">I'll get back to you as soon as possible.</p> | ||||||
|
|
@@ -185,7 +186,7 @@ export default function ContactPage() { | |||||
| required | ||||||
| value={formData.name} | ||||||
| onChange={handleChange} | ||||||
| className={formErrors.name ? "border-destructive ring-primary" : ""} | ||||||
| className={cn(formErrors.name ? "border-destructive ring-primary" : "", "rounded-xl bg-transparent")} | ||||||
| aria-invalid={Boolean(formErrors.name)} | ||||||
| /> | ||||||
| {formErrors.name && ( | ||||||
|
|
@@ -205,7 +206,7 @@ export default function ContactPage() { | |||||
| required | ||||||
| value={formData.email} | ||||||
| onChange={handleChange} | ||||||
| className={formErrors.email ? "border-destructive ring-primary" : ""} | ||||||
| className={cn(formErrors.name ? "border-destructive ring-primary" : "", "rounded-xl bg-transparent")} | ||||||
| aria-invalid={Boolean(formErrors.email)} | ||||||
| /> | ||||||
| {formErrors.email && ( | ||||||
|
|
@@ -226,7 +227,7 @@ export default function ContactPage() { | |||||
| required | ||||||
| value={formData.subject} | ||||||
| onChange={handleChange} | ||||||
| className={formErrors.subject ? "border-destructive ring-primary" : ""} | ||||||
| className={cn(formErrors.name ? "border-destructive ring-primary" : "", "rounded-xl bg-transparent")} | ||||||
|
||||||
| className={cn(formErrors.name ? "border-destructive ring-primary" : "", "rounded-xl bg-transparent")} | |
| className={cn(formErrors.subject ? "border-destructive ring-primary" : "", "rounded-xl bg-transparent")} |
Copilot
AI
Jun 7, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The message textarea's error condition references formErrors.name instead of formErrors.message. It should check formErrors.message to display validation errors correctly.
| className={cn(formErrors.name ? "border-destructive ring-primary" : "", "rounded-xl bg-transparent")} | |
| className={cn(formErrors.message ? "border-destructive ring-primary" : "", "rounded-xl bg-transparent")} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,3 @@ | ||
| 'use client'; | ||
|
|
||
| import React from 'react'; | ||
| import { | ||
| appName, | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,3 @@ | ||
| 'use client'; | ||
|
|
||
| import React from 'react'; | ||
| import { NEXT_PUBLIC_APP_URL } from '@lib/constants'; | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,3 @@ | ||
| 'use client'; | ||
|
|
||
| import React from 'react'; | ||
| import { appName, NEXT_PUBLIC_APP_URL } from '@lib/constants'; | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change | ||||||
|---|---|---|---|---|---|---|---|---|
|
|
@@ -63,7 +63,7 @@ components.forEach((component: string) => { | |||||||
| const content: string = fs.readFileSync(componentPath, 'utf-8'); | ||||||||
|
|
||||||||
| // Check if it imports from constants | ||||||||
| if (content.includes('from "@lib/constants"') || content.includes('from \'@lib/constants\'')) { | ||||||||
| if (content.includes('from "../lib/constants"') || content.includes('from \'../lib/constants\'')) { | ||||||||
|
||||||||
| if (content.includes('from "../lib/constants"') || content.includes('from \'../lib/constants\'')) { | |
| if (content.includes('from "../lib/constants"') || content.includes('from \'../lib/constants\'') || | |
| content.includes('from "../../lib/constants"') || content.includes('from \'../../lib/constants\'')) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The email input's error styling condition uses
formErrors.nameinstead offormErrors.email, so it won't highlight email errors correctly. Update the condition to checkformErrors.email.