VoluntOS
Product
A custom scheduling engine — built and shipped using Claude Code
My wife manages volunteers at our community center using legacy scheduling software that is expensive, rigid, and impossible to customize. I designed and built a new one for her from scratch using Claude Code, Cursor, and Figma as my core stack.
Problem: The existing software had a very limited concept of equity or fairness in rotation. Existing auto-assign algorithms were poor leading to volunteer burnout and a lot of manual rework. The user experience was full of feature gaps and paper cuts.
Solution: I built a custom auto-scheduling engine that factors in availability, hours worked, and rotation equity to generate balanced schedules automatically. Org admins can override, fine-tune, and publish. As it continues to be tested, more features will be added.
Stack: Claude Code, Cursor and Figma; Supabase (Auth/DB), Resend (Email), Vercel (Deployment) and more.
Built with:








View live:
What building with Claude Code made possible
With Claude, it was possible to implement precise scheduling algorithms (while simultaneously learning about how they are constructed) and tailoring every user experience based on user feedback I directly received from my wife and had experienced myself. Since I was connected to Figma MCP, it was possible also to quickly jump between the Figma canvas and Claude, and vice versa, to refine and create an experience which felt tailored and bespoke to the user.


Using AI to add texture
Using Claude, I was able to quickly experiment with visual refinements, such as subtle animated Paper textures and custom motif-based avatars (eventually scrapped), in order to keep the application feeling premium and bespoke. With AI tools available to everyone, I believe human-facing experiences should still feel alive with intention and texture, wherever it enhances the experience.

Co-designing the scheduling engine with Claude
Having no prior understanding of how established scheduling algorithms work, I was able to very quickly learn the basics, understand if the weights it was prioritizing was correct, and implement a first working version based on our needs and experiences. Additional refinement and learning in this area continues to be done.




