I kept watching my classmates schedule group meetings through when2meet. It is popular for good reasons: it is simple, it is fast, and nobody has to sign in. But it doesn't go any further than that, and the same problems came up every time we used it.I wanted to build a web app that keeps those values, simplicity and privacy, and adds features that solve the problems I had seen. The challenge I set for myself was to see how far I could push it while keeping it simple, fast and mostly client-side.Creating an event takes one screen. You pick the days and hours and share the link. Nobody needs an account; people type a name and mark their free times. If a group already started on when2meet, they can paste its link and bring the responses over.
AI usage disclosure: Most of the code was written by Claude in Claude Code. My part was finding the problems worth solving, choosing the approach for each one, deciding on the features and constraints, and reviewing and testing the result.
Problem 1: it was hard to use on a phone
Existing tools weren't responsive, and the cells you tap to select a time were too small to use comfortably on mobile. In Schedule Squared the touch targets are large enough for a thumb, you can drag across the grid to select a block of time, and on small screens the grid pages through the days instead of shrinking them. The grid also works with a keyboard and a screen reader.
Problem 2: copying times over from my calendar
My own biggest annoyance was having Outlook open next to when2meet and copying my free times over by hand. Cross-checking between two layouts was slow and easy to get wrong. Exporting specific days from Outlook or Google Calendar isn't easy for non-technical users, but almost everyone knows how to take a screenshot. So I had an idea that seemed a bit crazy at first: paste a screenshot of your calendar and let OCR work out when you're busy.The approach reads the hour labels and dates with OCR to figure out where each time and day sits on the image, then finds the colored event blocks in the screenshot and maps them onto that grid. It turned out better than I expected. You can paste an incomplete screenshot from a phone or a desktop, or several screenshots in a row, and the busy times fill in correctly. Everything can still be edited by hand afterward. The image is processed in the browser and never uploaded, so the feature doesn't cost any privacy.
Once people respond, the group view shows a heatmap of who is free when and ranks the best times by how many people can make them.
Problem 3: matching people into pairs
This one came from watching someone else struggle. A classmate in one of the psychology labs I'm part of was using when2meet to match 8 people into pairs, where each pair needed an overlapping one-hour slot for an intervention session at a specific time in the week. There are 105 ways to split 8 people into pairs, and each pair still needs a shared time, so working it out from a heatmap by hand is slow and it's hard to know whether you found the best answer.I had just learned about linear programming in my Foundations of Machine Learning class and was impressed by how quickly a solver can find optimal solutions to problems defined by constraints. This was exactly that kind of problem. Each possible meeting is a decision variable, everyone's availability and the rules about who meets when become constraints, and the objective is to place as many people as possible. "Split into groups" builds this integer program from the responses and solves it in the browser with the HiGHS solver. Pairing 8 people takes under 0.2 seconds.Once the model existed, extending it was mostly a matter of adding constraints: a host who has to be at every meeting, several meetings per person spread out evenly, breaks between meetings, a daily limit and a time window. When several plans are equally good, the app finds them too and lets you step through them.
Keeping it simple
Every feature had to fit the original goal. The calendar import and the solver only load when someone uses them, so people who just mark their times get a fast page. The app stores only the times people mark as free, anyone can delete their own answer, and events delete themselves after 90 days (or 180 days without a new answer for weekly polls). It's built with Next.js and a small Postgres database on Vercel, and most of the work happens in the browser.
Božena Němcová's prose is often described as unusually gentle. I built a distributed pipeline over the whole Czech Wikipedia and 51 books to check whether her sentence endings are softer than usual, and spent much of the project learning when parallelism helps and when it only slows things down.
Web for Change: websites on a pay-what-you-can basis
I design, build, host and maintain websites on a pay-what-you-can basis for projects that support sustainability, social change, animal rights or art, and for students who need a portfolio. I started Web for Change so that money wouldn't keep these projects from having a professional website.