Uni Project Requirements¶
Overview of the required features for the uni project.
The requirements are listet here. Following are all requirements by their number in the requirements-pdf.
1. Four features for every person with all necessary CRUDs¶
| Feature | Specification | Priority | Complexity | Assignee |
|---|---|---|---|---|
| 1. Create the data structure for recipes | CRUDs for RecipeEntity, IngredientEntity, StepEntity | Must | High | Luis |
| 2. Implement the Recipe-Creation Page | Implement the UI for the Recipe-Creation Page and post the created recipe to the backend | Must | Medium | Luis |
| 3. Save images for recipes | Save images on a dedicated object storage and make them accessible to the Backend | Must | Medium | Luis |
| 4. Implement a search page for recipes with filter options | Uses the get-Endpoint of the RecipeController and provides the filter options | Must | Medium | Luis |
| 5. Implement AI recipe creation via image | Create a recipe from an image | Could | High | Luis |
| 1. AI "Mate" Chat | See AI-Features 1-3 | Must | High | Johannes |
| 2. Share a recipe via E-Mail | See Communication 2 | Could | Low | Johannes |
| 3. Recipe conversion finished notification | See Communication 3 | Could | Low | Johannes |
| 4. Recipe Folder Entity & Folder Overview | Per-user folders to allow grouping recipes | Should | Low | Johannes |
| 5. TBD | Should | Medium | Johannes | |
| 1. Create the shopping list for the user | Add/Delete ingredients and items to the user specific shopping list | Must | Medium | Oskar |
| 2. Implement the meal prepping screen | Enable users to plan their recipes for the week | Must | High | Oskar |
| 3. Implement email communication | Using the Resend service API to enable us sending notifications to the users email address | Must | High | Oskar |
| 4. Implement internationalisation | Using i18next libraray to translate the frontend | Should | Medium | Oskar |
| 5. "Mate" AI query tools | Mate has tools for: Search (with parameters, like in recipe search page); Folders; ... | Should | Medium | Oskar |
| 1. Implement OAuth authentication in the Backend | Validate ZITADEL JWTs, secure endpoints, provide current user to controllers | Must | High | Florian |
| 2. Create the data structure for users | CRUDs for UserEntity (preferences, allergens, don't-likes), linked to OAuth subject ID | Must | Medium | Florian |
| 4. Implement the user profile page | UI to view and edit preferences, allergens and don't-likes | Must | Medium | Florian |
| 3. Preferences wizard on first login | Create UserEntity on first authenticated request + Get Preferences | Should | Medium | Florian |
| 5. User context for Mate AI & user deletion | Provide user data to Mate; delete user data on account deletion | Could | Medium | Florian |
Entities and their CRUD-Operations¶
| Entity | Usage | Assignee |
|---|---|---|
| UserEntity | Create/Read/Update/Delete app-user specific information. Personal data is saved in OAuth. | Florian |
| RecipeEntity | Create/Read/Update/Delete recipes with their steps and ingredients | Luis |
| FolderEntity | Create/Read/Update/Delete folders containing recipes. A folder belongs to exactly one user | Johannes |
| ShoppingListEntity | Add/Delete ingredients and items to the user specific shopping list | Oskar |
| MealPreppingEntity | Contains recipes for exactly one user | Oskar |
For at least two user-profiles¶
- User: Default user of the application. Can only see his own recipes
- Admin: Can see all users and the recipes they created.
2. One Rest-API for every person¶
Internal Rest-APIs:
See 1. Entities and their CRUD-Operations
External Rest-APIs:
| API | Usage | Assignee |
|---|---|---|
| 1. Anthropic API (via Spring AI) | LLM for all AI features | Johannes |
| 2. Resend | E-mail sending API | Oskar |
| 3. Zitadel Cloud | Authentication (OAuth 2.0 / OIDC) and MFA | Florian |
| 4. Cloudflare R2 (has 10GB free) | Object storage for recipe images | Luis |
3. Pagination for every person¶
| Component | Usage | Assignee |
|---|---|---|
| 1. Folder Pagination | Display the folders a user created in pages | Johannes |
| 2. Recipe Pagination | Display the result of the recipe search in pages | Luis |
| 3. Endless-scroll of recipes | Display the suggested recipes in a vertical endless-scroll | Oskar |
| 4. Admin user overview | Display all users in pages | Florian |
| 5. Admin user's recipes overview | Display all recipes of a user in pages | Florian |
4. Communication for every person¶
Channel: E-Mail
| Communication | Description | Assignee |
|---|---|---|
| 1. E-mail confirmation & MFA | Confirmation mail after registration and one-time codes for multi-factor authentication. (via Zitadel Cloud) | Florian |
| 2. Share a recipe via E-Mail | Share a recipe to an E-Mail. They get a static version of the recipe. | Johannes |
| 3. Recipe creation finished E-Mail | Get an E-Mail about a recipe creation/modification/import having finished. | Johannes |
| 4. Newsletter | Weekly "Check out these recipes" mail with new and best-rated recipes. Users subscribe/unsubscribe in the user settings | Luis |
| 5. Welcome back mail | If the user did not login for x days he gets a welcome back email | Oskar |
5. Frontend¶
We use Typescript with React and Ant Design as the design system.
Further specifications are defined in the conventions
6. Login with Spring Security¶
Authentication service: OAuth2 with Zitadel Cloud
The user specific properties are managed in the profile page. The research is documented in the epic specs to be presented to the team members.
7. Non-functional requirements for every person¶
| Non-functional requirement | Usage | Assignee |
|---|---|---|
| 1. Internationalisation | Translate the UI in the frontend | Oskar |
| 2. Central authentication service | The authentication service should be easy to scale and to use for other applications. For example HolidayMate. | Florian |
| 3. Consistent design system in the frontend | All styling related values should be consistent. The colors predefined and easy to use in the code | Luis |
| 4. Consistent coding style in the backend | Consistent coding style specified in the conventions | Luis |
| 5. Project Documentation & Application Build via CI/CD | The docs are rendered as mkdocs and automatically hosted on GitHub pages via a CI/CD pipeline. The application is hosted on a server for presentation and testing purposes. | Johannes |
8. AI-Feature for every person¶
| Feature | Description | Assignee |
|---|---|---|
| 1. AI "Mate" Chat | Chat assistant with tool-call support | Johannes |
| 2. Context | Mate knows context about which page the user is currently viewing | Johannes |
| 3. Recipe creation & modification | Mate creates or changes recipes; a writer/evaluator agent loop checks quality | Johannes |
| 4. Query tools | Mate has tools for: Search (with parameters, like in recipe search page); Folders; ... | Oskar |
| 5. Recipe scraping & conversion | Website content pasted into the chat is converted into a recipe | Florian |
| 6. Recipe creation from images | Convert an image via OCR to markdown and pass it to the agent. Used for recipe creation | Luis |