Logistics / Last-mile / Q-commerce

Foodeli — last-mile delivery operations platform

A multi-channel system connecting order intake, dispatch, courier operations, route planning, settlements and a multi-branch operating model.

FoodeliLive production systemLogistics / Q-commerce / Last-mile delivery2020–2024
Delivery operations discovery and modellingProduct design and information architectureWeb applications for administration, branches and partnersCourier mobile applicationBackend API and order domain modelRoute planning, ETA and order-batching mechanismsOrder-source and finance-system integrationsSettlements, observability and multi-branch evolution
Operational route and delivery status view in the Foodeli last-mile system
Project overview

Softech designed and developed Foodeli as a multi-channel operating platform for last-mile delivery. The system connected central administration, branch and dispatch tools, partner channels and a courier application through one request, status and settlement model. Requests from different sources were normalised before assignment, while operational logic considered location, availability, preparation time, priority, ETA and the option to batch compatible pickups and drop-offs. Execution data fed order history, reporting and settlement cycles. Project materials describe expansion from one city to eleven and a historical service and delivery standard of 40 minutes; this publication clearly marks those values as reported information and does not present unapproved cost or on-time percentages.

01 / Context

Business context and the situation before implementation

Foodeli operated at the intersection of marketplace demand, field logistics and local operations. Customer value depended not only on the ordering interface but on whether partners, dispatchers and couriers shared the same information and could react quickly to changes in preparation, location and fleet load.

  • Requests could arrive directly from partners or external channels and needed one status model.
  • Dispatch had to make time-sensitive decisions with incomplete courier availability and changing zone load.
  • Couriers needed a current assignment list, addresses, action order and proof-of-completion flow.
  • Partners and branches needed status visibility without constant phone coordination.
  • Settlements had to connect request, route, compensation-rule and approved adjustment data.
  • Expansion to additional cities required a repeatable model for roles, configuration and reporting.

Before state

Without a shared platform, every additional order source, branch or settlement model increased manual coordination. Dispatchers had to combine partner, preparation, courier and route information, while later settlement required reconstructing execution from several places.

  • Different intake channels could describe similar requests in different ways.
  • Assignment relied on current dispatcher knowledge and manual context assembly.
  • Field statuses did not always create one history available to operations and finance.
  • Launching a branch required repeating configuration and training local teams.
  • Compensation models and adjustments increased the risk of manual correction.
  • The lack of one operational picture made exceptions and delays harder to analyse.
02 / Strategy

Goals, success criteria and constraints

Discovery focused on the actual request lifecycle rather than screens. We mapped how a request was created, which data dispatch needed, courier decisions, field exceptions, proof of completion and settlement inputs. This separated rules shared across cities from local configuration.

Product goals

  • Unify requests from multiple sources in one domain model.
  • Connect central administration, branches, partners and couriers without duplicating process logic.
  • Support dispatch with location, availability, priority and estimated-time data.
  • Enable safe batching of compatible pickups and drop-offs with exception control.
  • Record a complete execution history for customer support, reporting and settlements.
  • Design a repeatable model for launching operations in additional cities.
  • Preserve manual operator decision-making for cases that should not be resolved automatically.

Success criteria

  • Every request has an explicit source, branch, status, partner and change history.
  • Dispatch can see current load and accept, change or split an assignment.
  • Couriers receive current jobs and return field statuses to the same data model.
  • Partners can check execution state without reconstructing the process by phone.
  • Settlement data comes from execution history and approved rules rather than a separate manual spreadsheet.
  • Branch configuration applies shared policies while supporting local exceptions.
  • An integration or asynchronous-process failure leaves an explainable status and operational trace.

Real-time decisions

Preparation, traffic, location and availability changed during execution, so plans had to be updated without losing history.

Multiple order sources

Partner channels and external integrations supplied data with different structures, quality and timing.

Local operating exceptions

Branches used one model but differed in zones, resources, hours and peak-response practices.

Batching versus service quality

An additional pickup could improve route utilisation only when it did not create unacceptable risk for other deliveries.

Complex settlement rules

