Showing AI reviews for avriti
Project AI Score ?
63%
Quality Avg ?
68%
Security Avg ?
45%
Reviews ?
56

Review Result ?

jattin01/avriti · d5616452
The commit introduces new UI components for the About, Contact, Consult redirect pages, and global styles for a spiritual wellness site. The work adds business-relevant content and navigation but lacks detail in commit message and some input form handling. The redirect logic in consult pages is straightforward and low risk, while the new UI and CSS provide good user experience but no interactivity or backend integration for the contact form.
Quality ?
70%
Security ?
30%
Business Value ?
60%
Maintainability ?
75%
Issues & Suggested Fixes ?
1AI detects the issue
2Shows file, line, or evidence
3Suggests the fix to apply
Poor Quality And Uninformative
Where commit message
Issue / Evidence poor quality and uninformative
Suggested Fix improve with explicit summary of changes
Input Fields Missing Controlled State Or F...
Where app/contact/page.tsx:43
Issue / Evidence input fields missing controlled state or form handler
Suggested Fix add form submission and validation to reduce bugs
Textarea Is Uncontrolled And No Form Logic
Where app/contact/page.tsx:47
Issue / Evidence textarea is uncontrolled and no form logic
Suggested Fix implement controlled inputs and proper submission
Missing Test Coverage
Where app/globals.css:54
Issue / Evidence very detailed CSS gradients but untested visuals
Suggested Fix verify style consistency and accessibility
Types For Params Defined As Promise Type U...
Where app/consult/[slug]/page.tsx:11
Issue / Evidence types for params defined as Promise type unnecessarily
Suggested Fix simplify typing to normal object to avoid confusion
No Error Handling On Redirect
Where app/consult/page.tsx:3
Issue / Evidence no error handling on redirect
Suggested Fix consider adding fallback or error boundary for robustness
Code Change Preview · app/about/page.tsx ?
Removed / Before Commit

                                                
Added / After Commit
+ import Image from "next/image";
+ import { Badge } from "@/components/ui/badge";
+ import { Card } from "@/components/ui/card";
+ 
+ export default function AboutPage() {
+   return (
+     <div>
+       <section className="brand-gradient">
+         <div className="mx-auto grid max-w-7xl gap-10 px-4 py-14 sm:px-6 lg:grid-cols-[1fr_0.85fr] lg:px-8">
+           <div>
+             <Badge>About Avriti</Badge>
+             <h1 className="mt-5 text-4xl font-semibold text-[var(--color-primary-700)]">
+               A sacred circle for guidance, products, and trust-led spiritual care.
+             </h1>
+             <p className="mt-6 max-w-2xl leading-8 text-[var(--color-text-secondary)]">
+               Avriti is shaped around calm service: a place where Vedic-inspired
+               consultations and ritual products are presented with clarity,
+               restraint, and practical support.
Removed / Before Commit

                                                
Added / After Commit
+ import { redirect } from "next/navigation";
+ import { services } from "@/lib/data";
+ 
+ export function generateStaticParams() {
+   return services.map((service) => ({ slug: service.slug }));
+ }
+ 
+ export default async function ConsultDetailAliasPage({
+   params,
+ }: {
+   params: Promise<{ slug: string }>;
+ }) {
+   const { slug } = await params;
+   redirect(`/services/${slug}`);
+ }
Removed / Before Commit

                                                
Added / After Commit
+ import { redirect } from "next/navigation";
+ 
+ export default function ConsultAliasPage() {
+   redirect("/services");
+ }
Removed / Before Commit

                                                
Added / After Commit
+ import { Mail, MapPin, MessageCircle, Phone } from "lucide-react";
+ import { Badge } from "@/components/ui/badge";
+ import { Button } from "@/components/ui/button";
+ import { Card } from "@/components/ui/card";
+ import { Input } from "@/components/ui/input";
+ 
+ export default function ContactPage() {
+   return (
+     <div>
+       <section className="brand-gradient">
+         <div className="mx-auto max-w-7xl px-4 py-14 sm:px-6 lg:px-8">
+           <Badge>Contact</Badge>
+           <h1 className="mt-5 max-w-3xl text-4xl font-semibold text-[var(--color-primary-700)]">
+             Reach Avriti for product questions, consultation help, or collaboration.
+           </h1>
+         </div>
+       </section>
+ 
Removed / Before Commit
- 
- :root {
- --background: #ffffff;
-   --foreground: #171717;
- }
- 
- @theme inline {
- --color-background: var(--background);
- --color-foreground: var(--foreground);
-   --font-sans: var(--font-geist-sans);
-   --font-mono: var(--font-geist-mono);
- }
- 
- @media (prefers-color-scheme: dark) {
-   :root {
-     --background: #0a0a0a;
-     --foreground: #ededed;
-   }
Added / After Commit
+ 
+ :root {
+ --background: #ffffff;
+   --foreground: #2c2c2a;
+   --font-sans: "Basic Sans", "Inter", Arial, sans-serif;
+   --font-support: "Rubik", "Inter", Arial, sans-serif;
+   --font-serif: "Crimson Pro", Georgia, serif;
+ 
+   --color-primary-700: #0c3ebb;
+   --color-primary-600: #3b58db;
+   --color-primary-300: #93a3f0;
+   --color-primary-100: #c5ccf0;
+   --color-sky-100: #c3edfa;
+   --color-material-200: #dbd4c3;
+   --color-material-300: #dbc0b6;
+   --color-text-primary: #2c2c2a;
+   --color-text-secondary: #5f5e5a;
+   --color-border: #d3d1c7;
Removed / Before Commit
- import type { Metadata } from "next";
- import { Geist, Geist_Mono } from "next/font/google";
- import "./globals.css";
- 
- const geistSans = Geist({
-   variable: "--font-geist-sans",
-   subsets: ["latin"],
- });
- 
- const geistMono = Geist_Mono({
-   variable: "--font-geist-mono",
-   subsets: ["latin"],
- });
- 
- export const metadata: Metadata = {
-   title: "Create Next App",
-   description: "Generated by create next app",
- };
Added / After Commit
+ import type { Metadata } from "next";
+ import { SiteFooter } from "@/components/site-footer";
+ import { SiteHeader } from "@/components/site-header";
+ import { WhatsAppCta } from "@/components/whatsapp-cta";
+ import "./globals.css";
+ 
+ export const metadata: Metadata = {
+   title: "Avriti | Sacred Guidance, Ritual Products & Consultations",
+   description:
+     "A premium frontend preview for Avriti, a blue-and-white spiritual wellness platform for products and consultations.",
+ };
+ 
+ export default function RootLayout({
+ children: React.ReactNode;
+ }>) {
+ return (
+     <html lang="en" className="h-full antialiased">
+       <body className="flex min-h-full flex-col bg-white text-[var(--color-text-primary)]">
Removed / Before Commit
- import Image from "next/image";
- 
- export default function Home() {
- return (
-     <div className="flex flex-col flex-1 items-center justify-center bg-zinc-50 font-sans dark:bg-black">
-       <main className="flex flex-1 w-full max-w-3xl flex-col items-center justify-between py-32 px-16 bg-white dark:bg-black sm:items-start">
-         <Image
-           className="dark:invert"
-           src="/next.svg"
-           alt="Next.js logo"
-           width={100}
-           height={20}
-           priority
-         />
-         <div className="flex flex-col items-center gap-6 text-center sm:items-start sm:text-left">
-           <h1 className="max-w-xs text-3xl font-semibold leading-10 tracking-tight text-black dark:text-zinc-50">
-             To get started, edit the page.tsx file.
-           </h1>
Added / After Commit
+ import Image from "next/image";
+ import Link from "next/link";
+ import { ArrowRight } from "lucide-react";
+ import { PdfBrowserFrame } from "@/components/pdf-browser-frame";
+ import { Button } from "@/components/ui/button";
+ 
+ export default function Home() {
+ return (
+     <div className="bg-white">
+       <PdfBrowserFrame label="Website Home">
+         <div className="relative grid min-h-[650px] overflow-hidden px-6 pb-10 pt-4 sm:px-10 lg:grid-cols-[0.95fr_1.05fr] lg:px-14">
+           <div className="pointer-events-none absolute right-[-10%] top-[-8%] h-[520px] w-[520px] rounded-full bg-[radial-gradient(circle,rgba(12,62,187,0.13),transparent_62%)]" />
+           <div className="relative z-10 flex flex-col justify-center py-8">
+             <p className="max-w-[620px] text-5xl font-semibold leading-[0.98] text-[#e0e0e0] sm:text-6xl lg:text-[76px]">
+               Ancient Wisdom.
+               <br />
+               Modern Seekers.
+             </p>
Removed / Before Commit

                                                
Added / After Commit
+ import Link from "next/link";
+ import { notFound } from "next/navigation";
+ import { CalendarDays, Check, MessageCircle } from "lucide-react";
+ import { Badge } from "@/components/ui/badge";
+ import { Button } from "@/components/ui/button";
+ import { Card } from "@/components/ui/card";
+ import { services } from "@/lib/data";
+ 
+ export function generateStaticParams() {
+   return services.map((service) => ({ slug: service.slug }));
+ }
+ 
+ export default async function ServiceDetailPage({
+   params,
+ }: {
+   params: Promise<{ slug: string }>;
+ }) {
+   const { slug } = await params;
Removed / Before Commit

                                                
Added / After Commit
+ import Image from "next/image";
+ import Link from "next/link";
+ import { Eye, Hash, Home, MoonStar } from "lucide-react";
+ import { PdfBrowserFrame } from "@/components/pdf-browser-frame";
+ 
+ const serviceCards = [
+   {
+     href: "/services/numerology",
+     title: "Avriti Numerology",
+     body: "Your name and birth date hold a blueprint. Let's decode it.",
+     icon: Hash,
+   },
+   {
+     href: "/services/tarot",
+     title: "Avriti Drishti",
+     body: "Tarot decks, oracle cards, altar cloth. Tools for those who trust the unseen.",
+     icon: Eye,
+   },
Removed / Before Commit

                                                
Added / After Commit
+ import Image from "next/image";
+ import Link from "next/link";
+ import { notFound } from "next/navigation";
+ import { Check, MessageCircle, ShoppingBag } from "lucide-react";
+ import { ProductCard } from "@/components/product-card";
+ import { Badge } from "@/components/ui/badge";
+ import { Button } from "@/components/ui/button";
+ import { Card } from "@/components/ui/card";
+ import { products } from "@/lib/data";
+ 
+ export function generateStaticParams() {
+   return products.map((product) => ({ slug: product.slug }));
+ }
+ 
+ export default async function ProductDetailPage({
+   params,
+ }: {
+   params: Promise<{ slug: string }>;
Removed / Before Commit

                                                
Added / After Commit
+ import Image from "next/image";
+ import Link from "next/link";
+ import { PdfBrowserFrame } from "@/components/pdf-browser-frame";
+ 
+ const categories = [
+   "Shop",
+   "Avriti All Products",
+   "AVRITI Vastu Salts",
+   "AVRITI Signature Charm",
+   "Crystalline by AVRITI",
+   "AVRITI Drishti",
+   "AVRITI Sacred Combos",
+ ];
+ 
+ const shopProducts = [
+   ["vastu-harmony-salt", "Avriti Shuddhi - Mopping Salt - 1kg", "299"],
+   ["vastu-harmony-salt", "Avriti Jal Shuddhi - Bathroom Salt - 250g", "359"],
+   ["drishti-tarot-cards", "Drishti Tarot Cards - Pack of 78 cards", "299"],
Removed / Before Commit

                                                
Added / After Commit
+ "use client";
+ 
+ import { motion } from "framer-motion";
+ import { cn } from "@/lib/utils";
+ 
+ export function MotionSection({
+   children,
+   className,
+ }: {
+   children: React.ReactNode;
+   className?: string;
+ }) {
+   return (
+     <motion.section
+       initial={{ opacity: 0, y: 18 }}
+       whileInView={{ opacity: 1, y: 0 }}
+       viewport={{ once: true, margin: "-80px" }}
+       transition={{ duration: 0.55, ease: "easeOut" }}
Removed / Before Commit

                                                
Added / After Commit
+ import Image from "next/image";
+ import Link from "next/link";
+ import { cn } from "@/lib/utils";
+ 
+ const pdfNav = [
+   ["SHOP", "/shop"],
+   ["SERVICES", "/services"],
+   ["ABOUT", "/about"],
+   ["CONNECT", "/contact"],
+   ["LOGIN", "#"],
+   ["5 CART ITEMS", "#"],
+ ];
+ 
+ export function PdfBrowserFrame({
+   children,
+   label,
+   className,
+ }: {
Removed / Before Commit

                                                
Added / After Commit
+ import Image from "next/image";
+ import Link from "next/link";
+ import { ArrowRight, ShoppingBag } from "lucide-react";
+ import { Badge } from "@/components/ui/badge";
+ import { Button } from "@/components/ui/button";
+ import { Card } from "@/components/ui/card";
+ import { products } from "@/lib/data";
+ 
+ export function ProductCard({ product }: { product: (typeof products)[number] }) {
+   return (
+     <Card className="overflow-hidden">
+       <Link href={`/shop/${product.slug}`} className="block">
+         <div className={`relative aspect-[4/3] bg-gradient-to-br ${product.tone}`}>
+           <div className="sacred-ring absolute inset-6 opacity-80" />
+           <Image
+             src={product.image}
+             alt={product.name}
+             fill
Removed / Before Commit

                                                
Added / After Commit
+ import Link from "next/link";
+ import { ArrowRight } from "lucide-react";
+ import { Button } from "@/components/ui/button";
+ import { Card } from "@/components/ui/card";
+ import { services } from "@/lib/data";
+ 
+ export function ServiceCard({ service }: { service: (typeof services)[number] }) {
+   const Icon = service.icon;
+ 
+   return (
+     <Card className="p-6 transition hover:-translate-y-1 hover:border-[var(--color-primary-300)]">
+       <div className="flex h-12 w-12 items-center justify-center rounded-md bg-[var(--color-primary-100)]/55 text-[var(--color-primary-700)]">
+         <Icon size={23} />
+       </div>
+       <div className="mt-6">
+         <div className="flex flex-wrap items-center justify-between gap-2">
+           <h3 className="text-xl font-semibold">{service.name}</h3>
+           <span className="text-xs font-semibold text-[var(--color-text-secondary)]">
Removed / Before Commit

                                                
Added / After Commit
+ import Link from "next/link";
+ import { Camera, PlaySquare } from "lucide-react";
+ import { Button } from "@/components/ui/button";
+ import { Input } from "@/components/ui/input";
+ 
+ export function SiteFooter() {
+   return (
+     <footer className="border-t border-[var(--color-border)] bg-[#f8fbff]">
+       <div className="mx-auto grid max-w-7xl gap-10 px-4 py-12 sm:px-6 lg:grid-cols-[1.2fr_0.8fr_1fr] lg:px-8">
+         <div>
+           <p className="text-xl font-semibold text-[var(--color-primary-700)]">
+             Avriti
+           </p>
+           <p className="mt-4 max-w-sm text-sm leading-6 text-[var(--color-text-secondary)]">
+             Sacred products, Vedic-inspired consultations, and calm practical
+             guidance for everyday decisions.
+           </p>
+           <div className="mt-5 flex gap-3 text-[var(--color-primary-700)]">
Removed / Before Commit

                                                
Added / After Commit
+ "use client";
+ 
+ import Image from "next/image";
+ import Link from "next/link";
+ import { Menu, ShoppingBag, UserRound, X } from "lucide-react";
+ import { useState } from "react";
+ import { Button } from "@/components/ui/button";
+ import { cn } from "@/lib/utils";
+ 
+ const navItems = [
+   { href: "/shop", label: "Shop" },
+   { href: "/services", label: "Services" },
+   { href: "/about", label: "About" },
+   { href: "/contact", label: "Connect" },
+ ];
+ 
+ export function SiteHeader() {
+   const [open, setOpen] = useState(false);
Removed / Before Commit

                                                
Added / After Commit
+ import * as React from "react";
+ import { cn } from "@/lib/utils";
+ 
+ export function Badge({
+   className,
+   ...props
+ }: React.HTMLAttributes<HTMLSpanElement>) {
+   return (
+     <span
+       className={cn(
+         "inline-flex items-center rounded-full border border-[var(--color-primary-300)] bg-white/80 px-3 py-1 text-xs font-semibold text-[var(--color-primary-700)]",
+         className,
+       )}
+       {...props}
+     />
+   );
+ }
Removed / Before Commit

                                                
Added / After Commit
+ import * as React from "react";
+ import { cva, type VariantProps } from "class-variance-authority";
+ import { cn } from "@/lib/utils";
+ 
+ const buttonVariants = cva(
+   "inline-flex min-h-11 items-center justify-center gap-2 rounded-md px-5 py-2.5 text-sm font-semibold transition focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-[var(--color-primary-600)] disabled:pointer-events-none disabled:opacity-50",
+   {
+     variants: {
+       variant: {
+         default:
+           "bg-[var(--color-primary-700)] text-white shadow-[var(--shadow-soft)] hover:bg-[var(--color-primary-600)]",
+         secondary:
+           "border border-[var(--color-primary-300)] bg-white text-[var(--color-primary-700)] hover:bg-[var(--color-primary-100)]/35",
+         ghost:
+           "text-[var(--color-primary-700)] hover:bg-[var(--color-primary-100)]/35",
+       },
+       size: {
+         default: "min-h-11",
Removed / Before Commit

                                                
Added / After Commit
+ import * as React from "react";
+ import { cn } from "@/lib/utils";
+ 
+ export function Card({
+   className,
+   ...props
+ }: React.HTMLAttributes<HTMLDivElement>) {
+   return (
+     <div
+       className={cn(
+         "rounded-md border border-[var(--color-border)] bg-white shadow-[var(--shadow-soft)]",
+         className,
+       )}
+       {...props}
+     />
+   );
+ }
Removed / Before Commit

                                                
Added / After Commit
+ import * as React from "react";
+ import { cn } from "@/lib/utils";
+ 
+ export function Input({
+   className,
+   ...props
+ }: React.InputHTMLAttributes<HTMLInputElement>) {
+   return (
+     <input
+       className={cn(
+         "min-h-11 w-full rounded-md border border-[var(--color-border)] bg-white px-4 text-sm text-[var(--color-text-primary)] outline-none transition placeholder:text-[var(--color-text-secondary)] focus:border-[var(--color-primary-600)] focus:ring-2 focus:ring-[var(--color-primary-100)]",
+         className,
+       )}
+       {...props}
+     />
+   );
+ }
Removed / Before Commit

                                                
Added / After Commit
+ import Link from "next/link";
+ import { MessageCircle } from "lucide-react";
+ 
+ export function WhatsAppCta() {
+   return (
+     <Link
+       href="https://wa.me/910000000000"
+       className="fixed bottom-5 right-5 z-50 inline-flex h-14 w-14 items-center justify-center rounded-full bg-[var(--color-primary-700)] text-white shadow-[var(--shadow-soft)] transition hover:bg-[var(--color-primary-600)]"
+       aria-label="Message Avriti on WhatsApp"
+     >
+       <MessageCircle size={24} />
+     </Link>
+   );
+ }
Removed / Before Commit

                                                
Added / After Commit
+ import {
+   BadgeIndianRupee,
+   Eye,
+   Gem,
+   MoonStar,
+   Sparkles,
+   SunMedium,
+ } from "lucide-react";
+ 
+ export const products = [
+   {
+     slug: "vastu-harmony-salt",
+     name: "Vastu Harmony Salt",
+     category: "Vastu Salts",
+     price: "₹899",
+     badge: "Best loved",
+     image: "/logo.jpeg",
+     tone: "from-[#eef2ff] to-[#c3edfa]",
Removed / Before Commit

                                                
Added / After Commit
+ import { clsx, type ClassValue } from "clsx";
+ import { twMerge } from "tailwind-merge";
+ 
+ export function cn(...inputs: ClassValue[]) {
+   return twMerge(clsx(inputs));
+ }
Removed / Before Commit
- "name": "frontend",
- "version": "0.1.0",
- "dependencies": {
- "next": "16.2.6",
- "react": "19.2.4",
-         "react-dom": "19.2.4"
- },
- "devDependencies": {
- "@tailwindcss/postcss": "^4",
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/client-only": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
- "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==",
- "license": "MIT"
- },
Added / After Commit
+ "name": "frontend",
+ "version": "0.1.0",
+ "dependencies": {
+         "class-variance-authority": "^0.7.1",
+         "clsx": "^2.1.1",
+         "framer-motion": "^12.39.0",
+         "lucide-react": "^1.16.0",
+ "next": "16.2.6",
+ "react": "19.2.4",
+         "react-dom": "19.2.4",
+         "tailwind-merge": "^3.6.0"
+ },
+ "devDependencies": {
+ "@tailwindcss/postcss": "^4",
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+     "node_modules/class-variance-authority": {
Removed / Before Commit
- "lint": "eslint"
- },
- "dependencies": {
- "next": "16.2.6",
- "react": "19.2.4",
-     "react-dom": "19.2.4"
- },
- "devDependencies": {
- "@tailwindcss/postcss": "^4",
Added / After Commit
+ "lint": "eslint"
+ },
+ "dependencies": {
+     "class-variance-authority": "^0.7.1",
+     "clsx": "^2.1.1",
+     "framer-motion": "^12.39.0",
+     "lucide-react": "^1.16.0",
+ "next": "16.2.6",
+ "react": "19.2.4",
+     "react-dom": "19.2.4",
+     "tailwind-merge": "^3.6.0"
+ },
+ "devDependencies": {
+ "@tailwindcss/postcss": "^4",