Anannyaa Kapur
Role
Product Lead, Design Engineer
Skills
Product Design, UX, UI, Frontend Implementation
Tools
Claude Code (with Opus 5)
Timeline
August 2026 (2 weeks)
Status
Shipped, Aug 2026

Data-connected report builder for university funds

Overview

Two weeks to land two pilot SMIFs, with a report editor built in code

At student-managed investment funds (SMIFs), analysts pitch investment ideas through written proposals or reports that make the case for a position before the fund’s investment committee decides on it. But the work behind each report is scattered: analysts research in one tool, build charts in another, and write in a third. With two university funds set to onboard in two weeks, I designed and build QuantLink’s report editor directly in code.

With QuantLink Reports, analysts can write proposals with integrated platform data, using a library of components, page layouts, and branded templates, or create their own. The beta shipped in two weeks and helped secure two additional funds from a big university as clients.

The Ask

Analyst workflows are scattered across tools. How can we help?

After having demo calls with 6 SMIFs (Student-Managed Investment Funds) at universities across the US, there was one pain point that kept coming up: analysts’ current workflows are very segmented across different tools. They gather their data from one platform, consolidate in another, build charts and model portfolios in another, and create investment proposal reports and stock pitch decks in another. This segmentation leads to issues like stale data and inconsistent formatting across analysts.

I recognized a unique opportunity to consolidate their workflows within our platform. The team and I discussed the possibility of giving users a productivity suite consisting of a document builder and a deck builder within our platform, connected with our data and the other features in the platform, and all the SMIFs we discussed this with were very enthusiastic about it.

I prioritized building out the report builder first and the deck builder was scoped out for later. Engineering a deck builder is a lot more structurally complex than reports, given a big part of it is that users can freely place elements anywhere on a slide and a big part of a successful deck builder is the smoothness. I decided to start with reports, using it to engineer the logic of elements that would apply to decks as well, like components, layouts, and templates.

Diagram of ten tools an analyst juggles to write one investment proposal: data from Bloomberg, FactSet, S&P, Morningstar, Koyfin, TradingView and Yahoo Finance flows through Excel into Word and PowerPoint.

The Constraint

We had 2 weeks until the SMIFs’ onboarding, so I designed directly in code

We were scheduled to host onboarding calls with 2 university SMIFs in 2 weeks, where we were going to onboard them onto the platform. I wanted to have a beta version of Reports up for the onboarding meetings, which created a tight deadline.

The most efficient way to design this was directly in code, since a lot of the feature’s fundamental UX, like cursor behavior, pagination, drag-and-drop, and live data embeds, would be best tested and configured when they’re live and able to be used.

The building phase was split into 2 weeks. Week 1 went to putting together an MVP focused on getting all the fundamental features and functionality live. Week 2 was spent on advanced functionality like custom report template creation and report theming, but scope had to give: theme editing for user-created templates turned out to be a harder design problem than the week allowed, so it was deferred.

The Core Architecture

The classic text editor interface layered with modern and advanced editing features

The Reports feature was going to consist of three layers:

  1. Traditional word editor skeleton: Ultimately, the fundamental purpose of the feature is for analysts to build text-heavy reports that end up as PDFs or printed documents. Traditional word editors like MS Word and Google Docs are built for detailed text editing. Additionally, given these are the tools analysts currently use to write reports, they’re already familiar with that surface and mental model.
  2. Modern word editor elements: The idea was to adopt certain design elements from tools like Notion, like the slash (/) menu and prebuilt components like columns, callouts, checklists, table of contents, breadcrumbs etc. to make analyst workflows more efficient.
  3. Advanced document editing: Letting users create custom components, page layouts, and report templates, or add from our library, along with the ability to change a report template’s theme, is how we would differentiate ourselves from other text editors (in addition to the data integration aspect, of course). These features would save users time – analysts would much rather be able to switch a report theme in seconds, instead of manually restyling a 20-page report. These features would let funds easily set team-wide standards that persist and scale over time.
QuantLink Reports combines three things: a traditional paginated editor, modern editing elements like slash commands, and advanced document editing with shared components, layouts and templates.

Key Designs

Key design decisions that shaped the feature

Paginated documents + block-based editing

  • One of the most fundamental ways I combined traditional and modern document editors was keeping documents paginated while making block-based editing the underlying structure.

  • Pagination kept the output true to what analysts ultimately need: reports that export cleanly to PDF and print as expected.

  • Blocks changed how the document is built. Every paragraph, chart, KPI row, and callout is its own unit that can be inserted, moved, duplicated, or restyled on its own.

  • The rest of the Reports feature is built on top of this structure. Because content already lives in discrete blocks, a custom component is just a group of blocks saved for reuse, a page layout is a collection of components, and a template is a full report of blocks, components, and page layouts.

    Every block type is also one keystroke away, so analysts can just press / to insert components as they write, without leaving the keyboard for a toolbar.

    Data embeds are blocks too, so charts, KPIs, etc. sit in the document as native elements rather than pasted-in screenshots.

    Because styling is attached to blocks and block types rather than individual text selections, a theme can restyle every heading, chart, or callout in a report at once, helping funds keep formatting consistent no matter how many analysts contribute to it.

Content reflows across pages as you type.

Data integrations

  • Everywhere else on the platform, charts and KPIs update live. In Reports, I made them point-in-time. A report is a record of the numbers an analyst builds their argument on. If those numbers keep updating, the report’s reasoning would drift away from the evidence.
  • I proposed a feature where users could refresh all the data in a report in order to revise it without having to build another report all the way from scratch. This feature is on the roadmap, but was scoped out to remain focused on the 2-week deadline.
