▸ ads.sync 02:00 · seo.serp.daily 06:00 IST · crm.leads 06:30 · insights.daily 07:00▍
m361 runs marketing as infrastructure — a 07:00 brief that says what to do next, a writer that holds its own drafts to spec, and 16 job queues working the night shift. Operated by you, on your own AI keys.
no card · your own model keys · zero token markup
The night shift, on a cron.
insights.daily · 07:00 IST
The first screen after login is a morning brief: one headline under fifteen words, at most three bullets, one “start with this” button. It costs one model call per workspace per day — ever. The first reader pays, everyone else reads the same words, and a quiet morning costs nothing at all.
The AI is not allowed to know anything. Every fact comes from arithmetic over database rows; the model’s only decision is which insight to lead with — and the button’s link comes from the database, so it can never 404.
1 model call/day · cached in the audit trail · quiet mornings are free
The to-do list under the brief comes from six deterministic rules — pure arithmetic over your own rows, no AI anywhere near the numbers. Each card shows its own working and links to the screen that fixes it.
seo.serp.daily · desktop + mobile
A keyword that slipped overnight arrives with its exact positions and the page that can fix it.
CPL ≥ 1.5× account avg → watch · ≥ 2× → act
Translated into money: “about ₹41,000 more than the same leads would have cost anywhere else in this account.”
8 posts analysed · 3 in-hour · ≥ 1.25× lift
Below those floors the rule refuses to fire. A guess is worse than silence.
blog > own average · 0 derivatives
A post that beat your own average and was never fanned out into its eight formats.
> 20% of pipeline idle → flagged
Fires when the pipeline goes quiet, sorted so the highest scores are handled first.
step judged after ≥ 10 runs
A wait-then-send step that loses people is named, with its journey linked.
dismissing a card is a 30-day snooze, not a delete — what’s still burning money in June comes back with June’s numbers
make → ship → listen → learn → make
01 / MAKE
The writer scores your brief 0–100 across seven weighted signals and quotes the exact cost — input and output priced separately, in USD and INR — before you press the button.
blog.write · density enforced
Up to 2 correction passes hold the draft to the keyword density you asked for — billed as their own line item, and a “fix” that shrinks the article below 70% is rejected outright.
1 blog → 8 formats · parallel
Reel script, carousel, X thread, LinkedIn, email, WhatsApp, YouTube Short, Google Business post. One format failing costs you that format, nothing else.
content.embed · pgvector
Every asset embedded seconds after saving. Search the library by meaning, with full version history — restore is itself a versioned edit.
writer · new draft
blog.write
length · 1,800 words
density · 1.2%
est. cost $0.21 · ₹19
Generatedensity holds or you see the real figure — never a silent miss
02 / SHIP
One master caption publishes to Instagram, Facebook Pages, YouTube and X — trimmed to each platform's real ceiling on a word boundary, never mid-sentence.
social.publish · idempotent
If one of four platforms fails, the retry re-attempts only that one. The other three are never posted twice.
pages · A/B split 50/50
AI landing pages in seven strict block shapes, live on a public URL in under a minute, split-tested by a cookie so a returning visitor always sees the same side.
msg.campaign · four honest numbers
Before any send: matched, eligible, missing an address, and no consent. A hard bounce revokes consent by itself.
composer · one master caption
social.publish
trimmed on a word boundary · a failed platform retries alone
03 / LISTEN
The internet doesn't keep office hours. Reddit is swept every 30 minutes with a 7-day backfill the moment a query is created — the feed fills before you finish reading the form.
listen.sentiment · batches of 20
Every mention auto-classified on your own key. Unclassified is never dressed up as neutral — a failed batch stays visible and retries.
reply drafts · always two
Two ready-to-send replies that differ in posture, not wording — answer in public, or move it private. Never guaranteed outcomes, never posing as a customer.
social.metrics.* · every 6h
Every post's numbers fetched four times a day for 30 days, one queue per platform so X's tight rate limit never starves Instagram.
listening · r/CATpreparation
listen.poll · 30m
u/mock_aspirant · 2h
negative“Their mock series felt way harder than the actual paper. Worth it or hype?”
u/mock_topper · 5h
positive“The sectional analysis genuinely changed how I revised. Recommending.”
torn? filed negative — a buried complaint costs more than a second look
04 / LEARN
Three attribution models side by side — first touch, last touch, linear — with 30-minute sessionization, and the verdict locked in at enrolment.
winning formats · ≥ 1.25× your avg
Each format's real numbers come back and are judged against your own average — and winners pre-select themselves in the repurpose picker. The loop closes because the product closes it.
ads · AI analyst, no invented figures
Fed your top campaigns and weekly trends, forbidden to make up a single number, returning severity-ranked actions with effort labels.
events · one stream
A single form submission is consumed three ways at once: the A/B conversion, the reminder journey's trigger, and the registration count.
attribution · 30 days
attribution.derive
google / organic
youtube
locked at enrolment — this month’s report never changes next month
guard.check · runs before anything leaves
Brand Guard reads every outbound line against five closed rule categories — unprovable guarantees, manufactured urgency, platform policy, your claims policy, banned words — written to the standard India’s ad regulator and both major ad platforms actually apply. Every flagged span is a verbatim quote, verified server-side, so “Fix all” can never look like it worked while doing nothing.
Usage rights get the same teeth: record who licensed a creative and when the window closes, and the server refuses to publish an expired asset — naming the exact expiry date. A creator’s 30-day reel can never quietly keep running as an ad.
composer · new post
fix Structured prep, tracked weekly — see last year’s results.
reel_08.mp4 — licensed · 14 days left
Publishthe pixel
The entire tracking script — smaller than most favicons, with a hard 4,608-byte budget enforced at build time. The build fails rather than quietly shipping something fat to every page of your site.
the only comparison shown is against its own budget — it wins by refusing to grow
page_view · utm_source=instagram ← held, never overwritten
page_view · /fees
page_view · /toppers (18 days pass)
form_submit · identify
contact created — 3 weeks of anonymous history snap on
first touch: instagram · the retargeting ad doesn’t steal the credit
batched 800ms · sendBeacon on pagehide · zero dependencies · fails silent
settings/ai
There is no server-side AI key at all. Every model call runs on your workspace’s own credential — zero token markup by design. Keys are AES-256-GCM encrypted, live-verified against the provider before saving, and shown as their last four characters only. Seven text models across three providers, and 13 AI jobs each routable to its own — Opus for blog drafts, the cheapest capable model for sentiment.
anthropic
sk-ant-····rk4t
claude sonnet 5 · opus 4.5 · haiku 4.5
✓ verified live
openai
sk-proj-····9fa2
gpt-4.1 · gpt-4.1 mini · gpt-image-2
✓ verified live
AIza····q7Lm
gemini 2.5 pro · gemini 2.5 flash
✓ verified live
m361 runtime
13 jobs · each on its own model
0
job queues on the night shift
0
AI jobs, each on its own model
0
formats from one blog, in parallel
0
bytes of pixel, budget-enforced