Hacker News new | past | comments | ask | show | jobs | submit login
Show HN: Better Seater – Wedding seating chart optimizer (steam-oven.net)
132 points by teejae 9 months ago | hide | past | favorite | 106 comments
Is anyone having a big wedding reception/event with assigned seating soon? Or know anyone who will?

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!




My wife and i just went through this for our wedding. A few remarks from that experience that might be helpful:

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!


As someone who organized very popular parties back in my teenage years: Whatever you optimize for, don't overdo it. Good social events are all about the right mixture between familar/safe and the unknown/dangerous. Match people too closely and you will bore people, I am not saying you should seat people randomly, but also consider which interests might add to each other.


Yeah it’s very tricky and an art for sure. We spent a lot of time on it, i feel like we really nailed it because it was all about finding overlap but also creating introductions. We intentionally split up many friend groups because we knew they’d gravitate at the bar and dance floor anyway, so ideally getting them to meet new people over dinner was going to create an even bigger party - and it for sure did.

So yeah all to say, you’re right and it’s very unique for each gathering and its audience as to which approach you should take.


> I am not saying you should seat people randomly

With the exception of people who would throw hands at each other, this actually doesn't seem like an awful idea.


It is an awful idea because it will make most people sad not to be next to the ones they love, like spouses and friends


I mean grouping people that want to be together and then mixing those at random might not be the worst approach.


I agree that having serendipity adds to the mix. This tool is more an iterative tool, meant to help guide the decisions, rather than being prescriptive.


Thanks for the great feedback!

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.


Ah yeah i see the versioning now. I didnt get what was happening there before but i do now. This feels more to me like an audit log, which while helpful doesnt really do what i had hoped. Seeing 1 person move at a time isnt super practical, our edits were more like "these 10 people are now in different spots" and i just want to compare before to after, the in between while interesting isn't the visual im hoping to discover.

Interesting point about duplicates and names. We had a lot of Andrew's (including me) but we didn't have any identical matches if we included last names (which fortunatly everyone had). I guess as long as you can acknowledge them and have the warnings go away that would be enough.

Checkout the UX of the auto-complete for that website i made. My goal was so it would basically find your table as quick as possible, and the website is designed only for phones as i assumed the number of guests that brought a laptop would be somewhat limited :P

I considered turning that website into it's own little startup, but frankly, the idea of running a business with no repeat customers (or...with a duration between purchases so low that i'd basically be acquiring them every time) was not very attractive to me. Then again, everything else i've worked on in between has been worthless, so i might as well have haha!


Wedding Planners seems like the ideal target market for this. It's a task that must be a opinion for wedding planners, since the couple have to do it, and they put it off (cause its hard).

Making it friction free for the couple (the planner pays, the couple use a planner assigned login), plus making it easy, allows the planner to gather the information from the couple, and then keep pushing plans at them.

A simple guest-list integration (suggested, invited, rsvpd) seems like the next step, and I expect diet requirements etc.

Then again I expect this software already exists and existing planners already use it, so this route may be full. Do some research first.

I agree that "plan your own wedding" .com would be hard to sell because it's one-time customers so acquisition cost us high, and lifetime value per customer is low. So best done as a side-project.


Agree! There's TAM, TAC, and Churn at play here. Total Addressable Market, Traffic Acquisition Costs, and "Churn".

TAM - How many people can you serve "all people getting married || just planners"

TAC - How costly is it to make a sale your TAM? "word-of-mouth-individuals || trade-magazine-planners"

Churn - How many people will still be using your software one month or one year from now? "0% || 75%"

The numbers on the right hand side are soooo much better for a healthy business than on the left hand side.

Target this to party planners, wedding planners, event planners (at hotels, eg: Mariott, etc).

Assume you are the back-office magician for the "group events" manager at an all-inclusive hotel. You need to have super-on-point branding so that all GUESTS know to ask for "super-seating-chart-9000", which is only available to "party planning professionals", and has the appropriate QR codes, logos, URL's, etc.

