Ka ora Ka ako - Healthy Lunches in Schools

Ka ora Ka ako is a custom React and Laravel web app built for NZ’s Ministry of Education.

I worked with two other devs to develop this app from scratch, building both a public-facing site and a secure content management system.

Project Purpose + Goal

The KOKA app aimed to simplify nutrition standards while also helping suppliers and kitchens streamline the process of planning and creating meals. It enabled kitchens to effectively develop, share, and scale recipes that met these standards, while also allowing nutritionists the ability to review and provide feedback on these menus.

Rather than a one-size-fits-all approach, the app gave suppliers and kitchens the flexibility to create their own recipes or choose from a curated recipe library.

Core Functionality

  • Recipe Management - a content management system that allows users to create, edit, update, and delete recipes or select from existing ones.
  • Programme News + Updates - the ability for users to create, edit, update, and delete news and updates.
  • User Management + Roles - a user system where new users can be created and assigned specific roles with defined permissions. For example, a Kitchen Admin can create, edit, and submit recipes for review, while a Kitchen Staff Member can only view approved recipes.
  • Search - multiple search indices, including a recipe search, ingredient lookup (with associated details) and the ability to search for content related to the programme, updates, and news.
  • Public-Facing Site - a browsable library of recipes, along with educational content on nutrition standards and their implementation.

Lessons Learned

I learnt so much through this project - far more than I can list here! Working in a small dev team, I played a key role in building all of the core functionality mentioned above. Some of the most valuable areas of learning included designing database structures, applying the MVC pattern to structure our app and deepening my knowledge in React by building a well-componentized front-end. I particularly enjoyed working with Laravel and its Eloquent ORM, which simplified the process of defining database models, establishing relationships and querying data.

Recipe Library Search

One of my key contributions was building the recipe library search, a feature I built from backend logic to frontend implementation. I indexed recipe data using Algolia’s search API with Laravel Scout which creates an index per model, but I needed to make fields from related models searchable too. To solve this, I created a custom searchable array in the Recipe model, extracting and restructuring relevant data before integrating it into the search index. This pattern was then extended to other search indices across the site, enabling a consistent and scalable search implementation.

Consistent Code Practices

A big lesson I took away was the importance of consistent code structure, especially as a project scales. Early on, I noticed inconsistencies in how formatting, structure, and best practices were being applied, leading to extra time spent during PR reviews.To address this, I researched, implemented, and documented a semi-automated linting and formatting solution to support consistent practices. I also created README guidelines for controller patterns and collaborated with colleagues to integrate linting checks into our GitHub Actions workflow. This ensured that developers were alerted to issues before opening a PR, significantly reducing back-and-forth in reviews.