iOS and Android for a local delivery service: courier map, cash on delivery, offline mode.
Couriers worked off phone calls and paper lists. The customer didn't know where the order was, and the dispatcher didn't know where the courier was.
We built two apps: a customer app with a live map and notifications, and a courier app that keeps working in a basement with no signal and syncs once the network returns.
Cash on delivery stayed — in the regions it's still the main method, and removing it would have been a mistake.
How it's built
A fragment of the project's real code — so you can see what's inside.
TypeScript
type Bucket = { count: number; resetAt: number };const buckets = new Map<string, Bucket>();/** * Ограничение частоты запросов. * Защищает формы от перебора и спама. */export function rateLimit( key: string, limit = 8, windowMs = 60_000,): RateLimitResult { const now = Date.now(); const bucket = buckets.get(key); // Окно истекло или его не было — начинаем заново. if (!bucket || bucket.resetAt < now) { buckets.set(key, { count: 1, resetAt: now + windowMs }); return { ok: true, remaining: limit - 1, retryAfter: 0 }; } if (bucket.count >= limit) { return { ok: false, remaining: 0, retryAfter: Math.ceil((bucket.resetAt - now) / 1000), }; } bucket.count += 1; return { ok: true, remaining: limit - bucket.count, retryAfter: 0 };}Get in touch
Project request
Fill in the form — we'll discuss scope and timing.
Next project
Savol — an AI assistant for support teams