All projects
R

Full-Stack · Academic

Academic

Recipe Management System

“Jollof” — a Ghanaian recipe web app in PHP & MySQL, with a public site, a secure admin CRUD area and AJAX live-search.

Role
Software Engineer
Timeline
University module
Year
2025
Status
Academic
PHPMySQLJavaScriptAJAX

01 — Overview

Overview

“Jollof” is a full-stack web app celebrating traditional Ghanaian food — from Jollof rice to Kelewele — built in vanilla PHP and MySQL for Arden University's Web Application Development module.

It pairs a clean public site (home, recipes, search, about) with a secure administrative area behind a login. The admin can create, read, update and delete recipes with full CRUD, and it's where I focused on doing the fundamentals properly: prepared statements everywhere, validated inputs and uploads, soft deletes, and an AJAX live-search that filters without a page reload.

02 — Problem

The problem

The brief was to build a database-backed web application with a public interface and a secured admin interface offering full CRUD — and to do it with genuine attention to security and code quality, not just a working demo.

The content itself needed a clear model: recipes with a category, a description, step-by-step instructions, prep and cook times, a difficulty and an image.

03 — Requirements

Requirements

  • A public site to browse, view and search recipes.
  • A secure, authenticated admin area with full CRUD.
  • A relational MySQL schema behind it.
  • Safe data handling — prepared statements, input validation, safe uploads.
  • A responsive, accessible interface.

05 — Solution

The solution

The public site presents a featured dish, category browsing and search over a catalogue of Ghanaian recipes. The admin area, gated by a hashed-password login, provides the full create/read/update/delete lifecycle over recipes.

Every database interaction uses prepared statements to separate SQL from user input, inputs are validated and sanitised, and uploaded images are checked for type and size before being stored. Deletes are soft — recipes move to a Trash and can be restored — and the edit form shows a live preview as you type.

The standout admin feature is an asynchronous live-search in “Manage Recipes”: JavaScript + AJAX call the PHP backend to filter the table dynamically, with no full page reload.

06 — Architecture

System architecture

A server-rendered PHP application over MySQL. Shared includes handle configuration, the admin session/auth guard, and image upload; page scripts render the public pages and the admin CRUD flows. The live-search endpoint returns filtered results to the browser over AJAX.

Security is applied at the data boundary — prepared statements for every query, validation and sanitisation on input, and type/size checks on uploads — rather than bolted on afterwards.

Loading diagram…
High-level system architecture

07 — Data

Database design

A recipe belongs to a category and carries a title, short description, instructions, prep and cook times, a difficulty and an image path. A soft-delete timestamp preserves removed recipes for restore, and admin users authenticate against a hashed password. Ingredients are modelled relationally through a junction table.

Loading diagram…
Entity-relationship model

08 — Features

Key features

Public recipe site

Home, category browsing, search and recipe detail for traditional Ghanaian dishes.

Secure admin CRUD

A hashed-password login gates full create, read, update and delete over recipes.

AJAX live-search

The admin's Manage Recipes list filters dynamically via JavaScript + AJAX, with no page reload.

Prepared statements

Every query uses prepared statements, separating SQL logic from user input to prevent injection.

Safe image uploads

Uploaded images are validated for file type and size before being stored.

Soft deletes & trash

Removed recipes move to a Trash and can be restored, rather than being destroyed.

Live preview on edit

The edit form previews the recipe card live as fields change.

09 — Engineering

Implementation decisions

Prepared statements everywhere

All database access is parameterised, keeping SQL logic separate from user input.

AJAX over the PHP backend

The live-search fetches filtered results asynchronously, demonstrating JS + AJAX + PHP working together.

Soft delete over hard delete

Deleting sets a timestamp and moves the recipe to Trash, so it stays recoverable.

Validated uploads

Image uploads are checked for type and size before being written to the server.

10 — Challenges

Challenges & how I solved them

Building the live-search

Wiring JavaScript, AJAX and the PHP backend so the table filters smoothly without a reload took careful handling of requests and rendering.

Safe input and uploads

Applying prepared statements, validation/sanitisation and upload checks consistently was the security discipline the module rewarded.

12 — Interface

Screenshots

Jollof recipe app public home page
The public home — “Taste the Best of Ghana”, with search and a featured dish.
Admin Manage Recipes CRUD table with live-search
The admin Manage Recipes area — CRUD table with AJAX live-search.
Admin edit recipe form with live preview
The edit form, with a live preview and validated image upload.

13 — Outcome

Results

  • A working, deployed recipe web app with a polished public site and a full admin CRUD area.
  • Security fundamentals applied properly — prepared statements, validation and safe uploads throughout.
  • A demonstrable grasp of JavaScript, AJAX and PHP working together in the live-search.

14 — Reflection

Lessons learned

01

Prepared statements and input validation are the baseline for any database-backed app — not an afterthought.

02

A small async touch like live-search noticeably improves how responsive an admin tool feels.

15 — What's next

Future improvements

  • Tagging and richer public search and filtering.
  • User accounts so visitors can save favourite recipes.

16 — Toolchain

Technology stack

Core

Vanilla PHPMySQLServer-rendered

Frontend

JavaScriptAJAX live-searchResponsive UI

Data

Normalised schemaSoft deletesImage paths

Security

Prepared statementsInput validationSafe uploadsAdmin auth