All work

Shipped · Apr 2026 – May 2026

FinMayak

Gamified financial literacy app paired with a real portfolio builder, contracted by FinUslugi (Moscow Exchange's consumer financial marketplace).

Role
Backend Developer · contract via FinUslugi
Stack
FastAPIMOEX ISS APIiOSAndroidCustom CMS
Numbers
Live MOEX market feedsMulti-module curriculumiOS + Android + admin CMS
Verify
API docs ↗Admin panel ↗
FinMayak admin CMS — page list, phone preview, and content editor for authoring a lesson on inflation

FinMayak · the story

Lessons that move with the market.

Scroll

Live
MOEX quotes inside lessons and portfolios
4
risk buckets in the practice portfolio
3
clients on one API: iOS, Android, CMS
May 2026
shipped and handed off

A practice portfolio, marked to market.

Four risk buckets · must total 100%

Once the foundations are cleared, users allocate a practice balance across four buckets, then watch it move against live MOEX prices.

From a lesson to a position

LESSON

short scenario module, gated by the ones before

QUIZ

checks the idea, awards XP and keeps the streak

UNLOCK

foundations clear the portfolio builder

ALLOCATE

a practice balance across four risk buckets

MARK

portfolio marked to live MOEX prices on every read

The instruments in lesson 1.3 are the ones in the portfolio

What the market layer absorbs

App reads

served from cache, marked to market

Upstream MOEX calls

TTLs sized to the trading session

Open hours never hit the upstream

FinMayak · the write-up

How it was built.

Project highlights

  • Contracted backend role via FinUslugi, the consumer financial marketplace owned by Moscow Exchange.
  • FastAPI service backing iOS, Android, and a custom admin CMS for the content team.
  • Live MOEX ISS API integration so practice portfolios run against real market data.
  • Shipped end-to-end and handed off to FinUslugi’s internal IT team in May 2026.

What I built

  • FastAPI backend — auth, lesson delivery, progress, XP/streaks, portfolio simulation.
  • Market data layer wrapping MOEX feeds with caching for trading-hour load.
  • Custom CMS so editors can author lessons, quizzes, and interactive widgets without a release.
  • Mobile contributions: iOS & Android client work alongside the platform teams.

The product

FinUslugi wanted financial literacy that wasn’t a PDF. The app pairs Duolingo-style learning paths with a portfolio builder where users actually pick stocks, funds, and bonds against live MOEX market data and watch how their picks perform. The mascot is Маяк — a lighthouse that tracks streaks, awards XP, and pulls users back the next day.

Lessons are short and scenario-driven (“Маша earns 80,000 ₽ and spends 60,000 ₽ — what emergency fund does she need?”), structured into modules that gate each other so learners build foundations before touching brokerage mechanics or risk allocation. The same instruments that show up on the home dashboard ticker bar are the ones users encounter inside lessons and inside their practice portfolio — one coherent surface across the whole app.

FinMayak home screen with MOEX, Yandex, and Severstal tickers, today's lesson card, and a list of the Money ≠ Investments module
home dashboard
Quiz screen — a five-of-seven question about choosing the right emergency fund size with multiple-choice options
scenario quiz
End-of-lesson celebration screen — lighthouse mascot, +50 XP awarded, one-day streak, 150 XP total
lesson complete

home · quiz · celebration — the gamified learning loop

Live MOEX market layer

The backend’s most interesting bit. MOEX feeds change throughout the trading day, and the gamified learning paths reference the same instruments users hold in their practice portfolios — so every educational module has to stay coherent with whatever the market is doing right now. Quote a stock in lesson 1.3 and a user can flip to their portfolio and see that same instrument’s price tick moments later.

The market layer wraps the MOEX ISS API, normalises instrument metadata, and caches quotes with TTLs sized to the trading session so we never blow up the upstream during open hours. Portfolios are mark-to-market on every read; the CMS surfaces an instrument picker driven by the same data so editors can’t reference a delisted ticker.

Practice portfolio against real data

Once a user clears the foundational modules they unlock the portfolio builder. They allocate a fixed practice balance across high / medium / medium-low / low risk buckets, then drill down to specific instruments inside each bucket — growth stocks, dividend payers, bonds, money-market funds. The allocation has to total 100% before they can submit, and from that point the portfolio updates against live MOEX prices on every visit.

The point isn’t to teach trading. It’s to give users a low-stakes surface where the abstractions from the lessons (volatility, correlation, drawdown, duration) become things that actually move on their phone the next morning.

Portfolio allocation screen with sliders for high, medium, medium-low, and low risk categories totalling one hundred percent
risk-bucket allocation, sums to 100%

Custom admin CMS

Pictured at the top of this page. The FinUslugi content team needed to author lessons, quizzes, and interactive widgets — calculators, scenario sliders, instrument pickers — without touching code or waiting on a mobile release. So I shipped a custom CMS: page tree on the left, a live phone preview in the middle, and a typed editor on the right.

Each page is composed of typed visual blocks (text, calculator, quiz, instrument picker, etc.). Editors pick a block type, fill in its fields, and the preview re-renders against the same component tree the mobile clients use. Content publishes over the air to the apps — no app-store review required for a new lesson, no engineer involved past the initial block type definition.

Shipping & handoff

Built on a tight contract window between April and May 2026, then handed off to FinUslugi’s internal IT team for ongoing operation. The CMS is the part that keeps paying off: the content team can author and ship new modules without backend involvement for routine work.

End of FinMayak

Next project

Autostickers

A Telegram bot that bought tokenised sticker packs on TON the moment they dropped. 2,300 users and $152k of packs in its first two days, with no advertising.

Next page