Skip to content

Commit d147737

Browse files
ivicacclaude
andcommitted
4756 Delete jobs child-first to avoid double-deleting recursive children
jobFacade.deleteJob recursively deletes child jobs, so iterating a flat jobIds list that contains both parents and children revisits already-deleted rows. Sort by id descending (children have larger ids since they are inserted later) and de-dup before the delete loop. Loosen the ordering assertion in the deployment test accordingly. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 597036f commit d147737

4 files changed

Lines changed: 244 additions & 4 deletions

File tree

Lines changed: 225 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,225 @@
1+
# ByteChef Launch Day Playbook — Tuesday, April 21, 2026
2+
3+
> **Target launch time:** 6:30am PT (Pacific Time) = 3:30pm CEST (Central European Summer Time)
4+
> **Rationale:** HN peak traffic window is 6:30–8:30am PT when the US East Coast wakes up and the West Coast is starting the day.
5+
> All times below are shown in **PT / CEST** so founders in both regions can follow along.
6+
7+
---
8+
9+
## WEEKEND (Friday April 17 – Sunday April 19) — Dress rehearsal
10+
11+
### Friday evening (Apr 17)
12+
- Publish dev.to post as **scheduled draft** for Tuesday morning (or keep as draft to publish manually on launch day)
13+
- Publish launch page at bytechef.io/launch — UNLISTED or noindex'd if possible
14+
- Share privately with advisors/friends; collect feedback
15+
16+
### Saturday (Apr 18)
17+
- Apply feedback from advisors
18+
- Ask ~10 friendly beta users to try the Docker quickstart cold and report broken things
19+
- Record a 30–60 second demo GIF or video showing: drag-drop on canvas → LLM component → execution history
20+
- Polish repo README — add hero image/GIF at the top, clear quickstart, CONTRIBUTING.md visible
21+
22+
### Sunday (Apr 19)
23+
- Fix whatever beta users found
24+
- Rewrite any copy that didn't land
25+
- Prepare the HN pinned FAQ comment (draft it now, post it as soon as HN thread goes live)
26+
- Prep email draft to personal network: brief, honest, "we're launching Tuesday"
27+
28+
---
29+
30+
## MONDAY (Apr 20) — Pre-launch day
31+
32+
### Morning (all timezones)
33+
- **Final QA on bytechef.io/launch** — test on mobile, test all CTAs, check analytics with UTM tags
34+
- **Final QA on docs** — make sure Quickstart works end-to-end on a fresh machine
35+
- **Brief the team**: who's monitoring HN comments, who's on Reddit, who's handling Discord influx
36+
- **Warm up the repo**: make sure issues are triaged, CONTRIBUTING visible, Discord invite in README
37+
38+
### Afternoon
39+
- **Pre-schedule social content where possible:**
40+
- LinkedIn post scheduled for Tuesday 9am CEST (or draft ready to publish)
41+
- Twitter thread in Typefully/Buffer, scheduled or draft
42+
- Reddit posts drafted with UTM links, stored for quick copy-paste
43+
- **Send "we're launching tomorrow" note** to 20–50 close network contacts (investors, advisors, past customers) — no ask, just a heads-up so they can upvote/engage organically when they see it
44+
- **DO NOT** ask anyone to upvote at a specific time — HN penalizes vote rings aggressively
45+
46+
### Evening
47+
- **Early night.** Launch day is a marathon.
48+
- Phone on silent overnight, but charged and ready
49+
50+
---
51+
52+
## TUESDAY (Apr 21) — LAUNCH DAY
53+
54+
### T-90 minutes (5:00am PT / 2:00pm CEST) — Pre-flight check
55+
- Coffee ☕
56+
- **Check status of:** bytechef.io, GitHub repo, docs site, Discord, Cloud signup flow, Docker quickstart
57+
- Verify the launch page is live and not noindex'd
58+
- Verify dev.to post is ready to publish
59+
- Open HN submission form in one tab
60+
- Open the HN pinned comment draft in another tab
61+
62+
### T-0 (6:30am PT / 3:30pm CEST) — LAUNCH 🚀
63+
- **Publish dev.to post** first (so HN visitors clicking through see fresh content)
64+
- **Submit HN "Launch HN" post** — title: `Launch HN: ByteChef – Open-source alternative to Zapier/n8n with AI-native workflow automation`
65+
- Link: `https://bytechef.io/launch?utm_source=hn&utm_medium=launch&utm_campaign=v025`
66+
- **Within 60 seconds:** post the pinned FAQ comment on your HN thread covering: license, business model (open-core), comparison to n8n, why Java, self-host quickstart
67+
68+
### T+30 min (7:00am PT / 4:00pm CEST) — Initial engagement
69+
- **Monitor HN thread** — respond to every question within 10 minutes
70+
- Tone: warm, technical, honest. If something is coming soon, say so. If it's EE, say so.
71+
- **DO NOT** upvote from multiple accounts, don't ask friends to upvote specific threads
72+
- Share launch with the team privately so they can engage organically if they want
73+
74+
### T+2 hrs (8:30am PT / 5:30pm CEST) — Fan out to Reddit
75+
Assuming HN is going well (on front page of "new" or climbing toward main page):
76+
77+
- **Post to r/selfhosted** — use `02-reddit-selfhosted.md`. Link with UTM `?utm_source=reddit&utm_medium=selfhosted`
78+
- **Post to r/SaaS** — use `12-reddit-saas.md`. UTM `?utm_source=reddit&utm_medium=saas`
79+
- Wait 2 hours between Reddit posts to avoid cross-subreddit spam flags
80+
- Monitor and respond to comments on each
81+
82+
### T+4 hrs (10:30am PT / 7:30pm CEST) — LinkedIn + Twitter
83+
- **Publish LinkedIn post** — use `06-linkedin.md`. Ivica posts from his personal account; Igor and Matija share/comment
84+
- **Post main Twitter tweet** — use `07-twitter.md` Tweet 1. Schedule follow-up tweets every 30–60 minutes
85+
- Ask the team to like/share organically, not in coordinated bursts
86+
87+
### T+6 hrs (12:30pm PT / 9:30pm CEST) — r/opensource + IndieHackers
88+
- **Post to r/opensource** — use `03-reddit-opensource.md`. UTM `?utm_source=reddit&utm_medium=opensource`
89+
- **Post to IndieHackers** — use `04-indiehackers.md`. UTM `?utm_source=ih`
90+
- Start feeling tired. Power through — the first 8 hours matter most.
91+
92+
### T+8 hrs (2:30pm PT / 11:30pm CEST) — Discord + status check
93+
- **Post Discord announcement** — use `05-discord.md`. This is for your existing community, lower stakes.
94+
- **Evening status check:**
95+
- Current HN rank?
96+
- Any Reddit posts on top of their subreddits?
97+
- Total launch page visits (check analytics)
98+
- GitHub stars added today
99+
- Discord new members
100+
- Sign-ups on cloud (if tracking)
101+
102+
### T+12 hrs (6:30pm PT / 3:30am CEST Wednesday)
103+
- **If you're in Europe: sleep.** Set an alarm for 8am CEST.
104+
- Responses to HN/Reddit comments will resume in the morning
105+
- Leave a brief "heading to bed, back in 6 hours for more questions" comment on HN if your thread is still active
106+
107+
---
108+
109+
## WEDNESDAY (Apr 22) — Launch day +1
110+
111+
### Morning (Europe waking up)
112+
- Catch up on overnight HN comments, Reddit threads, Twitter replies
113+
- Respond to everyone who asked a substantive question in the last 12 hours
114+
- Check if any comments went viral — if so, engage thoughtfully
115+
116+
### Midday
117+
- **Republish dev.to post on Medium** using Medium's Import Story feature — this auto-adds canonical tag back to dev.to. Zero extra writing.
118+
- Post a short LinkedIn follow-up: "Launch update — thanks to everyone who engaged, here's what surprised us in the first 24 hours"
119+
120+
### Afternoon
121+
- Analyze: which channel drove the most traffic? Signups? Stars?
122+
- Share the early learnings in Discord to keep the community engaged
123+
124+
---
125+
126+
## THURSDAY–FRIDAY (Apr 23–24) — Sustain
127+
128+
- **Thursday:** Follow up on any HN threads still getting comments. Respond to issues opened in GitHub.
129+
- **Friday:** Ship a small visible improvement (bug fix, docs update, community-requested feature). Post about it — "you asked, we shipped" signals active development.
130+
- **By end of week:** Compile a launch retrospective document for internal use: what worked, what didn't, conversion by channel, signups/stars/Discord joins.
131+
132+
---
133+
134+
## WEEK 2+ (Apr 28 onwards) — Follow-up momentum
135+
136+
- **Apr 28 or 29:** Publish the founder follow-up essay from `11-founder-essay-brief.md` (Option A: "Why we chose open-core"). Submit to HN and r/programming.
137+
- **Early May:** First "community showcase" — feature a workflow or integration built by a community member. Post to Discord, tweet, include in a brief newsletter.
138+
- **Mid-May:** Second blog post. Keep the content rhythm going. A dead blog after launch kills momentum.
139+
140+
---
141+
142+
## ROLES FOR LAUNCH DAY
143+
144+
If all three founders are on deck:
145+
146+
**Ivica** — primary HN responder, LinkedIn poster, media-facing voice
147+
**Igor** — technical questions (architecture, self-hosting, broker choices, stack)
148+
**Matija** — community and Reddit moderator interactions, Discord monitoring
149+
150+
If only one person is on for a stretch, that person rotates between HN + Reddit + Discord every 20 minutes. Batch reading and responses to avoid burnout.
151+
152+
---
153+
154+
## WHAT TO DO IF IT DOESN'T TAKE OFF
155+
156+
Real talk: most launches don't hit the HN front page. If by T+4 hours you're still stuck on page 3 of HN "new":
157+
158+
1. **Don't panic. Don't resubmit.** Moderators will ban you for that.
159+
2. **Keep engaging on the existing thread** — good comments sometimes resurrect a post
160+
3. **Reddit may still work** — the feeds are more forgiving
161+
4. **Plan a "Show HN" retry in 2-3 weeks** with a different angle:
162+
- "Show HN: We added AI Agents to our open-source automation platform"
163+
- "Show HN: ByteChef's n8n workflow converter — migrate in one click"
164+
- "Show HN: Why we built an embedded iPaaS on top of our open-source automation platform"
165+
5. **LinkedIn and Twitter don't depend on HN** — those will drive their own traffic regardless
166+
167+
The goal of launch day isn't to win the internet. It's to establish the story, seed the repo with initial stars, and set up the next 90 days of content to compound.
168+
169+
---
170+
171+
## CRITICAL DO-NOTS
172+
173+
- Do not ask anyone to upvote on HN. Don't coordinate upvotes. HN will penalize you.
174+
- Do not post the same content verbatim across multiple subreddits. Reddit auto-flags cross-posts.
175+
- Do not use multiple accounts to comment on your own posts. It's obvious and kills trust.
176+
- Do not respond to trolls or bad-faith comments. Ignore, move on, let the community handle them.
177+
- Do not delete negative comments or questions. It's Streisand effect.
178+
- Do not make the launch page a sign-up wall. Docker quickstart should work without an account.
179+
- Do not announce a cloud waitlist without a clear use case — self-hosted is the hero on launch day.
180+
181+
---
182+
183+
## QUICK TIME ZONE REFERENCE
184+
185+
| PT | CEST | US ET | London |
186+
|----|------|-------|--------|
187+
| 6:30am | 3:30pm | 9:30am | 2:30pm |
188+
| 8:00am | 5:00pm | 11:00am | 4:00pm |
189+
| 10:00am | 7:00pm | 1:00pm | 6:00pm |
190+
| 12:30pm | 9:30pm | 3:30pm | 8:30pm |
191+
| 2:30pm | 11:30pm | 5:30pm | 10:30pm |
192+
193+
---
194+
195+
## FINAL CHECKLIST (Print this for launch morning)
196+
197+
### 30 minutes before launch
198+
- [ ] bytechef.io/launch returns 200 and loads fast
199+
- [ ] Launch page is indexable (no noindex tag)
200+
- [ ] GitHub repo: README looks good, CONTRIBUTING.md visible, recent activity
201+
- [ ] Docker quickstart runs on fresh machine
202+
- [ ] Discord invite link works
203+
- [ ] Cloud signup works (if applicable)
204+
- [ ] All three founders are awake and at their laptops
205+
- [ ] HN post draft is ready to submit
206+
- [ ] HN pinned FAQ comment is ready to post
207+
- [ ] Reddit drafts are ready
208+
- [ ] LinkedIn draft is ready
209+
- [ ] Twitter thread is ready
210+
- [ ] Analytics dashboard is open in a tab
211+
- [ ] Coffee ☕
212+
213+
### Launch moment
214+
- [ ] Publish dev.to post
215+
- [ ] Submit HN "Launch HN" post
216+
- [ ] Post HN pinned FAQ comment
217+
218+
### First hour
219+
- [ ] Respond to every HN comment within 10 minutes
220+
- [ ] Monitor for broken links or bugs reported
221+
- [ ] Stay on one channel at a time — don't context-switch faster than every 20 min
222+
223+
---
224+
225+
Good luck. You only launch once.

