LockStack Local SEO · User Guide

30 geo-targeted posts.
One click. Fully offline.

Everything you need to go from empty form to a published month of local content — no cloud, no subscription, no data leaves your machine.

v3.4.0 Windows 10 / 11 Offline AI Local SEO
01

What this does

LockStack Local SEO writes 30 geo-safe blog posts for any local service business — plumbers, dentists, electricians, cafés, and anyone whose customers live nearby. Fill a short form, click Generate, and in 1 to 2 hours you have a full quarter of content: articles, social posts, a publishing calendar, and a WordPress import. Everything runs offline on your PC — no cloud, no subscription, no data leaves your machine.

What you get

30 blog posts × 17 file formats = 510 files. Plus a CSV calendar, iCal file, and QA report.

513 files total — for one campaign run.

02

Before you start

Check these requirements before installing.

You need
Windows 10 or 11 (64-bit)
8 GB RAM minimum (close other apps; ~60–90 min per campaign)
16 GB RAM recommended (smooth multitasking; ~45 min per campaign)
~5 GB free disk (model + app)
Your license key (emailed at purchase)
You don't need
A GPU — runs on CPU alone
ChatGPT, Claude, or Gemini account
Any technical skills
Internet after install (fully offline)
Separate runtime or model downloads
03

Install the app

You downloaded one EXE matching what you bought — either LockStack-LOCAL-SOLO.exe or LockStack-LOCAL-PRO.exe (~2.5 GB each, AI model baked in). The EXE you have is the entitlement — no license key, no activation, no online check.

1
Double-click the EXE you downloaded.
2
Windows may show "Windows protected your PC" — click More info then Run anyway. This is normal for any unsigned new program.
3
Click Next → Install → Finish — no admin prompt required (installs to your user folder). On first launch the app verifies the bundled model — this takes about 30 seconds.
4
Open Start, type LockStack Local SEO, and launch the app.
No admin prompt, no internet after install

LockStack installs to your user folder (%LocalAppData%\Programs\) so no admin password is needed. The AI model is baked into the EXE — once installed, the app works fully offline forever. No license server, no telemetry.

Solo vs Pro — what your EXE includes

Each tier ships as a separate EXE. The features you get are determined by which one you downloaded — the EXE itself is the entitlement. Solo and Pro produce identical campaign output — same 30 posts, same 17 file formats per post, same 513 files per campaign, same 9 social adaptations, same offline State-of-the-Art Local 3B AI Engine (Built with Llama) model. The only difference is 3 hidden UI elements in Pro:

Local Solo $147
30 hyper-local posts per campaign
All 17 file formats per post (513 files / campaign)
Geo-aware (postcode, area, landmarks)
LocalBusiness + FAQPage + Speakable JSON-LD (shipped in the per-post .zip)
All 9 social adaptations (LinkedIn Article, LinkedIn Post, X Short, X 3-tweet, Facebook, Threads, Carousel, Newsletter, Video Script)
CALENDAR (CSV) + CALENDAR (ICS) export
Per-platform .txt social files
PDF SUMMARY + WORDPRESS COPY
NEW / OPEN / SAVE / GENERATE / EXPORT ZIP + Save & Resume
100% offline · no telemetry · no subscription
Local Pro $347
Everything in Solo (identical output), plus 3 UI elements:
CALENDAR (XLSX) button — styled 3-sheet workbook in the Schedule & Publish row (Solo still has CSV and ICS)
BULK SOCIAL CSV button — one combined CSV in the Schedule & Publish row (Solo still gets per-platform .txt files)
SEO DATA tab — 4th right-side spoke with a live JSON-LD editor (Solo shows 3 spokes: BLOG POST, VIDEO VERSION, SOCIAL CHANNELS — the schema is still generated by the backend and shipped in the per-post .zip)
Where the 3 Pro UI elements appear

SCHEDULE & PUBLISH row: Pro shows two extra buttons — CALENDAR (XLSX) alongside CSV/ICS, and BULK SOCIAL CSV next to the per-platform .txt exports. Right-side spokes: Pro shows a 4th spoke SEO DATA for live JSON-LD editing; Solo shows only BLOG POST, VIDEO VERSION, and SOCIAL CHANNELS — but the same LocalBusiness/FAQPage/Speakable schema is generated either way and lands in the per-post .zip.

