A plan, and an honest list of what it could not do.
Seating is a constraint problem that usually has no perfect answer. Most tools hide that by quietly dropping whichever rule was inconvenient. This one writes the failures down, next to the plan, every time it is opened.
- Input
- Tables, capacities, rules
- Output
- Table allocation
- Also output
- Constraints not met
- Mixed sizes
- Supported
- Editing
- Drag or type
- Artwork
- Floor plan included
Nothing is dropped in silence.
If you asked for two people to be apart and the arrangement puts them together, the plan says so, in the same view, with the reason. You may still accept it — but you will know.

Constraints in plain sentences, not a rules engine.
I have 9 tables of 10 and 4 tables of 8. These people shouldn't be at the same table: [A and B], [C and D]. My grandmother needs to be near the door. Give me an arrangement and show me where you had to compromise.
- table_no / table_capacity
- Table number and how many seats it holds.
- seats[]
- The guests at that table, referenced by their confirmed card name.
- constraints_met[]
- Every rule the arrangement satisfies, written back in your words.
- constraints_broken[]
- Every rule it could not satisfy, with the reason it broke. Never empty by omission — if it is empty, it is because nothing broke.
- notes
- Context you would otherwise have to work out, such as which table actually sits nearest the door.

The same plan, drawn.
Once tables are settled, the arrangement becomes artwork: a top-down plan with table numbers, the entrance marked, and the same type system as the cards. It exports on its own, and it is the first frame of the entrance guide video.
