feat: initial setup, collections, caregiver frontend
This commit is contained in:
BIN
docs/img/breakfast-form.jpeg
Normal file
BIN
docs/img/breakfast-form.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 226 KiB |
BIN
docs/img/dinner-form.jpeg
Normal file
BIN
docs/img/dinner-form.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 208 KiB |
BIN
docs/img/lunch-form.jpeg
Normal file
BIN
docs/img/lunch-form.jpeg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 240 KiB |
200
docs/instructions.md
Normal file
200
docs/instructions.md
Normal file
@@ -0,0 +1,200 @@
|
||||
# Payload CMS Backend Developer Challenge: Meal Planner
|
||||
|
||||
Thank you for your interest in this role. This challenge is designed to assess your skills in backend development, data modeling, problem-solving, and your ability to customize the **Payload CMS Admin Panel** to build a complete, practical solution.
|
||||
|
||||
## 1\. The Problem
|
||||
|
||||
### The Current Manual Workflow
|
||||
|
||||
In a busy elderly care home, the meal ordering process is entirely manual and paper-based.
|
||||
|
||||
**The Caregiver's Daily Routine:**
|
||||
Every day, three times a day (breakfast, lunch, dinner), a caregiver walks from room to room with a stack of pre-printed paper forms. They ask each resident for their meal preferences and mark the choices on paper. These forms are then collected and delivered to the kitchen.
|
||||
|
||||
**The Kitchen Staff's Daily Routine:**
|
||||
The kitchen staff receives all the collected paper forms. Their workflow involves:
|
||||
* **Reading each individual form** to understand what needs to be prepared for each resident
|
||||
* **Manually tallying all ingredients** across all forms (e.g., "82 bread rolls, 65 portions of butter...") to know what quantities are needed for the next day
|
||||
* **Checking off each form** one by one as they prepare individual meal trays
|
||||
* **Discarding the forms** after the meal is served
|
||||
|
||||
### The Original Paper Forms
|
||||
|
||||

|
||||
*Figure 1: Original paper form for Breakfast orders*
|
||||
|
||||

|
||||
*Figure 2: Original paper form for Lunch orders*
|
||||
|
||||