05

Fill the form

The form is on the left side of the app. Use the field reference below.

Don't know what to type? Click your industry below to see a complete filled-in example, then copy the pattern.

First-timer? Read this 60-second walkthrough.

You give the engine a few details about your business. The AI takes those details and writes 30 different blog posts for you. Think of it like a cookbook: you provide the ingredients, the AI does the cooking.

Below is one real example — VoltMaster Electric, a small electrician in Paddington, London — showing exactly what to type into each field. Copy this pattern for your own business.

Field What VoltMaster typed Why it works
BUSINESS TYPE Electrician One word — your industry. The AI uses this to know what kind of business you are.
MAIN SERVICE Residential Panel Upgrades What you actually SELL — the #1 thing customers pay you for. NOT a tagline, NOT a slogan.
GOOGLE SEARCH TERM Electrician Paddington London The exact words a stressed homeowner types into Google. NOT what you call yourself — what THEY call you.
AREA 1 (REQUIRED) Paddington Your neighborhood. NOT just “London” (too vague). NOT your street address (too narrow).
POSTCODE / ZIP (optional) W2 1RH Real postcode. Helps Google trust the location. Don’t make one up.
LANDMARK (optional) Near Paddington Station A real place locals would know. The AI drops this into posts so they sound truly local.
POST STRUCTURE [4] Data — facts and numbers that build trust The STYLE you want. The AI writes 30 different headlines IN this style. You’re picking the format, not writing the headlines.
⚠️ Important — you are NOT writing the headlines When you scroll down to “POST STRUCTURE” below, you’ll see 4 dropdown options (How-to / Opinion / Trends / Data) each with a sample like:

“How a modern panel saves London homeowners 15% on energy bills…”

Those are SAMPLES OF WHAT THE AI WILL WRITE FOR YOU. They are NOT something you type into MAIN SERVICE or any other field. You only pick the style — the AI writes all 30 different headlines for you.

If you tried to copy that headline into MAIN SERVICE, your blog posts would all be about “saving 15% on bills” instead of about residential panel upgrades in general. Different fields, different jobs.

Why these 6 fields turn into REAL local blog posts (not generic AI fluff)

1. The AI knows WHERE you are

Because you typed Paddington + W2 1RH + Paddington Station, the AI writes sentences like “If you live in the Victorian terrace houses near Paddington Station, your electrical panel is likely 40 years old…” That kind of sentence is what makes Google rank your blog locally — generic AI can’t do it because generic AI doesn’t know your neighborhood.

2. The AI knows WHAT you actually do

Because you typed Residential Panel Upgrades (not “general electrical work”), every post stays focused on the one service that pays your bills. No fluff about other services you barely offer.

3. The AI knows HOW your customers search

Because you typed “Electrician Paddington London” as the search term, every post is built to rank for that exact search. Not 100 made-up keywords — the one phrase that brings real customers.

The result: 30 blog posts that look hand-written by a local expert, not by an AI that’s never set foot in your neighborhood.

“A regular blog generator writes for the whole world, which means it reaches nobody. This engine writes for one neighborhood, which means it reaches your next customer.”
NAME Required
The name on your sign or business card
Riverside Plumbing Co.
⚡ Quick rule: Type your real business name. The AI won’t “fix” or “correct” your spelling — what you type is what shows up.
In plain English: type the exact name on your sign or business card. Don't worry about caps or spelling — the engine won't "fix" or "correct" your brand name.
Don't: type a description like "best plumber in town" — that's a slogan, not your name.
BUSINESS TYPE Required
One word for what you do — Pet Groomer, Dog Daycare, Vet, Café, Florist, Yoga Studio, etc.
Plumber
⚡ Quick rule: Use the one word a stranger would type into Google Maps to find a business like yours. Plumber. Dentist. Café.
In plain English: what would Google Maps call you? Plumber, Dentist, Realtor, Café, Salon. One word, lowercase fine.
Don't: write a sentence like "we fix sinks and water heaters" — just say "Plumber."
MAIN SERVICE Required
The number one thing customers call you for. Write it as you'd say it out loud.
emergency boiler repair
⚡ Quick rule: This is the “Hook.” It’s the single biggest problem your customer is crying about at 2 AM — the job they call you for in a panic.
In plain English: the one job you get hired for the most. If a friend asked "what do you do all day?" — this is the answer.
Don't: list ten things separated by commas — pick the single biggest moneymaker.
What it IS The single specific thing customers pay you to do. The bread-and-butter offering, not your full menu.
How specific Specific enough that a customer reading it knows you can solve their exact problem. Not "general dentistry" (too broad) — "family + cosmetic dentistry with same-day crowns" (specific enough).
NOT to be confused with BUSINESS TYPE BUSINESS TYPE is your industry label (one word: "Plumber", "Dentist", "Café"). MAIN SERVICE is what you actually sell, in your customer's words. Plumber → Main Service: "24/7 emergency burst pipe repair." Dentist → Main Service: "Family & cosmetic dentistry with same-day crowns." Same business, different field.
Format examples
  • 🔧 Plumber → 24/7 emergency residential plumbing
  • 🦷 Dentist → Family & cosmetic dentistry with same-day crowns
  • ☕ Café → Specialty espresso & all-day brunch
  • 💇 Salon → Color specialists & precision cuts
  • 💪 Gym → CrossFit & functional fitness coaching
  • ⚖️ Lawyer → Personal injury claims & insurance disputes
  • 🐾 Vet → Small-animal preventive care & emergency surgery
  • 🍽️ Restaurant → Wood-fired Neapolitan pizza & natural wine
