Skip to main content

Student recipe and moderation platform

A recipe library students can fill, and still trust.

Registered students can contribute recipes, images, and novel ingredients. The challenge lies in maintaining library integrity while keeping contribution open, resolved through draft-first publishing, quarantined media assets, and a role-aware review queue.

Role
Full-Stack Developer & UX System Designer
Type
Academic
Collaborator
Luc Langis
Team
MVCode
Timeline
Fall 2025
Source
GitHub
projects/campus-bites/student-recipes
Campus Bites homepage and recipe discovery

The Problem

Anyone can contribute. The library still has to stay trustworthy.

The primary challenge extends beyond recipe discovery. The system must support a collaborative catalog where student submissions, proposed ingredients, and image uploads are securely partitioned and reviewed before public release.

The Users

Three access levels, one recipe library.

The platform manages permission boundaries cleanly so that visitors get instant, trustworthy search results while contributors and administrators collaborate through secure state changes.

Anonymous visitor

Browse practical recipes without barriers

Visitors need a clean, searchable database of budget-friendly meals with zero account setup. They should never see half-baked drafts or unapproved ingredients.

Priorities
No-friction searchIngredient safetyClear cooking times
Student contributor

Share recipes without immediate exposure

Registered students can write recipes, suggest new ingredients, and upload raw photos. Their draft is saved immediately, but unapproved parts are quarantined from the public.

Priorities
Draft clarityContribution feedbackSafe ingredient tagging
Admin reviewer

Protect quality with clear context

Administrators manage the publishing gate. They verify novel ingredients and check uploaded images before moving the recipe into the public index.

Priorities
Unified queueImage safety reviewOne-click approval

The first decision

Make approval visible, not mysterious.

The interface treats moderation as part of the recipe journey, not an admin-only afterthought.

Rejected

Publish first, moderate later

This would make contribution feel instant, but it risks unverified images, noisy ingredients, and public recipes that admins have not approved.

Chosen

Draft and approve before public visibility

Unverified content stays private until an admin clears it, so the public library never shows anything that has not been reviewed.

01

Recipe Draft

A contributor saves a meal draft, entering instructions and tagging ingredients.

Draft
02

Pantry Quarantine

Images and novel proposed ingredients are isolated from public search.

Hidden from Public
03

Review Board

An administrator inspects the image contents and ingredient tags.

Admin Gate
04

Plated Live

Approved assets migrate to public folders, and the recipe joins the library students search and browse.

Public
05

Returned Draft

Failed files are deleted; comments go back to the author for revision.

Back to Draft

Moderation states

Every submission is pending, approved, or rejected.

Images and newly proposed ingredients are reviewed before they ever reach the public library, and the interface shows that state plainly instead of hiding it.

State Contributor Experience Public Library View Admin Actions
Pending Sees draft status indicator and a preview of their uploaded media marked "Awaiting Review". Shows a generic "Image Not Available" placeholder; novel ingredients carry a warning label. Can approve the asset, set as recipe main image, or reject with a specific reason.
Approved Sees their recipe marked public; unapproved warning badges disappear from ingredient items. Renders the real uploaded recipe image and verified ingredients in public search and lists. Can revert the recipe back to draft or manage active main images if issues arise.
Rejected Receives a dashboard notification containing feedback from the moderator on why files failed. Recipe images and rejected ingredients are deleted from the disk and never expose public paths. Provide written moderation reasons (e.g. poor image quality) that log to the contributor.

Try It

Watch a draft become trusted.

Every recipe on Campus Bites carries a moderation state, and every surface obeys it: the image, the ingredient list, the visibility note, even the buttons an admin sees. This sandbox runs those exact rules on a single draft.

admin/recipe-moderator-sandbox

Console // Admin Queue

Select a state, or act on the draft the way a moderator would. The preview responds like production.

LIVE PREVIEW
Recipes/Details/14 Draft Approved, public Rejected
Image awaiting review
Image Rejected: Invalid Upload
Budget lentil curry, pending state as admins see it Budget lentil curry

Budget lentil curry

  • Red lentils
  • Onion & garlic
  • Garam masala, not yet approved
  • Garam masala, approved
  • Garam masala, rejected

Recipe.Status = Draft · Image.IsApproved = false · hidden from public surfaces Recipe.Status = Public · Image.IsApproved = true · listed in the recipe library Recipe.Status = Draft · upload rejected · returned to the author

The Product

User interfaces engineered for public trust.

Each interface surface coordinates with the moderation engine to protect recipe library integrity without adding friction to student workflows.

01 · Moderation & Trust Surface

Moderation states are visible instead of silently hidden

Pending recipes and unapproved assets stay private or are replaced with clear placeholders. The system protects public trust without making the contributor experience feel broken or mysterious.

1
Isolated media directories: Unverified uploads route to a quarantined folder. The public template falls back to a signed-off asset placeholder.
2
State-constrained queries: Entity Framework queries filter out pending items from public controller actions, preventing unapproved records from rendering.
3
Conditional UI decorators: The Razor view engine evaluates approval metadata to conditionally toggle CSS warnings on proposed ingredient list items.
recipes/pending-approval
Pending moderation screenshot showing overlays and warnings
student/recipe-library
Recipe library search and browse

02 · Discovery Surface

Search matching how students choose meals

The public library supports combined keyword, category, and date range filtering. Pagination keeps load speeds fast while users scan budget constraints.

  • Keyword search
  • Category filter
  • Date range
  • Pagination
recipes/detail
Recipe detail page

03 · Content Surface

Decisive details provided before cooking

Recipes expose servings, preparation times, required appliances, and nutritional info. Students compare details on cards without opening every record.

  • Prep & Cook time
  • Required appliances
  • Servings
  • Nutrition

The Stack

Every tool earns its place.

C# Typed language across the whole application.
ASP.NET Core MVC Controllers and Razor views for the student-facing flows.
Entity Framework Core Code-first models and migrations for recipes and moderation state.
SQL Server Relational store (LocalDB) for the recipe library.
Bootstrap 5 Responsive styling for the interface.
ASP.NET Core Identity Role-based access for visitors, students, and admins.

Architecture

The system is split around trust.

ASP.NET Core MVC handles the user-facing workflows, Identity separates access levels, Entity Framework Core persists recipes and moderation state, and SQL Server keeps the content library queryable.

01 · Roles

Access Gate

Anonymous Visitors, Registered Student Contributors, and Administrators submit intent to the server.

02 · Deliver

ASP.NET Core MVC

Controllers route the traffic; views render matching Razor templates depending on authorization state.

03 · Verify

Identity Guards

Middleware checks role boundaries, directing content modifications or moderation queues dynamically.

04 · Persist

EF Core & DB

State models map to SQL Server tables, writing file paths and approval states securely.

Refinement

What would make this production-ready.

01

UX Validation

The core hypothesis is that exposing draft status, placeholders, and proposed-ingredient warning tags directly in the interface reduces confusion. Testing this state model with student contributors would validate its effectiveness in minimizing submission errors.

02

Moderation Intelligence

While the admin review queue is operational, it lacks key metrics like queue cycle times, common rejection categorizations, and contributor error patterns. Integrating these operational insights would streamline the review loop.

03

Infrastructure Scale

Physically moving uploads between local temp and public directories works for a prototype, but ties media storage to the application server disk. Scaling for production requires migrating media operations to cloud object storage paired with a global CDN.

Let's build something that holds up.