Stored before it is confirmed
Bottle writes your bottle to the database first and answers second. If you got an answer, the bottle is safe.
Bottle holds a message or a webhook and delivers it at the time you set. Once, not twice, and not never.
No card needed. Open source on GitHub
To: ada@example.com
Happy birthday, Ada. I wrote this in October so I would not forget in March.
A reminder waits in an app until you open it. A bottle comes to you.
Write a message to a person: a birthday note, a nudge, a letter to yourself next year. Or write a webhook to a server: end a trial in 14 days, lift a deploy freeze on Friday.
Then close the tab. Bottle delivers it at the time you set, once.
Step 1
Write a message to a person, or a request to a server.
Step 2
Choose a minute, a day or a year from now.
Step 3
Bottle stores it and sends it at that time, once.
Delivery
Networks drop requests, servers restart, and senders retry. Bottle is built for those cases first, so the normal case is easy.
Bottle writes your bottle to the database first and answers second. If you got an answer, the bottle is safe.
Send the same request twice with one idempotency key. You get one bottle and you pay for one.
Two requests that reach the server at the same moment cannot both take your last bottle.
If a send fails, Bottle tries again after 30 seconds, 2 minutes, 10 minutes, 1 hour and 4 hours. Each try carries the same id.
Read the code, run it yourself, and check every claim on this page.
Plan changes and payments from Kinde pass through the same intake. A payment that arrives five times counts once.
Engine Room
Run the storm. A test account gets one plan change and one payment, sent nine times, in the wrong order, with a failure in the middle. Then read what the account looks like at the end.
Start free. Move to Pro when you send more.
Pro
$9 a month
A bottle is a message or a webhook with a delivery time. You write it now. Bottle keeps it and sends it at the time you set.
Bottle stores every bottle before it confirms it, sends it when it is due, and records the result. If a send fails, Bottle tries again with the same id, so the receiver can tell a second copy from a new bottle.
Yes. You can cancel a bottle until it goes out. You get the bottle back in your monthly count.
Your bottles are stored in the Bottle database so they can be sent later. Only your account can list them. The Engine Room shows event types and counts, never message text.
Kinde handles sign-in and billing. When you change plan or a payment goes through, Kinde sends an event. Bottle stores that event with the same care it gives your bottles, so a repeated event cannot change your plan twice.
Yes. The code is on GitHub under the MIT licence. You can read it, run it, and change it.