💡 Pro tip The engine drops this phrase directly into post titles and meta descriptions ("Why Clapham homeowners trust [your MAIN SERVICE] over big chains"). If you write it like an internal job-description, your posts will sound like an internal job-description. Write it the way you'd say it to a customer who walked in.
Location & Search
Tell the engine WHERE you are and WHAT customers search for.
GOOGLE SEARCH TERM Required
The main thing customers search to find you. Every post covers a DIFFERENT local angle on this topic — no two headlines will be the same.
boiler repair near me
⚡ Quick rule: Type the exact thing your customer would Google at midnight when they have your problem. Almost always ends in “near me.”
In plain English: imagine a stressed customer with a broken boiler at 11pm. What do they actually type into Google? That phrase goes here.
Don't: type your business name — customers don't search "Apex Plumbers," they search "plumber near me."
What it IS The exact phrase a customer types into Google when they have your problem and need a business like yours. Not what YOU call it — what THEY call it.
How specific Specific enough that the AI generates 30 different post angles. Too broad ("plumber") = generic posts. Too narrow ("emergency plumber Clapham burst pipe Sunday night") = the AI runs out of angles after 5 posts. Sweet spot = 4–7 words that include the service + a hint of geography or context.
NOT to be confused with MAIN SERVICE MAIN SERVICE is what YOU sell ("24/7 emergency burst pipe repair"). GOOGLE SEARCH TERM is what your customer Googles at 11pm on a Sunday ("emergency plumber Clapham burst pipe"). Same job, different vocabulary. MAIN SERVICE = your menu. GOOGLE SEARCH TERM = the customer's panic.
Format examples
  • 🔧 Plumber → emergency plumber near me burst pipe
  • 🦷 Dentist → family dentist Chicago West Loop new patient
  • ☕ Café → best coffee shop Williamsburg with wifi
  • 💇 Salon → best balayage colorist Atlanta Buckhead
  • 💪 Gym → crossfit gym near me beginner friendly
  • ⚖️ Lawyer → personal injury lawyer Los Angeles free consultation
  • 🐾 Vet → emergency vet near me open Sunday
  • 🍽️ Restaurant → best pizza Seattle waterfront date night
