Case study · Concept · Browser extension

GrantGPT: an assistant that fills in a grant form, and asks before it does anything

How I designed the rebuilt version of a browser assistant that sits next to someone else’s grant form, answers from a member’s Happly profile, and never moves on, or submits, without a yes.

Senior Product Designer · States, design QA, approval and pause screens · Feb to Sep 2026 · Happly, Chrome extension

Role

Senior Product Designer. States, design QA, approval and pause screens

Team

A PM who wrote the requirements, the company lead, front-end and back-end developers

Timeframe

Rebuild: Feb to May 2026. Agent version and landing page: Sep 2026.

Tools

Figma, Jira

In 30 seconds

What it was

GrantGPT is a Chrome extension that opens beside a grant form, reads it and answers from the member’s Happly profile. A concept: built and tested, not published.

What I owned

I designed the 2026 rebuild’s states and the design QA of each build, then the agent version’s approval and pause screens and a landing-page hero. The first version, in 2024 and 2025, was not mine.

Key decisions

01

Sign-in stays on the platform: the extension has no login of its own.

02

Only show what it can finish: say “Not eligible”, never “0% match”.

03

A review at every step: nothing is submitted without an explicit yes.

Outcome

The sign-in rule held through every later round. The review-for-credits flow was dropped because of the store policy on reviews for rewards. A pull request for the agent version was under review in September 2026.

In 30 seconds

What it was

GrantGPT is a Chrome extension that opens beside a grant form, reads it and answers from the member’s Happly profile. A concept: built and tested, not published.

What I owned

I designed the 2026 rebuild’s states and the design QA of each build, then the agent version’s approval and pause screens and a landing-page hero. The first version, in 2024 and 2025, was not mine.

Key decisions

01

Sign-in stays on the platform: the extension has no login of its own.

02

Only show what it can finish: say “Not eligible”, never “0% match”.

03

A review at every step: nothing is submitted without an explicit yes.

Outcome

The sign-in rule held through every later round. The review-for-credits flow was dropped because of the store policy on reviews for rewards. A pull request for the agent version was under review in September 2026.

Hero image: the GrantGPT side panel beside a grant form, on demo data (to come)

Where the form is

Happly knows a lot about a business: what it does, where it is, how big it is, what it has applied for. Most grant forms aren’t on Happly. They’re on a funder’s own site, with different questions on every page, so a member who finds a good opportunity still retypes the same company description into a stranger’s form.

GrantGPT is the idea that the assistant should go where the form is. It opens beside the page, reads the form, answers from the member’s profile and, where it needs more, asks.

So the design problem isn’t “make an AI that writes answers”. It’s how an AI sits as a guest on a page it doesn’t control, writes to a funder in a person’s name, and stays trustworthy while it does.

It writes in a person’s name, to a funder, on a page it doesn’t control.

The brief

What the requirements asked for, condensed.

Goal

A member answers an external grant application with AI help from their Happly profile, and stays in control of every word that is sent.

Users

Business members. Individual accounts can’t use it.

Success criteria

Sign-in happens on the platform, never in the extension. The member can answer all at once or one by one, and switch at any time until the application is marked submitted. Every answer can be edited by hand or rewritten with a prompt. A free monthly allowance behaves clearly when it runs out. The profile-readiness percentage informs and never blocks.

Non-goals

Not for individuals. Not a replacement for One-Click Apply on programs hosted on Happly. Never submits on its own.

Constraints

Every funder’s form is different, and the extension has to work in the browser the member already uses, whatever its theme or width.

Each of the six challenges below ends at a gate, the way the agent version ends every page of a form: what happened to the decision, said plainly.

By the numbers

A concept has no use to count, so the numbers are about the work: when it happened, and which part was mine.

The project, by date

From the project’s tickets

First version · not my design

Nov 2024

First ticket for the extension

11 Feb 2025

First delivery

Feb to May 2025

Numbered QA rounds, plus two by the company lead. The findings were theirs

5 + 2

28 May 2025

Marked done, counted from the first delivery

106 days

The part I designed

9 Feb to 2 Mar 2026

The rebuild, opened to done. I designed its states and checked each build against them

21 days

5 May 2026

Findings in the PM’s QA list for the rebuild

28

Sep 2026

The agent version’s approval and pause screens, and a landing-page hero

Today

Users and submitted applications. It was built and tested, never published, so there is nothing to count.

0

Read the rail from the top: the dark stretch is the part I designed; everything above it is the first version, which wasn’t mine.

Sign-in belongs to the platform

Situation

In the first version’s QA rounds, in 2025, someone who had signed up but not finished onboarding could log in to the extension and find an empty account. The team took the login out of the extension: “Log in to Happly” and “Create my Happly account” open the platform, and the extension picks up the session.

Decision

