Back to archive
IV. Client Builds & Logistics Platformssupportingunknownclient anonymised

iikoFront POS Plugin — Custom Webserver (C#)

Custom plugin for the iikoFront POS (API V8) that spins up its own HTTP server inside the POS process and wires the register to the Restaurant chain (UZ) / Restaurant chain (UZ) delivery backends, Yandex Eats payments, and the kitchen "display".

Status
unknown
Period
n/a
AI sessions
Stack
Languages
C#XAML
Frameworks · Infra
iiko Resto.Front.Api V8ASP.NET Web API (self-host)Entity Framework 6System.Reactive (Rx)Newtonsoft.JsonSystem.Data.SQLiteDuckDB.NETWPF
§01

Overview

  • What it is: an extension plugin for the proprietary iikoFront POS system (restaurant register). The unpacked folder is a *built artifact* (DLL + dependencies + NuGet package), not source. The main class is Resto.Front.Api.CustomWebserver.CustomWebserver, API version V8, license module 19011701 (see manifest.xml). The plugin spins up a self-hosted Web API inside the POS and integrates the register with external services of the pizzeria/delivery chain.
  • Type / status / role: library (POS plugin) / status unknown (no git and no sources to evaluate "aliveness") / role unknown — authorship not confirmed (no .git). The folder sits in the user's personal dev environment and is tied to his Restaurant chain (UZ)/Restaurant chain (UZ) project ecosystem, but there is no direct evidence of contribution in the code.
  • Active period: git dates unavailable. The artifact was built 2025-04-12 (timestamp of the main DLL and .nupkg); package version 1.0.0. The PDB points to the build path C:\projects\front.api.sdk\sample\new_webserver\Resto.Front.Api.SamplePlugin\ — the plugin was derived from the official iiko new_webserver example (SamplePlugin) and extended.
§02

Stack

  • Languages: C# (.NET Framework 4.7.2), XAML (WPF — OTP input window on the POS screen).
  • Frameworks/libraries (from actual DLLs in the package and strings in the assembly):
  • Resto.Front.Api.V8 v8.7.6032 — iikoFront SDK (the only declared dependency in .nuspec).
  • ASP.NET Web API self-host (System.Web.Http.SelfHost, HttpSelfHostServer, HttpSelfHostConfiguration, MapHttpRoute) — own HTTP server inside the POS process.
  • System.Reactive (Rx) + System.Interactive — subscription to POS events (OrderChanged, BeforeOrderBill).
  • Newtonsoft.Json (+ Bson) — serialization (JsonConvert.SerializeObject, JToken).
  • System.Data.SQLite (EF6/Linq + native SQLite.Interop.dll for x86/x64) — local storage.
  • DuckDB.NET (Bindings + Data) — embedded analytical store (string DuckOrderData).
  • EntityFramework 6 (+ EntityFramework.SqlServer, System.Data.SqlServerCe).
  • NuGet.* (Packaging/Configuration/Versioning) — apparently used for plugin packaging/updates.
  • Infra/deploy: distributed as a NuGet package Resto.Front.Api.CustomWebserver.V8.1.0.0.nupkg (iiko plugin format, target net472). Installed into iikoFront. No CI/Docker.
  • Data: local SQLite (scanned-orders table — UpdateOrInsertScannedOrder, selectLastScannedOrders, ScannedDate field); DuckDB optional. External data pulled over HTTP from the delivery backends.
  • Notable tooling: localization (ru-RU/...resources.dll), WPF UI, token authentication.
§03

What was shipped

There is no git history — the chronology is reconstructed from the contents of the compiled assembly (type/method symbols) and the *.dll.config configuration.

  • Self-hosted Web API inside the POS. OrdersController : ApiController with routes via MapHttpRoute; endpoints: GetKitchenOrders, GetOrderById, ReturnTabloOrders.
  • Token authentication for requests. Custom Helpers.AuthenticationHandler : DelegatingHandler (SendAsync), ValidateToken, token sourced from the ApiToken setting (6bbbcb4e-... in the config).
  • OTP window on the POS screen. WPF OtpWindow (CheckCode/CheckCodeClick, async CheckCode with CancellationToken) — entering and validating a one-time code against the backend.
  • Hook on bill issuance. OnBeforeOrderBill (subscription to BeforeOrderBill via Rx) — extending/duplicating receipt logic: ExtendBillCheque, DuplicatedCheque, RoundChequeNumber, RoundNumberCongratulation ("congratulation" for a round receipt number).
  • Kitchen "display". TabloOrder/TabloSplittedOrders, ReturnTabloOrders; sending a new order to a local display at http://127.0.0.1:12123/new_order; cooking status handling (Cooking/Cooked, ChangeKitchenOrderItemsProcessingStatus, intervals DefaultCookedInterval/CookingTimePeriod).
  • Integrations with delivery/payment backends. Strings in the DLL: https://api.choparpizza.uz, https://api.restaurant-chain.uz; settings YandexPaymentId, EatsApiToken (Yandex Eats payments/orders).
  • Volume: cannot be estimated — no git. The main DLL is ~45 KB (a compact glue plugin around the SDK).
§04

Technical challenges

Only what is confirmed by the assembly/config.

  • HTTP server inside the POS processSystem.Web.Http.SelfHost (HttpSelfHostServer + HttpSelfHostConfiguration, MapHttpRoute). Demonstrates: ability to embed a web API into someone else's host process (a desktop register), rather than classic ASP.NET hosting.
  • Authentication over the Web API pipeline → custom DelegatingHandler.SendAsync + ValidateToken instead of off-the-shelf middleware. Pattern: extending the Web API pipeline at a low level.
  • POS event model via Rx → subscriptions to OrderChanged/BeforeOrderBill (System.Reactive), reaction in OnBeforeOrderBill. Demonstrates working with reactive event streams of a proprietary SDK.
  • Custom receipt logic → intercepting BeforeOrderBill to extend/duplicate the receipt and round the number (RoundChequeNumber). A domain integration into the fiscal flow of the register — a non-trivial and "dangerous" area (printing/receipts).
  • Local order queue/journal → SQLite with upsert of "scanned" orders (UpdateOrInsertScannedOrder/selectLastScannedOrders) for offline resilience between the register and the kitchen display.
  • Native interop → separate SQLite.Interop.dll builds for x86/x64, indicating real deployment of native dependencies in the Windows POS environment.
§05

AI-assisted development

  • Sessions found: 0. No directory matching resto/CustomWebServer in the local Claude Code sessions directory.
  • What was done with AI: no data.
  • AI-workflow patterns: none.
  • No sessions.
§06

Achievements & metrics

From the artifact/config, with no speculation:

  • Integration of the iikoFront POS with 3+ external systems: Restaurant chain (UZ) API, Restaurant chain (UZ) API, Yandex Eats (payments/orders) + local kitchen display.
  • 3 public REST endpoints in the self-host Web API (GetKitchenOrders, GetOrderById, ReturnTabloOrders).
  • Support for x86 and x64 native SQLite dependencies; ru-RU localization.
  • Dependency on iiko SDK V8.7.6032, target .NET Framework 4.7.2.
  • No exact scale metrics (order volume, load) — closed proprietary context.
Currently

Open to Senior / Staff engineering roles and selective freelance — production AI, platform, and full-stack work.

Get in touch