💡 Pro tip The engine takes this query and generates 30 different post angles around it — so this is the single most leveraged field on the form. A clear, specific GOOGLE SEARCH TERM = 30 ranking posts. A vague one = 30 vague posts. The engine builds keyword variations from your query (long-tail expansions, "near me" variants, "best/cheapest/24/7" prefixes), so don't try to cram every variation in — just write the most-searched core phrase.
AREA 1 Required
The neighbourhood or suburb closest to your business — where most of your customers are. A neighbourhood, district or suburb — NOT a country or city. Examples: Westminster (London), Gangnam (Seoul), Brooklyn Heights (NYC), Shibuya (Tokyo).
Westminster
⚡ Quick rule: Write your city + neighbourhood, like you’d say it on the phone. Not just “London” (too vague). Not your street address (too narrow). “South London, Clapham” is the sweet spot.
In plain English: the city + neighbourhood where you actually work — the one a local would name. "Austin, South Congress" or "Chicago, West Loop." This is the most important field for local SEO.
Don't: type a whole country or state like "USA" or "Texas" — be specific to the neighbourhood you serve.
What it is The city + neighbourhood your business serves. This is the broadest geographic anchor for every post the engine writes.
How specific Don't write just "London" or just "USA" — that's too vague. Don't write your full street address — that's too narrow. The sweet spot is City + Neighbourhood / Suburb / District.
Format examples
  • 🇬🇧 UK: South London, Clapham · Manchester, Northern Quarter · Edinburgh, Stockbridge
  • 🇺🇸 US: Austin, South Congress · Brooklyn, Williamsburg · Chicago, West Loop
  • 🇦🇺 AU: Sydney, Surry Hills · Melbourne, Fitzroy
  • 🇨🇦 CA: Toronto, Queen West · Vancouver, Gastown
💡 Pro tip The engine weaves this directly into the headline and meta description of every blog post (e.g. "How South London plumbers fix a burst pipe in under 30 minutes"). If you write something vague here, every post sounds vague.
Local Context (Optional)
Add more local context (optional · improves schema accuracy)
POSTCODE / ZIP Optional
Helps make the schema more accurate. Don't know it? Leave blank — Area 1 is enough.
e.g. SW1A 1AA or 90210
⚡ Quick rule: Use your real postcode or just the prefix (SW4, 78704). Don’t make one up — Google checks.
In plain English: the postcode (UK) or ZIP code (US) for your shop or service area. Just used in invisible Google schema — readers never see it.
Don't: stress over picking the "right" one if you cover several — pick the centre of your service area or leave blank.
What it is Your area's postal code. Either the FULL code or just the PREFIX (postcode area / zip prefix) — both work.
How specific A prefix is usually better than a full code. Full postcodes anchor you to ONE building; prefixes anchor you to a neighbourhood, which matches how people actually search.
Format examples
  • 🇬🇧 UK postcode prefix: SW4 (Clapham) · M1 (Manchester centre) · EH3 (Edinburgh New Town)
  • 🇺🇸 US ZIP: 78704 (South Austin) · 11211 (Williamsburg) · 60607 (West Loop)
  • 🇦🇺 AU postcode: 2010 (Surry Hills) · 3065 (Fitzroy)
  • 🇨🇦 CA prefix: M5V (Toronto Entertainment District) · V6B (Vancouver Gastown)
💡 Pro tip The engine adds this code to the JSON-LD schema (LocalBusiness postalCode field), which is how Google's local pack ranks you. Wrong postcode = your blog ranks for a city you don't serve.
AREA 2 Optional
Add another nearby area if you want. Fine to leave blank — we'll just use Area 1.
Leave blank if you only serve one
⚡ Quick rule: Skip this unless you really do serve a second neighbourhood. Most businesses don’t need it.
In plain English: a second neighbourhood you also cover. If you only serve one area, leave it empty — the engine won't fake a second one.
Don't: list 5 neighbourhoods crammed in here — one extra is the limit, pick the next biggest.
What it is A secondary or nearby neighbourhood you also serve. Optional — skip it if you only want to focus on one area.
How specific Same rule as Area 1 — Neighbourhood + City. Use this if your business serves a 2-neighbourhood radius, not just one.
Format examples
  • 🇬🇧 UK: if Area 1 is South London, Clapham, Area 2 might be South London, Battersea (next neighbourhood over)
  • 🇺🇸 US: if Area 1 is Brooklyn, Williamsburg, Area 2 might be Brooklyn, Greenpoint
  • 🇦🇺 AU: if Area 1 is Sydney, Surry Hills, Area 2 might be Sydney, Paddington
  • 🇨🇦 CA: if Area 1 is Toronto, Queen West, Area 2 might be Toronto, Kensington Market