In the 2026 rebuild I designed the edges the rule left open. An individual member gets a dedicated screen: “You need a business to use the extension. Please add your business to continue.” A member who hasn’t finished onboarding is held with a message and a way to finish, because there’s nothing in the profile to work from yet.

Who opens the panel

Schematic, not the shipped UI

Signed out

Log in to Happly

Create my Happly account

No login fields

Individual member

You need a business to use the extension. Please add your business to continue.

Opens Happly

Designed in the rebuild

Onboarding not finished

[A message, and a way to finish onboarding]

Opens Happly

Designed in the rebuild

Business member

Ready

The assistant: reads the form, answers from the profile

The only state that reaches the form

Three of the four states end on the platform; the panel’s job in each is to say why, in one screen, and open the right page.

Gate 1 of 6 · Outcome

Kept

The sign-in rule held through every later round. Staying signed in on one side after signing out on the other was a bug QA found in the rebuild, and it went back to the developers.

What made it hard

An extension with its own login invites every account state: no business yet, onboarding half done, a different session on the site than in the extension. Each one looks like “it’s broken” to the member.

Options

Handle each state inside the extension, or send each one to the platform, where it already has an answer, and give the panel one screen that says why.

Two ways to answer, and no choice about method

Situation

Members wanted the assistant to fill a whole page at once, and also to answer one stubborn question carefully.

Decision

Both stay available until the application is marked submitted: start with “Autofill all” and fix one answer, or go one by one and autofill the next page. Answers sit in cards with a manual edit, “Rewrite with AI”, and a bookmark to reuse them.

The method disappears: “Vision” runs in the background, “Try again” is the only retry, and while it scans, a full-panel “We’re scanning, please wait” stops accidental clicks.

The answer loop

Two ways in, one loop

Autofill all

One by one

Switch at any time

01 Generate

An answer from the profile

02 Review

The member reads it

03 Edit or rewrite

By hand, or with a prompt

04 Next

The next question or page

Back to Generate, question after question

Mark as submitted

The only way out of the loop, and only the member can take it.

The two buttons at the top are doors, not modes: whichever one a member uses, they end up in the same loop.

Gate 2 of 6 · Outcome

Kept

The loop, generate, review, edit, next, became the product. There’s no usage data, so I can’t say which way in people preferred.

What made it hard

Offering both can feel like a mode you lock into. And early builds showed the method itself: two buttons, “Autofill” and “Vision”, and a “Try again” that asked whether to retry or scan with AI vision. Testers hesitated at both.

Options

One mode; two modes picked at the start; or two modes the member can swap between at any time.

Only show what it can finish

Situation

The extension suggests opportunities. The platform’s list mixes eligible and ineligible programs, programs hosted on Happly, and external forms the assistant can’t read well.

Decision

Show only opportunities that are eligible and ready for the assistant. Say “Not eligible”, never “0% match”. Give the two routes two names: programs hosted on Happly use One-Click Apply, external ones use the extension. And when matching can’t run because the profile is missing required answers, show “Complete your profile”, not an empty list.

What the list may show

Demo opportunities

Opportunity A

External form · eligible · ready for the assistant

Apply now

Opportunity B

External form · eligible · not ready for the assistant

Not shown

Opportunity C

Not eligible

Not eligible

Never “0% match”

Program D

Hosted on Happly

One-Click Apply

On the platform, not here

Any list

Profile missing required answers

Complete your profile

Replaces the whole list

Read the tags as a promise: only the cases with an action are ones the member can finish.

Gate 3 of 6 · Outcome

Still in QA

The API side, defaulting to ready opportunities and naming the missing profile fields when matching can’t run, was in place by February 2026. The front-end states were still in QA in May 2026.

What made it hard

A list that offers things the tool can’t complete spends the member’s trust. A “0% match” badge reads as a score, not as “you don’t qualify”. And a member has to know whether a card means “apply here” or “use the extension”.

Options

Mirror the platform list; filter quietly; or filter on purpose and say what each state means.

A guest on someone else’s page

Situation

The extension opens beside any website. In March 2026 a reviewer opened it and found it black: their browser was in dark mode.

Decision

Light only for version one, to be revisited, and a set of manners: the panel belongs to its tab, like other browser assistants; progress stays until the member presses “Done”; edits sync both ways with the original form; only questions that exist on the form are listed; upload fields aren’t answered as text; and typing // in an answer box opens a menu of saved answers.

Found in QA, and the rule it became

From the 2026 QA notes

Behaved like an app

Behaves like a guest

Stayed open across every tab

Belongs to the tab it was opened in

Reset progress when a tab was switched

Keeps progress until the member presses “Done”

Toasts spanned the whole panel

Toasts sit inside the area they relate to

An edit changed its own copy, not the form

Edits sync both ways with the form

Turned black in a dark-mode browser

Light only, for version one

None of the left column is about AI. Most of what QA found was the extension forgetting it was a visitor.