Make sure that you have both paper and digital "intake forms" (99% of events managers will want to send them a spreadsheet, or copy/paste from a spreadsheet)... make sure that you have appropriate branding, etc (eg: a google sheets template with instructions on the first tab, etc.)

Your TAM for individuals is "everyone getting married this year" or "sometimes a conference or family reunion". Your TAM for planners is like 1/100000th and your TAC is higher (you have to convince them to spend a monthly retainer fee and/or pass along charges to the happy couple as if you were a vendor, eg: $50 seating chart fee invoice)... buuuuut each planner that you acquire is effectively recurring revenue (or recurring usage) compared to working directly with individuals, so your churn is much much lower.

The business you'd be getting into is kindof "fake back office support for luxury hotel event planners", which means do you branch out to also be kindof a vendor portal (eg: digital photo booths, printable/shippable table stands, digital name tags printing, etc.).

As a matter of fact, look around at conference/convention software (especially name tags!) as I remember hearing that's a surprisingly complicated market that no one really specializes in. Getting a foothold there would be helpful. Super-agree with parent comment "bruce" w.r.t. dietary restrictions, tagging/attributes, managing some sort of digital RSVP (live w/ the google sheet?) would be really helpful.


Yea, I agree the versioning isn't really there yet.

Definitely great idea for the autocomplete and seat finder. Right now, I'm not storing any data on the server, so can't do lookup. Also I worry about personal data leakage.

I was thinking this could turn into a business of referrals, as anyone who uses it will probably know others who need it. And I was going to do this for free for smaller events.

You'd need to pay subscription to keep data, or for more advanced tools. Simple events don't really need much though.

Anyway, would love to hear any other thoughts you have! Your site looks very lovely and usable, which is what really matters!


Sounds great, yeah i think having a free lead gen offering that you can somehow cross-sell into another product line is the way to work here. Once you have some "customer data" like "size of wedding" you are positioned to experiment with suggestions.

Good luck!


Also think about the negative case - which people should not sit on the same table because they don't get along too well or will start a neverending dialogue?


Yep, there's already a way to select guests and keep them separated in the UI. Give it a try and lemme know what you think!


Ok. This may be slightly off-topic, but I'm pretty serious when I suggest getting feedback and ideas from an Indian aunty/uncle who has done and helped arrange or take primary roles in weddings in their families. Here in India, for all significant events, there is always an aunt/uncle who knows everything, and everyone asks that person.

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.


Yea, I would love to hear from one of those aunty/uncles! But I don't know any offhand. You have any pointers?

Thanks for giving the tool a try!


Ask an Indian friend to connect you with the uncle or aunt who talks the most about getting them married. That's usually the same person in charge of wedding logistics, invitations and stuff. I think they're just generally incentivized by Gulab Jamuns and Rasagullas.


Bit of a blast from the past for me, as we used Perfect Table Plan when we got married. I heard about that from its creator Andy Brice who frequented the Joel on Software forums, a spiritual precursor to HN.

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.


Good points! I looked at Perfect Table Plan, and it seemed perhaps a bit "too complex" at the moment.

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?


PerfectTablePlan is still going strong. Currently in v6 and v7 in development.


Simply contemplating having to do this is one of the reasons I'm very happy that the local standard for weddings (even big, expensive, nighttime ones) in my hometown was buffet service with available but unassigned seating. People hang out with who they want to, as much as they want to, and can just avoid those who bother them.


Wife and I were broke college students when we got married. Reception consisted of cake and refreshments (no meal) in the basement of the church after the ceremony -- no assigned seating. Then a few nights in a local (though pretty nice) B&B for the 'honeymoon.'

Still spent too much on everything, should have just blown off the fancy ceremony and drove to Vegas :)


Wife and I were broke grad students when we got married. Reception was standardish (dinner, dancing, cake—her family paid for it). Honeymoon was a conference she was going to in San Diego.


I like these stories. I had a budget of $350 for our marriage and honeymoon. That was including gas money.