Adding a KPI row: pick a company, choose metrics from platform data, then style the row to match the report.

Components and page layouts

  • Since everything in a report is a block, I designed components and page layouts as one system with two tiers. Our library gives every analyst and fund a baseline: we provide basic building blocks like tables, columns, and callouts, and finance-specific ones like KPI rows, charts, and decision bands.
  • With custom component and page layout creation, analysts can create and save their own components and page layouts and edit them, so a fund only has to build templated recurring structures like a valuation summary component or a proposal report cover page once.
  • The next addition to this I plan on building out is shared components across a team, which amplifies the systemization of a fund’s report creation workflow. I scoped it out for later because it will require setting up live editing and version history, which are design problems of their own.
Saving a group of blocks as a custom component, then reusing it in another report from the Components panel.

Report templates and theming

  • Analysts can add report templates from our library and change their theme so it can go from looking like a QuantLink report to their fund’s branded report with just a few configurations. They can edit brand colors (primary, secondary, primary tint, page background), add their own logos, edit the header and footer, and add a watermark with initials or a logo.
  • Since a fund’s branding doesn’t change across reports, a theme can be saved as a preset and applied to any other library template with one click.
  • Theming for user-created templates was deferred. Library templates come with color roles already assigned, so changing a theme is done by just swapping values. A custom template has no roles until the user assigns them, which meant designing a clear way to allow users to assign roles, which is a design problem that deserved more time than we could offer with the 2-week deadline at hand. Since pilot funds would start from library templates, theming those covered what they needed at launch.
Rebranding a library template for a fund, from colors and logo to watermark, header and footer, then saving it as a reusable theme.

Scoping the MVP

What pilot funds needed on day one, and what could wait

DeferredThe decision behind it
Deck builderFree-form content editing on slides makes it far more complex to build. Reports came first to establish the shared logic with components, layouts, and templates.
Refreshing report dataPoint-in-time data already protects the accuracy of reports created by analysts. Refreshing the data is a revision convenience, not a launch need (as was affirmed by the pilot funds).
Shared team componentsRequires live editing and version history, which are design problems that were not in scope to solve within the 2-week sprint.
Theming for custom templatesThis requires a way for analysts to assign color roles, which was another design problem scoped for later. Library theming already covered pilot funds’ theming needs.

What surfaced while building

Designing directly in code helped answer a lot of pivotal questions that a static mockup would’ve hidden

Designing Reports from 0 → 1 directly in code meant its hardest questions surfaced while I was designing rather than after the handoff. Each answer shaped the design in the moment.

Theming was a logic problem first, UX problem second

Building the theme editor raised a lot of core logic questions. Which elements of a report should each color role affect? What should respond to a theme edit, and what should stay fixed? How should a logo adapt across different header and footer layouts? The UX could only take shape once I settled the logic underneath.

Answering these for library templates also showed why custom templates’ theming was a different problem altogether: a color role means nothing until someone assigns it. Discovering this mid-build let me scope it out deliberately.

Hidden behavior complexity of combining pagination and blocks

Blocks treat each component as a single unit, while pagination breaks content wherever a page ends. The two models collide at the page boundary, and working with them live helped me swiftly find the right rule. Components made of separable parts, like two lines of text and an image, split at the boundary and continue on the next page. Components that are ‘whole’, like charts, move to the next page intact, since a chart split across two pages can’t be read.

A multi-block component inserted near the end of a page splits between its blocks, so each block stays whole and the rest moves to the next page.

Micro-interactions have to be felt to be tuned

The first version of the block highlight felt abrupt and clunky, which would be impossible to judge from a static frame. Adjusting it live, I settled on a quick fade-in on selection and fade-out on deselection.

Selecting several blocks: the highlight fades in, then fades back out when the selection is cleared.

Reports became the groundwork for Decks

Because components, layouts, and templates were built as working logic rather than specs, they carried straight over to the deck builder. When I started working on Decks, I was starting from an established system instead of a blank page.

Outcome

The beta shipped on time, impressed our clients, and helped close two more funds

  • Reports played a key role in securing 2 SMIFs from Georgetown University as clients.
  • Shipped a working beta of Reports in 2 weeks, in time for onboarding calls for 2 university SMIFs.
  • During onboarding, analysts were excited to have a beta already in hand that tackled their biggest pain point: research, analysis, and presentation finally living in one platform.
  • Check-in calls are scheduled for next month to gather qualitative feedback on what’s working, what’s missing, and what analysts want next. In the meantime, we are in regular contact with them to fix bugs and usability issues as they come up.

Reflections

Designing in code at startup speed made me a better designer

Designing in code changed how I work

Working directly in code meant I was able to resolve roadblocks, scope decisions, and granular interaction details as I worked instead of after handoff. It made me a faster and more decisive designer; every scoping call was grounded in what it would actually cost to build a feature, not a guess.

Speed came at a cost

Being the sole product designer juggling other deliverables, the two-week timeline meant pilot funds are testing a narrower version of Reports than I envisioned. The scoped out features, especially shared components and custom template theming, are what enable funds to set team-wide standards, which is a big part of the feature’s moat. This is the first thing I look forward to validating once these features are shipped.

A focused beta > a complete version delivered late

Funds were excited to have something real to use on short notice, and it solved the pain point they shared with us. Bringing on clients with a working product and improving it alongside them has built momentum and trust that a more polished feature months later couldn’t have.