Gate 4 of 6 · Outcome

Set as QA rules

These were written as QA expectations for the rebuild in 2026, the list each new build was checked against.

What made it hard

The member’s page, browser theme, window width, open tabs and half-finished work are all outside the design. QA kept finding the extension behaving like an app when it should behave like a visitor.

Options

Build a dark version now; force light and defer; or set the guest’s manners first.

When the allowance runs out mid-application

Situation

The requirements gave each member a free monthly allowance of AI answers and applications. Running out half way through a form was always going to happen to someone.

Decision

I designed a soft stop. At the first limit, a prompt offered a one-time bonus for writing a store review, with a reminder at most once a day until it was used. After that, the member could still browse the other tabs, but had to wait for the reset, or upgrade, to start a new application.

The allowance, as designed

Limits not shown

Start of the month

Used up

In allowance

Answers generate as usual.

First limit

A one-time bonus, offered for writing a store review.

Dropped

After that

Browse the other tabs; wait for the reset, or upgrade, to start a new application.

The dashed tag marks the step that was dropped: the bonus asked for a review in return, and that’s the part a store won’t allow.

Gate 5 of 6 · Outcome

Dropped

I designed this flow, but it conflicted with the store policy on reviews for rewards, so it was dropped.

What made it hard

It’s the worst moment to ask for money, and the rules were moving: in February 2026 the team wanted to simplify the credit logic and offer an upgrade instead of a second application.

Options

A hard stop with an upgrade prompt; a soft stop with a one-time bonus; or no limit.

The AI acts, the person approves

Situation

In September 2026 the company lead asked for the next version: instead of detecting fields one by one, the extension reads the page like a person would, and clicks, selects and fills, the way browser agents do.

Decision

A review at every step, and I designed its two screens. When profile information is missing, the agent pauses and asks: “We aren’t sure about this one. Could you give us a little bit more information in order to complete this form?”, then resumes with the answer.

Before every “Next”, a verification view shows everything it filled on that page and waits for approval, page by page. Nothing is submitted without an explicit yes. The capability goes into the existing interface rather than a new one.

Page by page

Concept, Sep 2026 · schematic

Page 1

Approved

Page 2

Waiting for you

Page 3

Not started

Page 4

Not started

Page 2 · what was filled

Company name

Filled from the profile

Filled from the profile

What the project will do

Filled from the business plan

Filled from the business plan

Number of employees

Filled from the profile

Filled from the profile

A question the profile can’t answer

Paused · asked

Approve and continue

Nothing is submitted without a yes

One page at a time: the agent fills, stops at the edge of the page, and the member’s approval is the only way to the next one.

The pause screen, from the Figma file (to come)

The page verification view, from the Figma file (to come)

The two screens I designed for the agent version; real frames to come.

Gate 6 of 6 · Outcome

In review

A pull request for this behavior was under review in September 2026. No release, no result yet. It’s the rule Happly uses everywhere: the AI advises, a person decides.

What made it hard

An assistant that can click can also submit. And its mistakes land in a stranger’s database, under a member’s name.

Options

Full automation with an undo; automation with one review at the end; or a review at every step.

Under the panel

Smaller rules that hold the screens together.

The profile is the source of truth

The extension edits nothing the platform owns. “Edit profile” opens the platform, and the panel re-reads the profile each time it opens.

A percentage is a hint

The readiness figure is a plain share of answered onboarding questions, all weighted equally. Nothing in it predicts a good answer, so it stays a hint and never becomes a gate.

Business plan first

An uploaded plan is the best context the assistant can have. With neither an upload nor a plan built on Happly, a box sends the member to the Business Plan Builder.

State copy over spinners

“Not eligible”, “Complete your profile”, “We’re scanning”, “Add your business”: each one names what’s happening and what to do.

Motion from the system

The AI’s waiting state is an animation from the design system’s own set, not a generic spinner.

The landing page

In September 2026 I designed the hero and its motion for a GrantGPT landing page.

GrantGPT landing-page hero (to come)

The landing-page hero; the real frame and its motion to come.

What I’d redesign first

The review-for-credits flow. I designed this flow, but it conflicted with the store policy on reviews for rewards, so it was dropped.

The problem it tried to solve is still open: what a member sees when the allowance runs out half way through a form. I’d start by showing what’s left before a member begins an application, so the limit never arrives as a surprise.

What I learned

Sit lightly on someone else’s page.

Most of the QA was about manners, tabs, themes and sync, not about AI.

Don’t show the method.

“Autofill or Vision?” is the system’s question, not the member’s.

Filter on purpose.

A shorter list that finishes beats a longer one that doesn’t.

An agent needs gates.

The design of an AI that acts is the design of its pauses.

What I’d measure if it ships: how many installs reach a first filled page; how many generated answers are kept, edited, rewritten or deleted; and how often the agent pauses to ask, and how those pauses end.