All selected work

Independent product · Backend API

Platefy

Turning recipe captions into structured data

A TypeScript API that handles recipe extraction in the background and exposes progress, usage limits and structured results to a mobile application.

Node.jsTypeScriptFastifyPostgreSQLRedisBullMQDrizzleFlutter
Visit Platefy

System overview

  1. Mobile request

    Authenticated recipe import

  2. API & job queue

    Fastify · Redis · BullMQ · extraction

  3. Structured recipe

    PostgreSQL · progress & result

Simplified import flow, from a mobile request to background processing and a stored recipe.

Context

A recipe caption is unstructured input. Extracting usable ingredients and instructions involves external services whose response times and output can vary. The mobile application needs to submit an import, follow its progress and receive a predictable result.

My contribution

  • Built the Node.js/Fastify API for extracting structured recipes from social-media captions using a language model.
  • Used BullMQ and Redis for background import jobs, progress tracking and usage limits.
  • Implemented authentication, PostgreSQL models with Drizzle, and OpenAPI documentation generated from Zod schemas.

Engineering decisions

Move extraction into background jobs

Imports run through BullMQ rather than making the initial request wait for every processing step. This allows the client to track progress, at the cost of managing a queue and explicit job states.

Share the API contract

Zod schemas define the expected data and feed OpenAPI documentation. Keeping validation and documentation connected reduces the number of separate definitions to maintain as the API evolves.

Test application behaviour with controlled providers

Mocked external providers make import tests repeatable. They establish how the API handles known responses; live provider behaviour remains a separate integration concern.

Platefy mobile interface for importing a recipe from a shared link
Platefy’s published import screen. My contribution described here is the API and background processing behind this workflow.

Validation

  • Import tests use mocked external providers to exercise the processing workflow.
  • Schema validation checks the shape of API inputs and structured results.
  • Authentication and usage limits form part of the API’s request handling.

Outcome

Delivered an API that converts recipe captions into records the mobile application can use, with asynchronous processing and visible job progress. The case study focuses on my backend contribution.

Discuss the project

Get in touch about the work or a full-stack role.

Next: Cogniza Command Center