尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Aplikacja do komponowania obiadów
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
A calmer way to run your kitchen.
Kotlet keeps your recipes, pantry, meal plans, and shopping list in one thoughtful
place — so you can spend less time organizing and more time cooking. It's built for
real home kitchens, where the small daily question "what should we eat?" turns into
dinner on the table.
Everything in Kotlet is connected. Plan a meal and its ingredients flow into your
shopping list; track your pantry and see what's running low before it becomes a
last-minute surprise.檢視完整 README ↗A calmer way to run your kitchen.
Kotlet keeps your recipes, pantry, meal plans, and shopping list in one thoughtful place — so you can spend less time organizing and more time cooking. It's built for real home kitchens, where the small daily question "what should we eat?" turns into dinner on the table.
Everything in Kotlet is connected. Plan a meal and its ingredients flow into your shopping list; track your pantry and see what's running low before it becomes a last-minute surprise.
Open Kotlet and see what's cooking today — quick stats, the planned menu and its ingredients, household participants, shopping progress, newest recipes, recent ingredients, and what's running low in the pantry, all at a glance.
Create and edit family favorites and new discoveries with ingredients, servings, meal types, step-by-step instructions (written in Markdown), nutrition, costs, and up to ten photos. Upload images, reorder the gallery, set alt text, and search for recipe images from Pexels with source attribution. Recipe lists can be searched and filtered by meal type or multiple ingredients, and recipe pages can be shared publicly.
Paste a YouTube or TikTok link and Kotlet extracts a recipe draft from the video. Review the title, instructions, servings, and matched ingredients before saving; missing details, proposed new ingredients, and possible duplicates are called out for you. AI-assisted recipes retain their source URL and provenance.
Lay out five meal slots across a 28-day overview. Add recipes or single ingredients, drag meals between slots and days, copy a day or week, and set the household members and guests who are eating. Kotlet works out servings, calories, cost per meal, and a daily receipt, with a one-click path from planned meals to the shopping list.
Generate a list for a date range from your meal plan, or add items directly. Quantities, units, categories, and prices come from the ingredient catalogue; items are grouped for shopping, can be checked off, cleared when purchased, and printed as a receipt.
Track quantities, units, expiration dates, and storage locations such as the refrigerator, freezer, and cabinet. Search and filter your stock, see recipes you can make from what you have, and move low or empty items onto the shopping list.
Recipes, planning, pantry, and shopping all draw on one catalogue. Ingredients support categories, measurement and piece units, calories, prices, translations, allergens, attributes, and dietary suitability. Optional AI autofill can populate ingredient details, which you can review and edit.
Share a home with other accounts, invite or remove members, switch between multiple homes, and add guests to individual meals. Personal settings include profile and password management, English and Polish, dietary preferences, allergens, intolerances, and excluded ingredients. You can also configure a personal AI provider and connect assistants such as Claude or ChatGPT through Kotlet's OAuth-protected MCP integration for recipes, meal planning, shopping, and household data. Hosts that support MCP Apps can render recipes as interactive cards inside the conversation (see docs/mcp-apps-recipe-ui.md). Codex can install the same connection as a plugin, together with a recipe-import workflow skill (see plugins/kotlet/README.md).
Administrators get a role-protected area for searching and managing users and configuring video-transcription settings.
You'll need: the .NET 10 SDK, Node.js 22.22+ or 24.x with npm, and a Docker-compatible container runtime.
dotnet run --project src/aspire/Kotlet.AppHost
This starts everything together — the API, the Angular app, and a local PostgreSQL database — and shows their addresses in the .NET Aspire dashboard. Open the Angular app's URL to use Kotlet.
In development, two sample accounts are created automatically so you can sign in right away:
| Password | Role | |
|---|---|---|
[email protected] | TestUser123! | Regular user |
[email protected] | Admin123! | Administrator |
Sample accounts are only created in the Development environment.
For a quick spin without a container runtime, the API can use a temporary in-memory SQLite database:
dotnet run --project src/backend/Kotlet.Api --launch-profile sqlite
Then start the frontend in a second terminal:
npm --prefix src/frontend start
The backend is organized by feature (Recipes, Meal Planner, Ingredients, Pantry, Shopping, Auth, …) with dependencies pointing inward to the domain. The API is the only component that talks to the database; the browser never connects to it directly. For more detail see docs/frontend-architecture.md and docs/supabase-connection.md.
Kotlet is deployed as two pieces — an API and a static frontend — backed by a managed
PostgreSQL database. Pushing to the main branch deploys both automatically through
GitHub Actions.
| Piece | Hosted on | Workflow | Trigger |
|---|---|---|---|
| Backend API | Azure Web App | main_kotlet.yml | push to main |
| Frontend | GitHub Pages | github-pages.yml | push to main (frontend changes) |
| Database | Supabase (PostgreSQL) | applied manually (see below) | — |
Every pull request and every push to develop also runs the
CI workflow, which builds and tests both the frontend and
the backend.
On a push to main, the workflow builds the frontend, publishes the .NET API, signs
in to Azure with a federated identity, and deploys to the Kotlet Web App.
Configure these as secure settings on the Web App (never commit them):
# PostgreSQL connection string (Supabase)
$env:ConnectionStrings__kotletdb = 'Host=<host>;Port=5432;Database=postgres;Username=<user>;Password=<password>;SSL Mode=Require;Trust Server Certificate=true'
# JWT signing key — a unique random secret of at least 32 bytes
$env:Jwt__SigningKey = '<a-random-secret-of-at-least-32-bytes>'
Access tokens are short-lived JWTs; refresh tokens are delivered only through the
HTTP-only kotlet_refresh cookie and stored as SHA-256 hashes.
On a push to main that touches the frontend, the workflow builds the Angular app
with the correct base href, adds an SPA fallback, and publishes it to GitHub Pages.
The production build points at the deployed Azure API
(src/frontend/src/environments/environment.ts).
The database lives in a Supabase PostgreSQL project, isolated in the kotlet schema
(application tables and their EF Core migration history). Apply migrations from a
trusted machine with network access to Supabase:
# Review the SQL first when targeting a shared project
dotnet ef migrations script --idempotent `
--project src/backend/Kotlet.Infrastructure `
--startup-project src/backend/Kotlet.Api `
--output kotlet-migrations.sql
# Apply
dotnet ef database update `
--project src/backend/Kotlet.Infrastructure `
--startup-project src/backend/Kotlet.Api
Migrations must only create or modify objects inside the kotlet schema (including
kotlet.__EFMigrationsHistory); existing schemas and Supabase-managed objects must
stay untouched. If the kotlet schema is ever exposed through the Supabase Data API,
review and enable appropriate Row Level Security policies first. See
docs/supabase-connection.md for the exact connection
settings.
dotnet build Kotlet.slnx
npm --prefix src/frontend run build
tools/Kotlet.Bench measures two surfaces against the same seeded fixture and compares a
run against a recorded baseline: the MCP tool surface AI agents talk to (where the size of
the tool catalogue and the number of round trips matter far more than raw request latency),
and the REST endpoints the Angular app calls to paint each screen (response size and
database queries per call):
dotnet run --project tools/Kotlet.Bench # measure and diff against the baseline
dotnet run --project tools/Kotlet.Bench -- --save # record the current numbers as the baseline
It boots the API in-process against a private SQLite copy of the shared test fixture, so no database or deployment is needed. See docs/performance.md for what the numbers mean and how to point it at a deployed instance.