Reasi AI is a product and waitlist experience for an AI grocery-planning agent. The product concept turns household preferences into weekly meals, consolidated shopping lists, budget-aware swaps, and a checkout plan that remains under human control.
| Meal planning | Shopping list | Shopping mode |
|---|---|---|
![]() |
![]() |
![]() |
This repository contains the public product and waitlist experience used to communicate the concept and validate demand. It is not yet the grocery-agent backend.
Implemented features include:
- Responsive React product site with animated sections and app-preview screens
- Supabase-backed waitlist form with duplicate-email handling
- Supermarket and suburb context captured with waitlist submissions
- Vercel Analytics integration and Vercel deployment configuration
- Mobile-first flow covering plan, swap, list, shop, and cook
flowchart LR
Visitor["Visitor"] --> UI["React 19 + Vite UI"]
UI --> Form["Waitlist form"]
Form --> Client["Supabase client"]
Client --> Database[("Supabase")]
UI --> Analytics["Vercel Analytics"]
Vercel["Vercel"] --> UI
The browser uses the public Supabase client configuration supplied through Vite environment variables. Database policies remain the security boundary for waitlist writes.
- React 19 and Vite 7
- Supabase
- Framer Motion and Lucide React
- Vercel Analytics
- CSS
git clone https://github.com/tuilachit/reasi_ai.git
cd reasi_ai/waitlist
npm install
cp .env.example .env.local
npm run devSet the following values in .env.local:
VITE_SUPABASE_URL=your-supabase-url
VITE_SUPABASE_ANON_KEY=your-supabase-anon-keyThe visual site still renders without these values, but waitlist submissions will not persist.
cd waitlist
npm run lint
npm run typecheck
npm test
npm run buildGitHub Actions runs the same checks for pull requests and pushes to main. The tests cover the
waitlist's input normalization, validation, and displayed signup-count formatting.
.
├── vercel.json
└── waitlist/
├── public/
│ ├── logos/
│ └── reasi-app/
├── src/
│ ├── lib/
│ │ ├── supabaseClient.js
│ │ └── waitlist.js
│ ├── App.jsx
│ ├── App.css
│ ├── index.css
│ └── main.jsx
├── .env.example
├── package.json
└── vite.config.js
- Add an integration test for duplicate-email and Supabase failure responses
- Document the future grocery-agent backend and its human-approval boundary
- Add an accessible end-to-end waitlist test against a disposable Supabase project


