GoalTeller design system, Veer Singh
Veer Singh ←All work
GoalTeller Design system · Product Design Intern · 2026

One design language for a wealth dashboard

In three months I built GoalTeller's design system from scratch: the foundations, components and number rules behind its web app.

Read case study· 6 min Explore the system
app.goalteller.com
Search your asset Update Data VSVeer SinghPremium
Total InvestmentsLast updated on 30 Nov 2024
InvestmentsSIPSTPSWP
Net WorthNet GT HoldingReturnsAmountsCashflow
NET WORTH₹ 5,42,000+2.4%
INVESTED AMOUNT₹ 4,00,000
Your portfolioBenchmark DailyWeeklyMonthlyYearly
15.6%7.8%0%−7.3%−14.7%
Jan 2023Jan 2024Sep 2024Jun 2025
Your XIRR18.5%Benchmark14.2%
Performance Details →
Investment Score38 of 100+3 from last month
Outperforming12 fundsAbove benchmark
Underperforming5 fundsReview required
What's in my portfolio?Asset allocation breakdown→
ASSET NAMEINVESTEDMKT. VALUETOTAL RETURNSANNUALIZED
ICICI Prudential Equity & Debt FundMUTUAL FUNDSACTIVE₹50,000₹58,245+16.49%8.2%⋯
AB Bank LimitedDEMAT--₹8,001----⋯
{{ r.label }}

{{ r.text }}

RoleProduct Design Intern
Duration3 months, 2026
ProductSaaS web app, desktop
ToolsFigma, Google Fonts
01 · Context

Money screens need to read the same everywhere.

GoalTeller's web app is where investors check their net worth, holdings, returns and SIPs. When ₹5,42,000 shows as "5.42L" on one screen and "542000" on another, people stop trusting the numbers. The system had to cover the screens where those numbers live.

{{ s.title }} {{ s.body }}
02 · Starting point

No design language yet. Every decision was open.

When I joined, there was no system to inherit. Before designing screens, I listed the questions every screen would raise, so each one got answered once instead of per page.

{{ d.title }} {{ d.body }}
QUESTION {{ d.before }}
→
ANSWER {{ d.after }}#047857 with +, #DC2626 with −
03 · Approach

Decide once, then reuse everywhere.

{{ s.n }} {{ s.title }} {{ s.body }}
04 · Foundations

Tokens before components.

Every component draws from four sets of values. Click a colour to copy it; each one shows its contrast against white, which is how I caught the problem with the brand blue and the semantic colours below.

{{ g.title }}{{ g.note }}
{{ copyNote }}
Aa Poppins, from Google Fonts, in 400, 600 and 700. Sizes step from 32 down to 11, with line heights on a 4px rhythm.
{{ t.name }}{{ t.spec }} {{ t.sample }} {{ t.use }}
A 4px base grid. Token names match the CSS variables engineers use.
{{ s.name }} {{ s.token }} {{ s.use }}
{{ r.name }}{{ r.label }} {{ r.use }}
Accessibility fix I split the brand blue into two tokens. White text on the original #00A8FF measured 2.6:1, below the 4.5:1 that WCAG AA asks for. Primary Blue moved to #0077B6 for buttons, links and active states. The bright #00A8FF stays as Sky Blue for charts, highlights and focus rings, where it carries no text. I applied the same check to the semantic colours: green, amber and red moved to #047857, #B45309 and #DC2626 so returns and alerts stay readable.
Update Data Before · #00A8FF · 2.6:1, fails AA
Update Data After · #0077B6 · 4.9:1, passes AA
05 · Number rules

In a finance product, numbers are components too.

I wrote formatting rules for currency, returns, rates and table figures, using the Indian numbering system. Try a value.

{{ f.name }} {{ f.value }} {{ f.rule }}
06 · Components

12 component groups, each with a job.

Every group documents its states and when to use it. These specimens are live, so hover and click them.

ButtonsThree levels of emphasis
HIGH · PRIMARY
PREMIUM · GRADIENT
MEDIUM · SECONDARY
Tab togglesSegmented control
Grey container, the active item in white with a soft shadow. Used to switch views of the same data.
Filter pillsActive and inactive
Active: Primary Blue fill, white text and a shadow. Inactive: white with a border. Used to narrow a list.
Badges & tagsStatus and category
DEMAT SEEDER ACTIVE INVESTED PENDING
Mutual Funds Bonds Bank Savings
One rule for every badge: a light shade background (100–200) with a dark shade text (700–900) of the same colour.
Search input44px height
Search your asset 16px padding after the icon. Focus shows the primary border and a soft ring; hover it to see.
Alert bannerAction required
! Action requiredAs per SEBI's latest rules, you need to provide your complete details to continue investing.
Warning amber, reserved for regulatory and account issues that block the user.
07 · Patterns

The holdings table, specified line by line.

The table is the densest screen in the product. Hover a row to see its menu, or pick a rule to highlight where it applies.

ASSET NAMEINVESTEDMKT. VALUERETURNS
{{ h.name }}{{ h.badge }} {{ h.inv }} {{ h.mkt }} {{ h.ret }} ⋯
Rule: {{ ruleText }}
08 · Layout

One page frame for every screen.

Sidebar256px Header64px · sticky Main contentmax 1280px · 32px padding
{{ l.title }} {{ l.body }}
09 · Reflection

What I learned, and what comes next.

{{ l.title }} {{ l.body }}
Next
{{ l.title }} {{ l.body }}