塑造个人品牌,发现细分市场,构建可持续盈利的产品
I share how to build a personal brand, discover niche markets, and create sustainably profitable products. I also share everything about AI.
AI translation
View which offers customers receive, why they were chosen, and filter by groups
Translation pending
AI summary · website content
MarketingPython · HTMLGitHub @ekam-07OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗Every offer pays for itself. Most stores send discounts to everyone, and about two out of three go to shoppers who would have bought anyway. This engine decides, for each customer, which offer to send (or none), checks every decision against 31 business rules, and delivers it through a Telegram bot.
🎬 Demo video (3:48): not stored in the repo; rebuild it with the steps under Rebuilding the demo video.
customer data → features → segment → Claude picks an offer → 31 rules check it → Telegram
│ fails or breaks a rule
└──────────→ rules engine decides instead
| Policy | Extra net margin / week | Discount wasted on buy-anyway | Cost per extra purchase |
|---|---|---|---|
| 10% to everyone | +₹2,571 | ₹4,834 | ₹358 |
| Rules only | +₹6,801 | ₹932 | ₹103 |
| Rules + AI | +₹7,635 | ₹202 | ₹51 |
Full reports: data/eval_report.md, 30-day run: data/sim30_report.md. Customer behaviour is calibrated on public datasets (Flipkart catalog, RetailRocket clickstream, Hillstrom email test).
Needs Python 3.11+.
pip install -r requirements.txt
cp .env.example .env # add ANTHROPIC_API_KEY (and TELEGRAM_BOT_TOKEN if you want the bot)
python generate_data.py # synthetic customers → data/shop.db, data/customers.json
python run_decisions.py # decide an offer for every customer (--no-agent: rules only, no API key)
python preview.py # dashboard at http://127.0.0.1:5000
Keep DELIVERY_MODE=dry_run in .env until you really want Telegram messages to go out.
| Command | What it does |
|---|---|
python run_automation.py --once | one round of automatic decisions (events + daily check + sending) |
python show_log.py --flagged | decisions where the AI failed or broke a rule |
python evaluate.py --no-ai | compare no offers vs 10% to everyone vs rules (vs AI) |
python simulate_30d.py | 30-day forward simulation with Diwali |
python tools/experiment.py | try rule changes and measure their profit |
python calibrate.py | recalibrate personas from datasets in data/raw/ |
python -m tests.test_pipeline | tests (also test_rules_v2, test_edge_cases, test_automation, test_telegram) |
src/ engine: features, segments, agent (Claude), rules, fallback, delivery, Telegram bot, automation
config/ rules.yaml, offers, catalog, personas, response model (rules live in files, not code)
web/ dashboard page served by preview.py
data/ generated customers, CSV dataset, evaluation reports (databases are rebuilt, not committed)
docs/ data dictionary, edge cases, research notes
tests/ rule, pipeline, edge-case, automation and Telegram tests
tools/ experiments, rules PDF builder
video/ scripts that render the demo videos (story2 = latest)
The repo deploys as-is: import it at vercel.com/new (no build settings needed). vercel.json sends every request to api/index.py, which runs the same Flask app as preview.py.
ANTHROPIC_API_KEY under Project → Settings → Environment Variables so Claude decides; without it the rules engine decides.data/demo/ (rebuild with python tools/make_vercel_data.py), copied into /tmp. Changes made on the page are temporary.Vercel can't keep polling Telegram, so the bot uses a webhook: Telegram calls /api/telegram for every message and button press.
.env as TELEGRAM_WEBHOOK_SECRET=...:
python -c "import secrets; print(secrets.token_urlsafe(32))"TELEGRAM_BOT_TOKEN, TELEGRAM_WEBHOOK_SECRET (same values as .env), TELEGRAM_TEST_MODE=1 and DELIVERY_MODE=live, then redeploy.python tools/telegram_webhook.py set https://<your-app>.vercel.app (check with ... info)./test to the bot. It replies with your chat ID: add it as TELEGRAM_TEST_CHATS in Vercel (comma-separate several) and redeploy, so test copies keep arriving after the database resets.Limits: chats that pressed Start are forgotten when the instance restarts (the database lives in /tmp); at most 15 messages go out per request (SEND_MAX_PER_ROUND). While the webhook is set, a local python preview.py can't receive messages: run python tools/telegram_webhook.py delete to switch back.
data/*.db) are rebuilt by generate_data.py and run_decisions.py.data/raw/ (download them yourself): Flipkart e-commerce sample, RetailRocket events.csv, Kevin Hillstrom MineThatData email test.pip install edge-tts numpy scipy playwright && playwright install msedge # plus ffmpeg on PATH
cp data/sim_offers.db data/demo_offers.db # sim_offers.db is written by evaluate.py
PORT=5001 OFFERS_DB=data/demo_offers.db AUTOMATION=1 TELEGRAM_DISABLED=1 FORCE_DRY_RUN=1 python preview.py # keep running
python video/story2/voice.py && python video/story2/render.py && python video/story2/make.py
The render drives the real dashboard on port 5001 (dry-run, Telegram disabled). Voice is a stock neural voice; music and sound effects are synthesised in code, so there are no licensed assets.