|
||||
*Figure 3: Original paper form for Dinner orders*
|
||||
|
||||
### Pain Points of the Manual System
|
||||
|
||||
* **Error-prone:** Papers can be lost, misread, or damaged
|
||||
* **Time-consuming:** Manual counting and tallying is slow
|
||||
* **No historical data:** Once a meal is served, there's no record for analytics or planning
|
||||
* **Inefficient:** Kitchen staff must handle each paper multiple times
|
||||
* **No visibility:** No way to track what's been prepared vs. what's pending
|
||||
|
||||
## 2\. Your Challenge
|
||||
|
||||
**Your task is to digitize this entire workflow using Payload CMS.**
|
||||
|
||||
You need to design and build a solution that:
|
||||
* Allows caregivers to efficiently capture meal preferences digitally
|
||||
* Enables kitchen staff to see aggregated ingredient needs for meal planning
|
||||
* Provides a way to track meal preparation progress
|
||||
* Maintains historical data for analytics and reporting
|
||||
* Implements proper access control for different user roles
|
||||
|
||||
## 3\. Required User Roles & Access Control
|
||||
|
||||
Your solution must support three distinct user roles with appropriate access control:
|
||||
|
||||
* **Admin:** Full system access
|
||||
* **Caregiver:** Needs to capture meal preferences from residents
|
||||
* **Kitchen:** Needs to view meal orders, plan ingredients, and track meal preparation
|
||||
|
||||
**You must design and implement the appropriate access control for each role.** Consider:
|
||||
* What data should each role be able to create, read, update, or delete?
|
||||
* Are there specific fields that should be read-only for certain roles?
|
||||
* What parts of the admin interface should each role have access to?
|
||||
|
||||
## 4\. Core Requirements
|
||||
|
||||
Your solution must address the following key requirements:
|
||||
|
||||
### A. Data Model
|
||||
|
||||
You need to design a data model that captures all the information from the paper forms (see figures above). At minimum, your model should support:
|
||||
|
||||
* **Resident information** (permanent data like name, room number, dietary restrictions, etc.)
|
||||
* **Meal orders** with:
|
||||
* Date and meal type (Breakfast, Lunch, Dinner)
|
||||
* All the meal-specific options shown in the paper forms
|
||||
* Order status tracking (e.g., pending vs. prepared)
|
||||
* Any special dietary notes or preferences
|
||||
|
||||
**Note:** The paper forms show different fields for each meal type. Your data model should reflect this.
|
||||
|
||||
### B. Caregiver Workflow
|
||||
|
||||
Caregivers need an efficient way to:
|
||||
* Select a resident
|
||||
* Choose the date and meal type
|
||||
* Quickly enter meal preferences based on the resident's choices
|
||||
* Submit the order
|
||||
|
||||
The interface should be optimized for speed and ease of use on a tablet.
|
||||
|
||||
### C. Kitchen Workflow
|
||||
|
||||
Kitchen staff need to:
|
||||
* **View aggregated ingredient needs:** Select a date and meal type to see a summary of all ingredients needed (e.g., "82 bread rolls, 65 portions of butter")
|
||||
* **Access detailed order information:** See individual resident orders for meal preparation
|
||||
* **Track preparation progress:** Mark orders as prepared/completed
|
||||
* **Historical data:** Be able to review past orders for analytics and planning
|
||||
|
||||
### D. Kitchen Dashboard
|
||||
|
||||
You must create a custom page in the Payload Admin UI where kitchen staff can:
|
||||
* Select a date and meal type
|
||||
* Generate a report showing aggregated ingredient quantities
|
||||
* The report can be displayed as JSON or in a more user-friendly format
|
||||
|
||||
## 5\. Technical Constraints
|
||||
|
||||
* **Platform:** Must be built using **Payload CMS**
|
||||
* **Database:** Must use **PostgreSQL** database adapter (`@payloadcms/db-postgres`)
|
||||
* **Seeding:** Must include a seed script that runs on `onInit` (in `payload.config.ts`) to populate test data
|
||||
* **Authentication:** Use Payload's built-in authentication system with the three required roles
|
||||
|
||||
## 6\. Reference: Paper Form Fields
|
||||
|
||||
To help you build an accurate data model, here are the fields from each paper form:
|
||||
|
||||
### Breakfast Form Fields
|
||||
* Frühstück lt. Plan (Breakfast according to plan)
|
||||
* Bread items: Brötchen (bread roll), Vollkornbrötchen (whole grain roll), Graubrot (grey bread), Vollkornbrot (whole grain bread), Weißbrot (white bread), Knäckebrot (crispbread)
|
||||
* Brei (puree/porridge)
|
||||
* Bread preparation: geschnitten (sliced), geschmiert (spread)
|
||||
* Spreads: Butter, Margarine, Konfitüre (jam), Diab. Konfitüre (diabetic jam), Honig (honey), Käse (cheese), Quark, Wurst (sausage)
|
||||
* Beverages: Kaffee (coffee), Tee (tea), Milch heiß (hot milk), Milch kalt (cold milk)
|
||||
* Additions: Zucker (sugar), Süßstoff (sweetener), Kaffeesahne (coffee creamer)
|
||||
|
||||
### Lunch Form Fields
|
||||
* Portion size: Kleine Portion (small), Große Portion (large), Vollwertkost vegetarisch (whole-food vegetarian)
|
||||
* Suppe (soup)
|
||||
* Dessert
|
||||
* Special preparations: passierte Kost (pureed food), passiertes Fleisch (pureed meat), geschnittenes Fleisch (sliced meat), Kartoffelbrei (mashed potatoes)
|
||||
* Restrictions: ohne Fisch (no fish), Fingerfood, nur süß (only sweet)
|
||||
|
||||
### Dinner Form Fields
|
||||
* Abendessen lt. Plan (Dinner according to plan)
|
||||
* Bread items: Graubrot (grey bread), Vollkornbrot (whole grain bread), Weißbrot (white bread), Knäckebrot (crispbread)
|
||||
* Bread preparation: geschmiert (spread), geschnitten (sliced)
|
||||
* Spreads: Butter, Margarine
|
||||
* Suppe (soup), Brei (puree)
|
||||
* ohne Fisch (no fish)
|
||||
* Beverages: Tee (tea), Kakao (cocoa), Milch heiß (hot milk), Milch kalt (cold milk)
|
||||
* Additions: Zucker (sugar), Süßstoff (sweetener)
|
||||
|
||||
### Common Fields (All Forms)
|
||||
* Resident information: Name, Zimmer (room), Tisch (table), Station
|
||||
* Hochkalorisch (high calorie)
|
||||
* Abneigungen (aversions/dislikes)
|
||||
* Sonstiges (other notes)
|
||||
|
||||
## 7\. Seeding & Submission
|
||||
|
||||
### Seed Data Requirements
|
||||
|
||||
Your project **must** include a seed script that runs on `onInit` (in `payload.config.ts`). This script must create:
|
||||
|
||||
* **Users:**
|
||||
* `admin@example.com` (password: `test`, role: `admin`)
|
||||
* `caregiver@example.com` (password: `test`, role: `caregiver`)
|
||||
* `kitchen@example.com` (password: `test`, role: `kitchen`)
|
||||
* **Sample Data:**
|
||||
* At least 5-10 sample residents with realistic information
|
||||
* At least 15-20 sample meal orders covering different residents, meal types, and dates
|
||||
* Mix of pending and completed orders to demonstrate the workflow
|
||||
|
||||
### Submission Instructions
|
||||
|
||||
You **do not** need to deploy this project.
|
||||
|
||||
1. **Create a new public GitHub repository** for your solution
|
||||
2. **Build** your solution locally
|
||||
3. Ensure your seed script runs correctly on `pnpm dev`
|
||||
4. **Commit** all your code to your repository
|
||||
5. Include a **README.md** in your repository with:
|
||||
* Instructions on how to run the project locally
|
||||
* Confirmation that the seed script works and the login credentials
|
||||
* Brief explanation of your design decisions:
|
||||
* How you structured your data model and why
|
||||
* How you implemented access control for the three roles
|
||||
* How you designed the kitchen dashboard and aggregation
|
||||
* Any challenges you faced and how you solved them
|
||||
6. Email the link to your repository to with your job application to **jobs@layerfinance.com** (cc: **mihael.presecan@layerfinance.com**)
|
||||
|
||||
## 8\. Evaluation Criteria
|
||||
|
||||
Your solution will be evaluated on:
|
||||
|
||||
* **Problem-solving approach:** How well you understood the workflow and translated it into a digital solution
|
||||
* **Data modeling:** Quality and appropriateness of your Payload collections and field structure
|
||||
* **Access control:** Proper implementation of role-based permissions
|
||||
* **User experience:** How intuitive and efficient the interfaces are for each role
|
||||
* **Code quality:** Clean, well-organized, and maintainable code
|
||||
* **Payload expertise:** Effective use of Payload's features and best practices
|
||||
|
||||
## 9\. Bonus Points (Optional)
|
||||
|
||||
These are not required but will make your application stand out:
|
||||
|
||||
* **Enhanced UI:** Create a more polished kitchen dashboard using Payload's UI components instead of raw JSON
|
||||
* **Additional features:** Any other improvements that would make the system more useful in a real care home setting
|
||||
|
||||
Good luck! We look forward to seeing your creative solution.
|
||||
Reference in New Issue
Block a user