💡 Pro tip The engine generates a few posts targeted at Area 2 too, so you cover both neighbourhoods. Skip this field if you only want to focus on ONE area — don't pad it with somewhere you don't actually serve.
LANDMARK Optional
A park, station, famous street or big building your customers already know. Makes posts sound genuinely local.
e.g. St James's Park
⚡ Quick rule: Name 1–3 real places nearby that locals would know. Parks, stations, famous streets. The AI drops these into your posts so they feel actually local — fake landmarks make the AI sound fake too.
In plain English: a real-world place a local would recognise — a park, a tube station, a famous street. "Near Zilker Park" or "Walking distance from the Stanley Mosk Courthouse." This proves you actually know the area.
Don't: invent a fake landmark or use something nobody's heard of — pick a place a stranger could find on a map.
What it is 1–3 real physical places near your business that locals would recognise. Parks, stations, famous streets, monuments, shopping districts.
How specific REAL landmarks only. Use names locals actually use (not tourist names). 1 landmark is fine; 3 is the max — more dilutes the focus.
Format examples
  • 🇬🇧 UK: Near Clapham Common and High Street · Just off Brick Lane, near Spitalfields Market · Walking distance from Edinburgh Castle
  • 🇺🇸 US: Near Zilker Park and Barton Springs · Just off Bedford Avenue, near McCarren Park · Two blocks from Crystal Pier
  • 🇦🇺 AU: Across from Centennial Park, near Bondi Junction Station
  • 🇨🇦 CA: Walking distance from St. Lawrence Market, near Union Station
💡 Pro tip This is the field that makes your blog feel TRULY local. The engine drops landmark names directly into post bodies (e.g. "If you live within walking distance of Clapham Common…"), which is exactly what Google's helpful-content ranker rewards. Fake landmarks = the AI hallucinates fake context = the post sounds wrong.
Writing Style & Structure
POST STRUCTURE Has default
Dropdown — pick one of these:
⚠️ The 4 examples below are SAMPLES of what the AI will write for you — not something you type.
[1] How-to — Step-by-step guide (most popular)
[2] Opinion — Your take on a local problem
[3] Trends — What's changing in your trade right now
[4] Data — Facts and numbers that build trust
⚡ Quick rule: If you aren’t sure, pick “How-to.” It’s the most shared content on the internet because people love feeling smarter after reading your post.
In plain English: the shape of every post. Pick one and let all 30 posts share the same shape — the calendar feels coherent. If unsure, leave on How-to.
How-to
Step-by-step guide. Most popular.
"If your kitchen sink starts gurgling at 11pm on a Sunday, here's the 3-step check we walk every Clapham customer through before we even pick up a wrench…"
Opinion
Your hot take on a problem in your trade.
"Most plumbers in South London are still quoting flat-rate emergency call-outs. They're wrong, and here's the 4-figure mistake homeowners pay for every winter…"
Trends
What's changing in your trade right now.
"Three things shifted in residential plumbing this year that nobody at the trade counter is talking about. Here's what changed and what it means for your next boiler service…"
Data
Facts and numbers that build trust.
"We pulled 12 months of emergency call-out data from 47 SW4 households. The pattern is clear: the average burst-pipe call comes 4.2x more often in homes with copper joints older than 15 years…"
Don't: change this halfway through to "see what happens" — pick one and let all 30 posts share the same shape.
WRITING VOICE Has default
Pick 1 or 2 tones: Professional, Friendly, Simple, Funny, Critical, Relatable
Professional
⚡ Quick rule: Pick the vibe you’d want a smart friend to use if they were explaining your business to a neighbour over coffee.
In plain English: the main vibe of your posts. Friendly = warm and welcoming. Critical = confident, willing to call out bad ideas. Simple = no jargon, like explaining to a kid. Funny = light, playful. Relatable = "I've been there too." Pick ONE main vibe (and optionally a second).
Don't: tick all six — the engine gets confused if you try to be everything at once. Two tones max.
POST LENGTH Has default
Slider 600–2000 words. 900 is the sweet spot.
900
⚡ Quick rule: Long posts win Google but short posts win social. The default is the sweet spot — leave it alone unless you have a reason.
In plain English: how long each blog post should be. 900 words is the safe middle — long enough for Google to take seriously, short enough that real humans read to the end.
Don't: max it out at 2000 thinking longer = better — a 900-word post people finish beats a 2000-word post they bounce from.
NUMBER OF POSTS Has default
1–30. Use 1 for a test run.
30
⚡ Quick rule: 30 = a full month of daily content, batch-published over 12–15 weeks. If you’re testing the engine for the first time, run 1 or 3 first to feel it out.
In plain English: how many posts the engine will write in this run. 30 = one a day for a month. Set to 1 the first time so you can see one finished post in ~5 minutes before committing to the full run.
Don't: run 30 on your first ever try — do 1 first to confirm tone and quality, then come back for the full 30.
Area 1 drives everything