We did the honeymoon first though- went to a rural town and stayed at a b&b while we waited the three days for the marriage license. Then went out for ice cream and drove home.


Similar to what we did. Went to the Outer Banks (North Carolina, USA) and eloped. Parents' friends owned a condo on the beach and we rented that for a song. Got married at the local jail by a magistrate. Had a lovely week away from work. A month or two later, my parents threw us a party so friends could meet the husband. (And it was gift payback time; I was the last of the kids to marry.)

A young couple I know will marry when their house is built. It will be at least several years. The more they see friends spending lots on weddings, the closer they are to the parents only wedding or eloping. I have to admit I'm nudging them just a little.


I would reach out to some wedding planners/wedding venues and see if it would be useful for them. I think that would probably be your biggest market, if you nailed it. Could be pretty cool as a venue to provide the tool to your clients to plan the seating (I don't know what is out there already)

I definitely think you need to work on the UX if you want want to make on it


Thanks for the feedback!


This is really cool!

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.


Ooh cool!

FYI you can lock people to the tables and it optimizes around it already. Just click on the lock icon.

Interesting idea on the tolerances.

Right now I'm not putting in specific seat numbers yet. You just mean number them for UX purposes?

How's seatpuzzle.com doing? Looks like a cool app!


If anyone wants to build this by themselves, I recommend using an optimization solver library like OptaPlanner. It basically implements standard optimization algorithms you can read in academic papers (which are interesting to read!) so you don’t have to.

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.


Thanks for the kind words about OptaPlanner. We've forked OptaPlanner as Timefold. We don't have a wedding seating example in timefold-quickstarts, yet.

Someone did an wedding seating planning implementation 10 years ago: https://github.com/juanignaciosl/wedding-tables-planner but that's going to be very stale (still DRL files etc). It's probably better to start from the school-timetabling use-case in timefold-quickstarts and adjust that to your needs.


Thanks a lot for all the development of Optaplanner over the years! Your work is really amazing and valuable.


If you want to give Timefold a try locally - it should about twice as fast, still the open source version - try our single Maven or Gradle command on your codebase: https://timefold.ai/upgrade-optaplanner-to-timefold

If you're interested in writing a blog around your Wedding Seating Planner (it looks very cool!), ping me on LinkedIn and we'll happily push it on our socials.


Could you expand the general case of that cost optimization?


Isn't "Keep people either together or apart" an NP-Hard problem, and basically unsolvable for more than a couple preferences?


Solving this problem to optimality (for whatever constraints and objective function one is interested in -- a precise formulation was not given by the O.P.) is presumably NP-hard indeed, meaning that the computational cost grows exponentially with the size of the problem (in practice: the number of invitees).

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


Yep, NP-hard! This is using an optimization engine. It's not brute forcing. But hopefully it's getting pretty good approximate results.

You can keep trying harder from the state, just click again on the Optimize buttons.

I admit, I haven't optimized the optimizer yet.


What do you mean by optimization engine? Did you write a solver yourself, or did you use something off-the-shelf? In either case, what are the algorithms involved?


I'm using Optaplanner as the engine under the covers, which is open source and off the shelf.

https://www.optaplanner.org/


It's probably an optimization problem with multiple parameters so you're never looking for an exact solution.

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).


I had to write a piece of code to manage 200+ dogs at a kenneling facility, sorted by temperament, across a Gantt chart, with lists of friends and enemies which could stay together or must never be together - coming and going at different times. Additionally, dogs and kennels are both color-coded and certain types of dogs can only stay in certain types of kennels. Some dogs cannot share a kennel at all; kennels have a max limit of 1, 2 or 3 dogs; and some kennels are premium-priced.

In practice, the "optimal" solution depends on what you're optimizing for. In my case, it was maximizing the number of dogs that could board on any given night. This involved looking for open paths - since dogs can be moved around daily if necessary. Then rule out any based on the constraints: Prevent enemy conflict, limit to max occupancy, etc. After that, the preference is for boarding them in a kennel with a friend if possible, however there are trade-offs here in whether this creates too many extra moves... e.g. if a friend is coming in for one night of a dog's 7-night stay, we don't prefer to move. So the third priority, which occasionally overrides the second priority, is minimizing the number of moves which add work for employees. To do that, we look for the longest stretch open at each move branch, ranking them by number of friends descending, barring any with enemies.

