Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Todo.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

### SEO

- [ ] create `sitemap.xml` and `robots.txt`.
- [ ] Add specific metadata to the landing page.
- [ ] Add specific metadata to MDX pages.
- [ ] Review and update `site.ts` and ensure all the information is accurate and complete. The `fallbackURL` should be updated to the production URL.
- [x] create `sitemap.xml` and `robots.txt`.
- [x] Add specific metadata to the landing page.
- [x] Add specific metadata to MDX pages.
- [x] Review and update `site.ts` and ensure all the information is accurate and complete. The `fallbackURL` should be updated to the production URL.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "aether-ui",
"version": "0.1.8",
"version": "0.1.9",
"private": true,
"scripts": {
"dev": "next dev --turbopack",
Expand Down
3 changes: 3 additions & 0 deletions public/robots.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
User-agent: *
Allow: /
Sitemap: https://aetherui.in/sitemap.xml
25 changes: 25 additions & 0 deletions src/app/(marketing)/page.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,35 @@
import Hero from "@/components/landing/Hero";
import LandingHeader from "@/components/landing/header";
import Footer from "@/components/landing/Footer";
import { metaConfig, siteConfig } from "@/config/site";

export const metadata = metaConfig({
title: "Aether/UI - Beautifully designed, animated components for your next product.",
description:
"Aether/ui is a collection of beautiful, animated components for your next product, built with Motion and Tailwind CSS.",
isRoot: true,
});

const structuredData = {
"@context": "https://schema.org",
"@type": "WebSite",
url: siteConfig.url,
name: siteConfig.name,
description: siteConfig.description,
publisher: {
"@type": "Person",
name: "pantharhsit007",
url: "https://hrshit.in",
},
};

export default function Home() {
return (
<div className="relative">
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(structuredData) }}
/>
<LandingHeader />
<Hero />
<Footer />
Expand Down
30 changes: 30 additions & 0 deletions src/app/sitemap.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { MetadataRoute } from "next";
import { NavigationLinks } from "@/data/navigation";

const URL = "https://aetherui.in";

export default function sitemap(): MetadataRoute.Sitemap {
const staticRoutes = [
{
url: `${URL}/`,
lastModified: new Date(),
},
{
url: `${URL}/community`,
lastModified: new Date(),
},
{
url: `${URL}/showcase`,
lastModified: new Date(),
},
];

const componentRoutes = NavigationLinks.flatMap((group) =>
group.children.map((item) => ({
url: `${URL}${item.href}`,
lastModified: new Date(),
}))
);
Comment on lines +8 to +28
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

Reconsider using new Date() for all lastModified values.

Setting lastModified: new Date() for every route on every build signals to search engines that all pages changed, even when content is unchanged. This can negatively impact crawl efficiency and indexing.

Consider one of these approaches:

  • Use static dates for routes that don't change frequently
  • Retrieve actual file modification times for dynamic routes
  • Omit lastModified if you don't track content changes (Next.js will handle it appropriately)

Example with static dates:

 const staticRoutes = [
   {
     url: `${URL}/`,
-    lastModified: new Date(),
+    lastModified: new Date("2025-10-31"),
   },
   // ... similar for other static routes
 ];

Committable suggestion skipped: line range outside the PR's diff.


return [...staticRoutes, ...componentRoutes];
}
14 changes: 7 additions & 7 deletions src/components/landing/Hero.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ function Hero() {
src={src}
className="absolute inset-0 h-full w-full object-cover"
fill
alt="hero-bg-image"
alt="Abstract background image for the hero section of Aether/UI."
priority
placeholder="empty"
/>
Expand All @@ -50,15 +50,15 @@ function Hero() {
transition={variant.transition}
className="mx-auto -mt-12 flex w-fit max-w-screen-lg flex-col justify-center"
>
<div className="font-instrument-serif text-5xl font-bold tracking-tight text-transparent md:text-6xl lg:text-7xl xl:text-[5rem] xl:leading-[1]">
<p className="landing-gradient">
<h1 className="font-instrument-serif text-5xl font-bold tracking-tight text-transparent md:text-6xl lg:text-7xl xl:text-[5rem] xl:leading-[1]">
<span className="landing-gradient block">
Build <span className="text-shadow-glow text-cyan-900">Fast.</span> Animate{" "}
<span className="text-shadow-glow text-cyan-900">Bold.</span>
</p>
<p className="landing-gradient pb-1.5">
</span>
<span className="landing-gradient block pb-1.5">
Ship <span className="text-shadow-glow text-cyan-900">Beautiful.</span>
</p>
</div>
</span>
</h1>

<p className="font-bricolage-grotesque text-shadow-glow-2 mx-auto mt-2.5 text-center text-base tracking-tight text-zinc-200 md:w-[70%] md:text-lg">
Breathe life into your website with beautifully designed animated components, a
Expand Down
6 changes: 4 additions & 2 deletions src/config/site.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,10 @@ const formatName = (name: string) => {
export interface MetaConfigProps {
title: string;
description: string;
isRoot?: boolean;
}

const fallbackURL = "https://ui-aether.vercel.app";
const fallbackURL = "https://aetherui.in";

/**
* @param title: Metadata["title"];
Expand All @@ -36,6 +37,7 @@ const fallbackURL = "https://ui-aether.vercel.app";
export const metaConfig = ({
title = siteConfig.name,
description = siteConfig.description,
isRoot = false,
}: MetaConfigProps): Metadata => ({
title,
description,
Expand Down Expand Up @@ -65,7 +67,7 @@ export const metaConfig = ({
title,
description,
siteName: siteConfig.name,
url: `${siteConfig.url}/docs/${formatName(title)}`,
url: isRoot ? siteConfig.url : `${siteConfig.url}/docs/${formatName(title)}`,
locale: "en_US",
images: [
{
Expand Down