It doesn't matter if you don't know your postcode — Area 1 is all the engine needs to write locally relevant content. Postcode only affects the JSON-LD schema tag (invisible to readers).

10 real businesses, 10 filled-in forms

Pick the one closest to yours and copy the pattern field-for-field. Every value here works in the real form — try it.

🔧 Emergency Plumber — Elite Flow Plumbing

Plumbers win on raw geographic proximity and urgency — the engine weaves "Zilker Park" right into the copy so customers see you actually know the neighbourhood.

Business NameElite Flow Plumbing
Business TypePlumber
Main Service24/7 emergency residential plumbing
Google Search Termemergency plumber near me
Area 1Austin, South Congress
Postcode / ZIP78704
Area 2Bouldin Creek
LandmarkNear Zilker Park and Barton Springs
Post StructureHow-to
Writing VoiceSimple + Friendly
Post Length900
Number of Posts30

Why Simple as the primary tone: a panicking homeowner with water on the floor doesn't want jargon — they want to be told what to do, fast.

🦷 Family Dentist — BrightSmile West Loop

Dentists live on hyper-local trust — content needs to feel safe, professional, and tied to the neighbourhood.

Business NameBrightSmile West Loop
Business TypeDentist
Main ServiceFamily & cosmetic dentistry
Google Search Termfamily dentist west loop chicago
Area 1Chicago, West Loop
Postcode / ZIP60607
Area 2Fulton Market
LandmarkJust off Restaurant Row on Randolph Street
Post StructureHow-to
Writing VoiceFriendly + Relatable
Post Length900
Number of Posts30

Why Friendly + Relatable: dental anxiety is real — copy that says "we get it, nobody likes the chair" beats clinical authority.

🏠 Realtor — Harbor View Realty

Realtors live and die by neighbourhood knowledge — landmark + postcode prove you actually know the area you're selling.

Business NameHarbor View Realty
Business TypeRealtor
Main ServiceResidential real estate sales
Google Search Termbrickell condos for sale
Area 1Miami, Brickell
Postcode / ZIP33131
Area 2Edgewater
LandmarkOverlooking Biscayne Bay, near Brickell City Centre
Post StructureOpinion
Writing VoiceCritical + Relatable
Post Length1100
Number of Posts30

Why Critical for the realtor: calling out bad advice from other agents makes the firm sound like an advocate — not just another salesperson.

☕ Independent Café — The Daily Grind Roasters

Cafés live on daily, recurring foot traffic — content needs to feel like part of the neighbourhood commute.

Business NameThe Daily Grind Roasters
Business TypeCafé
Main ServiceIndependent coffee shop & bakery
Google Search Termbest coffee williamsburg brooklyn
Area 1Brooklyn, Williamsburg
Postcode / ZIP11211
Area 2Greenpoint
LandmarkJust off Bedford Avenue, near McCarren Park
Post StructureTrends
Writing VoiceRelatable + Funny
Post Length800
Number of Posts30

Why Relatable + Funny: people read café content on their morning phone scroll — light humour about needing caffeine beats serious "about our beans" copy.

💇 Hair Salon — Luxe Studio Salon

Salons live on personal loyalty — written content should project the warm, vibrant energy of the salon chair itself.

Business NameLuxe Studio Salon
Business TypeSalon
Main ServiceBoutique hair colour & cut
Google Search Termbalayage specialist atlanta
Area 1Atlanta, Buckhead
Postcode / ZIP30305
Area 2Brookhaven
LandmarkWalking distance from the Atlanta History Center
Post StructureHow-to
Writing VoiceFriendly + Funny
Post Length900
Number of Posts30

Why Funny as the secondary: salon culture is gossipy and vibrant — a touch of playfulness in the writing matches the in-chair experience.

⚖️ Personal Injury Lawyer — Shield & Associates Law

Law firms pay the highest CPC in Google Ads — organic local content is their cheapest path to qualified leads, and "near me" plus a courthouse landmark seals trust.

