Financial sector, investment company (development of the group's portfolio products) · freedomgroupint.com
Team: 5 frontend (me and 4 direct reports), 4 backend, 2 designers, 2 QA, 1 PM, 1 DevOps
Projects
- dobro.ru: charity fundraising platform on Next.js 16 (App Router) + React 19. Catalog of fundraisers and NGOs, donation payments, NGO and donor accounts.
- Hector: mobile app for Android and iOS on Vue 3 + Capacitor.
Responsibilities
- Leading a frontend team of 4 developers: task assignment and workload balancing.
- Designing the dobro.ru frontend architecture on Next.js App Router: Server Components by default, client components only where hooks and events are needed; a layered component structure in which base UI knows nothing about pages.
- Building a UI kit on React and Tailwind CSS v4 with design tokens: base components, form fields, modals; acceptance of reusable components through Storybook.
- NGO and donor accounts — 20 of the platform's 37 pages: fundraisers, statistics, donation history, documents.
- Data layer: state on Zustand, server data via SWR, forms on React Hook Form + Zod, API types from the backend's OpenAPI schema.
- Code review and code standards: TypeScript strict with no any and no as casts, ESLint, Prettier, Husky + lint-staged, unit tests for every component (Vitest + React Testing Library).
- Planning and estimation in Jira: decomposition, cross-estimation of effort, tracking progress and risks per sprint; team workload analytics with Atlassian Rovo.
- Stack selection for both products: Next.js App Router for dobro.ru; Vue 3 + Capacitor over React Native, Flutter and native for Hector.
- Working out requirements and API with backend, PM and design.
Achievements
- Raised dobro.ru throughput from 340 to 4,552 rps in total across 17 routes (13.4x); median response time dropped from 919 to 69 ms (autocannon, production build). The cause was the root layout: auth and header requests were not cached, so all 39 routes rendered dynamically. Moved auth to the client, introduced caching of public requests with tags for invalidation, switched 17 routes to static and 2 to ISR.
- Cut catalog HTML from 254 to 169 KB: the 130 KB filter dictionary is loaded by the client instead of going into the RSC payload. Converted 109 images to WebP; image weight in the build dropped from 13 to 1.4 MB.
- Lighthouse across all 37 dobro.ru pages (Unlighthouse): 100 in Accessibility, Best Practices and SEO, Performance 90+.
- While reviewing my own branch, caught an ISR page that served an empty shell: useSearchParams() pushed it into client-side rendering, leaving 659 characters of text in the HTML instead of 2,398, and neither typecheck nor ~450 tests caught it. After the fix the page holds 196 rps with full content, and a check for client-rendering markers was added to the team guidelines.
- Brought Hector to a client demo build for iOS and Android from a single codebase: 26 screens for the client and the agent, 55 reusable components, ~1,700 test cases in 177 files.
- Moved iOS builds to the Codemagic cloud: a team without Macs gets a simulator build and a signed .ipa in TestFlight. Of ~20 visual bugs in the demo, closed all but one, including those visible only on iPhone.
- Stopped chronic release slips. The cause was large undecomposed tasks and gut-feel estimates by one person: introduced decomposition into 1–2 day tasks and cross-estimation, so every sprint task gets two independent estimates.
- Set up developer workload reports in Jira through Rovo: tasks are assigned by actual workload, without overloading individuals.
- Documented the project architecture for onboarding and turned code rules into instructions and skills for AI agents: new developers and agents follow the same conventions.
- Introduced shared guidelines for the React web app and the Vue mobile app: TypeScript strict with no any and no as, tests for every component. Developers move between projects under the same rules.
Stack and technologies
React 19, Next.js 16 (App Router, Server Components, ISR), TypeScript, Zustand, SWR, React Hook Form, Zod, Tailwind CSS v4, Storybook, Vitest, React Testing Library, Lexical, TanStack Virtual, GSAP, OpenAPI, SEO (JSON-LD, Open Graph, sitemap), ESLint, Prettier, Husky, Node.js, Docker, CI/CD (GitHub Actions), Prometheus, autocannon, Clinic.js, Vue 3 (Composition API), Pinia, Vue Router, VueUse, VeeValidate, vue-i18n, Capacitor, Vite, Vue Test Utils, Figma, Git, Jira, Agile, Atlassian Rovo, Claude Code, Codex, MCP