feat: Tier B operator scaffolding — bundle, copy SoT, posts, emails
Pick up and finish yesterday's cut-off Tier B pass. - build/: PyInstaller scaffold (datatools.spec + launcher.py + hook-streamlit.py + README) — folder-mode bundle, locked 127.0.0.1, per-OS recipe - marketing/COPY.md: single source of truth for every customer-facing string — landing H1/sub/CTAs, demo CTAs, email subjects, Gumroad listing, banned phrases - marketing/community-posts/: 9 drafts (3 posts × 3 niches: bookkeeper, revops, shopify-pet) — story / tip / soft-offer - marketing/emails/: 18 drafts (Gumroad delivery + 5-touch onboarding × 3 niches), per-niche segmentation guidance - docs/NEXT-STEPS.md: flip 2.2 / 2.4 / 3.1 / 3.4 to done with pointers to the new assets; add Phase 0 inventory rows - .gitignore: narrow `build/` ignore so PyInstaller spec + launcher + hooks get tracked, only generated artifacts (build/build/, build/__pycache__/, build/dist/) stay ignored Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
32
marketing/community-posts/README.md
Normal file
32
marketing/community-posts/README.md
Normal file
@@ -0,0 +1,32 @@
|
||||
# Community posts
|
||||
|
||||
Three drafts per niche, each value-first, ready to personalize:
|
||||
|
||||
1. **`01-story.md`** — "Here's how I solved X." Concrete, narrative, no
|
||||
pitch in the body. The product gets one mention at the end, in
|
||||
context. Goes in subreddits / Slacks / forums where direct
|
||||
promotion is banned. Lead with usefulness; the link is dessert.
|
||||
|
||||
2. **`02-tip.md`** — A standalone tactical tip the reader can use
|
||||
*without* DataTools. The product appears as "if you don't want to
|
||||
do this by hand…" — earned, not pushed. Cross-post-safe.
|
||||
|
||||
3. **`03-soft-offer.md`** — The one post where the product is the
|
||||
subject. Goes in `/r/<niche>` "what are you working on" threads,
|
||||
IndieHackers launches, and niche newsletters that allow paid-tool
|
||||
posts. Still leads with the problem, not the features.
|
||||
|
||||
## Personalization checklist before posting
|
||||
|
||||
- [ ] Replace `{{your-name}}` and `{{your-context}}` in the opener
|
||||
- [ ] Match the community's tone (Reddit ≠ LinkedIn ≠ niche Slack)
|
||||
- [ ] Add a community-specific opener line ("Long-time lurker, first post" / "Saw the thread about X yesterday — figured I'd share")
|
||||
- [ ] Confirm the community's promo rules; if no-promo, drop the link from `01` / `02` and only mention "I built a thing, DM me if curious"
|
||||
- [ ] Vary the URL (use the niche-specific landing page, not the generic Gumroad URL)
|
||||
|
||||
## Cadence guidance
|
||||
|
||||
- Don't post all 3 drafts in the same community in the same week. Stagger:
|
||||
Week 1 → `01-story`. Week 4 → `02-tip`. Week 8 → `03-soft-offer`.
|
||||
- Reply to commenters within 24h. The post itself sells less than the
|
||||
comment thread that follows.
|
||||
39
marketing/community-posts/bookkeeper/01-story.md
Normal file
39
marketing/community-posts/bookkeeper/01-story.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# Bookkeeper · Post 1 — Story
|
||||
|
||||
**Where to post:** r/Bookkeeping, r/QuickBooks, AAT forums, ICB
|
||||
member groups, Bookkeeping Slacks/Discords.
|
||||
|
||||
**Format:** longish post, ~400 words. Subject line / title goes
|
||||
first; everything below is the body.
|
||||
|
||||
**Tone:** "fellow bookkeeper venting + sharing what worked" — not
|
||||
salesy, not preachy.
|
||||
|
||||
---
|
||||
|
||||
## Title
|
||||
|
||||
How I cut my month-end bank reconciliation from 4 hours to 30 minutes (the boring 3-step version)
|
||||
|
||||
## Body
|
||||
|
||||
I've been doing month-end reconciliation for {{your-client-count}} clients for {{your-years}} years and the part I hated most was the bank export cleanup. Not the reconciliation itself — the *cleanup before* the reconciliation.
|
||||
|
||||
You know the drill: client sends you a CSV from their bank. Half the dates are `MM/DD/YYYY`, the other half `DD-MM-YY`. The merchant column has trailing whitespace, weird unicode hyphens, and the same vendor spelled four ways ("Amzn Mktp", "AMAZON MARKETPLACE", "Amazon.com*1A2B3", "AMZN Mktplace"). QuickBooks chokes on the import, so you fix it by hand. Every. Single. Month.
|
||||
|
||||
Last quarter I sat down and wrote out the steps I do every single time. There were 11. I automated the 8 that were deterministic. Here are the 3 that matter most — you can do these with built-in tools, no purchase required:
|
||||
|
||||
**1. Normalize dates first, before anything else.**
|
||||
Excel's `TEXT(DATEVALUE(A2), "yyyy-mm-dd")` works for ~80% of bank exports. The other 20% have at least one row with a value Excel parses wrong (it'll silently swap day/month). Sort by date afterwards and *visually scan* for any row that's now in the wrong year — that's your tell.
|
||||
|
||||
**2. Standardize merchant names with a fuzzy match, not a regex.**
|
||||
A regex won't catch "Amzn Mktp" → "Amazon". A fuzzy-match function (Excel doesn't have one natively; Google Sheets has `=FUZZYMATCH` via add-ons) will. The threshold I use is 0.85 — high enough to avoid false positives, low enough to catch the spelling drift.
|
||||
|
||||
**3. Keep an audit trail of every change.**
|
||||
This is the one most bookkeepers skip and then regret 6 months later when the client asks "wait, why did you re-classify that?". Add a sidecar CSV: `original_value, new_value, rule_applied, timestamp`. Five columns, append-only, never delete.
|
||||
|
||||
Doing those three turned a 4-hour job into roughly 30 minutes for me. The rest I eventually wrapped into a desktop tool I built called DataTools (the audit trail thing was the bit I needed and couldn't find anywhere — figured other bookkeepers might want it too). It's $49 if you want to skip the spreadsheet wrangling, but the 3 steps above will get you most of the way without it.
|
||||
|
||||
Happy to share the audit-trail CSV template if anyone wants it — just reply.
|
||||
|
||||
— {{your-name}}
|
||||
27
marketing/community-posts/bookkeeper/02-tip.md
Normal file
27
marketing/community-posts/bookkeeper/02-tip.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# Bookkeeper · Post 2 — Tip
|
||||
|
||||
**Where to post:** LinkedIn (your own feed), AAT/ICB Facebook
|
||||
groups, accountancy newsletters' "tip submission" inboxes.
|
||||
|
||||
**Format:** short, ~150 words. Practical. Reads as "thing I learned"
|
||||
not "thing I'm selling".
|
||||
|
||||
---
|
||||
|
||||
## Title
|
||||
|
||||
The 30-second check that catches 90% of bank-export errors before they hit QuickBooks
|
||||
|
||||
## Body
|
||||
|
||||
If you do client bank reconciliations, do this once before every import:
|
||||
|
||||
Open the export. Sort by amount. Scroll to the bottom. Look at the totals row.
|
||||
|
||||
Most banks add a totals row at the bottom of the CSV that *isn't* a transaction. If you import it, QuickBooks treats it as a real entry and your books are off by exactly the value of the totals row — usually a five-figure number that takes you 40 minutes to track down.
|
||||
|
||||
Same trick catches blank rows the bank inserts as section breaks (especially Wells Fargo, Chase, and most UK challenger banks). One sort, one scroll, two seconds of looking — saves the rest of your evening.
|
||||
|
||||
If you're doing this for 20+ clients a month and want to automate the whole pre-import scrub (this trick + ~10 others), I built a $49 desktop tool called DataTools that does it: datatools.gumroad.com. No subscription, runs locally so client data stays on your machine.
|
||||
|
||||
— {{your-name}}
|
||||
39
marketing/community-posts/bookkeeper/03-soft-offer.md
Normal file
39
marketing/community-posts/bookkeeper/03-soft-offer.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# Bookkeeper · Post 3 — Soft offer
|
||||
|
||||
**Where to post:** IndieHackers "show what you're working on", r/SideProject,
|
||||
r/Bookkeeping (only in monthly "self-promo" threads — read each
|
||||
sub's rules), bookkeeping newsletter "tools" sections.
|
||||
|
||||
**Format:** ~250 words. Pitches the product but leads with the
|
||||
problem and is honest about the scope.
|
||||
|
||||
---
|
||||
|
||||
## Title
|
||||
|
||||
I built a desktop CSV cleanup tool for bookkeepers who hate the bank-export reconciliation grind
|
||||
|
||||
## Body
|
||||
|
||||
Quick context: I do {{your-context — e.g., "books for 12 small clients" or "side-bookkeeping for a few non-profits"}} and the part I dreaded most every month was cleaning bank exports before importing them to QuickBooks. Different bank, different format, every time.
|
||||
|
||||
I built **DataTools** — a desktop app (Mac/Win/Linux) that runs the same six cleanup steps every export needs:
|
||||
|
||||
- Normalizes dates, currencies, account-number formats
|
||||
- Fuzzy-matches merchant-name variants ("Amzn Mktp" = "Amazon")
|
||||
- Flags duplicate transactions across re-exported date ranges
|
||||
- Strips trailing whitespace, hidden chars, BOM markers — the stuff QuickBooks chokes on silently
|
||||
- Generates a per-file audit trail your client can open in Excel: every change, every rule that fired, timestamped
|
||||
- Splits oversized exports for tools with row limits
|
||||
|
||||
It runs **locally** — your client's bank data never goes to a server. (This was the whole reason I built it instead of using one of the cloud "data cleaning" SaaS tools.)
|
||||
|
||||
It's **$49 one-time**, no subscription, no per-client license. v1.x updates included.
|
||||
|
||||
If you want to try before you buy: there's a hosted demo with sample bank exports at the link below. The demo is identical to the desktop app — same UI, same six tools, just running in your browser on synthetic data.
|
||||
|
||||
→ datatools.gumroad.com (or the bookkeeper landing page: datatools.app/bookkeeper)
|
||||
|
||||
Happy to answer questions in the thread.
|
||||
|
||||
— {{your-name}}
|
||||
39
marketing/community-posts/revops/01-story.md
Normal file
39
marketing/community-posts/revops/01-story.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# RevOps · Post 1 — Story
|
||||
|
||||
**Where to post:** r/revops, r/sales, RevGenius Slack, Modern Sales Pros,
|
||||
Pavilion communities, LinkedIn (your own feed).
|
||||
|
||||
**Format:** ~400 words. Tactical war-story style. Don't pitch in the body.
|
||||
|
||||
---
|
||||
|
||||
## Title
|
||||
|
||||
We were paying HubSpot for 4,200 duplicate contacts. Here's the dedupe pipeline that caught them.
|
||||
|
||||
## Body
|
||||
|
||||
Last quarter I ran a count on our HubSpot instance: ~4,200 contacts that were almost-certainly the same person as another contact already in the system. Our HubSpot bill is per-marketing-contact, so this was a real number. ($X/month — pick your tier.)
|
||||
|
||||
The problem is that HubSpot's native "find duplicates" tool is exact-match-only on a small set of fields. It misses:
|
||||
|
||||
- "Sarah O'Brien" vs "Sarah Obrien" (apostrophe / no-apostrophe)
|
||||
- "+1 (415) 555-0143" vs "415-555-0143" vs "4155550143" (phone formats)
|
||||
- "sarah@acme.com" vs "Sarah@acme.com" (case)
|
||||
- Same person from a LinkedIn scrape (no phone) + a webform fill (no LinkedIn URL) + a trade-show import (only email + company)
|
||||
|
||||
Here's the 4-step pipeline I run before *every* HubSpot import now. You can build the first 3 with Python + pandas + rapidfuzz; the 4th is the one that matters and is the easiest to skip:
|
||||
|
||||
**Step 1 — Normalize before comparing.** Lowercase emails, strip phone formatting to E.164, trim whitespace, normalize unicode (NFKC). This alone catches ~40% of dupes.
|
||||
|
||||
**Step 2 — Fuzzy-match on name + company, blocked by email domain.** Don't fuzzy-match across the whole list (O(n²) and full of false positives). Block by email domain first — only compare contacts within the same company. Use rapidfuzz token-set ratio at threshold 85.
|
||||
|
||||
**Step 3 — Cross-source merge logic.** When LinkedIn-source and webform-source records match, *the LinkedIn one wins on title/company* (more recent), *the webform one wins on phone/email* (verified). Document this rule somewhere your team can read it.
|
||||
|
||||
**Step 4 — Confidence tiers, not yes/no.** Don't auto-merge anything below 95% confidence. Auto-merge 95-100. Queue 85-95 for manual review. Drop everything below 85. The manual queue is the magic — it catches the cases the algorithm doesn't dare touch and trains you on what your data actually looks like.
|
||||
|
||||
I eventually wrapped all this into a desktop tool I called DataTools because I got tired of re-running the script every campaign. Local-only, $49 if anyone wants it: datatools.app/revops. But the 4-step framework above is the real takeaway — works regardless of what tool you use.
|
||||
|
||||
What's your dedupe pipeline look like?
|
||||
|
||||
— {{your-name}}
|
||||
27
marketing/community-posts/revops/02-tip.md
Normal file
27
marketing/community-posts/revops/02-tip.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# RevOps · Post 2 — Tip
|
||||
|
||||
**Where to post:** LinkedIn, RevGenius Slack #tips channel,
|
||||
RevOps Co-op, Modern Sales Pros.
|
||||
|
||||
**Format:** ~150 words. Tactical. One idea, one sentence-of-pitch
|
||||
at the bottom.
|
||||
|
||||
---
|
||||
|
||||
## Title
|
||||
|
||||
The 30-second pre-import check that catches LinkedIn-scrape duplicates before they hit HubSpot
|
||||
|
||||
## Body
|
||||
|
||||
Before you import a LinkedIn scrape (Apollo, Lusha, Cognism — same problem) into HubSpot:
|
||||
|
||||
Open the file. Sort by `email`. Look for blanks.
|
||||
|
||||
LinkedIn-sourced rows often have *no email* — just name + company + LinkedIn URL. If you import them as-is, HubSpot creates a new contact for each one. The next time someone fills your webform with the same name + company, HubSpot creates *another* new contact, because there's no key to match on.
|
||||
|
||||
Two-minute fix: before import, generate a synthetic dedupe key as `lower(first_name)|lower(last_name)|domain(company_url)`. Sort by it. Anything with >1 row is a likely dupe — review and merge before HubSpot ever sees it.
|
||||
|
||||
If you're doing this monthly across multiple lead sources and want to automate it (plus phone normalization, fuzzy matching, the whole pipeline), I built a $49 desktop tool: datatools.app/revops. Local — your prospect list never goes to a server.
|
||||
|
||||
— {{your-name}}
|
||||
35
marketing/community-posts/revops/03-soft-offer.md
Normal file
35
marketing/community-posts/revops/03-soft-offer.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# RevOps · Post 3 — Soft offer
|
||||
|
||||
**Where to post:** IndieHackers, r/revops monthly self-promo,
|
||||
RevGenius #tools-and-software, LinkedIn (your own feed).
|
||||
|
||||
**Format:** ~250 words.
|
||||
|
||||
---
|
||||
|
||||
## Title
|
||||
|
||||
DataTools — a $49 desktop CSV pipeline for the lead-list cleanup you do before every HubSpot import
|
||||
|
||||
## Body
|
||||
|
||||
Built this for myself first. {{your-context — e.g., "I run RevOps at a 30-person SaaS"}} and the part of the job I dreaded was the pre-import scrub: LinkedIn export + Apollo pull + last quarter's webform list, deduped against each other and against what's already in HubSpot. Six tabs in a Google Sheet, regexes I half-remember, vlookups, an hour and a half.
|
||||
|
||||
**DataTools** does the six steps as one pipeline:
|
||||
|
||||
- **Format standardizer** — phones to E.164 (50+ country codes, per-row country awareness), emails lowercased, URLs canonicalized
|
||||
- **Dedupe** — fuzzy matching with confidence tiers (95+ auto, 85-95 manual queue, <85 dropped), blocked by email domain so it scales to 50k-row lists
|
||||
- **Gate** — block bad rows from your import with a per-rule report ("142 rows missing email, 38 rows with malformed phones, 12 rows with corporate-blacklist domains")
|
||||
- **Text cleaner** — strips hidden chars, BOMs, weird unicode
|
||||
- **Analyzer** — finds problems before you process (mixed encodings, inconsistent delimiters, near-duplicate rows)
|
||||
- **Splitter** — chunk huge files for tools with row limits
|
||||
|
||||
Runs **locally** — Mac/Win/Linux. Your prospect data never goes to a server. (This was the actual reason I shipped it instead of using Clearbit / cloud tools — legal didn't want third-party touching prospect data after the {{2024 / 2025}} compliance review.)
|
||||
|
||||
**$49 one-time.** No subscription. No per-record fee. v1.x updates included.
|
||||
|
||||
Demo (with synthetic data) and download: datatools.app/revops
|
||||
|
||||
Happy to answer questions in the thread.
|
||||
|
||||
— {{your-name}}
|
||||
49
marketing/community-posts/shopify-pet/01-story.md
Normal file
49
marketing/community-posts/shopify-pet/01-story.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# Shopify-pet · Post 1 — Story
|
||||
|
||||
**Where to post:** r/shopify, r/ecommerce, Shopify community forums,
|
||||
pet-business Facebook groups (Pet Industry Distributors Association,
|
||||
Pet Boss Nation), Klaviyo community Slack.
|
||||
|
||||
**Format:** ~400 words. Owner-to-owner tone.
|
||||
|
||||
---
|
||||
|
||||
## Title
|
||||
|
||||
Why my Klaviyo flows were skipping 18% of my customers (and the CSV cleanup that fixed it)
|
||||
|
||||
## Body
|
||||
|
||||
Background: I run {{your-store-context — e.g., "a 4-year-old pet supplements store doing about $X/month"}}. Last summer I noticed the open rate on my "abandoned cart" Klaviyo flow was lower than usual. Klaviyo's dashboard said the flow was firing fine. Took me a week to figure out the actual problem:
|
||||
|
||||
**Klaviyo was silently dropping 18% of my customers because their phone numbers weren't formatted correctly.** Not "wrong" — just not in the format Klaviyo's SMS module accepts. So the SMS part of the flow never sent, and the email-only fallback didn't kick in for half of those.
|
||||
|
||||
The root cause was the Shopify customer export. Customers had entered their phones every which way:
|
||||
|
||||
- `(415) 555-0143` — works
|
||||
- `415.555.0143` — Klaviyo: "invalid"
|
||||
- `4155550143` — Klaviyo: "invalid for this country"
|
||||
- `+44 20 7946 0958` — works only if the country field is set; for ~30% of my customers it wasn't
|
||||
- `415-555-0143 ext 12` — Klaviyo: "invalid"
|
||||
|
||||
The fix is a one-time CSV cleanup before each Klaviyo sync:
|
||||
|
||||
**1. Pull the Shopify customer export.**
|
||||
Customers > Export > "All customers" > CSV.
|
||||
|
||||
**2. Run every phone number through E.164 normalization.**
|
||||
E.164 is the international format Klaviyo (and basically every other SMS platform) wants: `+14155550143`. Python's `phonenumbers` library does this if you're scripting; spreadsheet add-ons exist but they're painful at >5k rows.
|
||||
|
||||
**3. Default the country code per row.**
|
||||
If the customer's address country is "United States", default the phone country to US. This catches the rows that are missing `+1` but are obviously American.
|
||||
|
||||
**4. Drop or quarantine anything still un-parseable.**
|
||||
Don't import broken rows hoping Klaviyo will figure it out. It won't.
|
||||
|
||||
**5. Re-import the cleaned CSV to a Shopify customer segment** (or push directly to Klaviyo via their API).
|
||||
|
||||
I eventually wrapped this whole pipeline into a desktop app called DataTools because doing it monthly was tedious. $49, runs locally so customer data stays on my machine, datatools.app/shopify-pet if you're curious. But the 5 steps above are what actually matters — works regardless of tool.
|
||||
|
||||
Anyone else seeing low SMS deliverability? I'd bet money it's this.
|
||||
|
||||
— {{your-name}}
|
||||
28
marketing/community-posts/shopify-pet/02-tip.md
Normal file
28
marketing/community-posts/shopify-pet/02-tip.md
Normal file
@@ -0,0 +1,28 @@
|
||||
# Shopify-pet · Post 2 — Tip
|
||||
|
||||
**Where to post:** LinkedIn, Shopify Discord, pet-business Facebook
|
||||
groups, niche e-comm newsletters' "tip" inboxes.
|
||||
|
||||
**Format:** ~150 words.
|
||||
|
||||
---
|
||||
|
||||
## Title
|
||||
|
||||
The hidden character in your Shopify customer export that breaks Klaviyo imports (and how to spot it)
|
||||
|
||||
## Body
|
||||
|
||||
Open your Shopify customer export. Look at the email column.
|
||||
|
||||
Some of your emails have an invisible character in them — usually a zero-width space (`U+200B`) or a non-breaking space (`U+00A0`) — copied in from a customer typing on their phone. Visually identical to a normal email. Klaviyo treats them as different addresses, so:
|
||||
|
||||
- Your "duplicate customer" check passes when it shouldn't
|
||||
- The customer gets emailed twice
|
||||
- Your unsubscribes don't propagate (the unsub list has the *clean* email; the next campaign send reaches them via the *invisible-char* email)
|
||||
|
||||
Spot it: in Excel, paste your email column into a single cell with `=LEN(A2)` next to it. Anything that's longer than the visible character count has a hidden char in it.
|
||||
|
||||
If you want to automate the cleanup (plus phone normalization, dedupe, the whole pre-Klaviyo scrub), I built a $49 desktop tool: datatools.app/shopify-pet. Local — your customer list never leaves your computer.
|
||||
|
||||
— {{your-name}}
|
||||
35
marketing/community-posts/shopify-pet/03-soft-offer.md
Normal file
35
marketing/community-posts/shopify-pet/03-soft-offer.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# Shopify-pet · Post 3 — Soft offer
|
||||
|
||||
**Where to post:** IndieHackers, r/shopify monthly self-promo, Shopify
|
||||
community "apps & tools" forum, pet-business newsletters.
|
||||
|
||||
**Format:** ~250 words.
|
||||
|
||||
---
|
||||
|
||||
## Title
|
||||
|
||||
DataTools — a $49 desktop tool that gets your Shopify customer export Klaviyo-import-ready in 30 seconds
|
||||
|
||||
## Body
|
||||
|
||||
Built this for my own store and figured fellow Shopify owners might want it.
|
||||
|
||||
The problem: Shopify's customer CSV export is *almost* Klaviyo-ready, but not quite. Phones in five different formats. Hidden whitespace in addresses. Duplicate-customer rows from the same person ordering twice with slightly different emails. Country fields blank for half your international orders. You either fix it by hand every month or accept that ~15-20% of your list is broken.
|
||||
|
||||
**DataTools** is six CSV tools as one pipeline:
|
||||
|
||||
- **Format standardizer** — phones to E.164 (Klaviyo-ready), addresses normalized, currencies in your store's locale
|
||||
- **Dedupe** — fuzzy matching catches "Sarah O'Brien" = "sarah obrien" = "Sarah OBrien" before they become 3 customers in Klaviyo
|
||||
- **Text cleaner** — strips zero-width spaces, BOMs, weird unicode the customer typed on their phone
|
||||
- **Gate** — quarantine rows that won't survive the import (missing email, malformed phone) so you know what got dropped and why
|
||||
- **Analyzer** — runs first, tells you what's wrong before you start fixing
|
||||
- **Splitter** — chunks oversized exports for tools with row limits
|
||||
|
||||
Runs **locally** on Mac/Win/Linux. Customer data never goes to a server — that was the whole point. No subscription. **$49 one-time**, v1.x updates included.
|
||||
|
||||
Demo (with synthetic data) and download: datatools.app/shopify-pet
|
||||
|
||||
Built by a fellow Shopify store owner. Happy to answer questions in the thread.
|
||||
|
||||
— {{your-name}}
|
||||
Reference in New Issue
Block a user