A big piece of needlework looks motionless for a long time
Mum does cross-stitch. A large pattern is tens of thousands of stitches and months of work. In a single evening you can do quite a lot, yet the picture barely changes. When progress hides inside a huge canvas, it is easy to set the work aside and one day never come back to it.
She wanted to stitch a little every day and see how separate evenings add up into a finished piece. That is how the app was born. At first it answered only one question - "how much did I do today" - and then a monthly plan, statistics and game mechanics grew up around that single entry, mechanics that support the habit without pressure.
The evening ends with one honest entry
Each piece of needlework is set up as its own project with a total number of stitches. At the end of the evening mum records how much she did that day. The full picture builds from a sequence of such marks: how much is already behind, how much is left, and how fast the work is moving.
A closed day is counted in full: it has already earned the streak, a plant, a medal and achievements. Allowing backdating would mean unwinding that whole chain in reverse. It is simpler and more honest to leave it as it is, and then the calendar shows the real rhythm rather than a touched-up picture.
The monthly plan shows the pace, it does not set a deadline
For each piece a manageable monthly plan is set. The app shows the current pace: whether the work is on plan, ahead of it or behind. It is a reference point that shows where you stand inside a long project, not a date by which a hobby is obliged to turn into a completed task.
Projects have clear states: active work, finished and archive. So current patterns do not get mixed up with completed or set-aside ones, and the list does not turn into a dumping ground of half-started ideas.
The game should support you, not catch you in compulsion
The game layer was the most unfamiliar part for me: I mostly build websites, and here I was designing habit mechanics for the first time. From the very start there was a single constraint - the app had to stay a warm tracker. There are no points in it, no in-app currency, no leaderboards and no competing with others. Nothing that would make you open it just for another "spin of the wheel". A reward should bring joy, and a missed day should not turn into punishment.
The streak of days and freezing it. The app counts how many days in a row she has managed to stitch - the habit draws you in gently, on its own. But life happens, and a missed evening should not reset weeks of work to zero. That is why there is a "freeze": it forgives one missed day and kicks in automatically, and to keep it from becoming a loophole, it is available no more than once every thirty days. The streak continues, but honesty is preserved.
Monthly medals with a clear bar. At the end of the month the result for each piece is marked with a medal, and the bar is transparent - it is the share of the plan completed:
The lowest medal is a "sprout", not an empty space: even a small contribution is acknowledged, and the situation of "you failed" simply does not exist.
The garden collects streaks, and the achievements are just for fun
A growing garden. Consistency turns into a living garden: the longer the streak, the higher the plant's level - twelve steps from a sprout and a blade of grass to a rose, a sunflower and a pine, and a full thirty days in a row give the biggest plant. When a streak breaks, the plant goes into the collection, and the garden banks them as a memory of the path travelled. Every plant has its own "log": when that streak happened, what the best day was, and which piece mum was working on at the time.
Achievements, many of them with humour. Besides the serious milestones - stitches, series, plans - there is a large collection of optional achievements, some of them hidden in the secret categories "Magic Numbers", "Dates and Times" and "Patterns and Rhythms". Some are about numerical coincidences: hitting exactly 777 in a day ("Jackpot"), 666 ("The Devil"), 314 ("The Number Pi"), making a palindrome or exactly 12,345 stitches in total. Some are tied to the calendar: checking in on Vyshyvanka Day, stitching on New Year's Eve, catching a Friday the 13th or the 29th of February. It does not affect the result - you stitch for yourself, and the achievements are just an excuse to smile and collect one more.
A linen canvas instead of a dashboard
I put the interface together not as a dashboard, but as a cosy thing to match the craft theme. The background is styled like linen canvas, the rewards sit on a "medal shelf", and the garden is not a list but living plants you can touch with your eyes.
For all the mechanics, the daily action stays a single one: open the app from the icon on your phone, mark the stitches and immediately see the progress, the streak and the reward. An evening reminder gently points out that the streak is at risk, but does not turn into a stream of notifications.
The app has no separate "big" mobile program, and it does not need one: it lives right in the phone's browser, yet it installs as an icon and behaves like a real one. There is nothing to hunt for in an app store, and for me it saved a whole round of development for mobile platforms. I deliberately did not make a desktop version: nobody records their needlework at a computer, the whole point is for it to be at hand on the phone.
The most temperamental logic fires at the boundary of the day
Technically the app is small, but the game mechanics live in time and are constantly recalculated. The streak breaks and is restored at the boundary of the day, the freeze counts down its window, the medal sums up the result at the end of the month, and an achievement catches that in a single evening exactly a certain number was reached.
Logic like this is not enough to write once. There are many states that need to be counted correctly, correctly rolled back when conditions change, and checked separately. An ordinary form saves the value you entered; here one number reached or a new date can change the streak, the plant, the medal and several achievements all at once.
But the hardest part for me was not this, it was keeping the balance: the system has to show the result honestly and yet never once sound like a warden or a casino. I tested every mechanic against this question, from the freeze to the lowest medal. More than once I caught myself thinking it would be easier to make a strict tracker that pressures you with numbers - but that was exactly what I did not want. It seems that the whole project rests on this line between honesty and kindness.
A small project with well-familiar engineering tasks
The workshop has many large systems - portals, automation, computer vision. This project is far smaller, but underneath it are familiar engineering tasks: careful data collection, reliable storage, scheduled automation, notifications and an interface built for a real daily scenario. Here all of that works for the hobby of someone close to me.
That is exactly why I love this small project in a special way: it sells nothing and scales nobody. It takes a beloved pastime and carefully turns it into a process that is a pleasure to do every day. Registration in the app is open, and other stitchers are gradually using it - but its true measure of success is only one: does mum open it every evening?
This is not about productivity. It is about every evening at the hoop leaving a visible mark - and about wanting to sit down again tomorrow.
This is our own project, so we show how it's built with nothing held back - down to the architecture and the code.