server/ee/libs/embedded/embedded-configuration/embedded-configuration-service/src/main/java/com/bytechef/ee/embedded/configuration/facade/IntegrationInstanceConfigurationFacadeImpl.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import java.time.Instant;
6363
import java.util.Collection;
6464
import java.util.Collections;
65+
import java.util.Comparator;
6566
import java.util.List;
6667
import java.util.Map;
6768
import java.util.Objects;
@@ -239,7 +240,12 @@ public void deleteIntegrationInstanceConfiguration(long id) {
239240
principalJobService.deletePrincipalJobs(jobId, PlatformType.EMBEDDED);
240241
}
241242

242-
for (long jobId : jobIds) {
243+
List<Long> orderedJobIds = jobIds.stream()
244+
.distinct()
245+
.sorted(Comparator.reverseOrder())
246+
.toList();
247+
248+
for (long jobId : orderedJobIds) {
243249
jobFacade.deleteJob(jobId);
244250
}
245251

server/libs/automation/automation-configuration/automation-configuration-service/src/main/java/com/bytechef/automation/configuration/facade/ProjectDeploymentFacadeImpl.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import java.time.Instant;
6363
import java.util.Collection;
6464
import java.util.Collections;
65+
import java.util.Comparator;
6566
import java.util.List;
6667
import java.util.Map;
6768
import java.util.Objects;
@@ -224,7 +225,12 @@ public void deleteProjectDeployment(long id) {
224225
principalJobService.deletePrincipalJobs(jobId, PlatformType.AUTOMATION);
225226
}
226227

227-
for (long jobId : jobIds) {
228+
List<Long> orderedJobIds = jobIds.stream()
229+
.distinct()
230+
.sorted(Comparator.reverseOrder())
231+
.toList();
232+
233+
for (long jobId : orderedJobIds) {
228234
jobFacade.deleteJob(jobId);
229235
}
230236

server/libs/automation/automation-configuration/automation-configuration-service/src/test/java/com/bytechef/automation/configuration/facade/ProjectDeploymentFacadeIntTest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -212,9 +212,12 @@ public void testDeleteProjectDeploymentRemovesAllPrincipalJobsBeforeAnyJob() {
212212
inOrder.verify(principalJobService)
213213
.deletePrincipalJobs(childJobId, PlatformType.AUTOMATION);
214214
inOrder.verify(jobFacade)
215-
.deleteJob(parentJobId);
215+
.deleteJob(anyLong());
216216
inOrder.verify(jobFacade)
217-
.deleteJob(childJobId);
217+
.deleteJob(anyLong());
218+
219+
verify(jobFacade).deleteJob(parentJobId);
220+
verify(jobFacade).deleteJob(childJobId);
218221
}
219222

220223
@Disabled

0 commit comments

Comments
 (0)