As you can imagine, this was way too complicated and branching, so the system prunes the option tree at each necessary move down to a few dozen possibilities and continues down each of those paths, then ranks all the paths for the user to choose from.

In other words, a lot of the decisions for optimizing it (in the non-mathematical sense) were about limiting its output to a manageable number of reasonably good choices. Enemies create a hard limit on the number of spots available. Friends are optional (but good for business).


I was once asked to code a people-matching function where participants had long "don't match me with her" lists and coded a very naive brute force solver that absolutely pegged the CPU on my dev box until I wised up that it was an NP-Hard problem.


Yeah, that's a different and larger problem space. A reservation-maximizing algo doesn't need to come up with a solution for all-vs-all, it only needs to solve for the new reservations you're trying to book vs what's already there; essentially one-vs-all. As it is, searching the tree can take 1-2 seconds in-browser on reasonable hardware, and that's with a good deal of pruning. Trying to massively re-optimize the whole calendar after the fact would be undesirable anyway, considering there are a lot of human choices being made along the way.


That sounds amazingly high tech for a kenneling facility. How did you do the optimization - usign an off-the-shelf solver?


I wrote it completely from scratch, basically a custom type of tree search. Admittedly there are naive aspects and opinionated optimizations and magical constants involved in the final code, but in practice it's worked without any problems for 4-5 years, and it's relatively fast for the amount of data it's churning.

[Edit: An example of a magical constant is the weighting of "friends" over a period of time versus "number of moves" required to achieve optimal friendships]


Impressive. Also hilarious that this kennel is probably better optimized than a lot of big logistics companies. ;0)

I think arbitary weightings are unavoidable when optimizing 'soft' (social) problems like kennel allocation or seating plans. The optimal solution is not well defined.


Thanks! It was quite a fun problem to dive into... the company hired animal behaviorists and put a lot of thought into the "soft" issues that it wanted the software to be able to solve, while allowing for flexible decisions from managers and employees, so it was challenging as understanding the domain... and yes I would say animal management is quite a tricky logistical problem that most people never even consider.

In a larger way, though, 90% of this kind of work is pencil and paper, drawing out all possibilities you can think of, and then asking questions like "what if X and Y are friends staying together, and Y and Z and Q are friends, but X and Z are enemies, and Z+Q is showing up on night 4 of X+Y stay, should Y move in with Z if there are 2 nights left? 3? A majority? Ever?" I would get into long, long conference calls where I would ask them all these scenarios and graph them out before I started writing the code. So the code just expresses what they would hopefully wish to do based on their domain knowledge and best practices. And that is the real trick of optimization... making the clients happy ;)


I have a friend who had 400+ guests and 50+ tables. But they paid by the table, so saving whole tables would have saved lots of money. And friend stayed up all night before wedding stressing about who to put where.


>Isn't "Keep people either together or apart" an NP-Hard problem,

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.


Finding solutions that are not necessarily optimal but good in practice is often a tractable problem.


For sure: a traveling salesman route under length L, for instance. But what is good enough when combining incompatible people? Less than three vendettas per table? :)


I agree with grandparent that non-optimal solutions are often enough.

But just to be complete, since TSP was mentioned here:

We could solve TSP instances with >80k cities to optimality back in 2006:

https://www.math.uwaterloo.ca/tsp/

The trick is that some types of problems, like TSP or assignment problems, have structure that can be exploited. Of course they remain NP-hard, so as size grows, at some point the computational cost becomes unsustainable. But the point at which this happens is often way further (i.e. for much larger instances) than most imagine.


Requirements for the Seating Chart Optimizer I made for planning my wedding party:

* 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...


Thanks for trying it out!

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!


