My mother-in-law’s house was hit by the 2024 Noto peninsula earthquake — intensity 7, the maximum on Japan’s seismic scale. She watched a mountainside collapse in front of her. The neighborhood is mostly empty lots now. As the area slowly recovers, she started running a small guesthouse to support the local community. She needed to post monthly calendars on Instagram — which days are open, which are booked, which are closed.
I looked into how small businesses in Japan handle this, and fell into a rabbit hole.
The calendar image culture
If you look at the Instagram accounts of small businesses in Japan — ramen shops, Indian restaurants, hair salons, guesthouses — you’ll notice something: they all post monthly calendar images.
Not Google Calendar embeds or booking widgets — just images. Hand-made, posted as photos.
○ = available
△ = few spots left
✕ = fully booked
休 = closed
Every month, shop owners spend time creating these images and posting them to Instagram or LINE (Japan’s dominant messaging app). Their customers check these images to know when to visit.
“There must be a dedicated tool for this,” I thought.
There wasn’t.
The “just use Canva” loop
Search “how to make a business calendar for Instagram” in Japanese and every result says Canva. Shop owners recommend it to each other. Tutorial blogs recommend it. It’s a closed loop — everyone telling everyone to use the same tool.
Canva is powerful. It can probably do everything I needed. But here’s what actually happens in Japan: one blogger writes a tutorial showing how to make a calendar by dragging text boxes around a canvas, aligning them manually, fighting with snap points. That tutorial gets copied. The copy gets recommended. And suddenly, that painful workflow is the standard method. Nobody goes back to check if there’s a better way.
Japan has a culture of “right-face” (右ならえ) — once everyone lines up behind a method, it’s very hard to correct course. The method becomes the answer, even if it’s inefficient. I don’t blame anyone for following the tutorials they found. But I also didn’t feel like digging through Canva’s feature set to find the “correct” way when the entire ecosystem had already settled on the wrong one.
The gap between “this should be easy” and “this is what people actually do” was the real problem. Not Canva. Not the bloggers. The gap itself.
So I built something to close it.
Rage-driven development
I call it rage-driven development. Not anger at people. Anger at the situation. The gap between “this should be easy” and “this is needlessly hard” is fuel.
3 min. Calendar — an app that creates monthly business calendar images in about three minutes.
The workflow:
- Tap dates to set their status (open, closed, few spots, fully booked)
- Pick a color theme
- Export as image
- Post to Instagram
That’s it. No account. No sign-up. No cloud. Everything runs in your browser.
Why “3 minutes”
I timed it. From opening the app to having a finished calendar image ready to post — three minutes for someone who’s never seen the app before. Under two minutes once you’ve done it once.
The name comes from Cup Noodles — invented in Japan, ready in three minutes. If instant noodles can be done in three minutes, so can a calendar. If it takes you longer, I’m sorry.
The real users
The users I built this for aren’t developers. They’re:
- A ramen shop owner who closes on Tuesdays and the third Wednesday of each month
- An Indian restaurant owner who speaks Nepali as a first language
- A guesthouse owner in a disaster recovery area — like my mother-in-law
- A bar owner who needs to post staff schedules for the month
These people should be focusing on their business, not learning design tools. The tool should be a black box — tap a few buttons, get an image, move on.
11 languages
Japan has a lot of small businesses run by immigrants. Indian and Nepali restaurant owners. Chinese restaurant owners cycling through lease-transfer properties. Vietnamese, Thai, Filipino workers running small shops.
3 min. Calendar supports 11 languages: Japanese, English, Chinese (Simplified), Korean, Nepali, Thai, Vietnamese, Tagalog, Spanish, Portuguese, and French. The UI auto-detects your browser language.
This wasn’t a nice-to-have. If I’m building for small business owners in Japan, I’m building for people who might not read Japanese fluently.
Technical decisions (for the devs)
Stack: React 18, TypeScript, Vite, Tailwind CSS, Zustand, Konva (Canvas), i18next, Workbox
Why client-side only
No server means:
- No hosting costs (it’s on Cloudflare Pages)
- No privacy concerns — zero data leaves the browser
- Works offline as a PWA — install it on your phone, use it in a dead zone
Shop owners don’t have reliable internet at all times. My mother-in-law’s area in Noto is a case in point — fiber was never there to begin with. It was supposed to be rolled out, but the earthquake derailed those plans. Meanwhile, ADSL service was terminated on schedule. Households were left with no fixed-line internet, forced to get by on mobile data. The app needs to work regardless.
Why Canvas (Konva) instead of DOM-to-image
The exported image needs to look exactly like the preview. DOM-to-image libraries (html2canvas, dom-to-image) have cross-browser inconsistencies, font rendering differences, and can’t guarantee pixel-perfect output.
Konva renders directly to Canvas. What you see is what you export. No surprises.
Font loading strategy
11 languages means 11 different font families (Noto Sans JP, Noto Sans SC, Noto Sans Devanagari, etc.). Loading all of them upfront would be megabytes of wasted bandwidth.
The app detects your language and loads only the font you need. If you switch languages, it lazy-loads the new font. Most users never download more than one.
Holiday auto-detection
The app auto-detects holidays for 100+ countries. A Japanese shop sees Japanese holidays pre-marked. A Thai restaurant sees Thai holidays. This saves the “wait, is next Monday a holiday?” lookup that every shop owner does every month.
For Japan specifically, it also shows rokuyo (六曜) — a traditional calendar system that some customers still care about. “Taian” (大安) is a lucky day; “Butsumetsu” (仏滅) is unlucky. Some businesses adjust their schedules around this.
The QR code problem
While building this, I discovered something that made me genuinely angry. Many small shops in Japan use free QR code generators to create codes for their Instagram or LINE pages. Some of these “free” generators use URL shorteners that can redirect to scam sites after a delay.
QR codes were invented in Japan. It’s a Japanese technology. And now Japanese shop owners are being redirected through that same technology to foreign scam services. A guesthouse owner who survived an earthquake, who’s trying to rebuild her community, puts a QR code on her flyer — and a scam service hijacks it to redirect her guests to a phishing page. She doesn’t know. Her guests don’t know. She’s already dealing with enough.
3 min. Calendar includes a QR code generator that creates codes pointing directly to the URL you specify. No shorteners. No redirects. No intermediary services. The QR code encodes exactly what you type.
It’s a small feature, but I wasn’t going to let that one slide.
What I don’t know
I built this for the Japanese market because that’s what I see every day. But I suspect this pattern — small businesses posting schedule images on social media — exists in other countries too.
- Does the Indian restaurant near you post monthly schedules on WhatsApp?
- Do small shops in Southeast Asia use LINE or Zalo for this?
- Is this an Instagram-specific behavior, or does it happen on Facebook too?
I genuinely don’t know. If you’ve seen this pattern in your country, I’d love to hear about it in the comments.
Try it
Free. No sign-up. Works on phone. Install as PWA for offline use.
If you run a small business — or know someone who does — try making next month’s calendar. Time yourself. If it takes more than three minutes, tell me what slowed you down.
