The owner planning the next weeks, and the developer picking the next task.
- P0 — before the next event of any size: fallback provider, dedicated server, offsite backups and uptime
check, a burst load test, a legal answer on data location.
- P1 — before an event of several hundred guests: higher provider quota, configurable deadlines, flood handling
for pack creation, languages, branding outside the code.
- P2 — product line: connect the second product’s landing to the leads server, clean the repositories’ notes,
landing performance.
- P3 — only with proven demand: PostgreSQL, separate workers, multi-tenancy.
- This is a proposal derived from Known gaps. The repositories contain no dated plan; no
dates are given here.
| # |
Item |
Closes gap |
Effort |
Unlocks |
| 1 |
Configure and live-test the fallback AI provider |
R1 |
About a day plus account verification |
Surviving a provider outage |
| 2 |
Move the product to its own server |
R2 |
Half a day |
Predictable memory and CPU; no shared web server |
| 3 |
Offsite copy of the daily backup; external check of /health |
R3, R5 |
Half a day |
Recovery after losing the server; alerts when the bot itself is down |
| 4 |
Run the stream-and-burst load test on the event server, on a test key, with a stated budget |
R4, R6 |
Two hours |
Real numbers for parallel packs and for pack creation |
| 5 |
Legal opinion on data location; masked cards meanwhile if workable |
L1, L2 |
Outside engineering |
Selling to clients with legal departments |
| 6 |
Decide the likeness mode with a live comparison on varied faces |
P3 |
A few hours and a small budget |
One default, less code to keep alive |
| 7 |
Remove private details from the repositories’ notes, comments and docstrings, or keep the repositories private |
L8 |
Two hours |
Safe public links from this site |
| # |
Item |
Closes gap |
Effort |
| 8 |
Raise the provider’s daily image quota; set IMAGE_RPD_LIMIT to match |
Capacity |
Provider-side |
| 9 |
Make the delivery deadline and delay notice configurable; add a waiting estimate for guests |
R11, P9 |
Small |
| 10 |
Backoff for Telegram flood limits during pack creation |
R6 |
Small |
| 11 |
A money ceiling per day or per event with an alert |
R9 |
Small |
| 12 |
Uzbek and English for the bot and the kiosk, per installation |
P1 |
Medium |
| 13 |
Move station branding out of the code tree; neutral logo slots |
P2 |
Medium |
| 14 |
Fix pose 10 (arm cut) with a live check |
P4 |
Small, needs a few paid images |
| 15 |
Retention for guest rows and for automatic database copies |
L9, L10 |
Small |
| 16 |
Pack limit per event |
P8 |
Small after an event identifier exists |
| 17 |
Disable the automatic API documentation routes in production |
R12 |
Trivial |
| 18 |
Native-speaker proofread of the Uzbek landing text |
W1 |
Outside engineering |
| # |
Item |
Closes gap |
Effort |
| 19 |
Connect the second product’s landing form to a leads server, with its own prefix |
N1, N2 |
Medium — follow the playbook |
| 20 |
Bring the repositories’ notes in line with the code |
the “notes vs code” tables |
Small |
| 21 |
Store the demo sticker sources somewhere reproducible |
W4 |
Small |
| 22 |
Guard the landing audit from sending a real request |
W3 |
Small |
| 23 |
Reduce first-screen JavaScript on the landing page; enforce a budget in the scripts |
W2 |
Medium |
| 24 |
Hard money cap in the one paid tool that lacks it; settings that cannot be zero |
P11, P10 |
Small |
| 25 |
Record a fresh cost-per-pack average after the next event |
Cost |
Trivial |
| # |
Item |
Trigger |
| 26 |
Worker as a separate service |
Events needing more than about three parallel packs |
| 27 |
PostgreSQL and a queue with competing consumers |
Workers on more than one machine |
| 28 |
Object storage with a lifecycle rule for guest files |
Same |
| 29 |
Webhooks instead of polling |
Several API instances |
| 30 |
True multi-tenancy |
About ten active tenants, or self-service events |
| 31 |
A shared leads service for all products |
The third product |
Details of P3: Scaling scenarios and Multi-tenant and white label.
- When an item ships, delete its row here and its gap on Known gaps; if it embodied a choice,
add a decision record.
- When a new gap is found, add it there first, then decide whether it earns a row here.
Last verified: 2026-11-13 against ai-sticker-pack@b715418 and ai-stickers-landing@e350ff5.