Users said our portal looked AI-generated, so I audited the design
The Intern Portal is React with Ant Design and Geist. Users said it looked AI-generated. What gave it away, and the approach I took to the audit.
The problem
Users told us the Intern Portal looked AI-generated. It is a React app built with Ant Design and the Geist font.
It was not a complaint about a bug. It was a complaint about trust. A portal where students upload documents and companies make decisions should look like someone cared about it.
What gave it away
I went through the screens looking for what people were reacting to. The tells were specific:
- The default Ant Design blue, used everywhere.
- Components used with no styling at all:
Statistic,Steps,TableandUpload.Dragger. - The default ProLayout shell, with its standard sidebar and header, on every page.
None of these is wrong on its own. Together they say "nobody made a decision here", and that is what the word "generated" means to a user.
The approach
First, an audit of the theme tokens in ConfigProvider. Ant Design lets you set colours, radius, font and spacing in one place.
<ConfigProvider theme={{ token: { colorPrimary: "<our colour>", borderRadius: "<our radius>" } }}>
Second, I did not ask for a "more formal" look. "Formal" is a request that produces the generic enterprise dashboard, which is the thing I was trying to leave. Instead I picked real formal systems to learn from: a passport application, a court e-filing system, a tax portal. I looked at what those systems do that a SaaS template does not, and used that as the reference.
Third, identifiers. Application and reference IDs are the things students quote when something goes wrong. They should read as identifiers and be easy to copy without mistakes, so the choice was Geist Mono.
Gotchas
Changing tokens is quick and fixes less than you expect. The default look comes partly from layout choices, which tokens do not touch.
"Make it formal" and "make it professional" are not design briefs. They send you straight to the generic answer.
What I learned from the audit
A design reads as "generated" because of small, specific tells: the default blue, components with no styling, the default shell. Naming those tells was more useful than asking for something "more formal".
Grounding the design in a real formal system, such as a passport application, a court e-filing system or a tax portal, gave me a reference to work from instead of an adjective.