Compensation could depend on job, distance, time, adjustments and payment cycle, requiring auditable inputs.

Connectivity and field work

The courier application had to communicate operation state under changing connectivity and reduce duplicate-action risk.

Analysis and product decisions

  • Mapping order sources and their normalisation into a shared contract.
  • Analysing dispatcher decisions from intake through reassignment and cancellation.
  • Defining courier-application states including pickup, delivery and exceptions.
  • Defining location data, ETA and job-compatibility conditions.
  • Modelling partner and courier settlement rules and payment cycles.
  • Separating central policies from branch configuration.
  • Identifying manual-control points where automation could increase risk.
03 / System

Solution architecture

The architecture was divided by operating responsibility. Partner channels submitted requests to a shared API, the domain layer maintained statuses and rules, planning mechanisms supported dispatch, the courier application handled field work, and execution data fed reporting and settlements. Central administration defined policies while branches managed current execution.

Architecture diagram
Product layers and responsibilities
Logical view
  1. 01
    Channel 01

    Partners and order sources

    Web panels, mobile channels and integrations supplying request data to the shared workflow.

    ReactREST APIWebhooks
  2. 02
    Channel 02

    Branch and dispatch

    Current requests, couriers, zones and priorities with manual intervention tools.

    ReactTypeScriptMaps
  3. 03
    Channel 03

    Courier application

    Assignments, addresses, action sequence, statuses, navigation and field confirmations.

    React NativeMap SDKMobile notifications
  4. 04
    Core 04

    API and domain model

    One source of rules for requests, deliveries, users, branches, statuses and permissions.

    Node.jsNestJSTypeScript
  5. 05
    Engine 05

    Planning and asynchronous processes

    ETA, job compatibility, event queues, integration retries and operational-data updates.

    RedisQueuesRoute APIs
  6. 06
    Data 06

    Data, reporting and settlements

    Execution history, branch configuration, settlement rules, reporting and change trace.

    PostgreSQLObject storageMonitoring
Key flows
Partner or integrationOrder APINormalised request data
Order APIDispatchStatus, branch, priority and SLA context
DispatchCourier applicationAssignment, route and action sequence
Courier applicationRequest historyField status and confirmation
Request historySettlementsDistance, time, outcome and compensation rule
Central administrationBranchesPolicies, configuration and reporting
04 / Product

Problems, decisions and implemented capabilities

Decision 1Confirmed in the product
Problem

Requests from different channels used different data and statuses.

Decision

Introduce one request contract before operational processing.

Capability

Normalisation of source, partner, addresses, timing, items and status.

Outcome

Dispatch and couriers use one meaning of the request regardless of intake channel.

Decision 2Confirmed in the product
Problem

Manually combining location, preparation and availability slowed decisions.

Decision

Provide calculated context to dispatch while preserving manual control.

Capability

ETA, priority, availability, zones and assignment recommendation.

Outcome

The operator can assess an option faster and explain or change the decision.

Decision 3Confirmed in the product
Problem

An additional pickup could improve a route or put other deliveries at risk.

Decision

Batch only requests meeting defined compatibility conditions.

Capability

Evaluation of distance, preparation, route capacity, windows and priority.

Outcome

Batching becomes a controlled operating mechanism rather than automatic grouping of every nearby job.

Decision 4Confirmed
Problem

Couriers needed current information without constant dispatcher contact.

Decision

Design the application around active and available assignments with explicit statuses.

Capability

Jobs, addresses, contact, sequence, status and proof of completion.

Outcome

Field work produces structured events visible across the system.

Decision 5Confirmed in the product
Problem

Settlements required reconstructing data from separate sources.

Decision

Build financial inputs from approved execution events.

Capability

Rate rules, distance, job, adjustments and weekly or monthly cycles.

Outcome

Operations and finance refer to the same request history.

Decision 6Confirmed by the client
Problem

Each new city could create a separate way of working and reporting.

Decision

Separate central policies from local configuration and current dispatch.

Capability

Branch model, roles, zones, parameters, reports and permissions.

Outcome

Launching another location uses the existing model rather than a new application.

