Published with KFintech’s permission. Client names and market data are changed. Happy to walk through the real work on a call.
Problem
The real owner stayed hidden
Every Friday, an investor relations (IR) team gets a fresh shareholder list. Then it tells the CEO and CFO who bought, who sold and what analysts expect, using scattered tools. But the biggest buyer may show up as small funds that look like strangers.
Each fund stays under 1%, below the line where filings must name the holder. The team saw the price move, not who moved it.
IR heads could tell from experience which funds belonged together. The data couldn’t, so every Friday one investor arrived in pieces.
KFintech saw a paid add-on for the listed companies whose shareholder register it already keeps. Two limits held throughout: share prices arrived 15 minutes late, and demo dates never moved.
Deep dive: how Indian ownership data works
A listed company’s shareholder register is kept by an RTA (registrar and transfer agent); KFintech is one. Shares are held electronically at India’s two depositories, which send the RTA a full holder list called BENPOS (beneficiary position) every Friday.
Foreign institutions invest as foreign portfolio investors (FPIs, often still called FIIs) and register with SEBI, India’s market regulator. In the shareholding pattern a company files with NSE and BSE, India’s two stock exchanges, public holders above 1% are named. Holders below it are not, which is why a stake split across related funds can stay out of view.
A bulk deal is a single-day trade in more than 0.5% of a company’s shares. A block deal is a large trade done in a separate, short trading window. Both let a big seller pass shares to a known buyer.
IR team
Reads ownership every week
- Role
- Investor relations team at a listed company
- Job
- Tell the CEO and CFO who bought, who sold and what analysts expect
- How often
- Weekly, after the Friday shareholder file (BENPOS)
- Pain
- Fragmented tools and manual work; funds under 1% each hide the real owner
Platform admin
Keeps fund mapping correct
- Role
- Superadmin who maintains the fund-to-parent mapping
- Job
- Link each fund to its parent investor by SEBI registration number
- How often
- Weekly, when new unmapped funds arrive in the Friday file
- Pain
- About 12,000 foreign institutions to map; a wrong merge misstates ownership
How I worked
Two days to a yes
No product yet, only an hour or two of context.
- Feb 202514-screen MVP in two days. Showed stakeholders what we were trying to make; approved.
- Feb–Mar 2025Requirements doc, IR-head calls. Our own IR team first; the fund-merge need surfaces.
- Mar 2025V2 and V3. About 70 screens, dark to light.
- 2025Final design, clickable prototype. The first clients sign on it.
- Apr 2026Live. 12 modules, 4 client companies.
With a new client coming, I designed 15 to 20 new screens in one night, logic and all.
Repeats every Friday
- 01
Friday file arrives
BENPOS: the full holder list from the depositories
- 02
Parsed
Each holder row is read from the file
- 03
Unmapped funds flagged
They wait in Other buckets with a warning
- 04
Admin maps to parent
One parent per fund, by registration number
- 05
Ownership tabs update
New, exits, top buyers and sellers, by country
- 06
Weekly report email
The IR team gets the summary
When it goes wrong
- Exception, steps 1 and 2
Upload failed or late
A reminder email goes out and the file is uploaded again
- Waiting, step 3
Unmapped fund
Stays visible in its warning bucket until someone maps it
- Undo, step 4
Wrong merge
Reversed from the audit log, which records every change
Change 01
Every fund gets a parent
Rejected first: merging rows in the holder table. A wrong merge misstates ownership.
The PM chose manual mapping: link about 12,000 foreign institutions registered with SEBI, India’s market regulator, to their parents, with an override. I dropped my first idea, merging rows in the holder table. A wrong merge would misstate ownership and be hard to spot or undo.
Each parent lists its funds by registration number. Unmapped funds wait in a flagged “Other” bucket, in plain sight. One screen shows every fund behind an investor.
Change 02
One tab per Friday question
Ownership was the hardest module, 24 frames to settle. One table with filters meant the same filtering every Friday, so each weekly question got a tab:
Who is new?
Who left?
Who bought or sold most?
Which block deals moved shares?
Where are holders based?
The sellers tab is where the team acts. When a big holder wants out, IR finds one buyer for the block (one large trade) before the sale drags the price down.
Every Friday the team re-applies the same filters to answer each question.
Each Friday question is one click away, and every table names the two dates it compares.
Rejected: one table and filters. Chosen: a tab for each weekly question.
Change 03
Icons became named jobs
The MVP’s sidebar had 5 icons. Each new module added one, until there were 13, none labelled. I added labels and regrouped them by IR job.
Shareholding Analysis became Ownership. Mail Back became Communication, the meeting log became IRM (investor relationship management), and four modules dropped out.
V1, Feb 2025
5 icons, no labels
- home
- document
- calendar
- puzzle
- bookmark
V2 and V3, Mar 2025
13 icons, no labels
- dashboard
- calendar
- newspaper
- calendar event
- newspaper (V2), numbers (V3)
- stock
- user add
- bar chart
- folder chart
- pie chart (V2), smile (V3)
- scan
- line chart
Final design
14 labelled items
- Dashboard
- Calendar
- Market Insights
- Analyst Consensus EstimationRemoved
- Peer Analysis
- Shareholding AnalysisRenamed
- Price Volume Movement
- Investor Conversion
- Investor Targeting
- ComplaintsRemoved
- Event Graph
- Ask AiRaRenamed
- DirectoryRemoved
- Broker conferenceRemoved
Shipped, Apr 2026
12 labelled items, grouped by IR job
- Dashboard
- Calendar
- Market Insights
- CommunicationWas Mail Back
- Peer Analysis
- Ownership
- Price Volume Movement
- Investor Conversion
- Investor Targeting
- Event Graph
- IRMWas the meeting log
- Ask AiRa
Change 04
Events on the price line
IR teams must show leadership how results, dividends and roadshows line up with the price. The Event Graph puts them on the chart, beside a peer’s. Labels worked in the MVP until clustered results collided. The shipped build uses markers with hover details.
Change 05
AI, minus the gimmick
Everyone was adding AI, and the PM and I didn’t want a gimmick. It would also cost money. We went ahead because IR users could ask what’s on their mind instead of scrolling hundreds of rows.
Ask AiRa runs on Gemini 3 Flash and answers only from the portal’s own data. The tech team ruled out the web, so I made the limit visible.
Starter prompts are real IR questions. Each answer names its source module. Out-of-scope questions get a plain no; missing data gets a pointer to the right module.
It can also schedule. It asks for the details, shows a draft card, and saves nothing until the user confirms.
What failed
Design both, decide later
The funniest battle was light mode against dark mode. Some stakeholders wanted light, others dark, so we designed both and decided later.
Dark impressed in the first review. In demos, IR users said the dense tables were hard to read. I pushed for light, and it carried.
When I measured it later, the body text passed (9.6:1), but the Buy chip failed AA at 3.58:1. Now I judge a new style on the densest table before the demo dashboard.
Deep dive: measured contrast, V2 dark vs final light
Computed with the WCAG 2 formula from the fills in the Figma file, translucent layers composited in order (page, card, row). Checked a second way by rendering both tables and reading the pixel colours: every pair lands within 0.2 of these values, and no pass or fail changes.
| Pair | V2 dark | Final light |
|---|---|---|
| Body text on row | 9.60:1 (passes); 8.44:1 on alternate rows | 13.98:1 (passes); 13.35:1 on alternate rows |
| Column header | 9.92:1 | 5.04:1 |
| “Buy” status chip | 3.58:1 (fails AA for small text) | n/a in this table |
| Card against page | 1.27:1 | 1.10:1 |
| Zebra row against row | 1.14:1 | 1.05:1 |
Outcome
Live, and sold on the prototype
AEGIX has been live since April 2026 with four client companies. The first signed on my Figma prototype, before the build.
I also designed four shipped emails, the meeting log, the derivatives block and AGM (annual general meeting) summaries.
Proven
- Live as AEGIX since April 2026
- Four client companies
- The first signed on my Figma prototype, before the build
What I’d measure next
- Hours on the weekly update
- The share of holdings still unmapped
- How often an AiRa answer ends the search
“The Figma design was the base everything else was built on. It helped the company and the team turn an idea into a live product. Amandeep took feedback well and stayed up till 5 am with us before a client meeting.”
Names left out for privacy. Happy to share references.
Retrospective
Components from day one
I made a basic style guide because I wanted some structure, but no components. Fine while I worked mostly alone. Once two more designers joined, screens multiplied and so did rework. Next time, components come first.
Two habits came out of it: get the business context in one sitting before building anything, and test the edge cases more than the beautiful screens.



























