Inspiration

I felt inspired to make this website when researching a product myself, finding tons of biased information about it, and having to spend a while looking for real facts about it to help figure out whether I should buy it or not. Hence, to help other people find info about products that they're not sure whether they should get or not, easily and quickly, I made this website that just gives you the facts or the real POV of people on that product.

What it does

Verdikt is an AI-powered product review website using Gemini AI from Google AI Studio to give you a verdict on any product, based on facts (listed as pros and cons), and how the majority of the web feels about it. You can search by product name or upload a photo, and Verdikt returns a structured report with a score out of 100, a Buy/Consider/Skip verdict, and a pros and cons list, using real reviews, teardowns, and forums from across the web. You can also ask follow-up questions to dig deeper and see the sources used to construct those responses. Signed-in users also get their chat history saved to Supabase so they can revisit past verdicts.

How I built it

Frontend (using Lovable): React 19 with TanStack Start (SSR), TanStack Router, Tailwind CSS v4, shadcn/ui components, Framer Motion for animations and transitions, Lucide icons, and the React JS Library.

Backend (with assistance from Claude): TanStack server functions with Nitro. Google Gemini API from Google AI Studio, Supabase (PostgreSQL) for storing chats, and Zod for schema Validation.

Hosting Website: Vercel

Challenges I ran into

Getting Supabase Row Level Security and service role permissions configured correctly, because the tables needed explicit GRANT statements on top of RLS policies (First time using Supabase for more than just auth)

Deploying TanStack Start with Nitro outside of its default Lovable environment required forcing the Nitro plugin and failing to host on Cloudflare Workers (doesn't natively support process.env), and switching to Vercel instead, which has a simpler hosting method for this stack.

Handling image uploads through server functions while keeping base64 data out of the URL. (I've never sent images to the backend or Gemini AI's API before)

Accomplishments that I am proud of

A clean and smooth UI that has many animations and a great color scheme with light and dark options.

Real-time AI verdicts with a web-search tool rather than referencing static data, which might not even have the product the user wants to know about, or any specific details.

A fully working auth and chat persistence system that saves and restores conversation history.

Successfully deploying a full-stack SSR app with edge functions.

Sending images to the backend and to the Gemini AI API.

The website is responsive and can operate well on phones and PCs.

What I learned

How to save chat history in Supabase and modify them with GRANT statements.

How to host on Vercel.

How to send images to the backend and to the Gemini AI API.

How to make Gemini prompts give responses in a specific format for the same structure of the verdicts.

What's next for Verdikt

Having the user personalize how the AI responds, like ChatGPT, would be especially useful in Verdikt because the user would find out exactly what they needed to know about each product far more quickly. Additionally, I could add an option for the user to say whether they bought the product or not, and why, as context for future responses by the AI for further personalization.

Have the AI track prices for the assigned products, and whenever there's a discount, email the user with the link.

Add email deletion. (I really wish I had enough time for this one specifically)

Built With

  • framer-motion
  • googleaistudio
  • javascript
  • lovable
  • nitro
  • react
  • shadcn
  • supabase
  • tailwindcss
  • tanstack
  • typsescript
  • vercel
  • vite
  • zod
Share this project:

Updates