CV

A project by Roman Larionovskii

SellerAnalytics

Analytics and automation service for Ozon sellers

Sync with the Ozon Seller API, automatic financial reports with taxes, a Telegram bot and mini app.

No sign-up needed: the demo opens on a store with made-up data. The interface is in Russian.
Author
Roman Larionovskii, product manager and sole developer
Period
Since 2025, still in development
Status
In production: the store’s team on Ozon uses it every day and saves about 5 hours a week

The code right now

Loading data…
NestJS modules
00
REST endpoints
000
scheduled background jobs
00
database entities
00
unit tests
00
commits
000

What the service looks like

Web dashboard screens on a demo store with made-up data. Click to open full size. The interface is in Russian.

Overview
Overview What to ship today, the next payout, orders for 7 and 30 days, and what needs attention.
Analytics → Supplier order
Analytics → Supplier order How much to send to FBO and to our own warehouse, based on sales velocity, pack size and lead time.
Analytics → FBO stock
Analytics → FBO stock Nightly stock snapshots by category and the change over the week.
Finance → Report tables
Finance → Report tables Monthly payouts, turnover from the sales report and tax under the chosen regime.
Labels
Labels Label status and barcodes per product, PDFs one by one or in batches of up to 500.

What’s built

Ozon integration

FBS and FBO orders and returns sync every 5 minutes, changes only. Open orders are rechecked twice an hour and the catalogue updates hourly. If Ozon hits its rate limit, the job is queued and retried. API keys are stored encrypted with AES-256-GCM.

Financial reports

Accruals, EAEU sales, compensations and reversals, settlements with tax at 6% or 8% of revenue or 15% of profit, depending on the regime. Reports build themselves 12 hours after the period ends. XLSX files are generated on the server, so the website and the bots serve the same file.

Telegram bot and mini app

Messaging goes through a shared transport layer, so a new messenger plugs in without touching reports. A chat is linked with a one-time code, each report type has its own delivery schedule, and a send log prevents duplicates. The mini app opens via an HMAC signature of the launch data. It has an overview, stock, sending reports and labels to the chat, and personal notifications.

Stock and purchasing

Nightly FBO stock snapshots and the change over the week. The supplier order is calculated from sales velocity, split between FBO and our own warehouse, and exported in the supplier’s format.

Labels

PDF labels with a barcode and the EAC mark, certificates of conformity and bulk filling via Excel.

Customer questions

A question from Ozon arrives in the chosen chats. A normal reply in the chat is published on Ozon. Everyone sees who answered, and a second answer is blocked.

Demo mode

A new bot user sees the product on a “live” demo store in one or two steps. The data is generated deterministically and refreshes every hour, and writes to the demo are blocked on the server.

Epics

Progress in story points: done out of planned. Data from Jira.

Timeline

Epic start and due dates from Jira. One-day epics are shown as a dot.

Loading…

Hover over a row to see the details.

Current sprint

Task titles are shown as they are in Jira, in Russian.

Loading…

Product work

Every epic has a PRD: context, goals and non-goals, personas, FR and NFR requirements with MoSCoW priorities, metrics and risks. Stories follow the “As a… I want… so that…” format with Given / When / Then criteria. The backlog, sprints and timeline live in Jira, PRDs in Confluence. When an epic is cancelled, Jira automation closes its child tasks with the “Won’t do” resolution.

PRD: Demo mode

Problem

Someone who found the bot on their own got the reply “open the settings on the website”, and the mini app showed an error. The demo data was static, from January 2025.

Goals

  • Understand the product in one or two steps
  • The mini app opens the demo without linking a store
  • The demo is always “live”
  • The demo can’t be broken

Requirements, selection

  • FR-1Greeting on /start
  • FR-3The /demo command sends a sample XLSX report
  • FR-6Sign-in as the demo user with a valid signature
  • FR-14Hourly refresh with a stable history
  • NFR-1Writes blocked on the server (DemoGuard)
  • NFR-2No more than one file per 10 seconds per chat
  • NFR-3HMAC-SHA256 signature; a forged one gets 401

Metrics

  • At least 40% of new chats open the demo
  • At least 20% request a sample report
  • 0 days of an “empty demo”

User stories

8 stories, 28 SP

Decision record: why the “FBS returns” epic was cancelled

What we found

The Ozon Seller API has no methods to approve or reject FBS return requests; they exist only for rFBS. The request text and photos are not available through the API.

Conclusion

The epic’s main value, handling requests right from the chat, can’t be built. Notifications without actions add little.

Decision

The epic was cancelled with the “Won’t do” resolution. Worth revisiting if Ozon adds the API.

How this page updates

Sources

Task status, story points, dates and the sprint come from Jira, the counters from the repository’s master branch. Task descriptions are never published.

When

  • Every 30 seconds the server checks the master branch and the last change time in Jira
  • If anything changed, the data is rebuilt in a couple of seconds
  • Every 10 minutes, a full rebuild just in case

Build

A Node.js script builds data.json; the page reads it and redraws the live blocks once a minute.

Stack and architecture

Ozon Seller API Backend, NestJSsync, reports,scheduler PostgreSQL Website, Next.js Telegram bot Chats andmini app every 5 minutes TypeORM REST API reports and files Ozon Seller API Backend, NestJSsync, reports,scheduler PostgreSQL Website,Next.js Telegram bot Chats andmini app every 5 minutes TypeORM REST API reports
The backend pulls data from Ozon, stores it in PostgreSQL and serves it to the website and the Telegram bot.
Project authorRoman LarionovskiiProduct manager / e-commerce analyst. Experience, skills and contacts in the CV.