Ingredo is an AI-powered recipe discovery app that helps users turn available ingredients into practical meal ideas, with recipe search, profile features, and guided cooking flows.
- Frontend: React 18, TypeScript, Tailwind CSS, shadcn/ui, Framer Motion, Wouter, Zustand, TanStack Query
- Backend: Express.js, Drizzle ORM, Neon Postgres, express-session, connect-pg-simple
- Deployment: Vercel
Create environment variables from .env.example and set:
DATABASE_URL: Neon/Postgres connection string used by Drizzle,connect-pg-simple, and server storage.SESSION_SECRET: strong random secret for signing session and CSRF cookies.ADMIN_API_KEY: private key required by admin API routes through thex-admin-keyheader.NVIDIA_API_KEY: NVIDIA API key for the OpenAI-compatible AI pipeline.
The app also reads these platform/tooling variables:
NODE_ENV: set todevelopment,test, orproduction; the npm scripts set this for dev/start.PORT: server listen port; defaults to5000when unset.REPL_ID: optional Replit-only Vite plugin toggle; leave unset outside Replit.
Before deploying, create the session table used by connect-pg-simple:
CREATE TABLE IF NOT EXISTS "user_sessions" (
"sid" varchar NOT NULL COLLATE "default",
"sess" json NOT NULL,
"expire" timestamp(6) NOT NULL
)
WITH (OIDS=FALSE);
ALTER TABLE "user_sessions"
ADD CONSTRAINT "user_sessions_pkey" PRIMARY KEY ("sid") NOT DEFERRABLE INITIALLY IMMEDIATE;
CREATE INDEX IF NOT EXISTS "IDX_user_sessions_expire" ON "user_sessions" ("expire");Then push the app schema (users, profiles, settings, favorites, pantry items, shopping lists, collections, etc.) with Drizzle:
npm run db:pushBeyond the recipe discovery endpoints, the server persists per-user data through these REST routes (all require an authenticated session):
GET/PUT /api/profile— current user's profile (name, bio, location, website, avatar) plus aggregate stats.GET/PUT /api/settings— per-user notification/privacy/cooking/accessibility/sync preferences.DELETE /api/auth/account— irreversibly deletes the account and all related rows.GET /api/favorites,POST /api/recipe/:id/save,POST /api/recipe/:id/unsave— favorites.GET/POST/PATCH/DELETE /api/pantry[/:id]— pantry items.GET/POST/PATCH/DELETE /api/shopping-lists[/:id]and…/items[/:itemId]— shopping lists.GET/POST/PATCH/DELETE /api/profile/collections[/:id]and…/recipes[/:recipeId]— recipe collections.
-
Install dependencies:
npm install
-
Copy env template and fill values:
cp .env.example .env
-
Start development server:
npm run dev
-
Build for production:
npm run build
Run all tests:
npm run test:runType-check:
npm run check