Business NameShield & Associates Law
Business TypePersonal Injury Law Firm
Main ServicePersonal injury & insurance claim representation
Google Search Termpersonal injury lawyer downtown los angeles
Area 1Los Angeles, Downtown
Postcode / ZIP90012
Area 2Arts District
LandmarkWalking distance from the Stanley Mosk Courthouse
Post StructureOpinion
Writing VoiceCritical + Simple
Post Length1100
Number of Posts30

Why Critical + Simple: the firm fiercely advocates for clients against insurance companies (Critical), then translates legal jargon so a 12-year-old can read it (Simple).

🍽️ Destination Restaurant — The Rusty Anchor Grill

Hospitality wins on foot traffic, tourists, and "near me" phone searches — landmark targeting next to a famous attraction is critical here.

Business NameThe Rusty Anchor Grill
Business TypeSeafood Restaurant & Bar
Main ServiceFresh Pacific seafood & oyster bar
Google Search Termbest seafood restaurant seattle waterfront
Area 1Seattle, Waterfront
Postcode / ZIP98101
Area 2Belltown
LandmarkRight next to the Seattle Great Wheel and Pike Place Market
Post StructureTrends
Writing VoiceFunny + Friendly
Post Length800
Number of Posts30

Why Funny + Friendly: tourists pick a restaurant on vibe — playful, warm copy converts a lunch-deciding scroll faster than serious "about our chef" prose.

🔩 Auto Repair Shop — Precision Auto Works

Mechanics suffer from an industry-wide trust deficit — local content that explains repairs clearly without talking down wins the neighbourhood search.

Business NamePrecision Auto Works
Business TypeIndependent Auto Repair & Transmission
Main ServiceTransmission rebuild & full-service repair
Google Search Termhonest auto repair denver capitol hill
Area 1Denver, Capitol Hill
Postcode / ZIP80203
Area 2Cheesman Park
LandmarkNear the State Capitol and Civic Center Park
Post StructureHow-to
Writing VoiceSimple + Friendly
Post Length900
Number of Posts30

Why Simple as primary: a customer who actually understands what's wrong with their car trusts the shop that explained it — that trust is the entire moat for an indie mechanic.

🐾 Pet Spa — Paws & Bubbles Spa

Pet owners spend big but only on businesses that show genuine care — local SEO captures people looking for convenience near their commute.

Business NamePaws & Bubbles Spa
Business TypeDog Daycare & Mobile Grooming
Main ServiceMobile dog grooming & daycare
Google Search Termmobile dog grooming capitol hill seattle
Area 1Seattle, Capitol Hill
Postcode / ZIP98102
Area 2Madison Park
LandmarkDown the street from Volunteer Park
Post StructureHow-to
Writing VoiceFunny + Relatable
Post Length900
Number of Posts30

Why Funny + Relatable: playful jokes about shedding plus empathy for the hassle of washing a dog in a small apartment tub — exactly the vibe pet parents share with each other.

💪 Boutique Gym — Iron Forge Athletics

Gyms must constantly recruit to offset churn — content needs to cut through online influencer noise and focus on local community.

Business NameIron Forge Athletics
Business TypeCrossFit & Functional Fitness Gym
Main ServiceCrossFit classes & small-group strength coaching
Google Search Termcrossfit gym pacific beach san diego
Area 1San Diego, Pacific Beach
Postcode / ZIP92109
Area 2Mission Beach
LandmarkTwo blocks from Crystal Pier
Post StructureOpinion
Writing VoiceCritical + Simple
Post Length1000
Number of Posts30

Why Critical + Simple: calling out toxic fitness fads and bad diet advice (Critical) while making "getting started" feel approachable to nervous first-timers (Simple).

06

Generate your posts

After filling the form, click GENERATE LOCAL CAMPAIGN at the bottom of the sidebar.

The middle panel shows a live progress log. About 1 to 2 hours on a modern PC — ~1 hour on a fast machine, up to 2 hours on older 4-core laptops. Your CPU will run warm — this is normal.

Don't close the app while generating

You can use other programs but the computer will be slower. If you accidentally close it, just run it again — the app starts fresh.

When finished, the status line reads Campaign complete. N/N passed QA and all 30 posts appear in the middle column.

Quality check

Any post that shows a red ✗ failed the quality check (e.g. word count too low). It's still usable — the red banner shows exactly why it failed. You can click Regenerate on that post or edit it manually.

07

Reading results

