Commit Graph

659 Commits

Author SHA1 Message Date
Claude
3a802c4769
fix: correct founder phone number 0597788539 (was 0597788549)
https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 05:44:14 +00:00
Claude
419e2bfecf
feat: add real bank account + founder phone to all payment/negotiation files
Bank: Alinma (الإنماء) — سامي محمد زايد عسيري — ذكاء الاعمال
IBAN: SA3305000068207328877000
Founder direct: 0597788549

Updated: INVOICE_AND_COLLECTION_FLOW, PAYMENT_TEST_RUNBOOK,
NEGOTIATION_AND_CLOSING_OS, TODAY_COMMAND_PACK, PRODUCTIZED_REVENUE_OFFERS

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 05:40:50 +00:00
Claude
df855ab7b1
feat: Full Ops execution — audit + verdict + command pack + 10 messages
Phase completion:
- ONLINE_STATUS_AUDIT.md: 7/9 endpoints verified, checkout blocked
- REVENUE_LIVE_AUDIT.md: Moyasar keys missing = payment blocked
- OUTREACH_READINESS_AUDIT.md: all drafts ready, no messages sent
- FULL_OPS_FILE_AUDIT.md: 36 files verified
- FULL_OPS_VERDICT.md: Product Live + Manual Market Penetration Ready
- TODAY_COMMAND_PACK.md: 60-minute execution plan
- FIRST_10_MESSAGES_READY.md: 10 API-generated emails with follow-ups
- FIRST_10_AGENCY_PARTNER_TARGETS.md: 10 agency targets
- PAYMENT_TEST_RUNBOOK.md: Moyasar setup + manual fallback
- INVOICE_AND_COLLECTION_FLOW.md: demo to payment flow
- FOLLOW_UP_SYSTEM.md: day 0/1/3/30 sequence
- ROLLBACK_DRILL.md: recovery procedures

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 05:31:52 +00:00
Claude
15c8e7f16e
feat: Tier-1 Company OS — 8 strategic operating files
Complete Dealix company operating system:
- TIER1_COMPANY_OS.md: positioning, thesis, 30/90 day goals
- MARKET_SEGMENTATION_AND_ICP.md: P0/P1/P2 sectors with pain/pitch/offer
- PRODUCTIZED_REVENUE_OFFERS.md: 5 offers from audit to partner ops
- COMPETITOR_POSITIONING_MAP.md: vs HubSpot/GHL/Apollo/CRMs/chatbots
- DIRECT_SALES_OS.md: 8 sectors with Arabic messages ready to send
- NEGOTIATION_AND_CLOSING_OS.md: objection handling + close scripts
- DAILY_EXECUTION_COMMAND_CENTER.md: hour-by-hour daily routine
- LEARNING_LOOP.md: weekly metrics + decision rules

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 04:18:52 +00:00
Claude
7080c6d0f7
feat: 20 ready-to-send emails + complete outreach OS with real data
- READY_TO_SEND_20_EMAILS.md: 20 personalized emails generated via API
- OUTREACH_OS.md: 5-channel system + reply handling + objections
- NEGOTIATION_PACKAGES.md: 5 agency partnership packages
- EXTERNAL_RESEARCH.md + SOURCES.md: references
- FIRST_20_TARGETS.md: updated with real company data

