Easy-to-manage touch screens
Free, open-source touch screens. Guided USB setup, a drag-and-drop editor and local control. Made for Home Assistant.
Sign in to your household meal plan with a secure email link.
LifestyleTypeScript · CSSGitHub @agentazulAvailability needs another checkOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Loading the full README. The saved excerpt is shown below.
Done For You Kitchen is a self-hosted household meal planner built around one idea:
This repository contains the working Phase 1 foundation, a prompt-free AI weekly planner, a focused custom recipe workshop, and the first Phase 2 kitchen-inventory slice. It is a React Router 8 framework-mode application with strict TypeScript, PostgreSQL, Drizzle ORM, Tailwind CSS, email magic-link authentication, direct Google Vertex AI Express generation, and household-scoped server access.Read the full README ↗Done For You Kitchen is a self-hosted household meal planner built around one idea:
true weekly cost = what you buy - what has a real chance of carrying forward
This repository contains the working Phase 1 foundation, a prompt-free AI weekly planner, a focused custom recipe workshop, and the first Phase 2 kitchen-inventory slice. It is a React Router 8 framework-mode application with strict TypeScript, PostgreSQL, Drizzle ORM, Tailwind CSS, email magic-link authentication, direct Google Vertex AI Express generation, and household-scoped server access.
Implemented:
Deferred by the requested build order:
The PWA cache remains deferred because its durable offline contract needs a checkable shopping workflow plus the current week's recipes. The current generated list is derived after each saved count and can create a native Apple Notes checklist through a synced Shortcut, but does not claim in-app persisted checkoffs. The Groceries are home action is an explicit pantry update from a reviewed set of purchases, not a persisted shopping list, receipt, inventory lot, or automatic retailer reconciliation.
The project pins React Router 8.3.0, React 19.2.8, Vite 8.2.1, and all other direct dependencies to exact versions.
Install dependencies.
npm install
Create local environment configuration.
cp .env.example .env
Replace the database URLs, create a unique secret of at least 32 characters, configure the household member profile JSON, and add a Vertex AI Express API key as GOOGLE_VERTEX_API_KEY. Keep MAGIC_LINK_DELIVERY=console only for local development. AI_RECIPE_MODEL defaults to gemini-3.7-flash through the direct Google provider.
A linked Vercel project can instead use vercel env pull .env.local --environment=development. Standalone migration and Drizzle commands load .env.local first and then use .env for missing values. The seed also checks an ignored .env.seed.local first so real household profiles can stay separate from runtime configuration.
Apply the schema and seed the household plus ingredient reference data.
npm run db:migrate
npm run db:seed
The seed command is safe to run again. It updates the canonical manifest and default purchase formats without duplicating the household, users, members, or ingredients. Set HOUSEHOLD_SEED_DRY_RUN=true to execute the full seed transaction and roll it back intentionally before the first production apply.
HOUSEHOLD_MEMBER_PROFILES_JSON is the preferred member configuration. Each strict profile supplies seedKey, displayName, email, memberType, and appetiteMultiplier. Exactly two adult profiles must have distinct login emails. Keep every non-login member's seedKey stable: it is part of that member's deterministic database identity, so changing it creates a different member instead of renaming the existing one. HOUSEHOLD_ADULT_EMAILS remains available as the four-person legacy fallback when profile JSON is blank.
Start the development server.
npm run dev
Open http://localhost:5173. Request a link for one of the two seeded adult emails. In console delivery mode, the sign-in screen exposes a development-only preview link. The link opens a confirmation screen and is consumed only after confirmation.
This is the beginning of the README. Read the rest at the original. Read the full README ↗