
Things to Say: A Scheduled Message App for Words That Can Wait
The client
Things to Say began with an independent founder and a personal idea: write something today for someone to read when the time is right. It could be a birthday letter, an anniversary message or words left for a time when the writer can no longer be reached.
The product’s line, “Some words wait for their moment”, describes it well. Users write a letter, optionally add photos or video, and choose how and when it should arrive. The recipient opens it in a browser without installing an app.
Internative developed the product for the founder, from the mobile application and backend to the administration panel, bilingual website and Google Play launch.
The challenge
A scheduled message app makes a promise that extends beyond the moment someone presses send. The content must remain private while it waits. The delivery system must retain the intended time zone. The person receiving the letter should be able to read it without becoming an app user.
Things to Say also supports delivery following an unanswered wellbeing check. That meant the product needed to handle both calendar dates and a waiting period tied to the sender’s response.
Accessibility was equally central. Many intended users are older adults. Reading secondary text, understanding navigation and finding the app on a home screen were practical concerns that needed attention alongside encryption and scheduling.
What we built
A mobile app for writing ahead
We built Things to Say in Flutter, with Turkish and English throughout. The writing flow brings together the letter, its attachments, recipients and delivery settings. Users choose a channel for each recipient: email, WhatsApp delivery or SMS.
There are three sending modes. One-off letters have a chosen date and time. Recurring letters support occasions such as birthdays and anniversaries. The timeless mode asks the sender whether they are well at regular intervals; if they do not respond within the configured period, the letter is delivered.
Photos and videos are optimised on the device, with a native module handling video. The app also includes push notifications, a credit system and monthly membership, with Google Play Billing and a 14-day free trial.
This mobile application development work brought writing, media and scheduling into the same product. For another example of our Flutter app development, see our Sportez project.
Privacy from the device to the reading page
Letters and media are encrypted on the sender’s device using AES-256-GCM. The server stores encrypted content and a wrapped key. The master key is held by a separate key service running on Cloudflare Workers.
The recipient’s link carries the decryption key in its URL fragment: the part after the # symbol. Browsers do not send that fragment to the server. The letter is decrypted in the recipient’s browser, so servers and delivery channel providers do not see the plaintext.
This architecture connects encrypted messages with a reading experience that requires no app installation. The browser is where the recipient reads the letter and where decryption takes place.
Privacy also shapes operations. Logs exclude message content, keys and recipient addresses. The administration panel never displays the contents of a letter. These application security decisions cover what the system stores, what it sends and what its operators can see.
Scheduling with a fallback path
The NestJS API checks for due letters every 60 seconds and places them in a BullMQ queue backed by Dragonfly. A separate worker process handles sending.
If the queue cannot be reached, the scanning process sends the due letter itself. The queue therefore has a defined fallback instead of being the only route into delivery.
Delivery is idempotent: repeated processing does not create a fresh delivery of the same message. Each channel has rate limits, and delivery notifications are part of the system. Time-zone information is stored with every schedule.
These details matter for time capsule letters, where the chosen moment is part of the message. Scanning, queueing, sending and delivery notifications each have an explicit role. The engineering work sits behind the date and time the sender selects.
Accessibility changed by closed testing
Closed testing exposed specific problems. The app icon did not appear on a Samsung home screen. Secondary text was too thin for older readers. The largest font setting was still too small, and the bottom navigation was unclear.
We addressed that feedback in one release. Changes included a new dark green icon, heavier text, an accessibility screen and a short introductory tour.
The accessibility screen offers five font sizes, a bold-text option and three selectable app icons. The tour introduces the app on first entry.
For this product, interface design and visual systems extended to how people found, read and understood the application. Testing supplied concrete changes to make before publication.
Administration without access to letters
We built a Next.js administration panel for users, pricing, credit definitions, FAQs, delivery and channel status, and backups. It also manages versioned Turkish and English agreement texts and the consent records captured during registration.
The panel provides operational information without exposing letter content. Delivery status and the words inside a message remain separate.
The backend verifies in-app purchases and handles store notifications. Backups are verified every night. Alongside the mobile app, we built the bilingual thingstosay.app website and the secure browser page where recipients open their letters. The website has no tracking code, cookies or third-party analytics.
The outcome
Things to Say has been available on Google Play since 8 October 2026. Closed testing was completed, production access was approved, and the feedback gathered during testing was incorporated into a release.
The delivered scope includes the app, backend, delivery worker, administration panel, website and recipient reading page. Privacy controls, delivery behaviour and accessibility settings are implemented parts of that product.
The testing changes also provide a concrete reference for post-launch enhancements: a visibility issue, a reading difficulty or an unclear navigation element can each become a specific product update.
Technology
Flutter · Riverpod · NestJS · Node.js · MongoDB · Dragonfly · BullMQ · Next.js · Cloudflare Workers and R2 · OneSignal · Google Play Billing
Building something similar?
If you are planning a mobile product involving private content, scheduled delivery or accessibility needs, talk to us. We can work through those requirements together and define what the product needs to do.
Related services
Where this topic becomes an engagement.





Keep reading
More articles from Customer Stories.



