Mon 3 Aug → Fri 28 Aug 2026 · four weeks · 20 working days each · 16 planned, 4 held back
The projects and their order are the plan. The day-level placement is indicative, not a commitment — move things around freely as long as the sequencing holds and the milestone dates still make sense. Every Friday is deliberately unassigned: things move, errors appear, and a timeline owned entirely by named projects is a timeline that breaks on contact.
| Project | Days | When | Owner | What it is |
|---|---|---|---|---|
| Ads Manager M1 — the data layer | 4 | 3 – 6 Augweek 1 | Dmytro | The ClickHouse applier script, then the ads_unified slices: entity views, daily performance, and the three revenue lenses defined once. No screens — it is what makes everything else buildable. |
| Ads Manager · Explorer — query layer | 3.5 | 10 – 13 Augweek 2 | Dmytro | The typed functions behind the table: rows, children, server totals, the count-only mode, the filter SQL compiler, and the country segment view. Everything that has to know grain rules and ratio-of-sums. |
| Ads Manager · Explorer — the client | 6.5 | 10 – 20 Augweeks 2–3 | Victoria | The routes and the screen: tree and flat views, column picker, totals row, the condition-tree filter bar and panel, and the timeline. The filters are the hard part — per-condition timeframes, one level of OR nesting, live match count. |
| Ads Manager · Inspector | 1.5 | 20 Augweek 3 | Victoria | The side panel that answers "what is this thing?" without losing your place in the table. |
| Connector rollout to production | 1.5 | 17 – 18 Augweek 3 | Dmytro | The only ticket in the window that changes production. Swaps the Meta connector image and re-syncs a table Metabase also reads. Reversible, documented rollback — needs a second person on the call.needs a second pair of hands |
| Ads Manager M3 — write path | 3 | 26 – 27 Augweek 4 | Dmytro | The generic architecture and the action ledger — one API and one interface serving Meta, Google, Snapchat and TikTok, multi-account. The per-provider integrations follow in September; this buys the part that is expensive to get wrong later. |
| Promo Machine — the open batch | 12.75 | 4 – 26 Augweeks 1–4 | Stefan | Eleven tickets: multi-clip promos, per-locale dubbing, the ad-name panel, pulling source video from Mux as a static rendition, subtitles from the catalog, optional closure frames, a free-fill concept vocabulary, overlay anchors, and a Kafka upgrade. |
| Web Payments — checkout backend | 2.25 | 27 – 28 Augweek 4 | Stefan | The first slice of the checkout endpoints. The refund-handling ticket stays blocked until there is a real payload to work from. |
| E2E Automation — infrastructure | 3 | 26 – 28 Augweek 4 | Victoria | Maestro pinned and scaffolded, a smoke test green per platform, web CI on GitHub Actions, and the test-data foundation every flow suite depends on. The suites themselves are September. |
| Web Attribution — Meta relay | 1.5 | 5 – 6 Augweek 1 | Victoria | Browser-side events relayed to Meta's conversions API, so the web funnel reports like the app funnel does. |
| Ad Monetization — AppLovin ops | 2 | 19 – 20 Augweek 3 | Dmytro | The server-to-server callback signing and the rolling cap service. Gated on the AppLovin account approval, which is a calendar item, not an effort item.waits on AppLovin approval |
| Ad Monetization — GrowthBook | 2 | 24 – 25 Augweek 4 | Dmytro | Experiment arms on the rewarded-ad limits, so the cap can be tuned on evidence rather than on a guess. |
| Ad Monetization — live-test fixes | 2 | 24 – 25 Augweek 4 | Victoria | The rewarded-to-coins loop is roughly 80% built this week. What is left is what live testing finds once the account is approved — not new construction.waits on AppLovin approval |
| Ramp — Stefan, and the backoffice | 2.5 | 3 – 4 Augweek 1 | Stefan Victoria | Stefan on repos, environments and a first merged PR. Victoria into the backoffice for the first time — setting it up, running it, and getting oriented before building in it. |
| Total planned | 48 | 3 – 28 Aug | 3 people × 16 days | Plus 12 buffer days — every Friday, unassigned. |
| Victoriafrontend · web · app CI | Dmytrobackend · Ads Manager | Stefanbackend · Promo Machine | |
|---|---|---|---|
| Mon3 Aug | Ads Manager · ramp Backoffice, first time in 1dSet it up, run it, click through every section. Building in a codebase you have never opened costs more than a day of orientation saves. |
Ads Manager · M1 Foundation The ClickHouse applier script ½dEvery SQL ticket in the project uses it, and its history table needs about a day of accrual before anything reads it. Day one, not later. Capability registry + freshness views ½dOne point, and the highest-leverage ticket in the window — it creates the database everything else sits on. |
Onboarding Repos, environments, first PR 1dAlso: file the AppLovin account approval this morning. It gates two tickets three weeks out, and the waiting is the cost. |
| Tue4 Aug | Ads Manager · M2 Section scaffold — nav, routes, flags 1dNothing blocks it and it touches no data. The natural second day in an unfamiliar codebase. |
Ads Manager · M1 Foundation Entity views — campaigns, ad sets, ads 1dThe canonical shape every screen reads. One model, four providers. |
Promo Machine |
| Wed5 Aug | Web Attribution Web event relay to Meta 1dBrowser-side events into the conversions API. Independent of everything else in her lane, so it fits before the Explorer data exists. |
Ads Manager · M1 Foundation Daily performance + the three lenses 1dThe hardest SQL in the milestone — a three-way outer join across platform, internal and AppsFlyer revenue, with a name-based fallback key on about one row in seven. |
Promo Machine Kafka client upgrade 1dNot the trivial version bump it looks like, and less trivial still for someone in their first week. |
| Thu6 Aug | Web Attribution Web event relay — validate live ½dEvents firing is not events arriving. Check Meta's events manager, not the browser console. Ads Manager · M2Explorer — column registry ½dBuildable before the data exists; it is a list of metrics and their formatters. |
Ads Manager · M1 Foundation The data contract document 1dFrom here on it outranks every plan on column names, types and units. Every M2 screen is written against it. |
Promo Machine Missing subtitle kills the whole batch ¼dOne missing source subtitle currently fails every variant beside it. Settle the Mux source-video question ¾dTwo routes exist and only one gets built. Answer it now, because the answer decides a later ticket.decision, then one route only |
| Fri7 Aug | Unassigned — review, fixes, whatever week 1 turned up | Unassigned — M1 is done or it is not, and this is where it finishes | Unassigned — first-week friction always costs more than planned |
| Victoriafrontend · web · app CI | Dmytrobackend · Ads Manager | Stefanbackend · Promo Machine | |
|---|---|---|---|
| Mon10 Aug | Ads Manager · M2 Explorer Routes + the table shell 1dTree view, flat views, the view switcher. The API routes are hers because an endpoint that matches the UI changes every time the UI does. |
Ads Manager · M2 Explorer Query modules — rows and children 1dTyped functions, no routes. The seam between the two lanes is an import, not an HTTP contract. |
Promo Machine |
| Tue11 Aug | Ads Manager · M2 Explorer Column picker + totals row 1dTotals are computed over the whole filtered set, not the page — and every ratio is a ratio of sums. |
Ads Manager · M2 Explorer Server totals + count-only mode 1dTwo contracts the UI depends on: the pre-built filter fragment, and the count the filter panel polls while you type. |
Promo Machine Pull episodes from Mux as 1080p 1dCross-repo across three services. This is the ticket everything else in his lane is sized against. |
| Wed12 Aug | Ads Manager · M2 Explorer Status and ROAS cells, URL state 1dA pasted link has to reproduce the screen exactly — view, filters, sort, expansion. |
Ads Manager · M2 Explorer The filter condition compiler 1dCompiles the condition tree to parameterised SQL. Deliberately free of React so the rules engine can import the same types later. |
Promo Machine |
| Thu13 Aug | Ads Manager · M2 Explorer Filter bar — the pills 1dChips, condition pills, the bracketed any-group. Where the filter work starts getting expensive. |
Ads Manager · M2 Explorer Country segment view + the grain guard 1dDefines what a campaign-grain metric means when you filter ads by it. Nothing defined that before; it would have shipped as an undefined number. |
Promo Machine Concept as a free-fill vocabulary 1dConcepts stop being a fixed list and become something anyone can extend. |
| Fri14 Aug | Unassigned | Unassigned — the lens SQL is the likeliest thing to overrun | Unassigned |
| Victoriafrontend · web · app CI | Dmytrobackend · Ads Manager | Stefanbackend · Promo Machine | |
|---|---|---|---|
| Mon17 Aug | Ads Manager · M2 Explorer Condition panel — the editor 1dPer-condition timeframes, one level of OR nesting, and a live match count while you type. |
Ads Manager · M1 connector Validate the overlay connector on staging 1dThe rehearsal before the only production change in the window. |
Promo Machine Multi-clip body 1dA promo assembled from several clips instead of one. The largest single piece in the batch. |
| Tue18 Aug | Ads Manager · M2 Explorer Filters — validate against real data 1dBuild the worked example, check the count matches the table, paste the URL into another browser. |
Ads Manager · M1 connector Production connector rollout 1dSwaps the production Meta connector and re-syncs a table Metabase also reads. Reversible, with the rollback written down — but have someone else on the call for the backfill.second person on the call |
Promo Machine |
| Wed19 Aug | Ads Manager · M2 Explorer Timeline panel 1dTop eight by spend plus an aggregated rest, so the lines add up to the visible total. Checking rows in the table emphasises their series. |
Ad Monetization AppLovin callback signing + rolling cap 1dConfirm whether the callback signs the event id or the whole payload before writing the verifier — AppLovin's own documentation contradicts itself.one decision to settle first |
Promo Machine Ad-name panel 1dNaming fields and a short id. Names are attribution join keys downstream, so this is less cosmetic than it sounds. |
| Thu20 Aug | Ads Manager · M2 Inspector side panel 1dRow click opens a drawer. Completes the Explorer as something someone can actually run their morning on. |
Ad Monetization | Promo Machine |
| Fri21 Aug | Unassigned | Unassigned — keep this one genuinely clear, the day after a production change | Unassigned |
| Victoriafrontend · web · app CI | Dmytrobackend · Ads Manager | Stefanbackend · Promo Machine | |
|---|---|---|---|
| Mon24 Aug | Ad Monetization Rewarded loop — live test and fix 1dThe build is essentially done. This is finding out what breaks when a real ad network is on the other end.needs AppLovin approved by now |
Ad Monetization | Promo Machine Dub every clip into target locales 1dThe biggest ticket in the batch, and the one with the most moving parts outside our own code. |
| Tue25 Aug | Ad Monetization | Ad Monetization | Promo Machine |
| Wed26 Aug | E2E Automation · M1 Scaffold Maestro, pin the version 1dOne smoke test per platform — iOS, Android, and the web build. Selector conventions documented so the suites that follow are consistent. |
Ads Manager · M3 Controls Write path — the architecture 1dOne API and one interface across four providers, multi-account. Getting the shape right now is what makes the provider integrations cheap in September. |
Web Payments |
| Thu27 Aug | E2E Automation · M1 Web E2E on GitHub Actions ½dHeadless Chrome against the built web target, artifacts on failure. Non-blocking now; it becomes a required check in September. Test-data foundation ½dFour user states and a reset between runs. Every flow suite depends on this, so it is worth getting right before authoring any of them. |
Ads Manager · M3 Controls Action ledger 1dWho did what, before and after, and whether it worked. The thing you want to already have the first time an action goes wrong. |
Web Payments Checkout endpoints 1dContinues. The refund-handling ticket stays blocked until there is a real payload to test against. |
| Fri28 Aug | Unassigned — last day of the window | Unassigned | Unassigned |
| Work | Days | Goes to | Why it moved |
|---|---|---|---|
| Ads Manager · the campaign deep-dive | 4 | Victoria | Page shell, Performance tab, Attribution and History, Breakdowns. It ships as one unit or not at all — a shell with two of its four tabs filled is worth less than none. The Explorer without it is still a complete, usable product. |
| E2E · the five flow suites and the flake gate | 5 | Victoria | Auth, browse, playback, paywall, coins — then driving flake under 1% and making E2E a required check. The infrastructure lands in August; the coverage needs a run of consecutive days to measure against. |
| Ads Manager M3 · provider integrations | 4 | Dmytro | The architecture and the ledger land in August. Wiring Meta, Google, Snapchat and TikTok behind them is the part that scales with provider count rather than with design difficulty. |
| Web Payments · the rest of the backend | 5 | Stefan | Everything past the first slice of checkout endpoints, plus the refund handling that is waiting on a real payload. |
| Backoffice RBAC | 5 | Dmytro | Workspace groups behind the access proxy, deployed dark first and rolled out in stages. The staged rollout adds calendar time that a four-week window cannot absorb. |
| Ads Manager M4 · Creation | — | Dmytro | The five-step wizard and the per-provider write adapters. No implementation plan exists yet; it starts with a planning ticket, not a build ticket. |
| Work | Rough | Goes to | Note |
|---|---|---|---|
| Popup Service · the remaining phases | 4–6 | Dmytro | Phase 1.5 is at 80% and the gateway route is serving production traffic cleanly. Several phases remain after it — considerably more than the two days it once looked like. |
| Web: Stabilize · the remainder | 2 | Victoria | The anonymous-access controller is the critical-path root and is still unwritten. Domain provisioning is a real external blocker on part of it. |
| Quality & Stability sweep | 2 | Victoria | The accumulated small things. Worth a named block rather than leaking into buffer days. |
| Store Promotions & Offers | ~8 | Dmytro | Segmentation-first, and adjacent to everything else happening on monetization. Currently sitting in review with nothing behind it. |
| Reliability — the two real ones | ½ | Stefan | A fleet-wide pool-timeout unit mismatch causing very long waits, and a daily run of 500s on the coin-spend path. Both small, both with a known fix. Good filler work between larger tickets. |
| Segmentation | unsized | Dmytro | Foundational, and it blocks per-segment pricing. Needs sizing before it can be scheduled at all. |