Grocify is a modern, cross-platform grocery list management application built with React Native and Expo. It helps users organize, track, and optimize their grocery shopping with powerful features like categorization, priority management, purchase tracking, and insights.
- β Create, update, and delete grocery items
- ποΈ Categorize items (produce, dairy, etc.)
- β Set priority levels (low, medium, high)
- βοΈ Track purchased items
- π Insights dashboard for shopping analytics
- π½οΈ Meal planner integration
- π Secure authentication with social login
- β‘ Optimistic UI updates for smooth UX
- React Native (Expo)
- Expo Router (file-based navigation)
- TypeScript
- NativeWind (Tailwind CSS for React Native)
- Expo Linear Gradient
- Expo Blur
- React Native Reanimated
- Zustand
- Clerk (Google, GitHub, Apple login)
- Expo Secure Store
- Neon (Serverless PostgreSQL)
- Drizzle ORM (type-safe queries)
- Drizzle Kit (migrations & schema)
- Expo Router API Routes (server-side logic)
- Sentry (error tracking & performance monitoring)
Grocify follows a modern full-stack mobile architecture:
src/
βββ app/ # Routes & layouts (Expo Router)
βββ components/ # Reusable UI components
βββ hooks/ # Custom hooks
βββ lib/server/ # Database & server logic
βββ store/ # Zustand state management
- File-based routing using Expo Router
- API routes for CRUD operations
- Type-safe database layer with Drizzle ORM
- Centralized state management with Zustand
- Secure authentication flow with Clerk
- User selects a social login provider
- Clerk handles OAuth authentication
- Session is created and securely stored
- User is redirected to the main app
The app uses a grocery_items table:
| Field | Type | Description |
|---|---|---|
| id | UUID | Primary key |
| name | String | Item name |
| category | String | Item category |
| quantity | Number | Item quantity |
| purchased | Boolean | Purchase status |
| priority | String | Priority level |
| updated_at | Timestamp | Last updated time |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/items |
Fetch all items |
| POST | /api/items |
Create new item |
| PATCH | /api/items/:id |
Update item |
| DELETE | /api/items/:id |
Delete item |
| POST | /api/items/clear-purchased |
Clear purchased items |
git clone https://github.com/your-username/grocify.git
cd grocifynpm installCreate a .env file and add:
EXPO_PUBLIC_CLERK_PUBLISHABLE_KEY=your_key
DATABASE_URL=your_neon_database_url
SENTRY_DSN=your_sentry_dsn
npm startThen open in:
- Android Emulator
- iOS Simulator
- Expo Go
npm run db:pushnpm run seed:grocerynpm run android
npm run ios- π§Ύ Smart recommendations using AI
- π¦ Inventory tracking
- ποΈ Budget management
- π Notifications & reminders
- π Offline support
Contributions are welcome!
- Fork the repo
- Create your feature branch
- Commit your changes
- Push to your branch
- Open a Pull Request
This project is licensed under the MIT License.
- Expo team for amazing tooling
- Clerk for authentication
- Neon & Drizzle for backend simplicity
If you have feedback or ideas, feel free to reach out!
β If you like this project, don't forget to star the repo!