For v0
v0 turns a prompt into a working screen in seconds, from the same defaults everyone else starts from. Aestheria, the design context layer, is what you hand it so the screen comes back looking like your product.
Make v0 generate your product, not a demo.
v0 is fast because it is opinionated. It generates against a known foundation, which is precisely why the output is coherent on the first try and why every v0 project looks like every other v0 project. Vercel has said as much publicly: generating against a predictable substrate produces predictable output. The diagnosis is right. The consequence is that the substrate is somebody else's.
For a prototype that is the correct trade. For a product you intend to ship, it means the design language of your application is a default you never chose, and each new generation reinforces it.
What you can actually hand it.
v0 runs hosted, so the integration is a foundation you give it rather than a server it dials. Two moves, and the second is the one that lasts.
- Import the layer. Two CSS files carry the whole visual system, tokens and components, from the CDN. Paste them into the project and the classes v0 generates against resolve to your product instead of the defaults.
- Describe the system in the prompt. Name the theme, the density, and the components you want composed. The vocabulary is small and stable on purpose, which is what makes it promptable at all.
@import url('https://aestheria.design/dist/tokens.css');
@import url('https://aestheria.design/dist/components.css');Six themes ship, in light and dark. Switching between them is two attributes on the root, so the same generated screen can be checked against every brand you run before anyone commits to one.
The handoff is where products usually lose the thread.
A generated screen is a starting point; it becomes your product the moment the code lands in the repository and a second tool takes over. That is where the design decisions usually evaporate, because they only ever existed in a prompt.
The layer is the same in both places. The tokens v0 rendered against are the tokens in the repository, and the component it used is the component Cursor or Claude Code will reuse next week over MCP. The screen keeps its reasoning when it changes hands, which is the whole argument for a context layer and the part a prompt cannot do.
- 407 tokens
- 6 themes
- 41 components
- 27 charts
- 63 templates
Questions
Can v0 use my own design system?
Yes. Import `tokens.css` and `components.css` from the Aestheria CDN into the project, and v0 generates against those tokens and classes rather than the generic defaults. The same files are what your repository uses afterwards.
Why does v0 output look generic?
Because it generates against a shared default foundation and has no persistent context for your product. That is what makes its first draft coherent and its tenth draft anonymous. Supplying the foundation is the fix.
Does Aestheria work with shadcn/ui and Tailwind?
Aestheria is plain CSS custom properties and classes, with no framework runtime, so it sits alongside a Tailwind setup rather than replacing it. The tokens are the layer both can read.
What happens after I export the code?
The system comes with it. Tokens and components live in the repository, and the same library is available to your editor over MCP, so the next agent to touch that screen resolves the same decisions instead of making new ones.
Do I have to rebuild anything?
No. It is two CSS imports to start. The full kit is there when you want to own and edit the system rather than consume it.