The app has three panels after a successful run.

Left — Form

The form. Change any field and click Generate to re-run with new settings.

Middle — 30 Posts

Posts 01 through 30. Green ✓ = passed QA. Click any row to preview the full post.

Right — Editor

The selected post, plus download buttons for individual files and campaign export buttons.

08

Your output files

For each post LockStack creates 17 files. For each campaign run, 3 additional campaign files are generated. Total: 513 files per run.

.md
Markdown
Substack, Medium, Ghost, Notion, GitHub
.html
Web page
Paste into Squarespace, Wix, Webflow source view
.schema.json
JSON-LD schema
LocalBusiness + FAQPage + Speakable schema for SEO audit tools
.entities.json
Entity map
NLP and semantic SEO tools
.txt
Plain text
Notepad, email, anywhere no formatting needed
.rtf
Rich Text
Opens in Microsoft Word
.linkedin.md
LinkedIn article
Long-form LinkedIn “Write an article”
.linkedin_post.txt
LinkedIn post
Short LinkedIn feed post
.x_short.txt
X short tweet
Single-tweet headline (≤ 280 chars)
.x_long.txt
X long tweet
Premium / X Blue extended tweet
.x_thread.txt
X thread
3-tweet thread, ready to schedule
.threads.txt
Threads (Meta)
Ready-to-paste Threads post
.facebook.txt
Facebook post
Page or group share copy
.newsletter.txt
Newsletter
Email lead-in / teaser block
.carousel.txt
Carousel script
Slide-by-slide LinkedIn / Instagram carousel copy
.social.txt
Social aggregate
All social copies in one file for quick paste

Campaign files — one set per run:

campaign-calendar.csv
Notion-styled spreadsheet
Emoji-prefixed columns, ready for Buffer / Hootsuite / Airtable / Notion
campaign-calendar.ics
iCal file
Double-click — 30 reminders import to Google / Outlook / Apple Calendar
campaign-report.md
QA report
Pass/fail table for all 30 posts with failure codes
WordPress publishing

Use the WordPress 1-click copy button in the editor — paste straight into the WP block editor with all schema embedded. Pro tier adds bulk copy across multiple saved profiles.

09

Publish your month

Buttons at the bottom of the sidebar:

WORDPRESS — downloads the WordPress XML import file

From the Editor toolbar:

NEW — clear the form and start a new campaign

SAVE — save the current campaign state to disk

OPEN — reload a previously saved campaign

10

Troubleshooting

Generate button is greyed out

All required fields must have text before Generate activates. Check Business Name, Business Type, Main Service, Google Search Term, and Area 1.

"Model not ready" error

The AI model is bundled inside the EXE — no runtime or external download is required. If you see this error, the bundled model failed to extract on first launch. Close the app, restart your PC, and re-launch from Start. If it persists, run as administrator once to allow the model to unpack into %LocalAppData%\Programs\LockStack\.

Posts show a red ✗ badge

The post failed one of the QA checks. The red banner inside the post shows the exact reason — e.g. word-count:430<600 means the post is too short. Either re-run that post or increase the word count slider and generate again.

Generation is very slow

1 to 2 hours on a 4-core laptop is normal. The v3.4.0 bipolar pipeline runs 13 micro-task LLM calls per post (T=0.0 for JSON / schema, T=0.7 for prose). Closing other apps speeds it up slightly.

The app crashes on launch

Make sure you're on Windows 10 or 11 (64-bit). Try running as administrator if you get a permissions error on first launch.

11

FAQ

Does any data leave my computer?

No. The AI model runs locally on your machine. Your business name, posts, and everything you type stays on your machine. No telemetry, no account required.

Do I own the content?

Yes. Everything generated is yours. LockStack has no claim on it, never uploads it, never sees it.

Can I run multiple campaigns?

Yes, unlimited. Each campaign takes 1 to 2 hours. Use NEW to start fresh, or change the Area and run again to build a second geo-targeted campaign.

Why is postcode optional now?

Area 1 is all the engine needs to write locally relevant content. Postcode only affects the postalCode field in the JSON-LD schema tag — a tiny invisible detail. If you know it, add it; if not, leave it blank.

Can I run it on a Mac?

Not yet — this version is Windows 10/11 only.

How many campaigns can I run per day?

Unlimited. No caps, no per-campaign fees.