Technology decisions

TechnologyRoleRationaleTrade-off
React + TypeScriptAdministration, branch and partner panelsShared components and typed contracts supported several operational tools.Interactions still had to be designed separately for different roles and data density.
React NativeCourier application and partner mobile channelA shared iOS and Android base with access to maps, location and notifications.Background work, location and mobile operating-system behaviour required native testing.
Node.js + NestJSAPI, domain rules and integrationsTypeScript across layers reduced contract drift and supported modular responsibility boundaries.Modularity required discipline to keep business logic out of controllers and clients.
PostgreSQLRequests, deliveries, branches, users and settlementsA relational model suited transactional states and consistency-sensitive relationships.Operational reporting required indexes, aggregation and separation from transactional paths.
Redis + queuesAsynchronous processes, retries and short-lived dataIntegrations and operating events should not block the main request flow.Queues require idempotency, monitoring and explicit dead-event handling.
Mapping and route servicesGeocoding, ETA, distance and navigation contextMature mapping data accelerated location and planning capabilities.Cost, limits and provider variability required caching, fallbacks and request control.

Integrations and data flows

Partner and aggregator channels

Into Foodeli

Submitting requests into one operating model regardless of source.

Contract validation, source identifiers, idempotency and retry handling.

Geocoding, maps and route estimation

Bidirectional request and response flow

Addresses, distance, ETA, route view and dispatcher decision context.

Address validation, result caching, limit control and missing-estimate communication.

Finance systems and exports

Out of Foodeli

Transferring approved partner, courier and settlement-period data.

Export status, retry capability and settlement-period identifier preservation.

Notifications and communication

From system to users

Informing users about assignment, status changes, exceptions and required action.

Queues, retries, channel preferences and separation from the domain transaction.

05 / Control

AI, security and reliability

Roles and branch scope

Permissions separate central, local, partner and courier operations.

Status consistency

Execution-state changes pass through domain rules and preserve history for investigation.

Integration idempotency

Repeated external-channel messages should not create another request or duplicate operation.

Field-work resilience

The application communicates uncertain state and synchronises events to reduce duplicates under weak connectivity.

Process monitoring

Integrations, queues and critical status transitions require metrics, alerts and retry capability.

Settlement trace

Financial inputs reference approved execution, rule and period so the result can be explained.

06 / Delivery

Implementation, testing and release

  1. 1
    Phase 1 — operating model

    Translate the local delivery process into shared product concepts.

    • Request and delivery map
    • Partner, dispatcher and courier roles
    • Core statuses and exceptions

    Result: The first workflow could operate in one city and produced data for further iteration.

  2. 2
    Phase 2 — channels and dispatch

    Connect order sources with operational tools.

    • Partner panels
    • Branch dispatch view
    • Shared request contract and history

    Result: Requests from different channels entered one operating model.

  3. 3
    Phase 3 — courier application and location

    Provide a current field-work flow and return statuses to operations.

    • Active and available assignments
    • Addresses, contact and navigation
    • Statuses and proof of completion

    Result: Courier and dispatch referred to the same execution state.

  4. 4
    Phase 4 — planning and exceptions

    Support ETA, assignment and batching decisions without removing operator control.

    • Job compatibility rules
    • Route and load context
    • Manual change and split tools

    Result: Optimisation mechanisms became part of a controlled dispatch workflow.

  5. 5
    Phase 5 — settlements and branches

    Connect execution data with finance and prepare a repeatable location model.

    • Compensation rules and cycles
    • Branch and central reports
    • Role, zone and policy configuration

    Result: The system supported daily work across roles and expansion into additional cities.

Status-rule testing

Testing allowed transitions, cancellations, reassignment and protection against duplicate operations.

Dispatch scenarios

Validating single and batched jobs, unavailable couriers, preparation changes and manual intervention.

Mobile field testing

Testing statuses, maps, notifications and synchronisation under changing connectivity.

Integration testing

Handling incomplete data, delayed messages, duplicates and temporary provider unavailability.

Incremental rollout

New features and branch configurations were introduced incrementally with status and exception observation.

