diff --git a/aria/.eslintrc.json b/aria/.eslintrc.json
new file mode 100644
index 000000000..372241854
--- /dev/null
+++ b/aria/.eslintrc.json
@@ -0,0 +1,3 @@
+{
+ "extends": ["next/core-web-vitals", "next/typescript"]
+}
diff --git a/aria/.gitignore b/aria/.gitignore
new file mode 100644
index 000000000..d44b53b1f
--- /dev/null
+++ b/aria/.gitignore
@@ -0,0 +1,42 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
+
+# package manager
+package-lock.json
+
+# IDE
+.idea
+.vscode
\ No newline at end of file
diff --git a/aria/LICENSE b/aria/LICENSE
new file mode 100644
index 000000000..ab7a1dac9
--- /dev/null
+++ b/aria/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Mohd. Nisab
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/aria/README.md b/aria/README.md
new file mode 100644
index 000000000..84abdf728
--- /dev/null
+++ b/aria/README.md
@@ -0,0 +1,100 @@
+## AriaDocs - Documentation Template
+
+This feature-packed documentation template, built with Next.js, offers a sleek and responsive design, perfect for all your project documentation needs.
+
+
+
+
+
+Here are all versions of the AriaDocs template, each crafted for specific use cases:
+
+
+- **Advanced Docs:** A comprehensive template offering extensive features for in-depth documentation needs. Perfect for larger projects that require detailed explanations and advanced configurations.
+ [Explore the Advanced Docs](https://github.com/nisabmohd/Aria-Docs/tree/master)
+
+- **Lite Version:** A streamlined, no-frills template perfect for straightforward documentation needs.
+ [Explore the Lite Version](https://github.com/nisabmohd/Aria-Docs/tree/minimal-docs)
+
+- **Version with Versioning:** A powerful option for projects that require historical documentation tracking. Manage multiple versions of your docs effortlessly.
+ [Check out the Versioning Feature](https://github.com/nisabmohd/Aria-Docs/tree/version_docs)
+
+- **i18n Support Version (WIP):** Designed for international audiences, this version will offer comprehensive multilingual support.
+ [Preview the i18n Support](https://github.com/nisabmohd/Aria-Docs/tree/i18n-support)
+
+### Quick Start
+
+You can create a new Ariadocs project using the command:
+
+```plaintext
+npx create-aria-doc
+```
+
+### Expected Output
+
+When you run the CLI, you can expect an output similar to this:
+
+```
+Creating a new Ariadocs project in /path/to/your/project from the master branch...
+Cloning Master (Full Documentation)...
+Ariadocs project successfully created in /path/to/your/project!
+
+Next steps:
+1. Navigate to your project directory:
+ cd
+2. Install dependencies:
+ // To support React 19, package maintainers will need to test and update their packages to include React 19 as a peer dependency. This is already in progress.
+ npm install --force
+3. Start the development server:
+ npm run dev
+```
+
+## Getting Started
+
+First, run the development server:
+
+```plaintext
+npm run dev
+# or
+yarn dev
+# or
+pnpm dev
+# or
+bun dev
+```
+
+
+## Deploy on Vercel
+
+The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
+
+Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
+
+[](https://vercel.com/new/clone?repository-url=https://github.com/nisabmohd/Aria-Docs)
+
+## Key Features
+
+| **Feature** | **Description** |
+|-------------------------------|----------------------------------------------------------|
+| MDX Support | Write interactive documentation with MDX. |
+| Nested Pages | Organize content in a nested, hierarchical structure. |
+| Blog Section | Include a dedicated blog section. |
+| Table of Contents | Auto-generated TOC for easy navigation. |
+| Pagination | Split content across multiple pages. |
+| Syntax Highlighting | Highlight code for better readability. |
+| Code Line Highlighting & Titles | Highlight specific lines with descriptive titles. |
+| Interactive Code Blocks | Language-specific and interactive code display. |
+| Custom Components | Embed custom, reusable components in your docs. |
+| Light & Dark Mode | Toggle between light and dark themes. |
+| Search Functionality | Quickly find content with a built-in search. |
+| Code Switcher | Switch between code languages or variations. |
+| Code Copy | Copy code blocks with a single click. |
+| TOC Observer Highlight | Highlight active sections in the TOC as you scroll. |
+| Static Site Generation | Generate a static, high-performance site. |
+| SEO-Optimized | Structured for optimal search engine indexing. |
+
+
+## Additional Themes
+
+
+
+
\ No newline at end of file
diff --git a/aria/app/blog/[slug]/page.tsx b/aria/app/blog/[slug]/page.tsx
new file mode 100644
index 000000000..166727e5d
--- /dev/null
+++ b/aria/app/blog/[slug]/page.tsx
@@ -0,0 +1,112 @@
+import { Typography } from "@/components/typography";
+import { buttonVariants } from "@/components/ui/button";
+import { Author, getAllBlogStaticPaths, getBlogForSlug } from "@/lib/markdown";
+import { ArrowLeftIcon } from "lucide-react";
+import Link from "next/link";
+import { notFound } from "next/navigation";
+import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar";
+import { formatDate } from "@/lib/utils";
+import Image from "next/image";
+
+type PageProps = {
+ params: Promise<{ slug: string }>;
+};
+
+export async function generateMetadata(props: PageProps) {
+ const params = await props.params;
+
+ const {
+ slug
+ } = params;
+
+ const res = await getBlogForSlug(slug);
+ if (!res) return null;
+ const { frontmatter } = res;
+ return {
+ title: frontmatter.title,
+ description: frontmatter.description,
+ };
+}
+
+export async function generateStaticParams() {
+ const val = await getAllBlogStaticPaths();
+ if (!val) return [];
+ return val.map((it) => ({ slug: it }));
+}
+
+export default async function BlogPage(props: PageProps) {
+ const params = await props.params;
+
+ const {
+ slug
+ } = params;
+
+ const res = await getBlogForSlug(slug);
+ if (!res) notFound();
+ return (
+
+ );
+}
diff --git a/aria/app/error.tsx b/aria/app/error.tsx
new file mode 100644
index 000000000..8a8ae0bc4
--- /dev/null
+++ b/aria/app/error.tsx
@@ -0,0 +1,44 @@
+"use client"; // Error components must be Client Components
+
+import { Button, buttonVariants } from "@/components/ui/button";
+import Link from "next/link";
+import { useEffect } from "react";
+
+export default function Error({
+ error,
+ reset,
+}: {
+ error: Error & { digest?: string };
+ reset: () => void;
+}) {
+ useEffect(() => {
+ console.error(error);
+ }, [error]);
+
+ return (
+
+
+
Oops!
+
+ Something went wrong {":`("}
+
+
+ We're sorry, but an error occurred while processing your request.
+
+
+
+
+
+ Back to homepage
+
+
+
+ );
+}
diff --git a/aria/app/favicon.ico b/aria/app/favicon.ico
new file mode 100644
index 000000000..5cf201a68
Binary files /dev/null and b/aria/app/favicon.ico differ
diff --git a/aria/app/layout.tsx b/aria/app/layout.tsx
new file mode 100644
index 000000000..232a10953
--- /dev/null
+++ b/aria/app/layout.tsx
@@ -0,0 +1,59 @@
+import type { Metadata } from "next";
+import { ThemeProvider } from "@/components/contexts/theme-provider";
+import { Navbar } from "@/components/navbar";
+import { Space_Mono, Space_Grotesk } from "next/font/google";
+import { Footer } from "@/components/footer";
+import "@/styles/globals.css";
+
+import { GoogleAnalytics } from '@next/third-parties/google'
+
+const GeistSans = Space_Grotesk({
+ subsets: ["latin"],
+ variable: "--font-geist-sans",
+ display: "swap",
+ weight: "400",
+});
+
+const GeistMono = Space_Mono({
+ subsets: ["latin"],
+ variable: "--font-geist-mono",
+ display: "swap",
+ weight: "400",
+});
+
+export const metadata: Metadata = {
+ title: "Mega - Redefining Open Source with Monolithic and Decentralized",
+ metadataBase: new URL("https://gitmega.dev/"),
+ description:
+ "Mega is an unofficial open source implementation of Google Piper. It is a monorepo & monolithic codebase management system that supports Git. Mega is designed to manage large-scale codebases, streamline development, and foster collaboration.",
+};
+
+export default function RootLayout({
+ children,
+}: Readonly<{
+ children: React.ReactNode;
+}>) {
+ return (
+
+
+
+
+
+ {children}
+
+
+
+
+
+
+
+ );
+}
diff --git a/aria/app/not-found.tsx b/aria/app/not-found.tsx
new file mode 100644
index 000000000..77f2439ea
--- /dev/null
+++ b/aria/app/not-found.tsx
@@ -0,0 +1,19 @@
+import { buttonVariants } from "@/components/ui/button";
+import Link from "next/link";
+
+export default function NotFound() {
+ return (
+
+
+
404
+
+ Page not found {":("}
+
+
Oops! The page you're looking for doesn't exist.
+
+
+ Back to homepage
+
+
+ );
+}
diff --git a/aria/app/opengraph-image.jpg b/aria/app/opengraph-image.jpg
new file mode 100644
index 000000000..b6cdd153e
Binary files /dev/null and b/aria/app/opengraph-image.jpg differ
diff --git a/aria/app/page.tsx b/aria/app/page.tsx
new file mode 100644
index 000000000..37cc95ed9
--- /dev/null
+++ b/aria/app/page.tsx
@@ -0,0 +1,47 @@
+import { buttonVariants } from "@/components/ui/button";
+import { page_routes } from "@/lib/routes-config";
+import { MoveUpRightIcon } from "lucide-react";
+import Link from "next/link";
+
+export default function Home() {
+ return (
+
+
+ Follow along on GitHub{" "}
+
+
+
+ Redefining Open Source with Monolithic and Decentralized
+
+
+ Mega is an unofficial open source implementation of Google Piper. It is a monorepo & monolithic codebase management system that supports Git. Mega is designed to manage large-scale codebases, streamline development, and foster collaboration.
+
+))
+TableCaption.displayName = "TableCaption"
+
+export {
+ Table,
+ TableHeader,
+ TableBody,
+ TableFooter,
+ TableHead,
+ TableRow,
+ TableCell,
+ TableCaption,
+}
diff --git a/aria/components/ui/tabs.tsx b/aria/components/ui/tabs.tsx
new file mode 100644
index 000000000..8e2a88497
--- /dev/null
+++ b/aria/components/ui/tabs.tsx
@@ -0,0 +1,55 @@
+"use client";
+
+import * as React from "react";
+import * as TabsPrimitive from "@radix-ui/react-tabs";
+
+import { cn } from "@/lib/utils";
+
+const Tabs = TabsPrimitive.Root;
+
+const TabsList = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+TabsList.displayName = TabsPrimitive.List.displayName;
+
+const TabsTrigger = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
+
+const TabsContent = React.forwardRef<
+ React.ElementRef,
+ React.ComponentPropsWithoutRef
+>(({ className, ...props }, ref) => (
+
+));
+TabsContent.displayName = TabsPrimitive.Content.displayName;
+
+export { Tabs, TabsList, TabsTrigger, TabsContent };
diff --git a/aria/contents/blogs/file-rec.mdx b/aria/contents/blogs/file-rec.mdx
new file mode 100644
index 000000000..239e90895
--- /dev/null
+++ b/aria/contents/blogs/file-rec.mdx
@@ -0,0 +1,170 @@
+---
+title: "Building a Recursive File System with React: A Deep Dive"
+description: "Explore how to create a recursive file system in React. This blog post provides a comprehensive guide on building a file system where folders and files can be nested, added, renamed, and deleted."
+date: 02-09-2024
+authors:
+ - avatar: "https://ui.shadcn.com/avatars/02.png"
+ handle: nisabmohd
+ username: Nisab Mohd
+ handleUrl: "https://github.com/nisabmohd"
+cover: "https://img.freepik.com/premium-vector/many-monsters-various-colors-doodle-come-bless-birthday-happy_577083-84.jpg?w=826"
+---
+
+## Introduction: Crafting a Recursive File System in React
+
+In modern web development, creating interactive and dynamic file systems is a common requirement. Whether for managing documents, organizing projects, or building complex data structures, having a robust file system is crucial. In this blog post, weβll explore how to build a recursive file system in React, focusing on nested folders and files that can be added, renamed, or deleted.
+
+Check out the project on [GitHub](https://github.com/nisabmohd/recursive-file-system-react) for a complete implementation.
+
+## Project Overview
+
+The Recursive File System project is designed to simulate a file management system where users can interact with folders and files dynamically. It supports the following features:
+
+- **Adding New Folders and Files**: Create new folders and files within any existing folder.
+- **Renaming Items**: Change the name of folders and files.
+- **Deleting Items**: Remove folders and files from the file system.
+- **Nested Structure**: Handle nested folders and files to create a hierarchical view.
+
+## Key Features and Implementation
+
+### 1. Recursive Data Structure
+
+The core of the project is a recursive data structure that represents the file system. Each folder can contain other folders or files, and each file or folder has properties such as `id`, `name`, and `children` (for folders).
+
+Hereβs a basic structure for a folder:
+
+```jsx
+const folder = {
+ id: "1",
+ name: "Documents",
+ type: "folder",
+ children: [
+ { id: "2", name: "Resume.pdf", type: "file" },
+ { id: "3", name: "CoverLetter.docx", type: "file" },
+ ],
+};
+```
+
+### 2. Components
+
+The project includes several key components to handle different aspects of the file system:
+
+- **FileExplorer**: Displays the entire file system and handles rendering folders and files.
+
+```jsx
+// src/components/FileExplorer.js
+import React, { useState } from "react";
+import Folder from "./Folder";
+import File from "./File";
+
+const FileExplorer = () => {
+ const [files, setFiles] = useState(initialData); // initialData is your recursive data structure
+
+ const addItem = (parentId, type) => {
+ // Logic to add a folder or file
+ };
+
+ const renameItem = (id, newName) => {
+ // Logic to rename a folder or file
+ };
+
+ const deleteItem = (id) => {
+ // Logic to delete a folder or file
+ };
+
+ return (
+
+ );
+};
+
+export default File;
+```
+
+### 3. Handling State and Actions
+
+State management is handled using React hooks like `useState` to manage the file system data. Actions such as adding, renaming, and deleting items update the state accordingly.
+
+```jsx
+const [files, setFiles] = useState(initialData);
+
+const addItem = (parentId, type) => {
+ // Logic to add a new item to the file system
+};
+
+const renameItem = (id, newName) => {
+ // Logic to rename an existing item
+};
+
+const deleteItem = (id) => {
+ // Logic to delete an item
+};
+```
+
+## Conclusion: Building a Dynamic File System with React
+
+Creating a recursive file system in React is a powerful way to manage hierarchical data and provide a dynamic user experience. By leveraging React's component-based architecture and state management, you can build interactive file systems that handle complex nested structures efficiently.
+
+Check out the full implementation on [GitHub](https://github.com/nisabmohd/recursive-file-system-react) and explore how these concepts can be applied to your own projects. Happy coding!
+
+ππ
diff --git a/aria/contents/blogs/next-react.mdx b/aria/contents/blogs/next-react.mdx
new file mode 100644
index 000000000..d8a0fd866
--- /dev/null
+++ b/aria/contents/blogs/next-react.mdx
@@ -0,0 +1,121 @@
+---
+title: "Using React Server Components and Server Actions in Next.js"
+description: "Explore how to leverage React Server Components and Server Actions in Next.js to build modern, efficient web applications. Learn how these features enhance performance and simplify server-side logic."
+date: 05-09-2024
+authors:
+ - avatar: "https://ui.shadcn.com/avatars/02.png"
+ handle: reactdev
+ username: React Dev
+ handleUrl: "https://github.com/reactdev"
+ - avatar: "https://ui.shadcn.com/avatars/01.png"
+ handle: nextjsguru
+ username: Next.js Guru
+ handleUrl: "https://github.com/nextjsguru"
+cover: "https://img.freepik.com/premium-vector/many-monsters-various-colors-doodle-come-bless-birthday-happy_577083-85.jpg?w=826"
+---
+
+## Introduction: Enhancing Next.js with React Server Components
+
+Next.js has evolved to include powerful features like React Server Components and Server Actions, which offer a new way to handle server-side rendering and logic. These features provide a more efficient and streamlined approach to building web applications, allowing you to fetch data and render components on the server without compromising performance.
+
+In this blog post, we'll explore how to use React Server Components and Server Actions in Next.js with practical examples and code snippets.
+
+## What Are React Server Components?
+
+React Server Components (RSC) are a new type of component introduced by React that allows you to render components on the server. This approach helps reduce the amount of JavaScript sent to the client and enhances performance by offloading rendering work to the server.
+
+### Benefits of React Server Components
+
+- **Improved Performance**: By rendering on the server, you reduce the amount of client-side JavaScript and improve load times.
+- **Enhanced User Experience**: Faster initial page loads and smoother interactions.
+- **Simplified Data Fetching**: Fetch data on the server and pass it directly to components.
+
+### Example: Creating a Server Component
+
+Hereβs a basic example of a React Server Component in a Next.js application:
+
+```jsx
+// app/components/UserProfile.server.js
+import { getUserData } from "../lib/api";
+
+export default async function UserProfile() {
+ const user = await getUserData();
+
+ return (
+
+
{user.name}
+
{user.email}
+
+ );
+}
+```
+
+In this example, `UserProfile` is a server component that fetches user data on the server and renders it.
+
+## What Are Server Actions?
+
+Server Actions are functions that run on the server in response to user interactions or other events. They allow you to handle server-side logic, such as form submissions or API requests, directly from your React components.
+
+### Benefits of Server Actions
+
+- **Simplified Server Logic**: Write server-side code directly in your components.
+- **Enhanced Security**: Handle sensitive operations on the server rather than the client.
+- **Improved Performance**: Reduce client-side JavaScript and offload tasks to the server.
+
+### Example: Using Server Actions
+
+Hereβs how you can use Server Actions in a Next.js application to handle form submissions:
+
+```jsx
+// app/actions/submitForm.js
+import { saveFormData } from "../lib/api";
+
+export async function submitForm(data) {
+ await saveFormData(data);
+ return { success: true };
+}
+```
+
+```jsx
+// app/components/ContactForm.js
+"use client";
+
+import { submitForm } from "../actions/submitForm";
+
+export default function ContactForm() {
+ const handleSubmit = async (event) => {
+ event.preventDefault();
+ const formData = new FormData(event.target);
+ const result = await submitForm(Object.fromEntries(formData));
+ if (result.success) {
+ alert("Form submitted successfully!");
+ }
+ };
+
+ return (
+
+ );
+}
+```
+
+In this example, `submitForm` is a server action that processes form data on the server, and `ContactForm` is a client component that uses this action to handle form submissions.
+
+## Conclusion: Leveraging Modern Features for Better Web Apps
+
+React Server Components and Server Actions in Next.js provide powerful tools for building efficient, modern web applications. By leveraging these features, you can improve performance, simplify server-side logic, and create a more responsive user experience.
+
+As you build your Next.js applications, consider incorporating React Server Components and Server Actions to take full advantage of the latest advancements in web development.
+
+Happy coding!
+
+πβ¨
diff --git a/aria/contents/docs/getting-started/components/code-block/index.mdx b/aria/contents/docs/getting-started/components/code-block/index.mdx
new file mode 100644
index 000000000..8b55b8533
--- /dev/null
+++ b/aria/contents/docs/getting-started/components/code-block/index.mdx
@@ -0,0 +1,41 @@
+---
+title: Code Block
+description: This section previews the Code Block features in markdown.
+---
+
+The Code Block in this documentation allows you to display code snippets with optional line numbering and line highlighting.
+
+## Preview
+
+```javascript:main.js showLineNumbers {3-4}
+function isRocketAboutToCrash() {
+ // Check if the rocket is stable
+ if (!isStable()) {
+ NoCrash(); // Prevent the crash
+ }
+}
+```
+
+In this example, line numbers are displayed for lines 1 to 4. You can specify which lines to highlight using the format `{2,3-5}`.
+
+## Usage
+
+You can directly use the following syntax to create a code block with line numbers and highlight specific lines:
+
+````plaintext
+```javascript:main.js showLineNumbers {3-4}
+function isRocketAboutToCrash() {
+ // Check if the rocket is stable
+ if (!isStable()) {
+ NoCrash(); // Prevent the crash
+ }
+}
+```
+````
+
+### Features
+
+- **Line Numbers**: Enable line numbers by adding `showLineNumbers` after the opening backticks.
+- **Highlight Lines**: Specify lines to highlight using curly braces (e.g., `{2,3-5}`).
+- **Syntax Highlighting**: Use the appropriate language for syntax highlighting.
+
diff --git a/aria/contents/docs/getting-started/components/custom/index.mdx b/aria/contents/docs/getting-started/components/custom/index.mdx
new file mode 100644
index 000000000..aedb25203
--- /dev/null
+++ b/aria/contents/docs/getting-started/components/custom/index.mdx
@@ -0,0 +1,38 @@
+---
+title: Custom Components
+description: How to create custom components for Markdown.
+---
+
+To add custom components in AriaDocs, follow these steps:
+
+1. **Create Your Component**: First, create your custom component in the `@components/markdown` folder. For example, you might create a file named `Outlet.tsx`.
+
+2. **Import Your Component**: Next, open the `@lib/markdown.ts` file. This is where you'll register your custom component for use in Markdown.
+
+3. **Add Your Component to the Components Object**: In the `@lib/markdown.ts` file, import your custom component and add it to the `components` object. Hereβs how to do it:
+
+```ts
+import Outlet from "@/components/markdown/outlet";
+
+// Add custom components
+const components = {
+ Outlet,
+};
+```
+
+4. **Using Your Custom Component in Markdown**: After registering your component, you can now use it anywhere in your Markdown content. For instance, if your `Outlet` component is designed to display additional information, you can use it as follows:
+
+### Markdown Example
+
+```markdown
+
+ This is some custom content rendered by the Outlet component!
+
+```
+
+### Rendered Output
+
+This will render the content inside the `Outlet` component, allowing you to create reusable and dynamic Markdown content.
+
+
+By following these steps, you can extend the capabilities of your Markdown documentation and create a more engaging user experience.
diff --git a/aria/contents/docs/getting-started/components/image-link/index.mdx b/aria/contents/docs/getting-started/components/image-link/index.mdx
new file mode 100644
index 000000000..c95de605a
--- /dev/null
+++ b/aria/contents/docs/getting-started/components/image-link/index.mdx
@@ -0,0 +1,57 @@
+---
+title: Image and Link
+description: This section provides an overview of how AriaDocs handles links and images in Markdown.
+---
+
+In AriaDocs, all links and images written in Markdown are automatically converted to their respective Next.js components. This allows for better optimization and performance in your application.
+
+## Links
+
+When you create a link in your Markdown, it is converted to the Next.js `Link` component. This enables client-side navigation and improves loading times. Hereβs an example of how a Markdown link is transformed:
+
+### Markdown example
+
+```markdown
+[Visit OpenAI](https://www.openai.com)
+```
+
+### Rendered Output
+
+The above Markdown is converted to:
+
+```jsx
+
+ Visit OpenAI
+
+```
+
+## Images
+
+Similarly, images in Markdown are transformed into the Next.js `Image` component. This allows for automatic image optimization, such as lazy loading and resizing, which enhances performance and user experience. Hereβs an example:
+
+### Markdown
+
+```markdown
+
+```
+
+### Output
+
+The above Markdown is converted to:
+
+```jsx
+
+```
+
+## Benefits
+
+- **Performance Optimization**: Automatic conversion to Next.js components ensures optimized loading of images and links.
+- **Improved User Experience**: Client-side navigation with Next.js `Link` improves the browsing experience.
+- **Responsive Images**: Next.js `Image` component handles responsive images, providing the best quality for various device sizes.
+
+By utilizing these features, you can ensure that your documentation is not only visually appealing but also performs efficiently.
diff --git a/aria/contents/docs/getting-started/components/index.mdx b/aria/contents/docs/getting-started/components/index.mdx
new file mode 100644
index 000000000..12a9ff634
--- /dev/null
+++ b/aria/contents/docs/getting-started/components/index.mdx
@@ -0,0 +1,9 @@
+---
+title: Components
+description: This section provides an overview of the custom components available in AriaDocs.
+---
+
+Explore the custom components we've defined for easy integration and development within your projects. Each component is designed to enhance your workflow and streamline your development process.
+
+
+
\ No newline at end of file
diff --git a/aria/contents/docs/getting-started/components/note/index.mdx b/aria/contents/docs/getting-started/components/note/index.mdx
new file mode 100644
index 000000000..a7c740023
--- /dev/null
+++ b/aria/contents/docs/getting-started/components/note/index.mdx
@@ -0,0 +1,44 @@
+---
+title: Note
+description: This section previews the Note component.
+---
+
+The `Note` component allows you to display different types of messages such as general notes, warnings, or success notifications. Each type is styled accordingly, providing a clear visual cue to the user.
+
+## Preview
+
+
+ This is a general note to convey information to the user.
+
+
+ This is a danger alert to notify the user of a critical issue.
+
+
+ This is a warning alert for issues that require attention.
+
+
+ This is a success message to inform the user of successful actions.
+
+
+## Props
+
+| Prop | Type | Default | Description |
+|---------|--------------------------------|---------|--------------------------------------------|
+| `title` | `string` | "Note" | Sets the title of the note. |
+| `type` | `"note"`, `"danger"`, `"warning"`, `"success"` | "note" | Determines the visual style of the note. |
+
+## Code
+
+```jsx
+
+ This is a general note to convey information to the user.
+
+
+ This is a danger alert to notify the user of a critical issue.
+
+
+ This is a warning alert for issues that require attention.
+
+
+ This is a success message to inform the user of successful actions.
+
diff --git a/aria/contents/docs/getting-started/components/stepper/index.mdx b/aria/contents/docs/getting-started/components/stepper/index.mdx
new file mode 100644
index 000000000..55a056f6a
--- /dev/null
+++ b/aria/contents/docs/getting-started/components/stepper/index.mdx
@@ -0,0 +1,38 @@
+---
+title: Stepper
+description: This section previews the stepper component.
+---
+
+In this guide, we utilize a custom `Stepper` component, specifically designed for AriaDocs, which enables users to display step-by-step instructions directly within the markdown render.
+
+## Preview
+##
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec interdum, felis sed efficitur tincidunt, justo nulla viverra enim, et maximus nunc dolor in lorem.
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin non neque ut eros auctor accumsan. Mauris a nisl vitae magna ultricies aliquam.
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ut ipsum nec nulla ultricies porttitor et non justo.
+
+
+
+## Code
+
+```jsx
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec interdum, felis sed efficitur tincidunt, justo nulla viverra enim, et maximus nunc dolor in lorem.
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin non neque ut eros auctor accumsan. Mauris a nisl vitae magna ultricies aliquam.
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque ut ipsum nec nulla ultricies porttitor et non justo.
+
+
+```
+
diff --git a/aria/contents/docs/getting-started/components/tabs/index.mdx b/aria/contents/docs/getting-started/components/tabs/index.mdx
new file mode 100644
index 000000000..3dc080dc3
--- /dev/null
+++ b/aria/contents/docs/getting-started/components/tabs/index.mdx
@@ -0,0 +1,68 @@
+---
+title: Tabs
+description: This section previews the Tabs component.
+---
+
+The `Tabs` component allows you to organize content into multiple sections, enabling users to switch between them easily. This is particularly useful for displaying related content in a compact manner.
+
+## Preview
+
+
+
+ Java
+ TypeScript
+
+
+ ```java
+ // HelloWorld.java
+ public class HelloWorld {
+ public static void main(String[] args) {
+ System.out.println("Hello, World!");
+ }
+ }
+ ```
+
+
+ ```typescript
+ // helloWorld.ts
+ function helloWorld(): void {
+ console.log("Hello, World!");
+ }
+ helloWorld();
+ ```
+
+
+
+## Props
+
+| Prop | Type | Default | Description |
+|-------------|--------|-------------|--------------------------------------------------|
+| `defaultValue` | `string` | `null` | The value of the tab that is selected by default. |
+| `className` | `string` | `""` | Additional CSS classes for styling the Tabs component. |
+
+## Code
+
+```jsx
+
+
+ Java
+ TypeScript
+
+
+ ```java
+ // HelloWorld.java
+ public class HelloWorld {
+ public static void main(String[] args) {
+ System.out.println("Hello, World!");
+ }
+ }
+ ```
+
+ ```typescript
+ // helloWorld.ts
+ function helloWorld(): void {
+ console.log("Hello, World!");
+ }
+ helloWorld();
+ ```
+
diff --git a/aria/contents/docs/getting-started/customize/index.mdx b/aria/contents/docs/getting-started/customize/index.mdx
new file mode 100644
index 000000000..b43dbba8b
--- /dev/null
+++ b/aria/contents/docs/getting-started/customize/index.mdx
@@ -0,0 +1,93 @@
+---
+title: Customize
+description: This guide provides instructions on customizing our application.
+---
+
+## Markdown Options
+
+To customize Markdown parsing, navigate to `@lib/markdown.ts` and locate the `parseMdx` function. You can add your desired plugins in the `mdxOptions`. Hereβs an example:
+
+```ts:lib/markdown.ts
+async function parseMdx(rawMdx: string) {
+ return await compileMDX({
+ source: rawMdx,
+ options: {
+ parseFrontmatter: true,
+ mdxOptions: {
+ // Add your plugins here
+ rehypePlugins: [Shiki],
+ remarkPlugins: [remarkGfm],
+ },
+ },
+ components,
+ });
+}
+```
+
+## Fonts
+
+Currently, this project uses the `Space_Grotesk` font. If you want to use other fonts, you can change the configuration in the main layout as shown below:
+
+### Google Fonts
+
+To use a Google font, import your desired font from `next/font/google`, initialize it with options, and apply the variable to the `body`:
+
+```tsx:app/layout.tsx
+import { Space_Grotesk } from "next/font/google";
+
+const fontSans = Space_Grotesk({
+ display: "swap",
+ variable: "--font-regular",
+ weight: "400",
+ subsets: ["latin"],
+});
+
+export default function RootLayout({ children }) {
+ return (
+
+
+ {children}
+
+
+ );
+}
+```
+
+### Local Fonts
+
+To use a local font, you need to use the local font loader from Next.js. Pass the options and apply them to the `body`:
+
+```tsx:app/layout.tsx
+import localFont from "next/font/local";
+
+const geistSans = localFont({
+ src: "./fonts/GeistVF.woff",
+ variable: "--font-regular",
+ weight: "100 900",
+});
+
+export default function RootLayout({ children }) {
+ return (
+
+
+ {children}
+
+
+ );
+}
+```
+
+For both options, ensure that you add the variable to `tailwind.config.ts`:
+
+```ts:tailwind.config.ts
+{
+ // ...
+ extend: {
+ fontFamily: {
+ regular: ["var(--font-regular)"],
+ },
+ }
+}
+```
+
+For theme and colors, refer to the [Theme section](/docs/getting-started/themes)
diff --git a/aria/contents/docs/getting-started/installation/index.mdx b/aria/contents/docs/getting-started/installation/index.mdx
new file mode 100644
index 000000000..37c83b098
--- /dev/null
+++ b/aria/contents/docs/getting-started/installation/index.mdx
@@ -0,0 +1,72 @@
+---
+title: Installation
+description: Installation guide for our application.
+---
+
+Setting up AriaDocs is straightforward, with options to clone the repository or use the convenient `npx` command. AriaDocs requires [Node.js](https://nodejs.org/) version 18 or higher for optimal performance.
+
+## Clone Repository
+To get started, you can clone the AriaDocs repository directly from GitHub.
+
+
+ Begin by cloning the AriaDocs repository from GitHub:
+
+ ```plaintext
+ git clone https://github.com/nisabmohd/Aria-Docs.git
+ ```
+
+
+
+ After cloning, navigate into the project directory to start setting up:
+
+ ```plaintext
+ cd Aria-Docs
+ ```
+
+
+
+ Install all necessary project dependencies with npm:
+
+
+ To support React 19, package maintainers will need to test and update their packages to include React 19 as a peer dependency. This is already in progress.
+
+
+ ```plaintext
+ npm install
+ ```
+
+
+
+ Finally, start the development server to view the project locally:
+
+ ```plaintext
+ npm run dev
+ ```
+
+
+
+## Quick Setup with npx
+
+For a faster setup, use the `npx` command to create a new AriaDocs project in one step:
+
+```plaintext
+npx create-aria-doc
+```
+
+**Command Output:**
+
+```plaintext
+Creating a new AriaDocs project in /path/to/your/project from the master branch...
+Cloning Master (Full Documentation)...
+AriaDocs project successfully created in /path/to/your/project!
+
+Next steps:
+1. Navigate to your project directory:
+ cd
+2. Install dependencies:
+ npm install
+3. Start the development server:
+ npm run dev
+```
+
+With this setup, youβll have a ready-to-use AriaDocs instance to start building your documentation.
\ No newline at end of file
diff --git a/aria/contents/docs/getting-started/introduction/index.mdx b/aria/contents/docs/getting-started/introduction/index.mdx
new file mode 100644
index 000000000..07e9b1a3c
--- /dev/null
+++ b/aria/contents/docs/getting-started/introduction/index.mdx
@@ -0,0 +1,58 @@
+---
+title: Introduction
+description: This section provides an overview of AriaDocs.
+---
+
+Welcome to **AriaDocs**! This template provides a modern, flexible, and user-friendly foundation for creating engaging documentation. Whether you're building a knowledge base, project docs, or a personal blog, AriaDocs makes it easy to set up and scale.
+
+
+## Open Source Philosophy
+
+AriaDocs is proudly **open-source**! π We believe in creating an accessible, collaborative platform that thrives on community contributions.
+
+
+ Interested in helping us improve? Check out our [GitHub repository](https://github.com/your-repo) to get started! From feature suggestions to bug fixes, all contributions are welcome.
+
+
+## Project Overview
+
+**AriaDocs** is more than just a documentation template. It's a **complete toolkit** designed for modern web development. Key features include:
+
+- **Markdown & MDX Support:** Easily write documentation in Markdown, with the option to include interactive components via MDX.
+- **Customizable Themes:** Designed with a minimalist ShadCN-inspired theme thatβs easy to style.
+- **SEO-Optimized:** Each page is SEO-ready, ensuring search engines can find and rank your content.
+- **Interactive Code Blocks:** Beautifully styled, language-specific code blocks for an enhanced reading experience.
+
+### Key Features
+
+| **Feature** | **Description** |
+|-------------------------------|----------------------------------------------------------|
+| MDX Support | Write interactive documentation with MDX. |
+| Nested Pages | Organize content in a nested, hierarchical structure. |
+| Blog Section | Include a dedicated blog section. |
+| Pagination | Split content across multiple pages. |
+| Syntax Highlighting | Highlight code for better readability. |
+| Code Line Highlighting & Titles | Highlight specific lines with descriptive titles. |
+| Interactive Code Blocks | Language-specific and interactive code display. |
+| Custom Markdown Components | Embed custom, reusable components in your docs. |
+| Static Site Generation | Generate a static, high-performance site. |
+| SEO-Optimized | Structured for optimal search engine indexing. |
+
+
+## Technology & Libraries
+
+AriaDocs leverages cutting-edge technologies to ensure performance and flexibility:
+
+- **Next.js 14** - The powerful React framework optimized for production.
+- **Tailwind CSS** - Utility-first styling for quick, clean designs.
+- **Shadcn-UI** - Elegant, accessible components for a polished look.
+- **next-mdx-remote** - Enables MDX support for dynamic, interactive Markdown content.
+
+
+## Deploy on Vercel
+
+The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
+
+Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.
+
+You can deploy your project by clicking [Deploy with Vercel](https://vercel.com/new/clone?repository-url=https://github.com/nisabmohd/Aria-Docs)
diff --git a/aria/contents/docs/getting-started/project-structure/index.mdx b/aria/contents/docs/getting-started/project-structure/index.mdx
new file mode 100644
index 000000000..ba5099d3e
--- /dev/null
+++ b/aria/contents/docs/getting-started/project-structure/index.mdx
@@ -0,0 +1,95 @@
+---
+title: Project Structure
+description: This section provides an overview of Project Structure.
+---
+
+## Project Structure Overview
+
+### app
+
+This folder contains the main application code for Next.js, managing layouts, routing, and specific content pages. It is organized to support both the `docs` and `blog` sections, with dedicated pages and layouts for each section.
+
+```
+app // Main Next.js application folder
+βββ page.tsx // Hero page - the entry point of the app showcasing key content
+βββ layout.tsx // Main layout file, applies global navigation and footer
+βββ blog
+β βββ page.tsx // Blog list page, displaying all blog posts with titles, dates, and excerpts
+β βββ [slug]
+β βββ page.tsx // Dynamic blog post page for viewing individual posts with rich content
+βββ docs
+ βββ layout.tsx // Documentation layout with sidebar, providing easy navigation across doc pages
+ βββ [[...slug]] // Catch-all route to handle nested documentation pages, allowing flexible doc structure
+```
+
+### components
+
+This folder contains all reusable components used throughout the project. Itβs structured to categorize components, making it easy to locate and manage UI elements, Markdown customizations, and navigation.
+
+```
+components // Reusable components
+βββ ui // ShadCN components, includes standardized UI elements like buttons, forms, and modals
+βββ markdown // Custom Markdown components for rendering rich Markdown content
+β βββ CodeBlock.tsx // Component for rendering syntax-highlighted code blocks
+β βββ Image.tsx // Component for handling responsive images in Markdown
+β βββ Table.tsx // Component to render tables with consistent styling
+βββ navbar.tsx // Main navigation component for the site header, managing links and responsive behavior
+```
+
+### styles
+
+This folder contains global and component-specific CSS files, allowing for project-wide styling consistency and customizations.
+
+```
+styles // CSS files
+βββ globals.css // Global CSS file, includes Tailwind base, utilities, and custom global styles
+βββ syntax.css // Syntax highlighting styles, providing consistent code block appearance across the site
+βββ overrides.css // Additional custom styles that override specific component or plugin defaults
+```
+
+### contents
+
+This folder stores all Markdown content for the documentation and blog sections, with clear organization by content type. Each Markdown file represents a single piece of content, with frontmatter used for metadata.
+
+```
+contents // Markdown content for blogs and documentation
+βββ docs // Documentation content, structured to support nested sections and pages
+β βββ getting-started.md // Introductory guide for new users
+β βββ api-reference.md // API documentation with detailed endpoint descriptions
+β βββ tutorials // Subfolder for tutorial-style content
+β βββ tutorial-1.md // Step-by-step tutorial on a specific topic
+βββ blogs // Blog content, organized by post
+ βββ intro-to-project.md // Blog post introducing the project and its goals
+ βββ dev-updates.md // Post discussing recent development updates and new features
+```
+
+### public
+
+This folder holds all static assets, such as images, videos, fonts, and icons. These files are directly accessible via URL, so itβs important to avoid sensitive or private content here.
+
+```
+public // Publicly accessible assets
+βββ images // Image assets, used across various parts of the app
+β βββ logo.png // Project logo for branding
+β βββ banner.jpg // Banner image for the hero section
+βββ icons // SVG icons for the app
+βββ videos // Video files for media content, if any
+```
+
+### lib
+
+This folder contains helper functions and utilities used across the application, such as Markdown parsing and routing logic. These utilities help keep the codebase clean and organized by separating out common functionality.
+
+```
+lib // Utility or helper functions
+βββ markdown.ts // Markdown parsing logic, converts Markdown to HTML and adds custom components
+βββ routes-config.ts // Routing configuration for docs, maps URLs to content files for dynamic routing
+βββ utils.tsx // General utility functions used across the app, such as data formatting and validation helpers
+```
+
+### Additional
+
+- **`package.json`**: Contains metadata about the project, dependencies, and scripts for building and running the application.
+- **`tailwind.config.ts`**: Configures Tailwind CSS, allowing customization of theme colors, fonts, and responsive breakpoints specific to this project.
+
+This structure organizes your project in a way that supports scalability and maintainability, making it easier to navigate and work on different sections of the application.
\ No newline at end of file
diff --git a/aria/contents/docs/getting-started/quick-start-guide/index.mdx b/aria/contents/docs/getting-started/quick-start-guide/index.mdx
new file mode 100644
index 000000000..5fd835e1f
--- /dev/null
+++ b/aria/contents/docs/getting-started/quick-start-guide/index.mdx
@@ -0,0 +1,80 @@
+---
+title: Quick Start Guide
+description: This section provides an overview of Quick Start Guide.
+---
+
+Follow these simple instructions to set up your project efficiently and begin creating content without delay!:
+
+## Documentation
+
+1. **Configure Routing**
+ - Open the `@lib/route-config.ts` file and add your routing pages:
+ ```typescript
+ export const ROUTES: EachRoute[] = [
+ // Add new route below
+ {
+ title: "Fundamentals",
+ href: "/fundamentals",
+ noLink: true, // Set to true to prevent routing
+ items: [
+ // All the sub-sections under `fundamentals`
+ { title: "HTTP Server", href: "/http-server" },
+ ],
+ },
+ ];
+ ```
+
+2. **Create Content Structure**
+ - Navigate to the `@content/docs` directory and create a folder named `fundamentals`, as defined in the `route-config` file. Within this folder, create a subfolder named `http-server`, and inside that, create an `index.mdx` file that will render when you navigate to `/fundamentals/http-server`:
+ ```plaintext
+ root
+ βββ content/docs
+ β βββ fundamentals
+ β βββ http-server
+ β βββ index.mdx
+ ```
+
+3. **Write Your Markdown Content**
+ - Start writing your markdown content inside the `index.mdx` file. Be sure to include frontmatter at the beginning of the file, which is used for the page title and description:
+ ```markdown showLineNumbers {1-4}
+ ---
+ title: HTTP Server
+ description: This section is about HTTP Server.
+ ---
+
+
+ ```
+
+4. **Run Your Application**
+ - Ensure your application is running. Navigate to `http://localhost:3000/docs/fundamentals/http-server` to view your content. You should also see it in the left panel, allowing you to navigate to other pages.
+
+
+## Blogs
+
+To get started with blogs, follow these steps:
+
+- Navigate to the `@content/blogs` directory and create a file with a unique name prefixed with `.mdx`, then start writing the markdown content inside.
+
+- Make sure to add the following frontmatter to format data for the blogs properly:
+ ```markdown
+ ---
+ title: "Building a Recursive File System with React: A Deep Dive"
+ description: "Explore how to create a recursive file system in React. This blog post provides a comprehensive guide on building a file system where folders and files can be nested, added, renamed, and deleted."
+ date: 02-09-2024
+ authors:
+ - avatar: "https://ui.shadcn.com/avatars/02.png"
+ handle: nisabmohd
+ username: Nisab Mohd
+ handleUrl: "https://github.com/nisabmohd"
+ cover: "https://img.freepik.com/premium-vector/many-monsters-various-colors-doodle-come-bless-birthday-happy_577083-84.jpg?w=826"
+ ---
+
+ ```
+
+- Navigate to your local development server at `http://localhost:3000/blog`, where you will see your blog listed and sorted based on date. You can navigate to any blog to read it.
+
+
+## Explore Further
+
+This section serves as your starting point for exploring the application. By following the steps above, you can quickly and easily set up your content. For more customization and control, please refer to the following pages.
+
diff --git a/aria/contents/docs/getting-started/themes/index.mdx b/aria/contents/docs/getting-started/themes/index.mdx
new file mode 100644
index 000000000..6e33be3c1
--- /dev/null
+++ b/aria/contents/docs/getting-started/themes/index.mdx
@@ -0,0 +1,485 @@
+---
+title: Themes
+description: This section provides an overview of Themes.
+---
+
+> Customize the theme colors in your project to create a cohesive and visually appealing interface. Each theme comes with a unique color palette that's easy to adjust.
+
+## Customize
+
+You have the flexibility to change the theme of this documentation by modifying the Tailwind CSS variables in `@styles/globals.css` and adjusting the syntax highlighting colors in `@styles/syntax.css`.
+
+If youβd like to use the predefined Nebula, Halloween, or Ocean themes, simply copy and paste the provided code into the respective files. Once added, you'll immediately see the visual changes reflected in your documentation, enhancing its overall look and feel.
+
+### Nebula Theme
+
+The Nebula theme provides a vibrant color palette, making your application visually appealing and engaging.
+The theme is inspired by the cosmos, featuring vibrant colors that enhance the reading experience.
+
+
+
+ globals.css
+ syntax.css
+
+
+ ```css
+ /* nebula */
+ @layer base {
+ :root {
+ --background: 152 9% 98%; /* Soft white with a hint of green */
+ --foreground: 160 10% 10%; /* Dark forest green */
+ --card: 0 0% 100%; /* Pure white for a clean look */
+ --card-foreground: 160 10% 10%;
+ --popover: 0 0% 100%;
+ --popover-foreground: 160 10% 10%;
+ --primary: 158 85% 40%; /* Vibrant Supabase green */
+ --primary-foreground: 0 0% 100%; /* Pure white for contrast */
+ --secondary: 152 14% 90%; /* Light mint green */
+ --secondary-foreground: 160 10% 10%;
+ --muted: 152 14% 90%;
+ --muted-foreground: 160 10% 40%; /* Muted olive green */
+ --accent: 158 85% 40%; /* Same green as primary */
+ --accent-foreground: 0 0% 100%;
+ --destructive: 0 65% 55%; /* Light red for warnings */
+ --destructive-foreground: 0 0% 100%;
+ --border: 160 10% 85%; /* Light grey-green border */
+ --input: 160 10% 85%;
+ --ring: 158 85% 50%; /* Slightly lighter green ring */
+ --radius: 0.5rem;
+ --chart-1: 158 85% 40%; /* Green for primary chart */
+ --chart-2: 160 20% 45%; /* Subdued green for charts */
+ --chart-3: 160 10% 30%; /* Darker forest green */
+ --chart-4: 154 60% 50%; /* Light pastel green */
+ --chart-5: 160 10% 85%; /* Very light green for background */
+ }
+
+ .dark {
+ --background: 160 10% 5%; /* Very dark greenish-grey */
+ --foreground: 0 0% 100%; /* Bright white */
+ --card: 160 10% 8%; /* Slightly lighter dark green */
+ --card-foreground: 0 0% 100%;
+ --popover: 160 10% 8%;
+ --popover-foreground: 0 0% 100%;
+ --primary: 158 85% 50%; /* Bright green for dark mode */
+ --primary-foreground: 0 0% 100%;
+ --secondary: 160 10% 15%; /* Dark muted green */
+ --secondary-foreground: 0 0% 100%;
+ --muted: 160 10% 15%;
+ --muted-foreground: 160 10% 75%; /* Light grey-green */
+ --accent: 158 85% 50%; /* Bright green accent */
+ --accent-foreground: 0 0% 100%;
+ --destructive: 0 65% 50%; /* Soft red for alerts */
+ --destructive-foreground: 0 0% 100%;
+ --border: 160 10% 15%; /* Dark green border */
+ --input: 160 10% 15%;
+ --ring: 158 85% 60%; /* Vibrant green ring */
+ --chart-1: 158 85% 50%; /* Main green for charts */
+ --chart-2: 160 20% 45%; /* Subdued green for contrast */
+ --chart-3: 160 10% 30%; /* Deep forest green */
+ --chart-4: 154 60% 50%; /* Light green accent */
+ --chart-5: 160 10% 85%; /* Soft background green */
+ }
+ }
+ ```
+
+
+ ```css
+ /* nebula */
+ /* Light Mode */
+ .keyword {
+ color: #15803d;
+ /* Dark Green */
+ }
+
+ .function {
+ color: #0ea5e9;
+ /* Sky Blue */
+ }
+
+ .punctuation {
+ color: #64748b;
+ /* Slate Gray */
+ }
+
+ .comment {
+ color: #94a3b8;
+ /* Muted Slate Gray */
+ }
+
+ .string,
+ .constant,
+ .annotation,
+ .boolean,
+ .number {
+ color: #16a34a;
+ /* Medium Green */
+ }
+
+ .tag {
+ color: #15803d;
+ /* Dark Green */
+ }
+
+ .attr-name {
+ color: #0d9488;
+ /* Teal */
+ }
+
+ .attr-value {
+ color: #059669;
+ /* Emerald Green */
+ }
+
+ /* Dark Mode */
+ .dark .keyword {
+ color: #86efac;
+ /* Light Green */
+ }
+
+ .dark .function {
+ color: #38bdf8;
+ /* Sky Blue */
+ }
+
+ .dark .string,
+ .dark .constant,
+ .dark .annotation,
+ .dark .boolean,
+ .dark .number {
+ color: #4ade80;
+ /* Soft Lime Green */
+ }
+
+ .dark .tag {
+ color: #86efac;
+ /* Light Green */
+ }
+
+ .dark .attr-name {
+ color: #34d399;
+ /* Teal */
+ }
+
+ .dark .attr-value {
+ color: #6ee7b7;
+ /* Light Emerald */
+ }
+ ```
+
+
+
+### Halloween Theme
+
+The Halloween theme infuses your documentation with a spooky, festive atmosphere, ideal for seasonal content. Its design is inspired by Halloween motifs, featuring eerie colors and playful elements that enhance the overall reading experience.
+
+
+
+ globals.css
+ syntax.css
+
+
+ ```css
+ /* halloween */
+ @layer base {
+ :root {
+ --background: 30 15% 10%; /* Darker pumpkin shade */
+ --foreground: 50 40% 95%; /* Ghostly white */
+ --card: 30 15% 12%; /* Slightly darker pumpkin */
+ --card-foreground: 50 40% 95%;
+ --popover: 30 15% 12%;
+ --popover-foreground: 50 40% 95%;
+ --primary: 35 78% 50%; /* Pumpkin orange */
+ --primary-foreground: 60 9.1% 97.8%; /* Soft ghostly white */
+ --secondary: 290 12% 16%; /* Witchy purple */
+ --secondary-foreground: 35 78% 50%;
+ --muted: 290 12% 16%;
+ --muted-foreground: 50 20% 85%; /* Pale grey */
+ --accent: 43 100% 50%; /* Bright pumpkin */
+ --accent-foreground: 0 0% 100%; /* Pure white */
+ --destructive: 0 84.2% 45%; /* Blood red */
+ --destructive-foreground: 60 9.1% 97.8%;
+ --border: 290 20% 10%; /* Dark witchy purple */
+ --input: 290 20% 10%;
+ --ring: 35 78% 50%; /* Glowing pumpkin ring */
+ --radius: 0.5rem;
+ --chart-1: 35 78% 50%; /* Pumpkin orange */
+ --chart-2: 50 40% 95%; /* Ghostly white */
+ --chart-3: 0 84.2% 45%; /* Blood red */
+ --chart-4: 43 100% 50%; /* Bright pumpkin */
+ --chart-5: 210 70% 30%; /* Shadowy blue */
+ }
+
+ .dark {
+ --background: 240 3% 7%; /* Deep shadowy black */
+ --foreground: 43 100% 90%; /* Ghostly white */
+ --card: 240 3% 9%; /* Dark shadow */
+ --card-foreground: 43 100% 90%;
+ --popover: 240 3% 9%;
+ --popover-foreground: 43 100% 90%;
+ --primary: 35 78% 50%; /* Pumpkin orange */
+ --primary-foreground: 240 3% 7%; /* Shadowy black */
+ --secondary: 260 25% 15%; /* Dark witchy purple */
+ --secondary-foreground: 35 78% 50%;
+ --muted: 260 25% 15%;
+ --muted-foreground: 60 5% 65%; /* Pale grey */
+ --accent: 43 100% 50%; /* Bright pumpkin */
+ --accent-foreground: 0 0% 100%; /* Pure white */
+ --destructive: 0 84.2% 45%; /* Blood red */
+ --destructive-foreground: 43 100% 90%;
+ --border: 260 25% 15%; /* Dark witchy purple */
+ --input: 260 25% 15%;
+ --ring: 35 78% 50%; /* Glowing pumpkin ring */
+ --chart-1: 35 78% 50%; /* Pumpkin orange */
+ --chart-2: 43 100% 90%; /* Ghostly white */
+ --chart-3: 0 84.2% 45%; /* Blood red */
+ --chart-4: 43 100% 50%; /* Bright pumpkin */
+ --chart-5: 210 70% 30%; /* Shadowy blue */
+ }
+ }
+ ```
+
+
+ ```css
+ /* halloween */
+ /* Light Mode */
+ .keyword {
+ color: #d97706;
+ /* Pumpkin Orange */
+ }
+
+ .function {
+ color: #9333ea;
+ /* Mystic Purple */
+ }
+
+ .punctuation {
+ color: #4b5563;
+ /* Dark Gray */
+ }
+
+ .comment {
+ color: #6b7280;
+ /* Muted Gray */
+ }
+
+ .string,
+ .constant,
+ .annotation,
+ .boolean,
+ .number {
+ color: #f59e0b;
+ /* Witchβs Brew Amber */
+ }
+
+ .tag {
+ color: #c026d3;
+ /* Magenta Potion */
+ }
+
+ .attr-name {
+ color: #16a34a;
+ /* Poison Green */
+ }
+
+ .attr-value {
+ color: #db2777;
+ /* Pink Potion */
+ }
+
+ /* Dark Mode */
+ .dark .keyword {
+ color: #fbbf24;
+ /* Candlelight Yellow */
+ }
+
+ .dark .function {
+ color: #e879f9;
+ /* Enchanted Magenta */
+ }
+
+ .dark .string,
+ .dark .constant,
+ .dark .annotation,
+ .dark .boolean,
+ .dark .number {
+ color: #f59e0b;
+ /* Glowing Amber */
+ }
+
+ .dark .tag {
+ color: #f472b6;
+ /* Haunted Pink */
+ }
+
+ .dark .attr-name {
+ color: #a3e635;
+ /* Toxic Green */
+ }
+
+ .dark .attr-value {
+ color: #fb7185;
+ /* Blood Moon Pink */
+ }
+ ```
+
+
+
+
+
+### Ocean Theme
+
+The Ocean theme presents soothing colors drawn from the depths of the sea, fostering a tranquil reading environment. Its design evokes a sense of calm, enhancing the overall experience for users.
+
+
+
+ globals.css
+ syntax.css
+
+
+ ```css
+ /* ocean */
+ @layer base {
+ :root {
+ --background: 210 50% 95%; /* Soft light blue */
+ --foreground: 220 20% 15%; /* Deep navy */
+ --card: 210 40% 98%; /* Almost white blue */
+ --card-foreground: 220 20% 15%;
+ --popover: 210 40% 98%;
+ --popover-foreground: 220 20% 15%;
+ --primary: 220 80% 60%; /* Vibrant azure blue */
+ --primary-foreground: 210 50% 95%;
+ --secondary: 220 30% 85%; /* Light sky blue */
+ --secondary-foreground: 220 20% 15%;
+ --muted: 220 30% 85%;
+ --muted-foreground: 220 20% 40%; /* Soft steel blue */
+ --accent: 200 70% 40%; /* Strong ocean blue */
+ --accent-foreground: 0 0% 100%; /* Pure white */
+ --destructive: 0 65% 55%; /* Soft red */
+ --destructive-foreground: 220 20% 95%; /* Lightened foreground */
+ --border: 220 15% 90%; /* Light grey-blue */
+ --input: 220 15% 90%;
+ --ring: 220 40% 50%; /* Cool blue ring */
+ --radius: 0.5rem;
+ --chart-1: 210 60% 50%; /* Classic blue */
+ --chart-2: 220 40% 65%; /* Soft sky */
+ --chart-3: 220 70% 50%; /* Azure blue */
+ --chart-4: 200 60% 55%; /* Ocean blue */
+ --chart-5: 240 30% 40%; /* Deep teal */
+ }
+
+ .dark {
+ --background: 220 20% 10%; /* Midnight navy */
+ --foreground: 220 80% 90%; /* Soft sky blue */
+ --card: 220 20% 12%; /* Slightly lighter midnight */
+ --card-foreground: 220 80% 90%;
+ --popover: 220 20% 12%;
+ --popover-foreground: 220 80% 90%;
+ --primary: 210 70% 60%; /* Soft bright blue */
+ --primary-foreground: 220 20% 10%;
+ --secondary: 220 30% 15%; /* Dark steel blue */
+ --secondary-foreground: 220 80% 90%;
+ --muted: 220 30% 15%;
+ --muted-foreground: 210 20% 85%; /* Pale navy */
+ --accent: 220 80% 60%; /* Vibrant azure blue */
+ --accent-foreground: 220 80% 90%;
+ --destructive: 0 65% 55%; /* Soft red */
+ --destructive-foreground: 220 80% 90%;
+ --border: 220 30% 15%; /* Dark steel blue */
+ --input: 220 30% 15%;
+ --ring: 220 60% 60%; /* Vivid blue ring */
+ --chart-1: 210 60% 50%; /* Classic blue */
+ --chart-2: 220 40% 65%; /* Soft sky */
+ --chart-3: 220 70% 50%; /* Azure blue */
+ --chart-4: 200 60% 55%; /* Ocean blue */
+ --chart-5: 240 30% 40%; /* Deep teal */
+ }
+ }
+ ```
+
+
+ ```css
+ /* ocean */
+ /* Light Mode */
+ .keyword {
+ color: #2563eb;
+ /* Vibrant Blue */
+ }
+
+ .function {
+ color: #0284c7;
+ /* Deep Sky Blue */
+ }
+
+ .punctuation {
+ color: #475569;
+ /* Cool Slate Gray */
+ }
+
+ .comment {
+ color: #64748b;
+ /* Muted Slate */
+ }
+
+ .string,
+ .constant,
+ .annotation,
+ .boolean,
+ .number {
+ color: #0369a1;
+ /* Dark Cyan */
+ }
+
+ .tag {
+ color: #1e40af;
+ /* Indigo */
+ }
+
+ .attr-name {
+ color: #0ea5e9;
+ /* Light Sky Blue */
+ }
+
+ .attr-value {
+ color: #2563eb;
+ /* Bright Blue */
+ }
+
+ /* Dark Mode */
+ .dark .keyword {
+ color: #93c5fd;
+ /* Soft Blue */
+ }
+
+ .dark .function {
+ color: #38bdf8;
+ /* Sky Blue */
+ }
+
+ .dark .string,
+ .dark .constant,
+ .dark .annotation,
+ .dark .boolean,
+ .dark .number {
+ color: #60a5fa;
+ /* Light Blue */
+ }
+
+ .dark .tag {
+ color: #3b82f6;
+ /* Bold Blue */
+ }
+
+ .dark .attr-name {
+ color: #67e8f9;
+ /* Aqua */
+ }
+
+ .dark .attr-value {
+ color: #93c5fd;
+ /* Frosty Blue */
+ }
+ ```
+
+
+
+For additional themes, visit this fantastic website with pre-made Shadcn themes: https://tinte.railly.dev/shadcn
\ No newline at end of file
diff --git a/aria/images/logo.svg b/aria/images/logo.svg
new file mode 100644
index 000000000..7863737a1
--- /dev/null
+++ b/aria/images/logo.svg
@@ -0,0 +1,26 @@
+
+
+
diff --git a/aria/lib/markdown.ts b/aria/lib/markdown.ts
new file mode 100644
index 000000000..b34a910b3
--- /dev/null
+++ b/aria/lib/markdown.ts
@@ -0,0 +1,218 @@
+import { compileMDX } from "next-mdx-remote/rsc";
+import path from "path";
+import { promises as fs } from "fs";
+import remarkGfm from "remark-gfm";
+import rehypePrism from "rehype-prism-plus";
+import rehypeAutolinkHeadings from "rehype-autolink-headings";
+import rehypeSlug from "rehype-slug";
+import rehypeCodeTitles from "rehype-code-titles";
+import { page_routes, ROUTES } from "./routes-config";
+import { visit } from "unist-util-visit";
+import matter from "gray-matter";
+
+// custom components imports
+import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
+import Pre from "@/components/markdown/pre";
+import Note from "@/components/markdown/note";
+import { Stepper, StepperItem } from "@/components/markdown/stepper";
+import Image from "@/components/markdown/image";
+import Link from "@/components/markdown/link";
+import Outlet from "@/components/markdown/outlet";
+
+// add custom components
+const components = {
+ Tabs,
+ TabsContent,
+ TabsList,
+ TabsTrigger,
+ pre: Pre,
+ Note,
+ Stepper,
+ StepperItem,
+ img: Image,
+ a: Link,
+ Outlet,
+};
+
+// can be used for other pages like blogs, Guides etc
+async function parseMdx(rawMdx: string) {
+ return await compileMDX({
+ source: rawMdx,
+ options: {
+ parseFrontmatter: true,
+ mdxOptions: {
+ rehypePlugins: [
+ preProcess,
+ rehypeCodeTitles,
+ rehypePrism,
+ rehypeSlug,
+ rehypeAutolinkHeadings,
+ postProcess,
+ ],
+ remarkPlugins: [remarkGfm],
+ },
+ },
+ components,
+ });
+}
+
+// logic for docs
+
+export type BaseMdxFrontmatter = {
+ title: string;
+ description: string;
+};
+
+export async function getDocsForSlug(slug: string) {
+ try {
+ const contentPath = getDocsContentPath(slug);
+ const rawMdx = await fs.readFile(contentPath, "utf-8");
+ return await parseMdx(rawMdx);
+ } catch (err) {
+ console.log(err);
+ }
+}
+
+export async function getDocsTocs(slug: string) {
+ const contentPath = getDocsContentPath(slug);
+ const rawMdx = await fs.readFile(contentPath, "utf-8");
+ // captures between ## - #### can modify accordingly
+ const headingsRegex = /^(#{2,4})\s(.+)$/gm;
+ let match;
+ const extractedHeadings = [];
+ while ((match = headingsRegex.exec(rawMdx)) !== null) {
+ const headingLevel = match[1].length;
+ const headingText = match[2].trim();
+ const slug = sluggify(headingText);
+ extractedHeadings.push({
+ level: headingLevel,
+ text: headingText,
+ href: `#${slug}`,
+ });
+ }
+ return extractedHeadings;
+}
+
+export function getPreviousNext(path: string) {
+ const index = page_routes.findIndex(({ href }) => href == `/${path}`);
+ return {
+ prev: page_routes[index - 1],
+ next: page_routes[index + 1],
+ };
+}
+
+function sluggify(text: string) {
+ const slug = text.toLowerCase().replace(/\s+/g, "-");
+ return slug.replace(/[^a-z0-9-]/g, "");
+}
+
+function getDocsContentPath(slug: string) {
+ return path.join(process.cwd(), "/contents/docs/", `${slug}/index.mdx`);
+}
+
+function justGetFrontmatterFromMD(rawMd: string): Frontmatter {
+ return matter(rawMd).data as Frontmatter;
+}
+
+export async function getAllChilds(pathString: string) {
+ const items = pathString.split("/").filter((it) => it != "");
+ let page_routes_copy = ROUTES;
+
+ let prevHref = "";
+ for (const it of items) {
+ const found = page_routes_copy.find((innerIt) => innerIt.href == `/${it}`);
+ if (!found) break;
+ prevHref += found.href;
+ page_routes_copy = found.items ?? [];
+ }
+ if (!prevHref) return [];
+
+ return await Promise.all(
+ page_routes_copy.map(async (it) => {
+ const totalPath = path.join(
+ process.cwd(),
+ "/contents/docs/",
+ prevHref,
+ it.href,
+ "index.mdx",
+ );
+ const raw = await fs.readFile(totalPath, "utf-8");
+ return {
+ ...justGetFrontmatterFromMD(raw),
+ href: `/docs${prevHref}${it.href}`,
+ };
+ }),
+ );
+}
+
+// for copying the code in pre
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+const preProcess = () => (tree: any) => {
+ visit(tree, (node) => {
+ if (node?.type === "element" && node?.tagName === "pre") {
+ const [codeEl] = node.children;
+ if (codeEl.tagName !== "code") return;
+ node.raw = codeEl.children?.[0].value;
+ }
+ });
+};
+
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+const postProcess = () => (tree: any) => {
+ visit(tree, "element", (node) => {
+ if (node?.type === "element" && node?.tagName === "pre") {
+ node.properties["raw"] = node.raw;
+ }
+ });
+};
+
+export type Author = {
+ avatar?: string;
+ handle: string;
+ username: string;
+ handleUrl: string;
+};
+
+export type BlogMdxFrontmatter = BaseMdxFrontmatter & {
+ date: string;
+ authors: Author[];
+ cover: string;
+};
+
+export async function getAllBlogStaticPaths() {
+ try {
+ const blogFolder = path.join(process.cwd(), "/contents/blogs/");
+ const res = await fs.readdir(blogFolder);
+ return res.map((file) => file.split(".")[0]);
+ } catch (err) {
+ console.log(err);
+ }
+}
+export async function getAllBlogs() {
+ const blogFolder = path.join(process.cwd(), "/contents/blogs/");
+ const files = await fs.readdir(blogFolder);
+ const uncheckedRes = await Promise.all(
+ files.map(async (file) => {
+ if (!file.endsWith(".mdx")) return undefined;
+ const filepath = path.join(process.cwd(), `/contents/blogs/${file}`);
+ const rawMdx = await fs.readFile(filepath, "utf-8");
+ return {
+ ...justGetFrontmatterFromMD(rawMdx),
+ slug: file.split(".")[0],
+ };
+ }),
+ );
+ return uncheckedRes.filter((it) => !!it) as (BlogMdxFrontmatter & {
+ slug: string;
+ })[];
+}
+
+export async function getBlogForSlug(slug: string) {
+ const blogFile = path.join(process.cwd(), "/contents/blogs/", `${slug}.mdx`);
+ try {
+ const rawMdx = await fs.readFile(blogFile, "utf-8");
+ return await parseMdx(rawMdx);
+ } catch {
+ return undefined;
+ }
+}
diff --git a/aria/lib/routes-config.ts b/aria/lib/routes-config.ts
new file mode 100644
index 000000000..b3e751bd3
--- /dev/null
+++ b/aria/lib/routes-config.ts
@@ -0,0 +1,61 @@
+// for page navigation & to sort on leftbar
+
+export type EachRoute = {
+ title: string;
+ href: string;
+ noLink?: true; // noLink will create a route segment (section) but cannot be navigated
+ items?: EachRoute[];
+};
+
+export const ROUTES: EachRoute[] = [
+ {
+ title: "Getting Started",
+ href: "/getting-started",
+ noLink: true,
+ items: [
+ { title: "Introduction", href: "/introduction" },
+ {
+ title: "Installation",
+ href: "/installation",
+ },
+ { title: "Quick Start Guide", href: "/quick-start-guide" },
+ {
+ title: "Project Structure",
+ href: "/project-structure",
+ },
+ {
+ title: "Components",
+ href: "/components",
+ items: [
+ { title: "Stepper", href: "/stepper" },
+ { title: "Tabs", href: "/tabs" },
+ { title: "Note", href: "/note" },
+ { title: "Code Block", href: "/code-block" },
+ { title: "Image & Link", href: "/image-link" },
+ { title: "Custom", href: "/custom" },
+ ],
+ },
+ { title: "Themes", href: "/themes" },
+ {
+ title: "Customize",
+ href: "/customize",
+ },
+ ],
+ },
+];
+
+type Page = { title: string; href: string };
+
+function getRecurrsiveAllLinks(node: EachRoute) {
+ const ans: Page[] = [];
+ if (!node.noLink) {
+ ans.push({ title: node.title, href: node.href });
+ }
+ node.items?.forEach((subNode) => {
+ const temp = { ...subNode, href: `${node.href}${subNode.href}` };
+ ans.push(...getRecurrsiveAllLinks(temp));
+ });
+ return ans;
+}
+
+export const page_routes = ROUTES.map((it) => getRecurrsiveAllLinks(it)).flat();
diff --git a/aria/lib/utils.ts b/aria/lib/utils.ts
new file mode 100644
index 000000000..a427e92ea
--- /dev/null
+++ b/aria/lib/utils.ts
@@ -0,0 +1,80 @@
+import { type ClassValue, clsx } from "clsx";
+import { twMerge } from "tailwind-merge";
+import { EachRoute, ROUTES } from "./routes-config";
+
+export function cn(...inputs: ClassValue[]) {
+ return twMerge(clsx(inputs));
+}
+
+export function helperSearch(
+ query: string,
+ node: EachRoute,
+ prefix: string,
+ currenLevel: number,
+ maxLevel?: number
+) {
+ const res: EachRoute[] = [];
+ let parentHas = false;
+
+ const nextLink = `${prefix}${node.href}`;
+ if (!node.noLink && node.title.toLowerCase().includes(query.toLowerCase())) {
+ res.push({ ...node, items: undefined, href: nextLink });
+ parentHas = true;
+ }
+ const goNext = maxLevel ? currenLevel < maxLevel : true;
+ if (goNext)
+ node.items?.forEach((item) => {
+ const innerRes = helperSearch(
+ query,
+ item,
+ nextLink,
+ currenLevel + 1,
+ maxLevel
+ );
+ if (!!innerRes.length && !parentHas && !node.noLink) {
+ res.push({ ...node, items: undefined, href: nextLink });
+ parentHas = true;
+ }
+ res.push(...innerRes);
+ });
+ return res;
+}
+
+export function advanceSearch(query: string) {
+ return ROUTES.map((node) =>
+ helperSearch(query, node, "", 1, query.length == 0 ? 2 : undefined)
+ ).flat();
+}
+
+// Thursday, May 23, 2024
+export function formatDate(dateStr: string): string {
+ const [day, month, year] = dateStr.split("-").map(Number);
+ const date = new Date(year, month - 1, day);
+
+ const options: Intl.DateTimeFormatOptions = {
+ weekday: "long",
+ year: "numeric",
+ month: "long",
+ day: "numeric",
+ };
+
+ return date.toLocaleDateString("en-US", options);
+}
+
+// May 23, 2024
+export function formatDate2(dateStr: string): string {
+ const [day, month, year] = dateStr.split("-").map(Number);
+ const date = new Date(year, month - 1, day);
+
+ const options: Intl.DateTimeFormatOptions = {
+ month: "short",
+ day: "numeric",
+ year: "numeric",
+ };
+ return date.toLocaleDateString("en-US", options);
+}
+
+export function stringToDate(date: string) {
+ const [day, month, year] = date.split("-").map(Number);
+ return new Date(year, month - 1, day);
+}
diff --git a/aria/next.config.ts b/aria/next.config.ts
new file mode 100644
index 000000000..decc69df8
--- /dev/null
+++ b/aria/next.config.ts
@@ -0,0 +1,17 @@
+import type { NextConfig } from "next";
+
+const nextConfig: NextConfig = {
+ /* config options here */
+ images: {
+ remotePatterns: [
+ {
+ protocol: "https",
+ hostname: "img.freepik.com/**",
+ },
+ ],
+ },
+ // if used turbopack
+ // transpilePackages: ["next-mdx-remote"],
+};
+
+export default nextConfig;
diff --git a/aria/package.json b/aria/package.json
new file mode 100644
index 000000000..4563d8f33
--- /dev/null
+++ b/aria/package.json
@@ -0,0 +1,52 @@
+{
+ "name": "gitmega-dev",
+ "version": "2.0.0",
+ "private": true,
+ "scripts": {
+ "dev": "next dev",
+ "build": "next build",
+ "start": "next start",
+ "lint": "next lint"
+ },
+ "dependencies": {
+ "@next/third-parties": "^15.0.3",
+ "@radix-ui/react-accordion": "^1.2.0",
+ "@radix-ui/react-avatar": "^1.1.0",
+ "@radix-ui/react-collapsible": "^1.1.0",
+ "@radix-ui/react-dialog": "^1.1.1",
+ "@radix-ui/react-dropdown-menu": "^2.1.1",
+ "@radix-ui/react-scroll-area": "^1.2.0",
+ "@radix-ui/react-slot": "^1.1.0",
+ "@radix-ui/react-tabs": "^1.1.0",
+ "@vercel/analytics": "^1.4.1",
+ "class-variance-authority": "^0.7.0",
+ "clsx": "^2.1.1",
+ "gray-matter": "^4.0.3",
+ "lucide-react": "^0.435.0",
+ "next": "15.0.3",
+ "next-mdx-remote": "^5.0.0",
+ "next-themes": "^0.3.0",
+ "react": "19.0.0-rc-66855b96-20241106",
+ "react-dom": "19.0.0-rc-66855b96-20241106",
+ "react-inlinesvg": "^4.1.5",
+ "rehype-autolink-headings": "^7.1.0",
+ "rehype-code-titles": "^1.2.0",
+ "rehype-prism-plus": "^2.0.0",
+ "rehype-slug": "^6.0.0",
+ "remark-gfm": "^4.0.0",
+ "tailwind-merge": "^2.5.2",
+ "tailwindcss-animate": "^1.0.7",
+ "unist-util-visit": "^5.0.0"
+ },
+ "devDependencies": {
+ "@tailwindcss/typography": "^0.5.14",
+ "@types/node": "^20",
+ "@types/react": "^18",
+ "@types/react-dom": "^18",
+ "eslint": "^8",
+ "eslint-config-next": "15.0.3",
+ "postcss": "^8",
+ "tailwindcss": "^3.4.15",
+ "typescript": "^5"
+ }
+}
diff --git a/aria/postcss.config.mjs b/aria/postcss.config.mjs
new file mode 100644
index 000000000..1a69fd2a4
--- /dev/null
+++ b/aria/postcss.config.mjs
@@ -0,0 +1,8 @@
+/** @type {import('postcss-load-config').Config} */
+const config = {
+ plugins: {
+ tailwindcss: {},
+ },
+};
+
+export default config;
diff --git a/aria/public/halloween.png b/aria/public/halloween.png
new file mode 100644
index 000000000..ff9dbb9b4
Binary files /dev/null and b/aria/public/halloween.png differ
diff --git a/aria/public/nebula.png b/aria/public/nebula.png
new file mode 100644
index 000000000..d5330512a
Binary files /dev/null and b/aria/public/nebula.png differ
diff --git a/aria/public/ocean.png b/aria/public/ocean.png
new file mode 100644
index 000000000..48db4b69e
Binary files /dev/null and b/aria/public/ocean.png differ
diff --git a/aria/public/public-og.png b/aria/public/public-og.png
new file mode 100644
index 000000000..dd84a2a08
Binary files /dev/null and b/aria/public/public-og.png differ
diff --git a/aria/styles/globals.css b/aria/styles/globals.css
new file mode 100644
index 000000000..7f77a21f0
--- /dev/null
+++ b/aria/styles/globals.css
@@ -0,0 +1,120 @@
+@import url("./syntax.css");
+
+:root {
+ font-variant-ligatures: none;
+}
+
+@tailwind base;
+@tailwind components;
+@tailwind utilities;
+
+@layer base {
+ :root {
+ --background: 0 0% 100%;
+ --foreground: 20 14.3% 4.1%;
+ --card: 0 0% 100%;
+ --card-foreground: 20 14.3% 4.1%;
+ --popover: 0 0% 100%;
+ --popover-foreground: 20 14.3% 4.1%;
+ --primary: 24 9.8% 10%;
+ --primary-foreground: 60 9.1% 97.8%;
+ --secondary: 60 4.8% 95.9%;
+ --secondary-foreground: 24 9.8% 10%;
+ --muted: 60 4.8% 95.9%;
+ --muted-foreground: 25 5.3% 44.7%;
+ --accent: 60 4.8% 95.9%;
+ --accent-foreground: 24 9.8% 10%;
+ --destructive: 0 84.2% 60.2%;
+ --destructive-foreground: 60 9.1% 97.8%;
+ --border: 20 5.9% 90%;
+ --input: 20 5.9% 90%;
+ --ring: 20 14.3% 4.1%;
+ --radius: 0.5rem;
+ --chart-1: 12 76% 61%;
+ --chart-2: 173 58% 39%;
+ --chart-3: 197 37% 24%;
+ --chart-4: 43 74% 66%;
+ --chart-5: 27 87% 67%;
+ }
+
+ .dark {
+ --background: 20 14.3% 4.1%;
+ --foreground: 60 9.1% 97.8%;
+ --card: 20 14.3% 4.1%;
+ --card-foreground: 60 9.1% 97.8%;
+ --popover: 20 14.3% 4.1%;
+ --popover-foreground: 60 9.1% 97.8%;
+ --primary: 60 9.1% 97.8%;
+ --primary-foreground: 24 9.8% 10%;
+ --secondary: 12 6.5% 15.1%;
+ --secondary-foreground: 60 9.1% 97.8%;
+ --muted: 12 6.5% 15.1%;
+ --muted-foreground: 24 5.4% 63.9%;
+ --accent: 12 6.5% 15.1%;
+ --accent-foreground: 60 9.1% 97.8%;
+ --destructive: 0 62.8% 30.6%;
+ --destructive-foreground: 60 9.1% 97.8%;
+ --border: 12 6.5% 15.1%;
+ --input: 12 6.5% 15.1%;
+ --ring: 24 5.7% 82.9%;
+ --chart-1: 220 70% 50%;
+ --chart-2: 160 60% 45%;
+ --chart-3: 30 80% 55%;
+ --chart-4: 280 65% 60%;
+ --chart-5: 340 75% 55%;
+ }
+}
+
+@layer base {
+ * {
+ @apply border-border;
+ }
+
+ body {
+ @apply bg-background text-foreground;
+ }
+}
+
+.prose {
+ margin: 0 !important;
+}
+
+pre {
+ padding: 2px 0 !important;
+ width: inherit !important;
+ overflow-x: auto;
+}
+
+pre>code {
+ display: grid;
+ max-width: inherit !important;
+ padding: 14px 0 !important;
+}
+
+.code-line {
+ padding: 0.75px 16px;
+ @apply border-l-2 border-transparent;
+}
+
+.line-number::before {
+ display: inline-block;
+ width: 1rem;
+ margin-right: 22px;
+ margin-left: -2px;
+ color: rgb(110, 110, 110);
+ content: attr(line);
+ font-size: 13.5px;
+ text-align: right;
+}
+
+.highlight-line {
+ @apply bg-primary/5 border-l-2 border-primary/30;
+}
+
+.rehype-code-title {
+ @apply px-2 -mb-8 w-full text-sm pb-5 font-medium mt-5 font-code;
+}
+
+.highlight-comp>code {
+ background-color: transparent !important;
+}
\ No newline at end of file
diff --git a/aria/styles/syntax.css b/aria/styles/syntax.css
new file mode 100644
index 000000000..5d2e44e3b
--- /dev/null
+++ b/aria/styles/syntax.css
@@ -0,0 +1,72 @@
+.keyword {
+ color: #d73a49; /* GitHub Red */
+}
+
+.function {
+ color: #6f42c1; /* GitHub Purple */
+}
+
+.punctuation {
+ color: #24292e; /* GitHub Black */
+}
+
+.comment {
+ color: #6a737d; /* GitHub Muted Gray */
+}
+
+.string,
+.constant,
+.annotation,
+.boolean,
+.number {
+ color: #005cc5; /* GitHub Blue */
+}
+
+.tag {
+ color: #22863a; /* GitHub Green */
+}
+
+.attr-name {
+ color: #6f42c1; /* GitHub Purple */
+}
+
+.attr-value {
+ color: #e36209; /* GitHub Orange */
+}
+
+/* Dark Mode */
+.dark .keyword {
+ color: #f97583; /* GitHub Light Red */
+}
+
+.dark .function {
+ color: #d2a8ff; /* GitHub Light Purple */
+}
+
+.dark .punctuation {
+ color: #c9d1d9; /* GitHub Light Gray */
+}
+
+.dark .comment {
+ color: #8b949e; /* GitHub Muted Gray */
+}
+
+.dark .string,
+.dark .constant,
+.dark .annotation,
+.dark .boolean,
+.dark .number {
+ color: #79c0ff; /* GitHub Light Blue */
+}
+
+.dark .tag {
+ color: #a5d6ff; /* GitHub Cyan */
+}
+
+.dark .attr-name {
+ color: #d2a8ff; /* GitHub Light Purple */
+}
+
+.dark .attr-value {
+ color: #ffa657; /* GitHub Light Orange */
+}
diff --git a/aria/tailwind.config.ts b/aria/tailwind.config.ts
new file mode 100644
index 000000000..d4e5d566c
--- /dev/null
+++ b/aria/tailwind.config.ts
@@ -0,0 +1,86 @@
+import type { Config } from "tailwindcss";
+import typography from "@tailwindcss/typography";
+import animate from "tailwindcss-animate";
+
+const config = {
+ darkMode: ["class"],
+ content: [
+ "./pages/**/*.{ts,tsx}",
+ "./components/**/*.{ts,tsx}",
+ "./app/**/*.{ts,tsx}",
+ "./src/**/*.{ts,tsx}",
+ ],
+ prefix: "",
+ theme: {
+ container: {
+ center: true,
+ padding: "2rem",
+ screens: {
+ "2xl": "1300px",
+ },
+ },
+ extend: {
+ colors: {
+ border: "hsl(var(--border))",
+ input: "hsl(var(--input))",
+ ring: "hsl(var(--ring))",
+ background: "hsl(var(--background))",
+ foreground: "hsl(var(--foreground))",
+ primary: {
+ DEFAULT: "hsl(var(--primary))",
+ foreground: "hsl(var(--primary-foreground))",
+ },
+ secondary: {
+ DEFAULT: "hsl(var(--secondary))",
+ foreground: "hsl(var(--secondary-foreground))",
+ },
+ destructive: {
+ DEFAULT: "hsl(var(--destructive))",
+ foreground: "hsl(var(--destructive-foreground))",
+ },
+ muted: {
+ DEFAULT: "hsl(var(--muted))",
+ foreground: "hsl(var(--muted-foreground))",
+ },
+ accent: {
+ DEFAULT: "hsl(var(--accent))",
+ foreground: "hsl(var(--accent-foreground))",
+ },
+ popover: {
+ DEFAULT: "hsl(var(--popover))",
+ foreground: "hsl(var(--popover-foreground))",
+ },
+ card: {
+ DEFAULT: "hsl(var(--card))",
+ foreground: "hsl(var(--card-foreground))",
+ },
+ },
+ borderRadius: {
+ lg: "var(--radius)",
+ md: "calc(var(--radius) - 2px)",
+ sm: "calc(var(--radius) - 4px)",
+ },
+ fontFamily: {
+ code: ["var(--font-geist-mono)"],
+ regular: ["var(--font-geist-sans)"],
+ },
+ keyframes: {
+ "accordion-down": {
+ from: { height: "0" },
+ to: { height: "var(--radix-accordion-content-height)" },
+ },
+ "accordion-up": {
+ from: { height: "var(--radix-accordion-content-height)" },
+ to: { height: "0" },
+ },
+ },
+ animation: {
+ "accordion-down": "accordion-down 0.2s ease-out",
+ "accordion-up": "accordion-up 0.2s ease-out",
+ },
+ },
+ },
+ plugins: [animate, typography],
+} satisfies Config;
+
+export default config;
diff --git a/aria/tsconfig.json b/aria/tsconfig.json
new file mode 100644
index 000000000..d8b93235f
--- /dev/null
+++ b/aria/tsconfig.json
@@ -0,0 +1,27 @@
+{
+ "compilerOptions": {
+ "target": "ES2017",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "incremental": true,
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ],
+ "paths": {
+ "@/*": ["./*"]
+ }
+ },
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
+ "exclude": ["node_modules"]
+}