Mofid Securities is one of the largest brokerages in Iran, with products ranging from an investment app with 1.5M+ users to trading platforms, payment tools and internal back-office services. Each product team kept its own UI kit, and the company was traditional enough that a design system had to be argued for before it could be built. So we began with feasibility studies and benchmarks, to show that a shared system means faster delivery and more consistent products.
02 / Research
Who uses it, and what stands in the way
We mapped every digital product the system would serve into a cluster map, to see the users, how the products connect and which ones carry the most risk. That map set the order of the work.
The hardest part was not the components. It was getting designers, developers and product owners to use the system, test it and help decide what came next. Interviews with product managers and designers showed the same pattern: without a system, every idea waited on design and refactoring.
fig. 03 · Key insightsFrom the product manager's side
03 / Structure
Three systems under one roof
We split the work into three systems, each responsible for its own assets and rules: the Mofid Component System (MCS), the Mofid Design Language (MDL) and the Mofid Brand System (MBS). The design system sits above them and keeps the whole thing centred on users.
fig. 04 · MCS · MDL · MBSEach system owns its assets
Color is a good example of how they connect. The brand system gives the brand colors, the design language turns them into a ramp, and the component system turns each step into tokens for backgrounds, text and icons.
fig. 05 · From brand color to token#004B69 → Mofid Blue/100 → bg-mofidblue-filled-primary
fig. 06 · Branded imagery in componentsProduct logos, illustrations, photography
04 / Roadmap
Five phases, from research to Storybook
Phase 01
Feasibility study
Research
Benchmark
Design structure
Team roles
Phase 02
Product owner onboarding
Scrum
Visual audit of products
PM, PO and designer interviews
Empathy map
Brainstorming
Phase 03
Foundations design
Atom components
User feedback
General icon library
Product icon prototype
Networking
Product ambassadors
Phase 04
Strategic roadmap
Team development
Technical features
Publishing platform research
Technical process
Design community, 14 sessions
Phase 05
Foundations library
Atom library
Molecule components
Functional tests
Second visual audit
UX writing guidelines
Storybook library
Each request went through the same loop: organize, prioritize, technical and product research, design and test, then library, development, publishing and documentation, with iteration at every step. Changelogs and weekly design talks kept the improvements small and steady.
fig. 07 · Our processDesign thinking, with iteration loops
05 / Foundations
Foundations first, then components
We audited the existing products and set shared foundations first: color, typography, radius, elevation, spacing and icons. Components came next, in the order products used them most, with tokens shared between Figma and code.
fig. 08 · ColorPrimary and secondary, tints and shades in 15% steps
fig. 09 · TypographyOne family for Persian and English, token names match code
Every screen in the library works in light and dark mode. Version 3.0 restructured the whole library. Every component comes in 7 color styles and 5 appearances, and colors, sizes and radii come from tokens, so a product can change its theme through modes instead of detaching components.
39components and patterns
289component sets
12,048variants
114icon sets, 3,156 icons
Button · 7 styles × 5 appearances
NeutralMofid BlueMofid GreenSuccess · BuyError · SellWarningLink · Info
Filledدکمهدکمهدکمهدکمهدکمهدکمهدکمه
Filled invertدکمهدکمهدکمهدکمهدکمهدکمهدکمه
Outlineدکمهدکمهدکمهدکمهدکمهدکمهدکمه
Tonalدکمهدکمهدکمهدکمهدکمهدکمهدکمه
Ghostدکمهدکمهدکمهدکمهدکمهدکمهدکمه
fig. 11 · Button matrix, rebuilt in codeHover or switch the mode
Mofid Design System · components in use
fig. 12 · Light and darkSame components, two modes
Persian first, English too. Text components carry a language property for Persian, Arabic and English, so RTL and LTR use the same component.
Light and dark. Components have a dark mode, and the button library was checked in both.
Prototype-ready. Hover and pressed states are wired in, so prototypes behave like the product.
Product-specific inputs. Masked inputs for Shaba (IBAN), currency and numbers, because those are what fintech forms ask for.
07 / Component slot
Flexible layouts without detaching
Designers can't, and shouldn't, edit layers that a component doesn't expose in its properties. But dialogs, cards and sheets need layouts that change from screen to screen. We added a component slot: a placeholder inside a component that can be swapped for any other component. Designers build the layout they need, and the result stays connected to the library.
fig. 13 · Component slotSwap, don't detach
08 / In products
Built from real screens
Larger patterns, such as the date picker, table, side bar and bottom sheet, were designed against real product screens, with Persian (Jalali) calendars, quick ranges and the dense tables trading screens need.
fig. 14 · Date picker in useMobile, form and back office
09 / Versioning
Every component has a history
Each component page has a status track, from designing to review, approval, development and live, and a changelog that says what changed, why and who changed it. Engineers could see what was ready to build without asking.
fig. 15 · Button changelogBeta → 3.1.0
10 / Adoption
Adoption is part of the design
A system only helps if teams use it. We onboarded product owners, designers and developers separately, named a design ambassador in each product team, and ran a product design community for 14 sessions.
Documentation for every component: usage, states and do's and don'ts.
Walkthroughs and reviews with each product team.
UX writing guidelines and shared terminology.
A contribution path for new components and icons.
fig. 16Design talk · Mofid Securities
11 / Results
53% adoption across 8 products
By the end of Q2 2024, 53% of the company used the system. Implementation time dropped by 37%, and teams saved 212 hours a week.
53%adoption
−37%implementation time
−34%design time
212hsaved per week
12 / Team
Mofid Securities DesignOps team
Mohsen HaqshenoTeam lead
Mahmood SanaeiUX engineer
Ahmad AbbasiUX engineer
With thanks to Majid Abparvar, Head of Design, and Nima Vafabakhsh, Omid Roshan, Arian Bahreman, Mohammad Reza Sahraei, Soheil Yousefshahi and Mohammad Amin Masoudi.
Sarnakh ("hint" in Persian) explains financial features in context, inside the screen where people need it.
RoleProduct Designer
TeamPM, CEO, front-end and back-end developers
Timeline2 sprints, 1 month, 2024
PlatformMofid app, iOS and Android
MB-02iOS · Android
01 / Challenge
People did not understand key features
The existing support flow did not explain financial concepts at the moment people needed them.
Users needed a better understanding of app features.
Support was not meeting educational needs.
Financial concepts needed explanation in context.
Content had to scale across the whole app.
02 / Research
Where people got stuck
We analysed support tickets, reviewed metrics from the existing story-based help, interviewed users about how they prefer to learn and mapped their journeys through the app.
03 / Solution
Help inside the screen, not outside the app
A bottom sheet replaced the old support entry point. Each screen shows the hints relevant to it, as short guides, tutorials, FAQs and videos, with a path to online support when a hint is not enough.
04 / Final design
Three states, five content types
The sheet adapts to how many hints a screen has: none, a few (1–4) or many. Content types cover onboarding, short explanations, long text, financial literacy and new features.
Onboarding
To the point
Long text
fig. 01 · Hint typesRTL · Persian
No hintsFew hints (1–4)Many hintsFinancial literacyNew features
05 / Implementation
Shipped in four phases
Core UI and functionality
Content for key actions
Explore mode
Onboarding across all features
06 / Results
47% fewer support tickets
Measured after launch across the Mofid app.
−47%support tickets
+32%feature adoption
3.8×engagement with education
+22%new-user retention
07 / Learnings
Small, in-context help works better
Contextual education works better than general tutorials.
People prefer short pieces while they use a feature.
Auto Invest lets people set a schedule once and invest in Mofid funds automatically, straight from their bank account through a direct debit mandate.
RoleProduct Designer
CompanyMofid Securities
Timeline2022 — 2024
PlatformsiOS, Android, Web
Prototype · real screens
Recurring investing, explained on one screen.
01 / Context
Investing by hand, every month
Buying fund units in the Mofid app meant opening the app and placing an order each time. People who wanted to put a fixed amount aside every month had to remember to do it.
The goal was simple to say: let people choose a fund, an account, a schedule and an amount once, then have the app invest for them, without coming back and without worrying about forgetting.
02 / The flow
Four choices, one at a time
Setup is one screen with a checklist of four steps: where to invest, where to withdraw from, how often, and how much. Each step opens a bottom sheet that says which step it is, and the checklist fills in as people go.
سرمایهگذاری درصندوق سرمایهگذاری مورد نظر
انتخاب کنید
برداشت ازحسابی که میخواهید از آن برداشت کنید
انتخاب کنید
در دوره زمانیدوره زمانی سرمایهگذاری را انتخاب کنید
انتخاب کنید
مبلغمبلغ هر سرمایهگذاری را تعیین نمایید
انتخاب کنید
ادامه
fig. 01 · Setup checklist, rebuilt in codeRTL · Persian
1 · Invest in
2 · Withdraw from
3 · Period
4 · Amount
fig. 02 · The four stepsEach sheet shows “1 of 4” to “4 of 4”
03 / Decisions
Small choices that remove friction
A checklist instead of a long form. People see all four steps up front and each finished step shows its value, so they know how much is left.
Continue always moves forward. If something is missing, Continue opens the sheet for the first empty step instead of showing an error.
More than one day a month. Monthly or weekly, several days at once, “last day of the month”, and a note when a day already has a schedule.
Quick amounts and visible limits. Chips for 500 thousand, 1 million and 5 million toman, with the minimum and maximum written under the field.
No surprise at the bank. The review screen says people will be sent to the bank to finish the mandate, and that their mobile number must match the bank's.
Inline limit
Review
Done
fig. 03 · Errors, review and successThe success screen repeats the plan in one sentence
04 / After setup
Schedules people can trust
A schedule lives for months, so the part after setup matters as much as setup. Every schedule shows its state as a chip, and the detail page keeps pause, edit, delete and the bank mandate in one place.
fig. 04 · Managing a schedulePause asks once, in plain words
05 / Education
Why invest every month
Recurring investing is a habit more than a feature. A short series of hints, built on the same in-app education system as Mofid Hints, explains why it helps and how the mandate works, inside the screen where people decide.
Hint · Why recurring investing?
06 / Web
The same steps on the web
On the web the four steps open as a dialog over the page, with the same counter and the same quick amounts, so people who start on one device recognise the flow on another.
fig. 05 · Web, step 4 of 41280
07 / Iterations
Two beta rounds, then 1.0
The feature went through two beta rounds with the product and engineering teams before 1.0. I kept a changelog in the Figma file so everyone could see what moved.
Renamed the feature to “سرمایهگذاری مستمر” (recurring investment), and rewrote the empty state and button labels to match.
Removed annual yield from the fund picker and dropped a separate terms page from the flow.
Replaced “contract” with the bank mandate and its expiry date, with receipts for cancelling or extending it.
Added status chips, a pause confirmation and editing of the mobile number before the bank step.
Added the education hints.
08 / Result
Shipped on mobile and web
Auto Invest shipped in the Mofid app for iOS, Android and the web, for an app with more than 1.5 million users. Usage figures are internal, so I don't publish them here.
The fund details page used to put everything on one long screen. I split it into tabs, made buying easier to reach, added recurring investment, rebuilt the charts and added education and support videos.
RoleProduct Designer
CompanyMofid Securities
Timeline2023 — 2024
PlatformMofid app, iOS and Android
Prototype · real screens
Your holdings first, with buy and sell always at the bottom.
01 / Problem
Everything on one page
Holdings, fund information, returns, transactions and the buy button all sat on one long screen. People who owned units had to scroll past the fund description to see their own money, and people who were new to the fund had no clear place to learn about it.
02 / Tabs
Three tabs for three questions
The page now answers one question per tab: what do I have, what is this fund, and where can I get help. The header with the fund, its type and its daily return stays on top, and buy and sell stay at the bottom on every tab.
داراییHoldingsValue, units, profit and loss, active transactions and recurring investment.
معرفی صندوقAbout the fundWhat it is, its features, return comparison and asset mix.
مشاورهAdviceQuestions, videos, a course and a path to a human advisor.
Holdings
About the fund
Advice
fig. 01 · The three tabsHover a phone to scroll it
03 / Buying
A shorter way to buy
Buy and sell moved into a fixed footer, so they are always in reach without scrolling. Recurring investment sits right under active transactions, with its status and a one-tap way to turn it on, so people can go from a single purchase to a monthly plan from the same page. The setup flow is the one from Mofid Auto Invest.
Holdings stay private. An eye icon hides the value for people who check the app in public.
More details on demand. The holdings chart opens in place instead of on a new screen.
Transactions in context. Pending and in-progress purchases show on the fund they belong to.
04 / Charts
Compare the fund with what people know
Instead of one return number, the chart compares the fund with the benchmarks people already think in: the stock market, the dollar, gold and gold coins. Tapping a benchmark draws it against the fund, and each row shows its return for the selected period.
مقایسه بازدهی عیار
عیاردلار
fig. 02 · Return comparison, rebuilt in codeTap a benchmark · sample data from the design file
Holdings chart with tooltip
05 / Education
Learn before you buy
The advice tab brings education to the fund page: a short video about the fund type, a full course from Mofid Education with its own player, answers to common questions, and a way to book a session with a Mofid advisor when that is not enough.
Intro video
Course
Player
fig. 03 · Education on the fund pageVideo, course, questions, advisor
06 / States
Designed for every kind of visitor
The same page had to work for three people: someone who owns units, someone who doesn't, and someone who doesn't own units yet but has a transaction in progress. Each state changes what the holdings tab shows first.
دارایی داردOwns unitsHoldings, chart, profit and loss and transactions.
دارایی نداردNo unitsOpens on the fund and a clear way to buy.
تراکنش داردTransaction in progressShows the pending purchase before anything else.
07 / Iterations
Shipped in small versions
The page was tracked with the same versioning as the design system, so engineering always knew what had changed.
2.0 · Changelog added and text colors improved.
2.1 · ETF transactions, improved transaction list and a documented user flow.
2.2 · Button group colors updated to the new tokens.
Tecnogas is an Italian maker of professional cooking appliances, in Gualtieri since 1952. I'm designing its websites for Italy and Iran, from the sitemap and wireframes to a custom design system, UI kit and motion.
RoleUX/UI and design system
Sitestecnogas.it · tecnogas.ir
StatusIn progress · 2026
BreakpointsDesktop 1200 · Mobile 390
Presentation film · 55 sBuilt with the project's own tokens and components
01 / Brief
Built for the heat
Tecnogas sells cookers, ovens, hobs, drawers and hoods in four series: Oriana, Futura, Pro New and Next Eco. The old sites listed products but didn't show the brand: an Italian family business that builds appliances for people who cook every day. The new sites had to feel premium, stay easy to browse, and work in Italian and English on tecnogas.it and in Persian, right to left, on tecnogas.ir.
02 / Research
Benchmarked against the category
Before any layout, I reviewed how premium appliance brands present products, series and service: navigation, product pages, comparison, dealer search and support.
I mapped both sites into one sitemap with shared components, then wireframed every template: home, our story, product category, product detail, series, magazine, where to buy, service, FAQ, become a dealer, find your model number, product advisor and more. Products can be browsed two ways, by product type or by series, which shapes the mega menu.
Two axes in the menu. By product (cookers, ovens, hobs, drawers, hoods) and by series (Oriana, Futura, Pro New, Next Eco).
Tools that answer real questions. Find your model number, compare products and a product advisor.
One structure, two markets. tecnogas.it and tecnogas.ir share templates, with market and language rules for each.
04 / Design system
Three brand colours, everything else derived
The brand book gives three colours: rich black, Tecnogas red and white. Every other value, from the neutral ramp to semantic colours, is derived from them, so the system has no off-the-shelf palette.
White on brand red fails AA for body text, so solid brand fills step down to brand 700. Brand red and error red share a hue, so error colour is kept for destructive actions and always comes with an icon and a label.
fig. 02 · ContrastWCAG AA
fig. 03 · TypeNunito · Anjoman (RTL)
fig. 04 · GridFive breakpoints
Nunito sets the Latin sites and Anjoman the Persian site. Five breakpoints use a fixed grid for editorial pages and a fluid grid for dense catalogue and comparison views.
05 / UI kit
Components with every state
Buttons, inputs, selects, toggles, checkboxes, tags, tooltips, menus and the compare table are built on the token set, each with default, hover, focus, disabled and loading states. One icon family runs across navigation, product features and service flows, at a weight that sits well next to Nunito.
fig. 05 · UI kitStates and validation
fig. 06 · IconsOne stroke family
06 / Website
The product in a real kitchen
The home page opens with professional cooking, then lets people choose a series and see its full range inside a real kitchen. The story of the company, made in Gualtieri since 1952, sits next to the products instead of on a separate page nobody opens.
fig. 07 · Hometecnogas.it
fig. 08 · SeriesOriana · Futura · Pro New · Next Eco
fig. 09 · StorySince 1952
fig. 10 · Mobile390
07 / States
Designed for when things go wrong
Every template has its error and edge states: page not found, server error, maintenance, offline, a section that fails to load, empty search and filters, no dealers nearby, a discontinued product, coming soon, and form validation, sending, success and failure.
08 / Handoff
Ready for engineering
Each page ships with redlines, tokens, component usage and export notes, plus motion tokens for duration, easing, distance and sequence, with a rule for mirroring motion in right-to-left layouts. A UI checklist, written in English and Persian, keeps every new page consistent.
I'm a product designer. I make complex products easier to use.
I'm a Senior Product Designer in Tehran, working with teams in Iran and abroad. I started in UI, moved into product design at Mofid Securities, and now design travel products at Snapptrip.
The system this site is built with. Every page you see here comes from the same tokens and components, documented the way I document product systems at work.
Navy carries text and structure, teal marks what is interactive, and lime is kept for small signals: status, selection and focus. Neutrals take a slight blue bias from navy, so greys never look flat.
Contrast, WCAG 2.1
AaNavy on paper14.1 : 1 · AAA
AaInk soft on paper7.0 : 1 · AAA
AaMuted on paper5.2 : 1 · AA
AaTeal on paper5.2 : 1 · AA
AaWhite on navy15.1 : 1 · AAA
AaLime on navy7.1 : 1 · AAA
Foundations / 02
Typography
Poppins · JetBrains Mono · 8 styles
Display and textAa
Poppins
Geometric and calm. Medium for headings, Regular for reading, SemiBold only for the name on the home page.
Why naming, scoping and ownership decide whether a design system lasts.
Ahmad AbbasiOct 12, 2026
Every design system starts as a palette. The ones that last become a contract: a shared agreement between design and code about what a value means, who owns it and when it can change.
Name the intent, not the value
"blue-500" says what something looks like. "color/action/primary" says why it exists. When the brand changes, intent-named tokens stay valid.
color/action/primary → navy
color/action/primary-hover → navy-900
radius/card → 4
Scope before you ship
Give every token a scope: fill, text, stroke or spacing. Unscoped tokens show up everywhere, and people pick the closest one instead of the right one.
A token is only useful if two people read it the same way.
First published on ahmadabbasi.com · Also on Medium