Ah cool, somehow I didn't notice that! I've made an anonymized version of my guest list to try it out. Another thing that I noticed is that I put notes with some of my guests, and also some couples are in two groups - does your app work with multiple groups, or does that not make sense with the optimization?


Right now I don't support multiple groups. That was on the roadmap, but I haven't put it in yet.

I figured most people didn't need multiple groups immediately, but if I hear it's important, I'll definitely prioritize it!

Thanks for trying it out with a more "realistic" data set. I have some friends' lists, but would love for others to try it with their own data.

Let me know what you think! Is this a show stopper?


This is very cool! I built a tool similar to this, but for elementary school, classroom placements, and people always ask me if I can modify it for wedding seating!

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?


Great for schools!

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?


Clever idea! I'm planning mine for April, but having trouble understanding how to use this tool. In your default data, Liam is listed as a couple but when you drag to a table it says "1/4". Should that be 2/4? How do I change number of tables and how many at each table? How do I create the "tags"?

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.


Congrats elicash!

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.


I tried writing one of these about 10 years ago and failed miserably.

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.


I agree there's going to be some hand curation. That's why this tool was meant to help iterate over solutions, and not prescribe. You can lock people in.

Also, thanks for the specs. I was thinking of some of those things, but really glad to hear how you thought about it!

I haven't clustered people together yet in terms of physical location, because I don't have a way to express table locations yet in the UI. Trying to keep it "just simple enough". But I know it's important for many people.

If you have any more insights, I would love to hear it!


I'm wondering if a constraint solving library like optaplanner could help here - believe it uses simulated annealing.

Hey, maybe a use case for Dwave? j/k.


Trivia: The first major public demonstration of D-Wave used a modified version of our PerfectTablePlan table planner software to show how D-Wave could solve a real world optimization problem. https://www.perfecttableplan.com/newsletters/newsletter10_we...


Nice. I sat through a sales presentation/demo by D-Wave once. Very interesting, though limited to a particular class of problems.

Heck, the copy on their homepage is a big clue:

"Our customers are building quantum applications for problems as diverse as logistics, portfolio optimization, drug discovery, materials sciences, scheduling, fault detection, traffic congestion, and supply chain management. What problem can we help you solve?"

You have to REALLY need it to spend the money.


This is precisely what optaplanner was designed to do. Note the optaplanner has been forked by its original author and main contributor when they left RedHat/IBM. The fork is called "TimeFold", most development happens there now.


> The fork is called "TimeFold", most development happens there now.

Thanks. Last time I used optaplanner was several years ago on an aerospace project - if I need a constraint solver again I'll definitely look at TimeFold.


Yea Optaplanner is pretty good. It's definitely gotten better over the years in terms of usability, especially with Constraint Streams.


Super cool! Built something similar a few years back to assign kids to boats on a sailing camp using Google's OR Tools. Don't recommend OR Tools, solver was super slow vs cplex but didn't find any good OS solver. I used two objectives in my objective function to ensure someone didn't get left out, probably need to do something similar for the prioritization in the roadmap?

https://github.com/jonasmalm/lakritsrot


Yea, I went with Optaplanner, which is definitely more "user friendly".

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!


Do any of you happen to have any thoughts wrgds to OR-tools vs optaplanner? I've been trying to use OR-tools for a vehicle routing problem (with lots of constraints) and found it is really bad at finding solutions in our case, and it has only auto-gen documentation more or less, very sparse set of examples and a single dev supporting on the forums it seems (still thankful for that it's open source and HAS some support!).


Take a look at the two Timefold (continuation/fork of OptaPlanner, open source Apache License) quickstarts for vehicle routing: https://github.com/TimefoldAI/timefold-quickstarts/tree/stab...

We regularly answer questions on StackOverflow if you run into any issues with it.

Disclaimer: I am part of the team behind OptaPlanner/Timefold.


We had a few constraints based on table location:

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.


Definitely valuable constraints!

I'll definitely have to think about how to incorporate such things in a simple to use manner.


Do you account for not putting right handed people to the right of left handed people? But then maybe you do, if you want to play match maker.

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.


