Show HN: Better Seater – Wedding seating chart optimizer
132 points| teejae | 2 years ago |seater.steam-oven.net
I've been working on a tool to optimize seating charts for assigned seat events, such as weddings. I'm hoping this site will save people enough time and stress, to charge for the service for larger events.
At the moment, there's no login required, and the service saves no data.
Why?
* Save time, rearranging people automatically
* Help with politics of large gatherings
* Try moving people and quickly seeing how everything shakes out
Currently, it will try to optimize for:
* Keeping groups together as much as possible
* Use fewer total tables
* Keep people either together or apart, as indicated
Current Capabilities:
* Import guest list/table capacity information from Excel file (there's a template)
* Generate fake guest list to play around
* Dragging people to different tables and reoptimize
* Selecting sets of people who you want to keep together or apart
* Locking people to certain tables
* Edit history
On roadmap:
* Prioritizing people to seat at "better tables" (VIPs, close family, etc)
* Rearranging tables visually
What do you all think? Is this valuable? How's the UX?I haven't come up with a great name for it yet, so naming it "Better Seater" for now.
All feedback and suggestions welcome and appreciated! Let me know what would be useful for you!
[+] [-] verelo|2 years ago|reply
1. Versions matter - she'd often make a draft and want to tell me "ok tell me if you like this better than the previous version". Id just compare the cells above to the cells below.
2. We organized people based on common interests - these people are very into music, these are very into home renovations, these people work in tech...etc. Tagging people with "attributes" and letting the system try optimize for as much overlap as possible would have been amazing.
3. Warn me of duplicates - sometimes in the copy paste madeness, we'd double up someone.
4. Import - We almost missed someone due to me skipping a line in the initial transription of their name into the spreadsheet.
5. At the end of the day guests need to find their seat. I made a QR code that linked to a website where people could type their name to find their table (https://andrewmcgrath.info/wedding) we didn't want to use a big board, it was 1 more thing to make (the website was a 2 hr project i did the day before) and the QR codes were just print outs we put in dollar store photo frames at the entrance, the bar and at the end of the day...we got great feedback over this. With the guest lists, you could easily automate making someone this website.
Good luck!
[+] [-] atoav|2 years ago|reply
[+] [-] teejae|2 years ago|reply
I agree with versions mattering. At the top, there's every version right now. Probably needs better UX.
Yea, I agree with adding attributes. I wasn't sure if most people would understand that UX. But it's on the roadmap, in lieu of groups.
Yep, dupes are definitely a thing. There's lots of places where everyone has the same names, though, so it could get annoying. Think Bali (5 names cycled), Korea (everyone's last name is similar). I haven't worked on this UX yet.
Great idea with the QR code generator! I'll have to look into this feature.
[+] [-] jsdwarf|2 years ago|reply
[+] [-] unknown|2 years ago|reply
[deleted]
[+] [-] Brajeshwar|2 years ago|reply
Looking at the website and seeing Tables numbered less than ten by default, I realized this targets people who invite their best friends and relatives and strictly choose who they want to see at their events.
One of my friend’s father was that uncle. I once asked him how he knows everything and can organize everything. He writes a lot and writes them down and refers to those writing when he thinks. If I asked him something, he is thinking about his notes in the back of his mind. Once, he gave me directions to go and send out over 50 paper invitation cards. My journey was precise and in perfect sequence, including the cow traps to avoid, the gates I might encounter, and the homes with dogs (so I call out before entering). This is in the 90s, with no phone, while I ride a bicycle to deliver those invites with no marked address on roads I had never traveled, in an Indian rural town.
[+] [-] teejae|2 years ago|reply
Thanks for giving the tool a try!
[+] [-] thom|2 years ago|reply
https://www.perfecttableplan.com/
Anyway, we used it to get _most_ of the way there, but ultimately reverted to hand crafting stuff at the end. For us there were many constraints that were vague feelings, only coming to light when we had a plan in front of us, and if you end up doing many rounds of tweaks you lose any real efficiency gain from using software.
[+] [-] teejae|2 years ago|reply
I agree that it takes some iteration, and that's why the UI is meant to help tweaking, and testing new ideas. You can lock people in place and keep tweaking, and go back in your work.
Btw, how many people attended your wedding when you used Perfect Table Plan?
[+] [-] hermitcrab|2 years ago|reply
[+] [-] devilbunny|2 years ago|reply
[+] [-] jcadam|2 years ago|reply
Still spent too much on everything, should have just blown off the fancy ceremony and drove to Vegas :)
[+] [-] kasperni|2 years ago|reply
I definitely think you need to work on the UX if you want want to make on it
[+] [-] teejae|2 years ago|reply
[+] [-] _jnc|2 years ago|reply
Some ideas:
- Let me drag out guests to tables and then optimize around what I've done so far. It looks like optimize wipes the slate clean each time.
- You might consider letting people pick how many seats should be at each table with a +- tolerance.
- People really like seeing seat numbers, whether globally or local to a table.
- If you clean up the UI a bit this could also be something people print out for a reference chart at events.
Automatic seating has been one of the more common feature requests of my own seating chart app, seatpuzzle.com, but I haven't quite gotten around to modeling the right parameters and prioritized a different set of things instead.
[+] [-] wayfinder|2 years ago|reply
You can probably write a basic planner in under an hour with all the constraints you can think of. You can just continue to fiddle with the constraints and weights until you are happy without having to worry about duplicates or errors.
I’ve used it to solve cost optimization problems for companies I’ve worked with and it works really well.
[+] [-] haroldp|2 years ago|reply
[+] [-] stncls|2 years ago|reply
However,
1. This is only an asymptotic argument. For "small" size, these problems can be tackled. People routinely solve this type of problem (namely: mixed-integer optimization problems), with up to hundreds of thousands of variables, to proven optimality, in a matter of minutes (see [1]). In this case, it looks like an assignment problem in which the number of variables would be (number of invitees) times (number of tables), so for up to 1000 invitees and 100 tables, there is a chance the problem can be solved optimally.
2. The O.P. is most likely looking heuristically for good solutions, not optimal ones. And I can't really blame them for that. Do we really care about optimality here?
[1] https://plato.asu.edu/ftp/milp.html
[+] [-] teejae|2 years ago|reply
You can keep trying harder from the state, just click again on the Optimize buttons.
I admit, I haven't optimized the optimizer yet.
[+] [-] maweki|2 years ago|reply
But as the NP-hardness of that problem goes: Say you have 400 guests on 50 tables and you probably expect multiple solutions, you're looking at maybe 20K variables in a SAT encoding. That's an industrial scale SAT problem but very much not untractable.
The question is, whether we would usually expect a number of solutions in the thousands or whether we expect just a handful. I'd guess its the former, as many people on the "cheap tables" are really interchangeable and not subject to many constraints. So usually you'd looking at just a handful of tables and guests that are difficult to place. That begs the question whether the problem OP's trying to solve is really a problem people have difficulties solving (or isn't easily solved by adding a table or two).
[+] [-] hermitcrab|2 years ago|reply
Yes.
>and basically unsolvable for more than a couple preferences?
Our PerfectTablePlan table planner can optimize seating for thousands of guests with thousands of preference constraints (between individuals and groups) on a standard desktop PC/Mac. It uses a genetic algorithm to quickly produce a 'good enough' (but not guaranteed to be optimal) solution. For seating plans it isn't really clear what the optimum is anyway. It is more important that than Bob sits next to Jill or not next to Jack or not next to an empty seats? Debatable.
[+] [-] tunnuz|2 years ago|reply
[+] [-] rav|2 years ago|reply
* 120 guests: 49 couples and 22 singles
* To be seated at 11-ish tables of 8, 10, 12 people each (by combining 4- and 6-person tables)
* Couples must be seated at the same table
* Plan only needs to say which guests sit at which tables - individual placement at the table will be decided just-in-time by the people putting the name cards down on the day
* It's hard for me to give labels to the guests to give you an idea of who can form a nice table and who can't. It's like, complicated, but I know a good table when I see one.
I made a spreadsheet-based app [1] where I first entered couples and singles into rows and then left blank rows as table separators. On the blank rows I put a "table capacity" number (8, 10 or 12), and on the guest rows I put a formula to compute "remaining table capacity", using conditional formatting to highlight tables where there are too many guests and tables where there are still seats available. By dragging rows around I can quickly rearrange the plan, and the spreadsheet doesn't do much except tell me where the plan is currently "broken" due to overfull tables.
If I compare my requirements with the Better Seater interface, what I'm missing is a way to keep couples together always - I don't want to make a new "group" name for each couple and I don't want to drag twice to move a couple. I haven't tried it with 120 guests, but I'm curious what sort of guestlist size you're aiming for.
[1] https://docs.google.com/spreadsheets/d/1ciib95VBI1YE9KFfPZAp...
[+] [-] teejae|2 years ago|reply
With the spreadsheet, you can just put couples as single guest (+1 = 2 party size). So you can put a whole family as (Person+3) or something. See the template.
The "couple" was really the wedding couple as example.
I'm optimizing for probably 100+ guests.
Hope that makes sense!
[+] [-] chadash|2 years ago|reply
One question/comment. As you already know, finding the absolute mathematically, optimal solution is hard, if not impossible in a reasonable amount of time, but people don’t care, they just want good enough. Found with classroom placements is that people can put in all the information, get an answer that is very close to optimal (mathematically), And then take one look at it, and know something is off, because you can’t actually model every aspect of the real world. so what I started doing giving good solutions that are pretty different from each other. Teachers can usually take a look for 30 seconds or less and decide that one of them is better than the other. Do you have the ability to do this on your tool? To randomly shuffle and optimize from there?
[+] [-] teejae|2 years ago|reply
If you click on the Optimize, it's already a shuffling. I could add shuffling from there, but it really won't affect optimization too much, as the underlying state is similar.
I can definitely add randomization for fun, but I'm not sure how many people will use it yet. Trying to keep buttons to a minimum at first.
Have a link to your tool?
[+] [-] elicash|2 years ago|reply
The other thing not intuitive is that I was dragging people over to the tables instead of using the 'optimize' button. Which kinda defeats the point. But I figured that out eventually.
I will say, my family lacks drama so it's not so much I need to keep certain people away from each other as I just want to figure out who might want to talk the most to who.
[+] [-] teejae|2 years ago|reply
Sorry for the lack of docs. Try the "Import Guestlist" button. There's a template there as an example.
There's no UI right now for adjusting the guest list. You can only import from the template, saved as an Excel file.
If there's any features you need, please feel free to write either here or to my email.
[+] [-] pricees|2 years ago|reply
It was a generalized banquet hall/dinner/wedding seating chart.
The one that I was looking to write involved the following specs:
- friends and +1s sit together
- guests could sign up as a "group" (Tom's group) and sit together
- cluster people from the same area, or not even close to the same area
- some guests need to be prioritized as close to the front of the room/stage/guest(s)-of-honor
These were very difficult specs to satisfy and not getting it right was not an option since folks were paying $50 a plate with ~600 guests. The solution has always been to do it by hand.
[+] [-] jmalmen|2 years ago|reply
https://github.com/jonasmalm/lakritsrot
[+] [-] teejae|2 years ago|reply
Prioritization of parties is on the roadmap, related to table ranking. Were you thinking of prioritization in a different manner?
How were you thinking about "someone getting left out"?
Thanks for the thoughts!
[+] [-] hyperman1|2 years ago|reply
Person notorious to get drunk was out of sight of the bar.
Person with medical problem close to the toilets.
Young nephew prone to pick candy from jar was diagonally seated to a candy jar, because the whole family loves to see al the strange ploys he came up with to 'randomly' pass the jar and take a candy. Yes we love him :-)
We also seated groups according to preferred language as a secondary constraint, so we had Dutch/French/German/English corners of the room.
[+] [-] pugworthy|2 years ago|reply
So many (imagined) social conditions here. Like A likes B, but B hates A. C and D should meet. E and F are a couple, but F and G broke up in college so it's awkward. H and I are divorced but still on good terms so it's OK. etc.
[+] [-] hermitcrab|2 years ago|reply
How do you do that on a circular table? Or are you suggesting some sort of handness aparatheid, with all the lefties on one table?
[+] [-] teejae|2 years ago|reply
Similar to hermitcrab's comment, I'm not sure about the right/left handed-ness. As I'm currently at table level, rather than seat level, I think it's something that can be figured out at the table level later.
Thanks for the feedback!
[+] [-] lonesword|2 years ago|reply
[+] [-] veddox|2 years ago|reply
At the weddings I've been at (usually 100-150 guests), there would be families and relatives of the groom and bride, then their school friends, church friends, university friends, etc. - anything up to a dozen different groups of people who know each other but not the other guests. So a seating plan allows these friends to enjoy the party together. It doesn't prohibit them from getting to know the other guests, but offers a bit of a safe space with people the hosts know they will get along with.
(Additionally, in many cases, these groups of friends may not have seen each other for several years, e.g. since their school days, and appreciate the opportunity to catch up.)
[+] [-] n4r9|2 years ago|reply
The trick is to combine guidance with a relaxed atmosphere where it's fine to ignore it. Your dress code might say "black tie", but it's great if someone turns up in jeans because that's what makes them comfortable.
[+] [-] couchand|2 years ago|reply
[+] [-] teejae|2 years ago|reply
Hope that makes sense!
[+] [-] hermitcrab|2 years ago|reply
[1]And even within countries. I believe it varies from state to state in the US.
[+] [-] jerpint|2 years ago|reply
[+] [-] teejae|2 years ago|reply
How many people are attending? Please feel free to use this tool if it happens to work for you. Would love to hear if you actually do use this.
But get some rest, and enjoy tomorrow!
[+] [-] lja|2 years ago|reply
[0] https://en.wikipedia.org/wiki/Bin_packing_problem
[+] [-] teejae|2 years ago|reply
[+] [-] huevosabio|2 years ago|reply
But other stakeholders, cough cough in laws cough, quickly demanded direct allocation.
[+] [-] teejae|2 years ago|reply
[+] [-] vekker|2 years ago|reply
There were just too many constraints for it to be feasible as a web app in our case. Examples of some of those constraints that make it difficult:
* different table sizes, each with a min. and max. seats
* every table has a "head of table", which has to face the bridal couple
* we preferred couples/genders were mixed at every table, not sitting next to each other
* people who must/should/definitely shouldn't sit at the same table
* distances between people mattered: certain groups should be closer/further away from each other
* distances to the main table mattered
* the exact location of the table mattered (for example, older people should have more room/closer to the toilet/away from the dance floor)
It might seem like overengineering to some :) But in the end, it didn't take us too much time to make the layout: we just printed out all the names, and laid them out physically. Then we used that physical layout at the entrance to show people where they are seated. Most of the work was actually cutting out the names, finding them in the pile, physically placing them, ... So I guess if someone just made a beautiful drag-and-drop UI and let the user do the optimization work, and ignore implementing all the "smart stuff", that would work for many people. I guess you could even monetize it by allowing people to print out the layouts in a beautiful way (engraved in wood or whatever) and have it shipped.
(edit: damn it's annoying that HN doesn't support fully markdown for bullet point lists)
[+] [-] teejae|2 years ago|reply
This already has different table sizes.
There's already a way to mark who should/not sit together
For location, I'm thinking of adding a draggable UI to put tables in relative places. But at first, I don't want to make this too complex for people to use.
Also, thinking of adding attributes to both groups and tables to get people to what they need (bathrooms, dance floor etc).
There's definitely already lots of apps/sites that let people do the pretty stuff, but they seem really manual at the moment.
Let me know if you have any more thoughts! Thanks for looking!