3 browser-native chat surfaces (atlas-chat / atlas-hud / atlas-command, no build step) + 11 Python automation scripts (cluster, tray, finance, reminders, autonomy loops) + 2 patterns documented (cluster-then-polish, anti-impulse R1-R10) MIT licensed, anonymized from production stack.
3.5 KiB
Pattern: Anti-impulse Decision Rules (R1-R10)
Rules that prevent the operator-over-builds-instead-of-sells pattern.
For solo founders who code, the temptation is always to build instead of sell. These rules, enforced by automation, fix that.
The rules
R1. Hardware lot purchase guard
Do NOT buy a refurbished hardware lot if ANY of:
- Existing inventory > 8 units of same category
- Pre-sales coverage < 50% (i.e., orders waiting on stock)
- Last 5 lots averaged > 60 days on shelf
R2. Pre-purchase justification (write before clicking buy)
- Why this lot? (specific clients waiting? Or "looked cheap"?)
- Projected sell-through (units × weeks to clear)
- Holding cost (3%/mo capital tied + storage)
- GO / NO-GO: if projected net ROI < 30% OR sell-through > 90 days → NO
R3. Frequency cap
Max 1 lot purchase per week. New opportunity? Wait until next Monday.
R4. Client acceptance
Accept new client only if EITHER:
- Recurring potential ≥ €100/mo (3-month commit), OR
- One-time margin ≥ €500, OR
- Strategic referral source (unlocks network)
R5. Minimum billable rate
€75/hour for ad-hoc work. Below that, decline politely.
R6. Daily time budget
- 4h cash generation (outreach, calls, quotes, sales conversion)
- 2h delivery (existing client work)
- 1h admin (invoicing, follow-up)
- 1h learning/infra (NOT during cash window)
R7. Morning protection
No infra/code work before 14:00 on weekdays. Morning = cash + delivery only.
R8. Build justification
Before building anything new, ask: "Which paying client needs this RIGHT NOW?"
- Unclear → do not build.
- Clear → log it as a feature request with client name + proceed.
R9. Use-it-or-archive
If a tool isn't used by operator OR a client within 2 weeks of building, archive it.
R10. Cash before code (umbrella)
Every Friday: if sales hours < infra hours that week, the week failed and resets next Monday. No exceptions.
Enforcement via automation
R10 — ActivityWatch + Friday-Wrap email
scripts/atlas_activity_export.py reads ActivityWatch event log, classifies into 6 categories:
- sales (Asana, WhatsApp Web, mail compose, Atlas Chat/Command/HUD)
- delivery (VSCode/Claude on existing-client work, WordPress admin)
- infra (Claude Code, terminal, GitHub, Docker, config files)
- admin (Inkomsten xlsx, Odoo, bank statements)
- learning (YouTube courses, BiSL/certification material)
- other
Output JSON includes r10_pass boolean. Friday-Wrap email shows verdict.
R1-R3 — Browser calculator
web/atlas-command.html has a "BUY?" tab. Inputs: lot price, units, category, pre-sales %. Outputs: GO/NO-GO verdict + holding cost + net ROI calculation per category baselines.
R5/R8 — Atlas Reminders
scripts/atlas_reminders.py daily schtask. Triggers conditional emails:
- 26th of month → savings pots check
- 14d + 3d before BTW deadlines
- 1st of month → Inkomsten xlsx update reminder
- 5 juni + 25 nov → vacation booking reminder
- 1 mrt + 15 apr → IB aangifte prep
Why these rules
After 12 months of building infrastructure that produced €5K annual revenue (vault: 200+ project files, ~15 paid client events = 13:1 build:sell ratio), the founder needed rules that prevent willpower-based discipline.
Rules survive willpower. Automation survives both.
Customize
The numbers (€100/mo, €500 margin, 4h/2h/1h/1h budget) are Atlas-specific. Adjust to your context. The structure (one umbrella + nine specific rules + automated enforcement) is the transferable pattern.