>Do you account for not putting right handed people to the right of left handed people?

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?


Yea for most of the social conditions, you can probably already use the "Separate/Link" feature.

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!


Genuine question - why assign seats at all? In my country (weddings with 200+ people are the norm) people sit wherever they want. In the US, you wouldn't assign seating at a house party (right?), so why do that for a wedding, since a wedding is after all just a more expensive party?


To allow different circles of friends to sit together.

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.)


Weddings are usually somewhat formal. Formal events benefit from guidance to reassure guests. For example, a dress code helps you narrow down your choices if you have no idea what to wear. Similarly, a seating plan is great for someone that is there on their own and has no idea who they can sit next to.

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.


To add to what others have said, a big part for me is that you're asking folks to come. For the most part the social expectations of guests are pretty light: watch this quietly, light mingling and chatting, clap when it's time. Sitting down for a meal is unique in that guests must have a sustained social interaction with other guests.


As others have mentioned, this is very culturally dependent. And culture isn't necessarily country or region. Different types of people like different things. This particular app is designed for those times when you need more assignment, for whatever reason.

Hope that makes sense!


This varies a lot from country-to-country[1], by 'social class' (for want of a better word) and event type.

[1]And even within countries. I believe it varies from state to state in the US.


I’m getting married tomorrow, and doing tables is no easy feat. The list constantly evolves, people come/cancel last minute, and sometimes you can play on multiple relationships for seating (e.g. one couple might be family but also friends with other guests attending)


Congrats jerpint!

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!


This looks so much like the bin packing problem [0] if you generalized it you could do a lot with it.

[0] https://en.wikipedia.org/wiki/Bin_packing_problem


Yep, I'm targeting an optimization engine at a more specific problem that might be useful to lots of consumers.


Would you make that open source? I'm interested in this problem. I'm sure there are some OS bin packing algorithms but I not familiar with ones that have separation and linking rules.


I'm using Optaplanner underneath, which is already open source.

https://www.optaplanner.org/


Love this. I got married in 2022 and I started a "friend and family graph" with the goal of optimizing layout.

But other stakeholders, cough cough in laws cough, quickly demanded direct allocation.


Haha! How many people attended? Would your in-laws have been able to use this type of tool?


160, and I don't think my in-laws would have used this. Mostly because they would feel like having to use a website vs just writing names on a printed diagram would be a bit too much to ask and they truly wanted to have full access so describing some sort of requirements and then have someone or something else create the layout would not fit their expectations.

But that's just my situation, I'm sure for younger folk or weddings where the couple has stronger say would be a good tool to have!


Pitching in as yet another dev who also thought of implementing this :)

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)


Thanks for the insights! At the moment, the app is targeted at "table level" rather than "seat level".

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!


Could the "different table sizes" problem be solved by setting all tables to a maximum size while adding a "null person" to the imaginary seats at smaller tables?


A fun problem to attempt. I bet there are a lot more parameters! Isn't there usually "head table". Maybe its obvious who would sit there?


Good point! Yea, I'm putting that on the roadmap as part of "table ranking" and "prioritizing guests". So maybe the head table is "rank 1", and "parents" get "min rank 1".

Also, for now, you can lock certain people to certain tables and then Optimize again.


This is pretty interesting! A related algorithm that may be useful is Wave Function Collapse, which can be taught using seating constraints like this.


Cool to see a project using optimisation <3


Yep! I was scratching an optimization itch. Glad to see someone noticed!


Do you have a writeup about the optimization methods you used? I mean, which algorithms did you choose?


No writeup yet, since I've been working on the UX more than the optimization. I haven't optimized the optimizer yet or done benchmarking yet.

Mostly working on the constraints and what's important first to be able to tweak first. Trying to make this very user friendly.


Looks good! We would use this in a corporate environment, for networking dinners etc.


Oh great! Are there any other features/abilities you might need to be able to use this?

I appreciate the feedback!


This is interesting. What's the algorithm that you use to optimize?




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: