A marketplace where makers list handmade products, buyers place orders with several items, and buyers review what they bought.
Prompt: A marketplace where makers list handmade products, buyers place orders with several items, and buyers review what they bought.
3 tables · 17 columns · 2 relations
users5 col
PKiduuid
UQemailtext
full_nametext
is_makerboolean
created_attimestamptz
products7 col
PKiduuid
FKmaker_iduuid
titletext
UQslugtext
price_centsinteger
stockinteger
created_attimestamptz
orders5 col
PKiduuid
FKbuyer_iduuid
statustext
total_centsinteger
created_attimestamptz
Drag to explore
100%
100%
Schema health
Auditing 3 of 5 tables
A
100/100
Ready to migrate
100 − penalty1893
Normalization100 − 0100
Integrity100 − 0100
Performance100 − 0100
(100 + 100 + 100) ÷ 3 = 100→A
Kozo
Drag the table, or use the arrow keys to move it on the grid.
Health audit
A health score you can check.
Kozo audits every table for a primary key, timestamps, an index on each foreign key and a unique constraint on natural keys. Each finding comes with the SQL that fixes it. Apply them to the team chat schema and the real audit scores it again.
8 findings · 0 fixed
Errorchannel_membersIntegrity −18
Table has no primary key.
+PRIMARY KEY (channel_id, user_id)
Warningusers.workspace_idPerformance −9
Foreign key "workspace_id" is not indexed — joins and lookups will scan.
+CREATE INDEX idx_users_workspace_id ON users (workspace_id);
Warningusers.usernameNormalization −9
"username" looks like a natural key but has no UNIQUE constraint.
+username TEXT NOT NULL UNIQUE
Warningchannel_members.user_idPerformance −9
Foreign key "user_id" is not indexed — joins and lookups will scan.
+CREATE INDEX idx_channel_members_user_id ON channel_members (user_id);
Warningmessages.author_idPerformance −9
Foreign key "author_id" is not indexed — joins and lookups will scan.
+CREATE INDEX idx_messages_author_id ON messages (author_id);
Warningmessages.parent_idPerformance −9
Foreign key "parent_id" is not indexed — joins and lookups will scan.
+CREATE INDEX idx_messages_parent_id ON messages (parent_id);
Notechannel_membersIntegrity −3
No created_at / updated_at timestamps.
+created_at TIMESTAMPTZ NOT NULL DEFAULT now()
NotereactionsIntegrity −3
No created_at / updated_at timestamps.
+created_at TIMESTAMPTZ NOT NULL DEFAULT now()
Export
Every format you ship.
The same schema as Postgres, MySQL, Prisma, Drizzle, SQLAlchemy or JSON Schema, plus Supabase row-level security policies. Each file here comes from Kozo’s own converters, run on the sample you pick.
Every schema ships with a reversible migration and seed rows. The down file drops tables in reverse foreign-key order, and the seed fills them in key order, so every reference points at a row that exists.
1-- Down migration2DROPTABLEIFEXISTSorder_itemsCASCADE;3DROPTABLEIFEXISTSreviewsCASCADE;4DROPTABLEIFEXISTSproductsCASCADE;5DROPTABLEIFEXISTSordersCASCADE;6DROPTABLEIFEXISTSusersCASCADE;
Why this order
order_items references orders and products, so it is dropped first. users references no other table, so it goes last. Seeding runs the same list the other way round.
Seed rows for users: 3 rows
#
PKiduuid
emailtext
full_nametext
is_makerboolean
created_attimestamptz
1
2124ee87…
ava.chen@example.com
Ava Chen
true
now() - interval '0 days'
2
2124ee88…
liam.patel@example.com
Liam Patel
false
now() - interval '1 days'
3
2124ee89…
noah.garcia@example.com
Noah Garcia
true
now() - interval '2 days'
users references no other table, so its rows go in first.
Templates
Start from a template.
Pick the shape closest to your app, then describe what is different. Each template is drawn from the schema in Kozo’s template library.
Your workspace
Every schema, kept with its history.
Library
Every schema keeps the prompt that made it, its diagram, its health score and every export.
Versions
Each change is kept as a version with a note on what changed, so you can see how the design got here.
Import
Paste the DDL you already have to see it as a diagram and run the same health audit on it.
History
Every schema you have generated or saved, newest first and grouped by day.
Your schemas are scoped to your account and encrypted at rest, and we never use your content to train models. Kozo works from your descriptions and DDL only.
Pricing
Start free. Upgrade when it ships.
Generate schemas and explore the diagram on the free plan. Pro adds every export format, health scoring, migrations, seed data and saved history. Teams that need single sign-on or self-hosting talk to us.
What each plan includes
Generate schemas and explore the diagram on the free plan. Pro adds every export format, health scoring, migrations, seed data and saved history. Teams that need single sign-on or self-hosting talk to us.
From a plain-English description of your product, Kozo generates a normalized Postgres schema with tables, primary and foreign keys, indexes, and relationships. It also produces a live ER diagram, a schema health score, sample seed data, reversible migrations, and exports for MySQL, Prisma, Drizzle, SQLAlchemy, JSON Schema, and Supabase RLS policies.
How accurate and production-ready is the output?
Kozo aims for normalized, indexed schemas that follow standard relational practices. Every schema is scored across normalization, integrity, and performance with specific findings, so you can review and fix any weak spots before exporting. You always see the full diagram and SQL before committing.
Can I edit the schema or import one I already have?
Yes. You can refine the generated design and re-export at any time. You can also paste existing DDL into Kozo to visualize it as an ER diagram and run the same health audit against a database you already have.
Is my data private?
Your schemas are scoped to your account and encrypted at rest, and we never use your content to train models. Kozo works from your descriptions and DDL only.
How much does Kozo cost?
The Free plan lets you generate schemas, explore the ER diagram, and use core exports with no credit card. Pro is $15 per month for unlimited generations, all export formats, health scoring, migrations, seed data, RLS export, and saved history. Enterprise is custom-priced with SSO, a self-host option, and dedicated support.
How is the health score calculated?
Kozo checks every table for a primary key, created_at or updated_at timestamps, an index on each foreign key and a unique constraint on natural keys such as email, slug and username. Normalization, integrity and performance each start at 100 and lose 18 points per error, 9 per warning and 3 per note. The health score is their average: 90 and up is an A, 80 a B, 70 a C, 60 a D and anything lower an F.
Which formats can I export?
PostgreSQL, MySQL, Prisma, Drizzle, SQLAlchemy and JSON Schema, plus Supabase row-level security policies, an up and down migration and seed data in foreign-key order. The ER diagram downloads as PNG or SVG.
Can I start from a template?
Yes. Start from a SaaS multi-tenant, e-commerce, social feed or analytics template and describe what is different about your app.
One sentence in.Every table out.
Describe your app in plain English and get a normalized Postgres schema, its ER diagram, a health score and exports for your stack. Free to start, no credit card.