WeaveMove
Stand up, move, get back to work.
Every 30 minutes a signal asks you to press GO. Then comes a short two-minute workout, after which the app calls you back to work. Intervals and exercises are fully adjustable.
- Ready-made setsLight warm-up, healthy lower back, tone and strength exercises.
- Your own setsBuild your own routine from any exercises.
- No sign-upSettings and stats stay on your device.
- Dark and light themeFollows your system.
ShotHost
The fastest way to share screenshots.
Take a screenshot and its link is already in your clipboard. Meanwhile the file uploads in the background to your own server, with no public image hosts and no ads.
- Instant uploadUpload starts the moment the file appears on disk.
- Link right awayThe URL is ready before the upload finishes.
- Your serverScreenshots live on your VPS, under your control.
- Easy setupA macOS menu bar app and a step-by-step guide.
eWordWidget
A new English word every 10 minutes.
A Mac desktop widget for Russian speakers that teaches English while you work: the word, its transcription, translation, examples and idioms. The translation is hidden so you try to recall it first.
- A word every 10 minutesChanges on its own, no need to open the app.
- Dictionary pronunciationOxford and Cambridge recordings, British or American.
- Trains recallEN and RU modes, the answer is revealed with a tap.
- ProgressLearned words are marked and never shown again.
How I work
Think it through first
Before the first line of code I dig into the problem: who will use it and how, what data and load to expect, where the bottlenecks are. I design the architecture so the service is easy to grow.
Build it clean
Frontend and backend by one hand, without extra layers or hacks. Clear code that I or another developer can read a year later.
Automate
Everything lives in git, and deployment runs on its own after checks, with no manual uploads to the server. Less manual work, fewer mistakes.
See it through
A service is done when it works for people, fast and reliably, not when the ticket is closed.