OA Defense Control Room
Editor's Tutorial
Who this is for: anyone who edits content on the OA Defense storefront — headlines, photos, pages, products, news, events, and dealers. No technical background needed. Everything happens in a normal web browser.
What "CMS" means: CMS (Content Management System — the admin website where you change what the public website says and shows). Ours is called the Control Room and lives at the /admin address of the storefront.
1The big picture
The storefront is split between two systems on purpose, so you can never accidentally break pricing or checkout while editing marketing content:
- The Control Room (this tutorial) owns everything a customer reads and sees: homepage copy, photos, pages, product descriptions, news, events, and which dealers appear in the dealer finder.
- WooCommerce (the e-commerce system behind checkout) owns everything a customer pays: current price, stock, tax, shipping, payment, and the final order record. You cannot change a price from the Control Room — price and stock fields are shown read-only.
flowchart LR YOU[You, the editor] --> CR[Control Room /admin] CR --> HS[Homepage Sections] CR --> PG[Pages] CR --> PR[Products, Variants, Categories] CR --> PO[News Posts] CR --> EV[Events] CR --> FD[FFL Dealers] HS --> SITE[Live storefront] PG --> SITE PR --> SITE PO --> SITE EV --> SITE FD --> SITE WOO[WooCommerce] -->|price and stock| PR SITE -->|checkout handoff| WOO
One idea worth learning once: saving is publishing. For homepage sections, products, and dealers, the moment you press Save, the live site changes. Pages, news posts, and events have an extra Draft/Published switch — see section 15.
2Logging in
- Open the storefront address and add
/adminto the end:https://oadefense-storefront.fly.dev/admin - Enter the editor email and password you were given.
- Press Log in. You land on the Control Room dashboard.
To log out, use the logout link, or open /admin/logout.
If you were sent a temporary demo link (an address ending in trycloudflare.com — a Cloudflare tunnel that previews the site through Cloudflare's network), the same trick works: add /admin to that address. Demo links expire; the fly.dev address is the stable one.
3A tour of the Control Room
The left sidebar lists every kind of content you can edit. Each entry is a resource — a list of records of one type:
- Homepage Sections — the building blocks of the homepage, footer, and site-wide SEO (Search Engine Optimization — the title and description search engines and browser tabs show).
- Pages — editorial pages like Our Story, Warranty, Contact, Careers.
- Products / Variants / Categories — the catalog: firearms and gear.
- Posts — news articles under
/news. - Events — range days, matches, and tours under
/events. - FFL Dealers — FFL (Federal Firearms License — the license a gun dealer holds; firearms must ship to a licensed dealer) records for the Find-a-Dealer page.
Every resource works the same way:
- Click the resource name → you get a list of records with a search box at the top.
- Click a record → you see its detail view (read-only).
- Click Edit → you get the form with all editable fields.
- Click Save → your change is stored and (if the record is published/enabled) live.
Fields shown greyed-out are read-only on purpose — usually because another system owns them (WooCommerce owns price/stock; the ATF dealer import owns dealer identity).
4The golden workflow
Use this same five-step loop for every edit, no matter the content type:
- Find the record: pick the resource in the sidebar, use the search box.
- Edit: open the record, press Edit, change the field.
- Save.
- Check the live page: open the public page in another browser tab and refresh it. The cheat sheet tells you which public address each record feeds.
- Fix or move on: if it doesn't read right in place, go back to the form and adjust. Editing is cheap; check your work on the real page, not just in the form.
Tip: keep two tabs open side by side — one on the Control Room form, one on the live page — and just refresh the live tab after each save.
5Editing the homepage (Homepage Sections)
The homepage is assembled from keyed sections. Each Homepage Section record has a key that tells the site where it appears. Never change the key of an existing section — the key is the address the homepage uses to find it. Change the words, images, and links freely.
| Section key | What it controls | Fields that matter |
|---|---|---|
hero | The big banner at the top ("Serve Something Greater") | Eyebrow (small line above the headline), Heading, Body, Image, and two CTA (Call To Action — a button with a label and a link) pairs: Link label / Link URL is the first button, Link2 label / Link2 URL is the second. |
operate | Intro to the "How we operate" block | Eyebrow, Heading, Body |
operate-discipline, operate-open, operate-trust | The three "How we operate" cards | Heading, Body |
spotlight | The featured-product showcase | Eyebrow, Image (overrides the product photo), Link label (the button text). The product's own name, summary, and specs come from whichever Product has its Featured box checked — see section 8. Turning this section's Enabled off hides the whole spotlight. |
firearms | Intro above the pistol lineup | Eyebrow, Heading, Body |
values | Intro to the values block | Eyebrow, Heading, Body |
values-people, values-journey | The two values cards | Heading, Body |
events | Intro above upcoming events | Eyebrow, Heading, Body |
newsletter | Email signup copy | Eyebrow, Heading, Body |
footer, seo | Not homepage blocks — see section 6 | — |
Worked example — change the hero headline and button
- Sidebar → Homepage Sections.
- Open the section whose Key is
hero, press Edit. - Change Heading to your new headline.
- Change Link label (button text) and Link URL (where it goes, e.g.
/firearms). - Save, then open the site homepage in another tab and refresh.
The Enabled checkbox hides/shows a section without deleting it — useful for seasonal content. The Position number orders sections; leave it alone unless you intend to reorder.
7Editing pages
Sidebar → Pages. Each Page record is one public URL (Uniform Resource Locator — the web address). The slug field is the last part of the address: the page with slug our-story is the live page /our-story.
Pages you'll find here: our-story, contact, warranty, shipping-returns, become-a-dealer, le-mil, careers, terms, privacy — plus the intro copy for landing pages: firearms, gear, events, news, find-a-dealer, and the gear category intros (holsters, magazines, sights-optics, accessories).
Fields on every page:
- Title — the page's main headline.
- Slug — the address. Do not change slugs on existing pages; printed materials and ad campaigns may link to them.
- Status — Draft (hidden from the public) or Published (live). See section 15.
- Eyebrow — the small label above the title.
- Summary — the short intro paragraph.
- SEO title / SEO description — what search engines show for this page; overrides the site default.
- Hero image — the banner photo.
- Body — the main content, written in the rich-text editor (see section 14).
8Products, variants, and categories
Products (sidebar → Products) are the pistols and gear. Each product's public page is /products/<slug>, e.g. /products/oa-2311-pro-elite. Editable marketing fields:
- Name, Tagline, Summary, Description — the copy on the product page and listing cards.
- Badge — the small flag on the product card (e.g. "New").
- Featured — check this to make the product the homepage spotlight (only one product should be featured at a time).
- Primary image + Gallery images — the product photography.
- Specs — a key/value table (e.g. "Caliber" → "9mm"). Each row becomes a line in the specs table on the product page.
- Kit includes — what's in the box.
- Category — which shelf it sits on (Firearms, Holsters, Magazines…).
- Requires FFL — automatically on for the Firearms category; turn it on manually for any other serialized item that must ship to a dealer.
Variants are the buyable versions of a product (finishes, configurations). You can edit the variant Name, SKU (Stock Keeping Unit — the inventory code that identifies one exact sellable item), and display Position. Price and In-stock are read-only — WooCommerce owns them; the sync action refreshes them (section 9).
Categories — you can edit the display Name and Tagline. The slug and kind are read-only because store policy (like FFL requirements) depends on them.
9Syncing a product to WooCommerce
When you've updated a product's marketing copy and want the WooCommerce listing to match, use the built-in safe sync:
- Open the product's detail view.
- Open the Actions menu and choose "Sync marketing copy and refresh Woo data".
- Confirm with Run safe sync.
What it does — and deliberately does not do:
- Pushes only approved marketing copy (name, descriptions) and the FFL flag to WooCommerce.
- Pulls current price and stock from WooCommerce back into the Control Room's read-only fields.
- Never pushes price, stock, tax, or anything money-related. It cannot.
After a sync, the product's Woo synced at timestamp updates. If something went wrong, the error appears in Woo sync error — copy that text to the developers if it isn't self-explanatory. A product needs its Woo product ID filled in (the matching listing's number in WooCommerce) for sync to work.
10News posts
Sidebar → Posts. These are the articles at /news; each post lives at /news/<slug>.
- Press Create new post.
- Fill Title; give it a Slug (lowercase words joined by hyphens, e.g.
range-day-recap-march). - Write a one-or-two-sentence Excerpt — this is the teaser on the news index page.
- Attach a Cover image and write the Body.
- Leave Status as Draft while writing. When ready: set Status to Published and set Published at to now (or a past date). Save.
A post only appears publicly when it is Published and its publish date has passed — a future date schedules it.
11Events
Sidebar → Events. These feed the /events page; each event lives at /events/<slug>. Same drill as posts, plus:
- Tag — the event type label shown on the card: "Range Day", "Tour", "Match".
- Location — free text, e.g. "Oak Ridge, NC".
- Starts at (required) and Ends at — the event dates/times.
Known quirk: event times currently display in UTC (Coordinated Universal Time — the universal reference clock), so an event starting near midnight can show the wrong calendar day. Avoid midnight-adjacent start times until this is fixed.
12FFL dealers
Sidebar → FFL Dealers. These records power the /find-a-dealer page and the dealer selection during firearm checkout.
Almost everything here is read-only by design: name, address, phone, license number, and coordinates come from the official ATF (Bureau of Alcohol, Tobacco, Firearms and Explosives — the federal agency that licenses dealers) data import. You cannot — and should not — hand-edit a dealer's identity.
You can edit the three OAD-managed judgments:
- Accepts transfers — check only after OAD has confirmed with the dealer that they accept incoming firearm transfers. This is the switch that makes a dealer selectable at checkout.
- Preferred — preferred dealers rank ahead of others in search results.
- Transfer fee (cents) — optional confirmed fee, entered in cents (a $25 fee is
2500). Never guess this; enter it only when the dealer has told you.
13Working with images
- Image fields show a file picker in Edit mode. Choose the file, then Save — the upload happens on save.
- Uploading a new image to a field replaces the old one.
- Use JPEG (Joint Photographic Experts Group — the standard photo format) for photos; PNG (Portable Network Graphics — the format that supports transparency) for logos/graphics.
- Wide, landscape-orientation photos work best for hero banners; roughly square works for cards and product shots.
- Keep files sensibly sized (under ~2 MB) — customers on phones pay for every megabyte.
- After saving, always check the live page: the site crops images to fit, and a photo with the subject at the edge can crop badly.
14Working with the rich-text editor
The Body field on pages, posts, events, and homepage sections uses a rich-text editor (a Word-like toolbar). Guidance:
- Use the toolbar for bold, italic, headings, quotes, lists, and links. Keep formatting light — the site's design does the visual heavy lifting.
- Pasting from Word or Google Docs can drag hidden formatting along. If pasted text looks off, paste without formatting instead (Cmd+Shift+V on Mac, Ctrl+Shift+V on Windows).
- To add a link: select the words, press the link button, paste the full address (including
https://for external sites, or a site path like/warrantyfor internal ones). - For CTA link fields (the Link URL boxes on homepage sections), use normal web addresses only. Anything that isn't an
http(s)address or a site path will be rejected on save — that's a safety feature, not a bug.
15Draft vs. Published
| Content type | How visibility works |
|---|---|
| Pages, Posts, Events | Have a Status field. Draft = invisible to the public (safe to work on over days). Published = live. Posts additionally need their Published at date to be in the past. |
| Homepage Sections | Have an Enabled checkbox instead. Unchecked = the block disappears from the homepage. Everything else takes effect the moment you save. |
| Products, Variants, Categories, Dealers | No draft state — saving is live. Make product edits carefully, or draft the copy elsewhere first. |
16Fields you should not change
- Homepage Section keys — the homepage finds each block by its key. Renaming a key makes that block vanish.
- Slugs on existing pages/products/posts/events — changing a slug changes the public address and breaks every existing link to it (ads, emails, search results). Choose slugs carefully at creation; leave them alone after.
- Category slug and kind — read-only anyway; commerce and FFL policy hang off them.
- Woo product/variant IDs — these pair a Control Room product with its WooCommerce listing. A wrong ID means a sync writes over the wrong listing. Only change with the developer's confirmation.
- Anything greyed out — it's read-only because another system is the source of truth.
Deliberately not editable in the CMS (ask the developers): navigation menu, logo, footer column links, cart/checkout wording, search page copy, and legal "last updated" stamps.
17Cheat sheet: "I want to change X"
| I want to change… | Go to… | Check it live at… |
|---|---|---|
| The big homepage banner / its buttons | Homepage Sections → key hero | / |
| The featured pistol on the homepage | Products → check Featured on the product; Homepage Sections → key spotlight for the frame around it | / |
| Footer blurb / Instagram / LinkedIn | Homepage Sections → key footer | any page, bottom |
| Browser-tab title / Google description | Homepage Sections → key seo (site default) or the specific Page's SEO fields | browser tab |
| Our Story / Warranty / Careers / Contact… | Pages → matching slug | /our-story, /warranty, … |
| Product photos, description, specs | Products → the product | /products/<slug> |
| Gear shelf intro copy | Pages → gear, holsters, magazines, sights-optics, accessories | /gear, /gear/holsters, … |
| Publish a news article | Posts → create, then Status = Published | /news |
| Announce a range day | Events → create, then Status = Published | /events |
| Make a dealer selectable / preferred | FFL Dealers → Accepts transfers / Preferred | /find-a-dealer |
| A price or stock level | Not here — change it in WooCommerce, then run the product's safe sync to refresh the display | product page |
18Troubleshooting
- "I saved but the live page didn't change." Hard-refresh the live tab (Cmd+Shift+R on Mac, Ctrl+Shift+R on Windows). If it's a page/post/event, confirm Status is Published and the publish date isn't in the future. If it's a homepage section, confirm Enabled is checked.
- "My link was rejected on save." CTA links must be normal web addresses (
https://…) or site paths (/firearms). This is deliberate protection. - "A homepage block disappeared." Its Enabled box is probably unchecked — or its key was edited. Check both; restore the original key exactly.
- "The sync action reported an error." Read Woo sync error on the product. Most common causes: missing/wrong Woo product ID, or WooCommerce credentials not configured yet. Pass the error text to the developers.
- "I can't edit a field." Greyed-out means another system owns it (Woo owns price/stock; the ATF import owns dealer identity). This is by design.
- "I deleted something by mistake." There is no undo for deletions — tell the developers right away; core records can be restored from seeds or backups. Prefer Draft/Enabled-off over Delete when you just want something hidden.
- "I'm locked out." Password resets are handled by the developers (the admin password is set at the server level).