07 / Verification

What confirms the project description

The functional scope is based on preserved screens, the existing project record and process models contained in the repository materials. Screens confirm selected courier-application elements, while diagrams structure the architecture and workflow description without pretending to be infrastructure documentation. Expansion to eleven cities and the 40-minute standard are marked as historical reported information. Earlier percentages for delivery cost, on-time performance, automatic allocation and accounting time are not published because no baseline, period and approved analytics export were provided.

ScopeBasisReferenceConfirmationInterpretation boundary
The courier application presents active assignments with addresses and execution state.Preserved product screenFO-01 — active courier assignmentsConfirmedThe screen confirms the interface and information scope, not completed-delivery volume.
The application separates current and available courier work.Preserved product screensFO-02 — current and available assignmentsConfirmedThe material does not document every application version or availability rule.
Partners, branches, couriers and administration use a shared domain layer.Architecture modelFO-03 — Foodeli logical architectureConfirmed in the productThe diagram simplifies topology and does not disclose confidential infrastructure configuration.
The workflow carries a request from intake through assignment and execution to confirmation and settlement.Process modelFO-04 — request and delivery lifecycleConfirmed in the productThe diagram shows the target model, not request volume distribution across states.
Dispatch combines priority, availability, ETA and batching with manual operator control.Decision modelFO-05 — dispatch and planning logicConfirmed in the productThe material confirms logic scope but does not publish algorithm parameters or outcomes for every delivery.
The branch model combines central policies, local operations and settlement cycles; project history reports expansion to eleven cities.Operating model and project historyFO-06 — branches and settlementsConfirmed by the clientEleven cities is historical reported information and has not been independently reconfirmed as the current operating footprint.

How to read this information

  • Preserved screens do not show the entire system or every product version.
  • Diagrams describe logical responsibilities rather than confidential deployment topology.
  • Eleven cities and 40 minutes are historical values reported in project materials.
  • There is no basis for publishing earlier cost, OTD, allocation and accounting percentages.
  • Integration provider names and current connection status should be reconfirmed before detailed publication.
  • Business impact is described as an operating-capability change rather than an approved financial result.
08 / Lessons

Process change, decision consequences and lessons

AreaBeforeAfterBusiness impact
Order sourcesRequests from different channels required manual alignment.Channels submit data into one request and status model.Operations do not need a separate workflow for every source.
DispatchDecision-making required manually combining location, preparation and availability.The operator receives shared ETA, priority, route and load context.Exceptions are handled in one tool and leave a decision history.
Courier workUpdates and task sequence required additional coordination.The application shows current and available assignments and records field statuses.Courier and dispatch refer to the same execution state.
Order batchingShared-route feasibility was assessed informally and depended on operator experience.Compatibility uses location, timing, capacity and priority rules with manual control.Optimisation becomes a repeatable process rather than only an individual decision.
SettlementsOperating and financial data were assembled after execution.Approved request events feed settlement rules and periods.A calculation can be traced to a specific request, rule and status.
City rolloutA new location could create a separate set of roles, configuration and reports.A branch uses the shared model with local zones and parameters.Another rollout builds on the existing architecture rather than a separate system.
Decision trade-off

Recommendation rather than fully automatic assignment

Alternative
Full automation without operator approval
Trade-off
Dispatch still performs some work but retains control over exceptions and operating quality.
Rationale
Preparation, local conditions and unusual jobs may require knowledge unavailable to the model.
Decision trade-off

One domain model across channels

Alternative
Separate logic for partner, courier and branch
Trade-off
The core is more demanding to design, but a status change does not need multiple implementations.
Rationale
Operations require one meaning of the request regardless of interface.
Decision trade-off

Rule-controlled batching

Alternative
Batching every geographically close request
Trade-off
Not every potentially shorter route is used, but delay risk for other deliveries is reduced.
Rationale
Proximity does not account for preparation time, capacity, sequence and priority.
Decision trade-off

Shared policies with local branch configuration

Alternative
Identical configuration for every city
Trade-off
The system manages more parameters but does not force artificial operational uniformity.
Rationale
Zones, resources and demand vary locally while roles and the request model should remain shared.
Decision trade-off

