I’ve been experimenting with side projects for years, usually to solve small personal problems. Offday.app started exactly like that: a tiny tool I needed for myself, but it gradually turned into something people from many countries began using. So I thought it might be worth sharing here.
The Problem I Wanted to Solve
Every year, I try to maximize my holidays by combining annual leave with public holidays. Doing this manually is tedious: checking calendars, calculating date ranges, and tryinga to see which combinations create the longest break.
The idea behind Offday.app is straightforward:
Select your country → the app analyzes that year’s public holidays → it suggests date ranges where a few leave days turn into surprisingly long holidays.
It’s simple, but it saves a lot of time and catches opportunities you probably wouldn’t notice.
Global Usage
I initially built it only for Turkey. After refining the holiday logic, I made it work for every country. Since then, users from more than 50 countries have generated hundreds of holiday plans, even though I barely promoted it.
Tech Stack
Since this is dev.to, here’s what’s under the hood:
Frontend: Vue 3, Vite, Tailwind
Backend: Laravel
Infrastructure: AWS (CloudFront, S3, EC2)
Logic: holiday parsing, date-range scoring, caching, multi-locale output
The date engine doesn’t brute-force all combinations. Instead, it focuses on identifying “peak opportunity windows” around existing public holidays.
Why I’m Sharing It
I enjoy seeing other developers’ weekend projects here, so I wanted to contribute mine. Offday.app is simple, but it genuinely solves a small, real problem. If it helps someone squeeze a few extra days into their next holiday, that’s more than enough motivation for me.
You can try it here:
https://offday.app
I’m currently working on improvements such as:
plan sharing without accounts
exportable holiday cards
more detailed country-specific rules
better UX for country selection and date review
If you have suggestions or feedback, I’d be happy to hear them.
Top comments (0)