视觉画布设计
canvas-design
基于设计原则创作静态视觉作品,用于海报与品牌图形。
marketing-plan【文档与办公】Writes a marketing plan for a small business as a working document: where customers come from today, one target segment and message, a numeric goal turned into the leads it requires, a spending ceiling derived from what a customer is worth, channels chosen by score, a 13-week calendar and a weekly scorecard with stop rules. Use when someone asks "wri…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
A marketing plan for a small business is a short document that answers six questions with numbers: who the business is for, what it says to them, how many new customers it wants and by when, what it may spend to get each one, which few channels it will use, and how it will know by week four whether the plan is working. Those are the same parts the US Small Business Administration lists for a plan (target market, competitive advantage, sales plan, goals, action plan, budget), arranged so each one feeds the next.
This skill produces marketing-plan.md for one quarter (13 weeks) and the inputs file its numbers were computed from. It assumes the business has customers already. With none, direct selling comes first, because a plan needs to know who buys and why.
Read before asking: the website and its main pages, pricing, any analytics export, the customer or job list (especially a "source" or "how did you hear about us" column), reviews, past campaigns and what they cost.
Ask for what is missing:
Choose one segment for the quarter. Write the message as five short lines, then compress it to a sentence:
Who homeowners with solid-wood kitchen cabinets from the 1990s
When they have just been quoted $18,000 or more to replace them
Result the kitchen looks new in five working days for about a quarter of that
Proof 40 kitchens finished locally, photos of each, a five-year finish warranty
Instead of replacing sound cabinets, or painting them over a weekend
Read the sentence to five customers and ask them to say it back. What they repeat is the message; what they drop was not doing any work.
first-year profit per customer = first-year revenue per customer x gross margin
allowable cost per customer = first-year profit per customer / 3
spending ceiling = goal x allowable cost per customer
leads needed = goal / (product of the conversion rates)
Dividing by three is the common rule that a customer should return about three times what it cost to win; a business short of cash can use a payback period instead (the cost must come back within so many months). Use first-year figures, not lifetime ones, unless there are years of retention data.
Put the inputs in plan-inputs.json and the candidate channels with an honest estimate of the leads each will bring:
#!/usr/bin/env python3
"""plan_math.py plan-inputs.json - goal, funnel, spending ceiling and a channel table."""
import json, sys
d = json.load(open(sys.argv[1]))
goal = d["goal_new_customers"]
profit = d["first_year_revenue_per_customer"] * d["gross_margin"]
allowable = profit / d.get("profit_to_cost_ratio", 3)
rate = 1.0
for step in d["funnel"].values(): # e.g. lead -> quote -> sale
rate *= step
print(f"goal {goal} new customers in {d['weeks']} weeks")
print(f"first-year profit {profit:,.0f} per customer; allowable cost {allowable:,.0f} each; ceiling {goal * allowable:,.0f}")
print(f"funnel {rate:.1%} of leads become customers; {goal / rate:.0f} leads needed ({goal / rate / d['weeks']:.1f} a week)")
print(f"\n{'channel':34} {'leads':>5} {'cust':>5} {'cost':>6} {'hours':>5} {'cost/cust':>9}")
leads = cost = hours = 0
for c in d["channels"]:
n = c["leads"] * rate
per = c["cost"] / n if n else 0
flag = " over" if per > allowable else ""
print(f"{c['name'][:34]:34} {c['leads']:>5} {n:>5.1f} {c['cost']:>6,} {c['hours']:>5} {per:>9,.0f}{flag}")
leads, cost, hours = leads + c["leads"], cost + c["cost"], hours + c["hours"]
print(f"{'total':34} {leads:>5} {leads * rate:>5.1f} {cost:>6,} {hours:>5} {cost / (leads * rate):>9,.0f}")
print(f"\nbudget {cost:,} of {d['budget']:,}; hours {hours} of {d['hours_available']}; "
f"{'meets' if leads * rate >= goal else 'misses'} the goal of {goal}")
A "lead" is whatever enters the first conversion step: an enquiry for a trade, a visit for a website. A channel marked over costs more per customer than the business can afford and is cut, shrunk to a test, or renegotiated. If the plan misses the goal inside the budget and the hours, change the goal, not the estimates.
Every plan starts with a base layer, because nothing else pays without it: a page or profile that says the message and makes the next step obvious, a way to record where each lead came from, a permission-based contact list, and a request for a review or referral at the moment of delivery.
Then score the candidates from 0 to 3 on four questions and take the top two or three that fit the money and hours:
| Question | 0 | 3 |
|---|---|---|
| Audience: is the segment there? | no evidence | the source tally or a search already shows it |
| Intent: are they looking to buy when they meet it? | passing time | searching for the solution by name |
| Speed and cost to a first result | months and four figures | weeks and little cash |
| Capability: can this business do it well? | needs skills nobody has | already does it |
| Channel | Suits | Typical time to first result | Rule to know |
|---|---|---|---|
| Google Business Profile and reviews | local buyers who search by need and place | weeks | local ranking rests on relevance, distance and prominence and cannot be bought; offering anything in exchange for reviews is prohibited |
| Referrals and partners | satisfied customers who know others like them | weeks | ask at delivery; thank referrers, never pay for reviews |
| Pages that answer searched questions | problems people type into a search engine | months | one page per question, written from real customer wording |
| Email list | repeat purchase or long consideration | weeks | consent first; every message carries an unsubscribe link and, in the US, a postal address |
| Communities and direct outreach | a niche small enough to list by name | weeks | each venue's rules on promotion |
| Search ads | demand that is already searched | days | cap the test and set the stop rule first |
| Social ads and sponsorships | visual products; niche newsletters and podcasts | weeks | price one placement before buying three |
| Events and trade shows | high-value sales | fixed by the date | cost per conversation, not per badge scan |
Everything not chosen goes into the plan under "not this quarter" with the reason, so it is not reopened every week.
Weeks 1 and 2 build the base layer. Weeks 3 to 12 run the chosen channels at a fixed weekly rhythm. Week 13 is the review. Give every paid or uncertain activity the form of an experiment: what is expected, by when, at what cost, and the result that stops it. A workable stop rule for paid tests: pause once the test has spent twice the allowable cost per customer without producing a customer.
Content topics come from questions customers have actually asked (support mail, quote visits, sales calls, review text), one piece per question, each ending in the same next step.
Tag every link the business controls so sources stay separable. Google Analytics reads utm_source, utm_medium and utm_campaign (always use all three) and treats values as case sensitive, so Google and google become two sources. Keep everything lower case:
https://fernhillcabinets.com/quote?utm_source=google&utm_medium=cpc&utm_campaign=2026q4_cabinet_refinishing
https://fernhillcabinets.com/quote?utm_source=referral_card&utm_medium=offline&utm_campaign=2026q4_past_customers
Offline sources need a question: "How did you hear about us?" on every form and call, with fixed answers.
The weekly scorecard has one row per week: leads by source, each conversion step, sales, spend, cost per customer by channel, reviews, list size. Review every four weeks and make one of three decisions per channel: keep, change one thing, or stop.
# Marketing plan: (business), (quarter)
## 1. Situation
Source tally, best customers, alternatives and their prices, segment size.
## 2. Target and message
The five lines, the sentence, three proof points.
## 3. Goal and arithmetic
Goal, conversion rates, leads needed, allowable cost per customer, ceiling. Output of plan_math.py.
## 4. Channels
Score table, chosen channels with expected leads, cost, hours. Not this quarter, with reasons.
## 5. Calendar
| Week | Action | Who | Hours | Cost | Measured by |
## 6. Experiments and stop rules
## 7. Scorecard and review dates
## 8. Assumptions (every estimate, marked measured or guessed)
Dele Adeyemi refinishes kitchen cabinets in Columbus, Ohio: average job $4,200, gross margin 45%, six jobs a month, and he wants ten. That is 12 extra jobs in the quarter. Of his last 40 jobs, 17 came by referral, 11 from Google search and Maps, 5 from Nextdoor, 4 from yard signs and 3 are unknown. Six in ten enquiries get a quote visit and 35% of quotes become jobs.
| Channel | Audience | Intent | Speed and cost | Capability | Total | Decision |
|---|---|---|---|---|---|---|
| Business Profile and review requests | 3 | 3 | 2 | 3 | 11 | chosen |
| Referral request to past customers | 3 | 2 | 3 | 3 | 11 | chosen |
| Search ads | 3 | 3 | 2 | 1 | 9 | capped test |
| Yard signs and door hangers | 2 | 1 | 3 | 3 | 9 | chosen, cheap |
| Instagram before-and-after posts | 2 | 1 | 1 | 2 | 6 | not this quarter |
| Home-show booth at $2,400 | 2 | 2 | 1 | 1 | 6 | not this quarter: most of the budget on one weekend |
goal 12 new customers in 13 weeks
first-year profit 1,890 per customer; allowable cost 630 each; ceiling 7,560
funnel 21.0% of leads become customers; 57 leads needed (4.4 a week)
channel leads cust cost hours cost/cust
Business Profile + review requests 15 3.1 0 14 0
Referral request to 40 past jobs 14 2.9 240 10 82
Search ads, 8-week test 24 5.0 1,800 12 357
Yard signs + door hangers 6 1.3 360 9 286
total 59 12.4 2,400 45 194
budget 2,400 of 3,000; hours 45 of 65; meets the goal of 12
Calendar, in brief. Weeks 1 and 2: complete the Business Profile (services, service area, hours, 30 job photos), add a quote page with the "how did you hear" question, put the review link on every invoice, and text the 40 past customers a thank-you with the review link and a referral card. Weeks 3 to 10: search ads at $225 a week on "cabinet refinishing" searches inside the service area, a sign at every job and 25 door hangers on the same street. Stop rule for the ads: pause at $1,260 spent with no booked job. The ad figure of $75 a lead is marked as a guess; week 4 replaces it with the measured one. The $600 not allocated stays in reserve for whichever channel is ahead at the week-8 review.
Linnea Brandt has 140 customers at $89 a month, 82% gross margin and 2.5% monthly churn, so a customer brings about $933 in the first year. Each quarter 2,700 visits produce 108 trials and 24 customers; she wants 45, with $6,000 and ten hours a week.
At today's rates 45 customers would need 5,114 visits, nearly double the traffic. The trial list shows a cheaper lever first: 9 of the 22 trials that had a setup call became customers, against 15 of the 86 that did not. A call for every trial is planned at 50 hours, with trial-to-paid assumed to rise from 22% to 30%.
goal 45 new customers in 13 weeks
first-year profit 765 per customer; allowable cost 255 each; ceiling 11,476
funnel 1.2% of leads become customers; 3750 leads needed (288.5 a week)
channel leads cust cost hours cost/cust
Existing traffic 2700 32.4 0 0 0
Guild newsletter, 3 issues 540 6.5 1,800 12 278 over
Brewery-software directory listing 300 3.6 0 20 0
Spreadsheet-template page + email 450 5.4 0 45 0
Onboarding call for every trial 0 0.0 0 50 0
total 3990 47.9 1,800 127 38
budget 1,800 of 6,000; hours 127 of 130; meets the goal of 45
The newsletter is flagged: $278 a customer against $255 allowed. The plan buys one issue for $600 and continues only if it brings three paying customers ($200 each). The riskiest assumption is the 30%: if trial-to-paid stays at 22%, the same traffic yields 35 customers, so the week-4 review checks that rate before anything else. Most of the $6,000 stays unspent, and the plan says so plainly; the limit here is hours, not money.