Asynchronous integrations with retries

Alternative
Every integration in the main transaction
Trade-off
Queues and intermediate states are introduced, but an external-channel failure does not need to stop the entire operation.
Rationale
Order sources, maps and notifications have different availability and response times.

Key lessons learned

  • A logistics system should begin with an explicit request, status and responsibility model rather than a map.
  • An assignment algorithm is useful only when the operator understands its recommendation and can handle exceptions.
  • Batching requires full route context; distance between points alone is insufficient.
  • A courier application must communicate uncertain state, especially when an action may have been sent under weak connectivity.
  • Settlements are significantly easier when financial inputs come from approved operating events.
  • A multi-branch model should separate shared policies from local parameters before expansion.
  • Historical KPIs should not be carried into a new publication without a source, period and explicit measurement definition.
09 / Relevance

Which organisations this model is relevant for

Last-mile delivery operators

Companies coordinating requests, couriers, partners, zones and settlements in one or more cities.

Q-commerce and delivery networks

Organisations receiving orders from multiple sources and requiring their own dispatch logic.

Platforms with field operations

Products where mobile, location, statuses and proof of completion form one workflow.

Companies expanding a branch model

Organisations needing central policies, local configuration and comparable reporting.

Businesses with custom settlements

Operations where financial outcome depends on job, distance, time, adjustments and settlement cycle.

Software for logistics and delivery

Planning a custom dispatch or last-mile operations system?

We can turn order sources, branches, couriers, location, planning, statuses and settlements into one controlled web and mobile product.

Discuss your system
10 / Scope

Key confirmed facts

The following statements summarise the confirmed product scope and contain no unapproved growth data.

  1. 1

    Softech designed and developed Foodeli as an operating platform for last-mile delivery.

  2. 2

    Foodeli connected central administration, branch tools, partner channels and a courier application.

  3. 3

    The system normalised requests from different sources into one domain model.

  4. 4

    Dispatch used location, availability, priority and ETA data while retaining manual control.

  5. 5

    The courier application presented active and available assignments and recorded execution statuses.

  6. 6

    The batching mechanism evaluated pickup and drop-off compatibility instead of grouping requests by distance alone.

  7. 7

    Request data could feed reporting and settlement cycles for partners and couriers.

  8. 8

    The branch model separated central policies from local dispatch and configuration.

  9. 9

    Project materials report historical expansion from one city to eleven.

  10. 10

    Project materials report a historical service and delivery standard of 40 minutes.

  11. 11

    The eleven-city footprint and 40-minute standard are published as reported information rather than independently verified measurements.

  12. 12

    The overview does not publish earlier delivery-cost, on-time or accounting-time percentages without an approved analytics source.

11 / Editorial responsibility

Prepared and reviewed by

Prepared by

Softech — Product and Engineering Team

Operating-model, architecture and implementation description

About Softech
Reviewed by

Softech — Subject-matter Review

Review of scope, materials and confirmation statuses

About Softech
Published: 2026-08-04Last updated: 2026-08-04

FAQ

How did the system batch requests without losing control of delivery time?

The mechanism evaluated pickup and drop-off compatibility using location, preparation time, current route, courier availability and priority. Dispatchers retained manual decision-making for exceptional situations.

Did Foodeli support orders from multiple sources?

Yes. The architecture normalised partner and external-channel requests into one operating model so dispatch and the courier application used consistent statuses.

How were multiple branches handled?

Shared rules, roles and data models were managed centrally, while local teams retained control over current dispatch, fleet load and exceptions.

Which data could feed settlements?

Settlements could use execution data such as the request, distance, time, status, compensation rule and additional components approved within the process.

Are the published outcomes independently verified?

The expansion to eleven cities and the 40-minute standard come from project history and are marked as reported information. Earlier cost and on-time percentages are not published without an approved analytics source.

Can a similar system support other field operations?

Yes, but the domain model should be designed around the organisation’s own jobs, resources, assignment rules, proof of completion, settlements and exceptions.