All 20 emails generated successfully via api.dealix.me

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 04:11:56 +00:00
Claude
53ab610cda
feat: real company data — 20 targets + outreach OS + negotiation packages
- FIRST_20_TARGETS.md: 20 real companies with emails, phones, messages
- OUTREACH_OS.md: channel templates + reply handling + objections
- NEGOTIATION_PACKAGES.md: 5 agency partnership models
- EXTERNAL_RESEARCH.md: supplemental targets (Aqar.fm, Element8, etc.)
- SOURCES.md: policy references and data sources

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 04:08:16 +00:00
Claude
7594abdc98
feat: Full Ops Market Penetration System — 12 files
Complete growth operating system across 5 channels:
- FULL_OPS_GROWTH_MAX.md: 8-layer growth system
- PLATFORM_PLAYBOOK_LINKEDIN.md: 30 posts + 20 DMs + safety
- PLATFORM_PLAYBOOK_X.md: 30 tweets + 10 threads
- PLATFORM_PLAYBOOK_INSTAGRAM.md: 15 carousels + 15 reels
- PLATFORM_PLAYBOOK_WHATSAPP.md: templates + safety + stop conditions
- EMAIL_OUTREACH_SYSTEM.md: 5 sector sequences
- PARTNER_AGENCY_ACQUISITION.md: 3 models + 10 targets
- CONTENT_CALENDAR_30_DAYS.md: daily content across all platforms
- SAFE_OUTBOUND_POLICY.md: compliance + approval gates
- FIRST_20_TARGETS.md: scoring + tracking
- DAILY_REVENUE_SCORECARD.md: daily/weekly/monthly metrics
- generate_daily_growth_pack.py: dry-run daily pack generator

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 03:11:18 +00:00
Claude
78801dc57c
feat: complete growth package — 30-day plan + LinkedIn posts + agency pitch
- GROWTH_MASTER_PLAN.md: day-by-day plan from zero to 3 paying customers
- LINKEDIN_30_POSTS.md: 30 Arabic posts for authority building
- AGENCY_PARTNER_PITCH.md: partnership proposal for marketing agencies

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 01:58:04 +00:00
Claude
374886259f
fix: rewrite Dockerfile single-stage — kill Railway cache completely
https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 01:46:26 +00:00
Claude
28ea22868f
fix: bust COPY cache — Railway cached old app code without parents[4] fix
https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 01:34:50 +00:00
Claude
234e39ca60
fix: parents[4] IndexError in Docker — path too short in container
knowledge_brain.py, memory_engine.py, session_continuity.py used
parents[4] to find memory/ dir. In Docker (/app/app/services/file.py)
there are only 4 parents total, causing IndexError: 4.

Fix: walk up parents dynamically until memory/ dir is found.

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 01:33:17 +00:00
Claude
7370c59b19
fix: remove healthcheck from railway.toml — let app deploy without it
https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 01:28:32 +00:00
Claude
565822c175
fix: remove Docker HEALTHCHECK + increase Railway timeout to 300s
Docker HEALTHCHECK conflicts with Railway's own healthcheck mechanism.

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 01:22:29 +00:00
Claude
6d797dc0d2
fix: root cause — sqlite_patch not applied when DATABASE_URL empty
Root cause: sqlite_patch checked `if "sqlite" in db_url` but db_url
was empty string when DATABASE_URL env var not set. Patch was skipped,
then models used PostgreSQL types (JSONB/Vector) with SQLite compiler
causing crash: "can't render element of type JSONB".

Fix: `if not db_url or "sqlite" in db_url` — apply patch when URL
is empty (defaults to SQLite anyway in database.py).

Also:
- Dockerfile: add libxml2/libxslt1.1 for lxml runtime
- Dockerfile: increase healthcheck start-period to 120s
- start.sh: log DATABASE_URL prefix for debugging

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 01:16:57 +00:00
Claude
ff83d28eba
fix: bust Docker cache + make init_db non-fatal for Railway
- ARG CACHEBUST=2 forces pip install to re-run (picks up slimmed requirements)
- init_db failure no longer kills the app — logs warning instead

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 01:00:33 +00:00
Claude
6b91c96bff
chore: trigger Railway rebuild after root directory fix
https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 00:53:55 +00:00
Claude
10ff390ef9
fix: remove 18 unused heavy deps — Docker image ~4GB → ~800MB
Removed packages never imported or only in try/except:
- crewai (pulls torch ~2GB), mem0ai, langgraph, langchain-*
- camel-tools, weasyprint, statsforecast (zero imports)
- pandas, paramiko, psycopg2-binary (zero imports in app/)
- pytest/factory-boy (testing only), celery-redbeat (workers only)

454 routes, 40/40 tests pass.

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-26 00:20:43 +00:00
Claude
209c35759c
feat: complete revenue package — 20 drafts + pilot plan + demo script + playbook
- seed_first_batch.py: 10 email + 10 WhatsApp drafts (20 total, 14 companies)
- pricing.py: added 499 SAR pilot plan with money-back guarantee
- demo_script.md: 10-minute Arabic demo script with objection handling
- REVENUE_PLAYBOOK.md: day-by-day guide from deploy to first payment

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 23:16:15 +00:00
Claude
6dc730c30f
chore: mark go_live.sh as executable
https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 22:42:35 +00:00
Claude
711dca7acf
feat: add daily revenue cycle script (morning/afternoon automation)
https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 22:41:39 +00:00
Claude
69bdf74f7e
feat: add go-live verification + first 10 outreach drafts seed script
- go_live.sh: tests all endpoints (health, automation, compliance, reply classifier)
- seed_first_batch.py: 10 personalized Arabic emails for top Saudi companies
  (Peak Content, Aqar.fm, Foodics, Rewaa, BRKZ, Qoyod, Maqsam, Digital8, Floward, Sary)
- Each with sector-specific ROI math, follow-ups Day+2/+5, opt-out compliance

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 22:40:58 +00:00
Claude
0723407a6d
fix: harden Railway startup — fault-tolerant lifespan + DB retry + credential cleanup
- Wrap PostHog/DLQ init in try/except so startup survives missing services
- Delay self-improvement worker 30s to reduce startup load
- Run init_db() for ALL database types (was SQLite-only, skipping PostgreSQL)
- Add 3-attempt retry with backoff in init_db() for Railway DB startup race
- Fix FastAPI deprecation: regex → pattern in intelligence.py
- Remove hardcoded Ultramsg credentials from auto_pipeline.py

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 22:19:25 +00:00
Claude
87d2c0d13b
Merge branch 'main' into claude/dealix-tier1-completion-gHdQ9 2026-04-25 22:17:15 +00:00
Claude
0ffba2167c
fix: normalize DATABASE_URL for Railway Postgres (postgres:// → postgresql+asyncpg://)
Railway Postgres gives postgres:// but SQLAlchemy asyncpg needs
postgresql+asyncpg://. This was the root cause of all Railway crashes.

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 21:43:27 +00:00
Claude
cbce696868
chore: trigger redeploy after DATABASE_URL fix 2026-04-25 21:31:43 +00:00
Claude
3f920a17d7
fix: add aiosqlite dependency — fixes Railway crash when DATABASE_URL missing
Railway container crashes with 'No module named aiosqlite' because
database.py falls back to SQLite when DATABASE_URL env var is not
found. Adding aiosqlite as dependency fixes the import.

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 21:11:43 +00:00
Claude
5e9c097bcd
fix: verbose start.sh — prints import errors clearly 2026-04-25 21:05:09 +00:00
Claude
8ddf5bf40d
fix: start.sh with import pre-check + single worker for Railway
Adds import verification before uvicorn starts — if imports fail,
container exits immediately with clear error instead of timing out
on healthcheck. Single worker to reduce memory usage on Railway.

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 20:40:34 +00:00
Claude
ce1a2dcbc3
chore: trigger Railway redeploy after import fix
https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 20:20:49 +00:00
Claude
b20941fba7
fix: executive_roi_service import name mismatch — fixes Railway crash
The module exports executive_room_service but autonomous_foundation.py
imported executive_roi_service. Aliased to fix the crash.
This was the root cause of Railway healthcheck failure.

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 19:53:42 +00:00
Claude
e5aa1cade6
fix(railway): healthcheck path + dynamic PORT + start.sh wrapper
Railway healthcheck was failing because:
1. healthcheckPath was /api/v1/health but endpoint is /health
2. CMD used hardcoded port 8000, Railway injects $PORT dynamically
3. ${PORT:-8000} doesn't expand without shell

Fix:
- railway.toml: healthcheckPath = "/health"
- start.sh: shell wrapper that expands $PORT properly
- Dockerfile CMD: ["./start.sh"] instead of direct uvicorn
- HEALTHCHECK: uses /health (matches root endpoint)
- start-period increased to 90s for cold start

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 19:38:32 +00:00
Claude
3a56a62bb9
feat(dealix): founder hyper-personalized outreach with ROI targeting
POST /api/v1/founder-outreach/generate — creates personal emails from
Sami as founder that:
- Target company's specific weakness per sector (6 sectors)
- Calculate exact revenue loss in SAR
- Show Dealix ROI with real numbers (6x-10x)
- Personal tone ("أنا سامي العسيري، مؤسس Dealix")
- Signal-aware (HubSpot/WhatsApp detection in opening)
- Bilingual (Arabic default, English for English-website companies)
- Opt-out in every email
- Calendly link + direct phone number

Tested: real_estate company → "فرصة توفير 7,500 ريال/شهر" subject line.

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 18:48:56 +00:00
Claude
1450cfa2c8
feat(dealix): email HTML + language detection + config fixes — 40/40 tests pass
Module 1 — Email sender enhanced:
- HTML wrapper with Arabic RTL support
- List-Unsubscribe header for compliance
- send_email_batch() with configurable delays (2s between each)
- Gmail app password auth error message
- Plain text + HTML multipart
- Unsubscribe line auto-appended (ar/en)

Module 2 — Bilingual email generation:
- language field added to EmailGenerateRequest (ar/en)
- _detect_language() auto-detects from website domain
- _generate_email_en() produces full English email set
  (subject, body, 2 follow-ups, call script, LinkedIn msg)
- Arabic remains default for Saudi domains
- SECTOR_PAIN_MAP_EN for 4 key sectors

Module 3 — Config fixes:
- OLLAMA_BASE_URL + OLLAMA_MODEL (were referenced but missing)
- LLM_CACHE_ENABLED + LLM_CACHE_TTL
- GREEN_API_INSTANCE_ID + GREEN_API_TOKEN
- Outreach rate limits: WHATSAPP_DAILY_LIMIT=15,
  EMAIL_DAILY_LIMIT=50, EMAIL_BATCH_SIZE=10

All 40 tests pass (20 D0 + 6 fault + 14 automation).

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 18:43:40 +00:00
Claude
3e11da4a5a
feat(dealix): multi-provider WhatsApp with auto-fallback chain
4 WhatsApp providers with automatic fallback:
1. Green API (green-api.com) — free dev tier, simplest setup
2. Ultramsg (ultramsg.com) — existing integration, cleaned
3. Fonnte (fonnte.com) — ultra-cheap alternative
4. Meta Cloud API (official) — most reliable, needs verification

send_whatsapp_smart() tries each configured provider in order
until one succeeds. No hardcoded credentials (removed leaked
Ultramsg token from outreach_engine.py).

New endpoints:
- GET /os/whatsapp-providers — check which are configured
- POST /os/test-send — test send via smart chain

Full OS /os/process-and-act now uses smart multi-provider
instead of Ultramsg-only.

Env vars per provider:
- GREEN_API_INSTANCE_ID + GREEN_API_TOKEN
- ULTRAMSG_INSTANCE_ID + ULTRAMSG_TOKEN
- FONNTE_TOKEN
- WHATSAPP_API_TOKEN + WHATSAPP_PHONE_NUMBER_ID

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 18:10:50 +00:00
Claude
c398bd31ce
feat(dealix): Full OS orchestrator — unified deal lifecycle automation
The missing brain that connects ALL existing services into one system:

1. full_os_orchestrator.py — Deal lifecycle state machine:
   12 stages: new_lead → qualifying → qualified → nurturing →
   meeting_booked → meeting_done → proposal_sent → negotiating →
   payment_requested → pilot_active → closed_won/lost/opted_out.

   Each stage has: auto-transitions based on intent, auto-actions
   (send_whatsapp, book_meeting, sync_crm, etc.), Arabic response
   templates, qualification questions.

2. full_os.py API — 4 endpoints:
   - POST /os/process — classify event + determine next stage + actions
   - POST /os/process-and-act — same + auto-execute (WhatsApp send
     via Ultramsg if safe, or create draft if human approval needed)
   - POST /os/bulk-process — batch event processing
   - GET /os/stages — list all stages with transitions

3. How it works:
   Inbound WhatsApp → /os/process-and-act →
   classify intent → transition stage →
   if auto_send_allowed: send WhatsApp response immediately
   if human_approval_required: create draft for Sami to review
   Always: log activity + suggest next actions

4. Safety:
   - Negotiation/payment/pilot stages = human_approval_required
   - Opt-out = immediate stop, no further contact
   - All sends via existing Ultramsg (rate limited, logged)
   - Draft queue for anything needing review

Connects to existing infrastructure:
- outreach_engine._send_via_ultramsg() for WhatsApp
- OutreachDraft model for draft queue
- Reply classifier for intent detection

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 18:04:12 +00:00
Claude
81a444d3e1
feat(dealix): connect draft queue to real WhatsApp send via Ultramsg
- POST /drafts/{id}/send now uses Ultramsg first (existing outreach_engine),
  falls back to WhatsApp Business API if Ultramsg fails
- POST /drafts/send-approved-batch — bulk send up to N approved drafts
  via any channel (whatsapp/email/sms/linkedin-manual)
- WhatsApp sends use existing _send_via_ultramsg() with rate limiting
- Email uses existing SMTP integration
- SMS uses existing Unifonic integration
- LinkedIn returns manual_required (copy from dashboard)

The draft queue is now a fully functional outreach automation system:
daily-pipeline/run → drafts → approve → send-approved-batch → real messages

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 17:49:46 +00:00
Claude
a369e503b3
feat(dealix): follow-ups + outreach stats + 14 automation tests (40/40 pass)
https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 17:44:02 +00:00
Claude
066ce32aa7
feat(dealix): full automation outreach system — draft queue + pipeline + send
Complete outreach automation that generates drafts → Sami approves → system sends:

1. OutreachDraft model (models/outreach_draft.py):
   DB-persisted draft queue. Every message starts as status='draft'.
   Fields: company, channel, subject, body, followups, sector, scores,
   status (draft→approved→sent→replied→opted_out→bounced), timestamps.

2. Daily Pipeline (automation.py → /daily-pipeline/run):
   Generates N targets per sector/city, runs compliance check,
   creates personalized emails with Arabic pain maps, stores as
   draft rows in DB. Returns batch_id for approval.

3. Draft Queue API (drafts.py):
   - GET /drafts — list by status/channel/batch
   - GET /drafts/stats — counts per status
   - GET /drafts/{id} — full draft with body + followups
   - POST /drafts/{id}/approve — mark approved
   - POST /drafts/approve-batch — approve entire batch
   - POST /drafts/{id}/send — dispatch via email/whatsapp/sms
   - POST /drafts/{id}/skip — archive draft
   - PATCH /drafts/{id} — edit before approving
   - POST /drafts/{id}/log-reply — paste reply → auto-classify →
     generate suggested response → update status

4. Send dispatch uses existing integrations:
   - Email: integrations/email_sender.py (SMTP)
   - WhatsApp: integrations/whatsapp.py (Business API + mock)
   - SMS: integrations/sms.py (Unifonic)
   - LinkedIn: manual_required (copy from dashboard)

Safety:
- All drafts require approval (approval_required=True default)
- Unsubscribe reply → immediate opt_out status
- Compliance gate blocks: opt_out, bounced, high_risk, no_source
- Personal email → warning to use manual channel
- Rate limits enforced at send level

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 17:33:30 +00:00
Claude
81f16bb4b4
feat(dealix): EXECUTE_NOW — final single-page execution guide 2026-04-25 17:04:52 +00:00
Claude
59a5ab2a84
feat(dealix): P0 launch completion — marketers page + ops runbooks
P0.2: Marketers page rewritten from 131-line link hub to 463-line
service sales page with: hero, problem statement, solution, 3
workflows (agency/freelancer/CRM), 3 pricing packages with partner
revenue share, revenue calculator, trust blocks, 8 FAQs, final CTA.
All Calendly links point to live booking page.

P0.5: RAILWAY_ENV_KEYS.md — complete env key reference with source
URLs, cost, effect when missing, verification command. Separates
P0 (GROQ/Google/Sentry/PostHog) from P1 (Moyasar) and P2 (Maps/
SendGrid/WhatsApp/HubSpot).

P0.6: FIRST_5_OUTREACH.md — 5 ready-to-send messages (SaaS founder,
agency owner, real estate, B2B services, referral ask) with Arabic
text, follow-ups at 24h and 72h, opt-out line, lead tracker table.

P0.7: DEMO_BOOKING_RUNBOOK.md — 20-minute demo flow with discovery
questions, live API demo sequence (enrich-tech, route, message),
ROI discussion framework, objection handling, 3 close patterns,
post-demo follow-up template.

P0.8: FULL_OPS_LAUNCH_RUNBOOK.md — daily checklist, payment test
checklist, Moyasar diagnostic steps, outreach/demo/rollback/DB
restore/incident checklists, do-not-touch list, definitions of
launch-ready and revenue-live.

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 16:57:19 +00:00
Claude
f4c5cab4fd
feat(dealix): complete launch operations kit — 5 rewritten files
All 5 files rewritten as production-grade operational documents:

1. MARKETERS_PAGE_PLAN.md (165 lines → full spec):
   10 page sections, 5 target segments, 3 packages, 3 workflows,
   5 agency use cases, 3 freelancer scenarios, 10 FAQs, proof blocks,
   conversion goals. Ready to implement as TSX rewrite.

2. AGENCY_PARTNER_OFFER.md (212 lines — new file):
   6 partner types, 3 sellable tiers, 3 service-exchange models,
   manual-now vs automated-later table, 3 implementation packages,
   5-step partner workflow, stage-1 motion plan (weeks 1-4),
   5 named first targets, outreach message, revenue math.

3. REVENUE_READINESS_CHECKLIST.md (191 lines — rewritten):
   7 paths (pricing/invoice/payment/booking/CRM/follow-up/test),
   manual fallback for every function, Moyasar diagnostic checklist,
   0/7 DoD items done (revenue NOT live — gap is sales activity).

4. LAUNCH_GATES.md v2.0 (157 lines — restructured):
   5 categories (Product/Ops/Revenue/Measurement/Governance),
   39 gates total: 28 closed, 1 partial, 9 open, 1 blocked.
   Open = 4 env keys + 3 sales activities + 2 drills.

5. NEXT_24H_7D_30D.md (81 lines — new file):
   24h: 3 keys + 5 messages + 1 post.
   7d: 1 demo + 1 pilot offer + partner motion.
   30d: 3 paid pilots (1,497 SAR) + 1 partner + case study.
   Revenue trajectory table + "What NOT to do" list.

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 16:40:28 +00:00
Claude
ab44637afd
feat(dealix): launch completion plans — marketers + agency + revenue readiness
Three operational documents for closing the commercial launch:

1. MARKETERS_PAGE_PLAN.md — transform /marketers from link hub to
   service sales page. 3 packages (3K/7K/15K setup + MRR), 3-step
   how-it-works, FAQ, trust blocks. Target: agency conversion.

2. AGENCY_PARTNER_PLAN.md — 4 partner tiers (referral 10%, agency
   20-30% MRR, implementation, strategic). Stage-1 service exchange
   offer, manual-first delivery, 5 named first targets, revenue
   math (5 partners = 223K SAR/year).

3. REVENUE_READINESS_CHECKLIST.md — 6 paths (pricing, invoice,
   payment, booking, CRM, follow-up) with manual vs automated
   status. Verdict: GO for manual revenue. Automated blocked on
   Moyasar KYC + HubSpot key + Gmail OAuth.

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 16:34:49 +00:00
Claude
b3fb265237
feat(dealix): autonomous daily targeting + email + reply engine
Complete automation system for 50 personalized emails/day:

1. POST /api/v1/automation/daily-targeting/generate
   - Pulls candidates by sector/city, scores, selects top 50
   - 9 Saudi sectors with Arabic pain maps and ROI hypotheses

2. POST /api/v1/automation/email/generate
   - Personalized email per company with subject, body, 2 follow-ups,
     call script, LinkedIn manual message
   - Signal-aware (HubSpot/WhatsApp detection in opening line)
   - Opt-out included in every email
   - Max 130 words per email

3. POST /api/v1/automation/compliance/check
   - Blocks: opt-out, bounced, high-risk, no-source, invalid email
   - Warns: personal email → manual channel preferred
   - PDPL-aware: free email domains flagged

4. POST /api/v1/automation/reply/classify
   - 12 categories: interested, ask_price, ask_demo, unsubscribe, etc
   - Arabic + English keyword matching
   - Pre-written Khaliji response for each category
   - auto_reply_allowed flag per category
   - unsubscribe → immediate opt_out + suppress

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 13:28:12 +00:00
Claude
8b7d00ecca
feat(dealix): COMMAND_CENTER.md — single-page daily execution guide
One file to open every morning:
- Step 1: Railway setup (10 min, one-time)
- Step 2: Send first 5 messages (WhatsApp + LinkedIn)
- Step 3: Publish first post
- Step 4: Reply templates for every scenario
- Step 5: First customer onboarding flow
- Daily schedule + weekly targets + file index

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-25 13:04:57 +00:00
VoXc2
fe94f1b3ca
feat(dealix): revenue machine — 60 targets + daily ops + trial signup
* fix(health): add root-level /health endpoint for Railway healthcheck

Railway checks /health but all API routes are under /api/v1/.
This adds a lightweight root /health endpoint that returns
{"status": "ok"} — no auth, no DB, no middleware blocking.

This fixes the "1/1 replicas never became healthy" Railway error.

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs

* feat(dealix): revenue machine — 60 targets + daily ops + trial signup

Complete acquisition and revenue operations kit:

1. trial-signup.html — Arabic RTL lead capture landing page with
   form → Railway backend + localStorage backup + Calendly redirect

2. 10_CUSTOMERS_PER_WEEK_MACHINE.md — exact math: 70 touches/day
   across 8 channels = 10 paid/week. Daily schedule, 6 segments,
   sector-specific messages, KPI targets, tracker template.

3. DAILY_REVENUE_MACHINE.md — 8 parallel revenue channels:
   LinkedIn outbound, cold email (Instantly.ai), WhatsApp warm,
   agency partners, content inbound, community, referral, paid ads.
   Full conversion funnel Week 1→Month 3. Tools = 149 SAR/month.

4. SAUDI_60_TARGETS.md — 60 named Saudi companies:
   20 direct customers (Foodics→Moyasar) with tech-signal-based
   message angles, 20 agency partners with setup+MRR offers,
   10 strategic partners (Salla/Zid/Unifonic/Misk/KAUST),
   10 warm network slots for personal contacts.

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-04-24 23:02:04 +03:00
VoXc2
35962de933
fix(health): add root /health for Railway healthcheck
Railway checks /health but all API routes are under /api/v1/.
This adds a lightweight root /health endpoint that returns
{"status": "ok"} — no auth, no DB, no middleware blocking.

This fixes the "1/1 replicas never became healthy" Railway error.

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs

Co-authored-by: Claude <noreply@anthropic.com>
2026-04-23 17:13:44 +03:00
Claude
856fc89a7a
fix(health): add root-level /health endpoint for Railway healthcheck
Railway checks /health but all API routes are under /api/v1/.
This adds a lightweight root /health endpoint that returns
{"status": "ok"} — no auth, no DB, no middleware blocking.

This fixes the "1/1 replicas never became healthy" Railway error.

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-23 14:13:26 +00:00
VoXc2
f75e7c331e
feat(dealix): D0 launch hardening + Railway fix + competitive analysis
26/26 tests. 13/33 launch gates closed. Railway 5.7GB→~2GB. Spectrum analysis complete.
2026-04-23 16:37:10 +03:00
Claude
874a562188
Merge remote-tracking branch 'origin/main' into claude/dealix-tier1-completion-gHdQ9
# Conflicts:
#	CONTRIBUTING.md
2026-04-23 13:37:01 +00:00
Claude
dd8d2ccc9e
fix(docker): CPU-only torch + multi-stage build to fix Railway 4GB limit
Railway build was failing with "Image of size 5.7 GB exceeded limit of
4.0 GB" because sentence-transformers pulled torch with full CUDA/NVIDIA
GPU packages (~3 GB).

Fix: multi-stage Dockerfile that:
1. Installs CPU-only torch first (--index-url pytorch.org/whl/cpu)
   saving ~3 GB (200 MB CPU vs 3.2 GB CUDA)
2. Multi-stage build: builder + runtime (smaller final image)
3. Non-root user (app:1000)
4. tini init for proper signal handling
5. Built-in HEALTHCHECK with 60s start-period
6. railway.toml with healthcheck path and restart policy

Also fixes healthcheck failure: start-period=60s gives the app time
to initialize before Railway starts checking /health.

Expected image size: ~2 GB (down from 5.7 GB).

https://claude.ai/code/session_01W1rJthWDkasijTdXCfxVHs
2026-04-23 13:33:09 +00:00