← 一覧へ

Community Card Pl...

私が副業で月商4,000ドル(約60万円)を達成した方法
月商 $4,000 · 創業者2人 · 従業員0人 · Stevensville
Rachel Smith(Founder, Community Card Playbook)· 創業 November 2024 · 記事掲載 October 17th, 2025 · www.communitycardplaybook.com · 元の記事

何の商売か
誰が地域に根差した中小零細企業の経営者、個人事業主、不動産エージェント(米国中心)。高騰するデジタル広告費に代わる、費用対効果の高い集客方法を探している。
何のために自社だけでは手が出せない高額なダイレクトメールを、複数企業で費用を分担することで格安に実施し、地域住民全員に見込み客としてリーチしたい。新たなリード(見込み客)を獲得し、売上を増やしたい。
何を買うか共同ダイレクトメール(相乗りDM)の運営方法を学ぶオンラインプログラム。看板商品「Community Card Playbook」の会員サービス。詳細は「売値は確認できず」だが、ビジネスモデルは複数の地元企業から広告掲載料を集め、大型DMハガキ1枚に複数社の広告を掲載して郵送する形。

創業者が元々行っていた共同ダイレクトメール事業の経験を体系化し、その運営方法を教えるメンバーシップ(会員制プログラム)へと発展した。集客はポッドキャスト出演、YouTube、SNS、Meetupグループ(総計1万名以上)の活用、既存の地元ビジネスとの関係構築(商工会議所など)。広告予算はほとんど使わず、「他人のオーディエンス」(OPA: Other People's Audiences)戦略を重視。月間利益4,000ドル(約60万円)は2025年10月の記事時点の自己申告。創業者は2人、従業員は0人。

売値の出典: 売値は確認できず(公式サイトにプログラム料金の記載が見当たらないため)(2026-10-14 取得)

Who are you and what business did you start?

My name is Rachel, and together with my husband Dalton, we run Big Sky Automation Services, LLC—home of the Community Card Playbook. We help everyday entrepreneurs, real estate agents, and local business owners turn postcards into powerful marketing tools that generate leads for free. Our system shows people how to launch a side hustle with $0 out-of-pocket costs and grow it into a sustainable business. What makes our business special is how simple and repeatable it is. We’ve taken something as old-fashioned as direct mail and reimagined it as a modern, scalable system. The Community Card Playbook is built on real-world experience—what we actually use in our own marketing agency—so members get step-by-step scripts, proven designs, and a supportive community that helps them succeed faster. Today, our Community Card Playbook consistently generates $4,000 in profit each month, while our direct-mail system helps businesses all over the U.S. grow without breaking their ad budgets My image

How do you come up with the idea for Community Card Playbook?

The idea for the Community Card Playbook was really a mix of influences. We’d been following Russell Brunson’s strategies, bouncing ideas with our business coach, and even watching a YouTuber who shared creative ways to launch low-cost businesses. The pieces all came together when we realized that local businesses were struggling to afford direct mail campaigns on their own. If we could offer them a much more affordable, shared solution, everyone would win. There absolutely was an “aha” moment—when we realized these low-cost postcards could act as our perfect foot-in-the-door offer with business owners. As marketers, there’s always resistance when you’re new and trying to earn trust. But if we came to them with something like super affordable direct mail, suddenly the conversation changed. Business owners were far more likely to say yes, and once they did, they naturally wanted to know what else we could do—opening the door to bigger, long-term opportunities. This was different from other business ideas we had because, up until then, we were mostly focused on digital services—AI, SEO, AEO, and websites. My background is in sales, marketing, and mentoring, while Dalton’s expertise is in technology and automation. Together, we had the perfect skill set to bring this idea to life. We validated it almost instantly. We sent a few messages to business owners we somewhat knew, plus some brand-new businesses we had never spoken to. Within three days, we had the first card completely filled and ready to send. That was all the proof we needed that the Community Card Playbook wasn’t just a good idea—it was the right one.

How did you build the initial version of Community Card Playbook?

Step-by-step process for how we built the first version of our postcard product The first version of our postcard business was built super lean and super scrappy — no developers, no software, just Canva and a simple idea. Step 1: Research + choose the postcard format I started by researching USPS Every Door Direct Mail to understand sizes, eligibility, and costs. I chose an oversized 6.5x12 postcard because it stands out in the mailbox and gets crazy-high visibility. Step 2: Build the first layout in Canva I opened Canva and created the first layout completely from scratch. I divided it into sections for each business, added placeholders, picked fonts and colors, and mocked up both sides of the card. My only cost at this stage was a $12.99 Canva subscription. Step 3: Create a list of local businesses Using Google Maps, I built a list of businesses that rely on local exposure — restaurants, salons, gyms, cleaners, coffee shops, auto shops, etc. I gathered their contact info and wrote a simple pitch. Step 4: Walk into businesses and sell spots I printed a rough mockup from Canva and visited businesses in person. My pitch was simple: multiple businesses split the cost of one oversized postcard, making it an affordable way to get in front of every household in their area. Step 5: Collect payments and logos When a business said yes, I collected payment via PayPal/Stripe, requested their logo, and dropped it into the Canva design. The card filled up spot-by-spot. Step 6: Send the final design to print Once the card was full, I exported the design and sent it to a print shop that handles EDDM mailing. They took care of printing, bundling, and delivering it to the post office. Step 7: Repeat and refine After the first card went out, we immediately started prepping the next one. We refined the pitch, improved the layout, and kept iterating. Starting costs Just $12.99 for Canva. That was literally it. No website, no developers, no equipment, no patents. The model is intentionally low-cost. Business model At first, the model was simple: sell multiple ad spots on one postcard and use shared space to lower the price for each business. Over time, it evolved into a repeatable system and coaching program where we teach others how to run this same model in their own cities. Financing We didn’t need outside financing. The startup costs were so low that we self-funded everything. Once we sold the first few spots on the card, the project became cash-flow positive immediately. Tools used Canva, PayPal/Stripe, Google Sheets, Google Maps, and a print shop that handles EDDM mailing. How long it took to build the first version About two weeks — from idea, to design, to selling spots, to sending the first card to print. Experience building it Very scrappy but surprisingly straightforward. The hardest part was confidence — walking into businesses and pitching. But once a few people said yes, momentum built fast. It turned out to be much easier and more scalable than we expected.

How did you launch Community Card Playbook and get initial traction?

We launched these postcards in the simplest way possible—by putting ourselves out there. We started by sending a handful of messages to people we knew (and some we didn’t), making a few social media posts, and showing up at every chamber of commerce event we could. Building those relationships with local business owners and the chamber was incredibly helpful. When we shared our idea, people were genuinely excited because we were offering something they hadn’t seen before: a super affordable way to get their business into thousands of homes through direct mail. Our very first sale was to a local dentist. We had met him briefly, stopped by his office, and told him a little about what we were working on. At first, he said he “might be interested,” but a couple of weeks later, when we officially decided to launch the postcards, I sent him a message. He immediately bought 4 of the 16 available spots and even prepaid for three future mailings. That one in-person meeting and one follow-up message turned into $1,605 in revenue from a single client. From there, we kept momentum going by shooting out a few Facebook messages and continuing to talk with local business owners. It took less than 24 hours to make our first sale. The timing was almost surreal—we were on our way to Oregon for a month-long vacation, listening to one of our favorite YouTubers talk about something similar. By the time we arrived after a 14-hour drive, I sent that message to the dentist the next morning, and just like that, the business was real. One of the biggest lessons we learned is something Zig Ziglar said best: “You can get everything you want in life if you just help enough other people get what they want.” This business worked because we weren’t just selling ads—we were giving business owners a way to finally afford direct mail. When they saw how it could help them grow, they were eager to work with us. That mindset—focusing on helping others win first—has shaped everything we’ve done since.

What was the growth strategy for Community Card Playbook and how did you scale?

Over time, our business has evolved from running postcards ourselves to building a membership where we teach others how to do the same. It’s been an honor to watch entrepreneurs across the country take what we’ve built and create their own success stories. Sharing knowledge has become one of our biggest passions. To grow our membership, we’ve leaned heavily into a strategy we call OPA—Other People’s Audiences. Instead of trying to build everything from scratch, we’ve put ourselves in front of audiences that were already aligned with what we do. For example, we’ve been featured on two podcasts so far, both of which created massive exposure for our community. One of the highlights was appearing on our favorite YouTuber’s podcast—the very person who influenced part of our original idea. That episode alone reached nearly 30,000 people who were already interested in marketing, side hustles, and entrepreneurship. Many of them joined our membership because they saw firsthand how powerful the system could be. Beyond podcasts, we’ve used YouTube videos, social media, and six Meetup groups we own, totaling over 10,000 members. Sending regular email blasts to these groups has allowed us to connect with motivated entrepreneurs who are already looking for community and proven ways to grow. What readers can take away from this is simple: you don’t always need a massive audience of your own to grow your business. If you can find ways to get in front of the right people through OPA—whether that’s podcasts, newsletters, local groups, or collaborations—you can shortcut years of effort. Our recommendation to aspiring entrepreneurs: Focus less on building the biggest audience possible and more on finding the right audiences to share your story with. Partner with people who already have the trust of the community you want to serve. Not only will you gain exposure, but you’ll also build credibility much faster.

What were the biggest lessons learned from building Community Card Playbook?

Starting and growing these postcards and our membership has taught us more than we ever imagined—not just about business, but about ourselves. The Good Decisions: One of the best decisions we made was focusing on affordability and accessibility. By offering a solution that small businesses could actually afford, we removed barriers and earned trust quickly. Partnering with chambers of commerce and leveraging Other People’s Audiences (OPA) also gave us massive growth without needing a huge advertising budget. The Hard Lessons: Of course, there were challenges. At first, we underestimated how much education was needed—many business owners had never heard of a co-op postcard before, so we had to learn to explain it clearly and simply. We also learned that timing matters; sometimes we’d pitch too early or too late, and we’d miss an opportunity. Another big lesson was to not try to do everything ourselves—delegating and using automation kept us from burning out. Forces Beyond Our Control: We were lucky in a way—timing was on our side. As digital ad costs kept climbing, businesses were desperate for affordable alternatives. The postcard system felt fresh again, and because we tied it into digital tools, it stood out even more. Habits & Skills: My sales and mentoring background combined with Dalton’s tech and automation skills created a powerful balance. We leaned on habits like consistent networking, daily outreach (even just a few messages), and documenting everything so we could teach it later. Our Top Tips: Focus on solving a real pain point, not just selling a product. Leverage OPA—get in front of audiences who already trust someone else. Keep your offer ridiculously simple; complexity kills momentum. Remember that the first “yes” is the hardest—after that, momentum builds fast. And most importantly, adopt Zig Ziglar’s philosophy: “You can get everything in life you want, if you will just help enough other people get what they want.” Inspiration: We started with no network, no local connections, and no big budget. But by helping other businesses win first, we built something sustainable that has grown into a nationwide membership. If we can do this from scratch, anyone willing to learn, serve, and stay consistent can too.

What platform/tools does Community Card Playbook use?

ChatGPT Platform 33 using HighLevel Platform 11 using Canvas LMS Platform 3 using Canva Design 664 using YouTube Social Media 1,053 using TikTok Social Media 277 using Facebook Social Media 19 using Stripe Payments 782 using PayPal Payments 758 using Google Drive Other 458 using newDocumentReady(function () { $(".database-result-bottom").unbind().click(function() { $(this).find(".database-result-bottom-contents").toggle(); }) // Mobile DB view toggle — switch between the compact row list (default) // and the rich card view, remembered in localStorage. Instant, no reload. // Leading ';' guards against ASI: the preceding statement ends in `})`. ;(function () { var group = document.querySelector('.db-view-toggle-group'); if (!group) return; var rowsPanel = document.getElementById('db-view-rows'); var cardsPanel = document.getElementById('db-view-cards'); function applyView(view) { var isCards = view === 'cards'; if (cardsPanel) cardsPanel.classList.toggle('hidden', !isCards); if (rowsPanel) rowsPanel.classList.toggle('hidden', isCards); group.querySelectorAll('.db-view-toggle').forEach(function (b) { b.classList.toggle('db-view-toggle-active', b.dataset.view === view); }); } var saved = 'rows'; try { saved = window.localStorage.getItem('dbMobileView') || 'rows'; } catch (e) {} applyView(saved === 'cards' ? 'cards' : 'rows'); group.querySelectorAll('.db-view-toggle').forEach(function (b) { b.addEventListener('click', function () { var v = b.dataset.view; try { window.localStorage.setItem('dbMobileView', v); } catch (e) {} applyView(v); }); }); })(); // Search UX: debounced auto-submit + global "/" focus shortcut. // Server-side pg_search is GIN-indexed and returns in <50ms; combined // with the page render, total feedback after the debounce window is // ~500ms — close enough to "live" without an XHR/Turbo refactor. var searchInput = document.getElementById('search'); if (searchInput) { var debounceTimer = null; var lastSubmittedValue = searchInput.value; searchInput.addEventListener('input', function () { clearTimeout(debounceTimer); debounceTimer = setTimeout(function () { // Don't submit if the value hasn't changed (e.g. arrow keys). if (searchInput.value === lastSubmittedValue) return; lastSubmittedValue = searchInput.value; searchInput.form && searchInput.form.submit(); }, 350); }); // Enter still submits immediately — short-circuits the debounce. searchInput.addEventListener('keydown', function (e) { if (e.key === 'Enter') { e.preventDefault(); clearTimeout(debounceTimer); searchInput.form && searchInput.form.submit(); } }); } // Global "/" shortcut to focus search — GitHub/Linear pattern. document.addEventListener('keydown', function (e) { if (e.key !== '/' || e.metaKey || e.ctrlKey || e.altKey) return; var t = e.target; if (t && (t.tagName === 'INPUT' || t.tagName === 'TEXTAREA' || t.isContentEditable)) return; var s = document.getElementById('search'); if (s) { e.preventDefault(); s.focus(); s.select(); } }); function prettySliderValue(func, value) { var n = Math.round(Number(value)); if (func == "money") { if (n >= 1000000000) return "$" + (n / 1000000000).toFixed(n % 1000000000 === 0 ? 0 : 1) + "B"; if (n >= 1000000) return "$" + (n / 1000000).toFixed(n % 1000000 === 0 ? 0 : 1) + "M"; if (n >= 1000) return "$" + (n / 1000).toFixed(n % 1000 === 0 ? 0 : 1) + "K"; return "$" + numberWithCommas(n); } else if (func == "daystomonths") { return (n / 30) + " months"; } else if (func == "hours") { return n + " hours"; } else { return n; } } function getInitialSliderValues(el) { var initial = el.dataset.initial; var defMin = Number(el.dataset.defaultmin); var defMax = Number(el.dataset.defaultmax); if (initial) { var parts = initial.split("|"); var a = parts[0] === "" ? defMin : Number(parts[0]); var b = parts[1] === "" ? defMax : Number(parts[1]); return [a, b]; } return [defMin, defMax]; } function createTwoProngedSlider(id) { var el = document.querySelector(id); if (!el || el.noUiSlider) return; var min = Number(el.dataset.min); var max = Number(el.dataset.max); var step = Number(el.dataset.step); var cleanfunc = el.dataset.cleanfunc; var values = getInitialSliderValues(el); var container = el.closest(".range-filter") || el.parentElement; var input = container.querySelector('input[type="hidden"]'); var label = container.querySelector(".preview-label"); noUiSlider.create(el, { start: values, connect: true, step: step, range: { min: min, max: max }, behaviour: "tap-drag" }); el.noUiSlider.on("update", function(vals) { var lo = Math.round(Number(vals[0])); var hi = Math.round(Number(vals[1])); if (label) label.textContent = prettySliderValue(cleanfunc, lo) + " – " + prettySliderValue(cleanfunc, hi); if (input) input.value = lo + "|" + hi; }); el.noUiSlider.on("change", function() { var form = el.closest("form"); if (form) form.submit(); }); } createTwoProngedSlider("#revenue-slider"); createTwoProngedSlider("#starting-costs-slider"); createTwoProngedSlider("#time-to-revenue-slider"); createTwoProngedSlider("#min-hours-per-week"); createTwoProngedSlider("#market-size"); createTwoProngedSlider("#startup-costs"); createTwoProngedSlider("#case-studies"); $(".mobile-filters-applied-button").click(function() { $(".database-filters").addClass("inView") }) $(".close-mobile-filters").click(function() { $(".database-filters").removeClass("inView") }) // Explore "More filters" — reveal/hide the secondary filter pills. var moreFiltersToggle = document.getElementById("explore-more-filters-toggle"); if (moreFiltersToggle) { moreFiltersToggle.addEventListener("click", function () { var panel = document.querySelector(".explore-secondary-filters"); if (!panel) return; var nowHidden = panel.classList.toggle("hidden"); moreFiltersToggle.setAttribute("aria-expanded", String(!nowHidden)); }); } // Infinite scroll lives in its OWN init block below (initSSInfiniteScroll), // deliberately decoupled from this newDocumentReady callback. Anything that // throws above (a slider lib that didn't load from CDN, a jQuery plugin, // etc.) would otherwise abort the rest of THIS callback and silently kill // infinite scroll — the "only works on a hard reload" bug. Keeping it // separate means nothing here can take it down. }); // ---- Infinite scroll (pro/admin/free-access; table + tile views) ---- // Driven off Kaminari's next-page URL, which the partial renders into // #infinite-scroll-sentinel only when the visitor is eligible. We fetch the // next full page, lift out the children of its .database-append-target // container (<tbody> rows for the table view, tiles for the grid views), // append them, then chain to that page's own sentinel URL. DOMParser does // NOT execute the fetched page's scripts, so only content nodes are added — // sliders/search/PostHog never re-run. The sentinel is absent for non-pro // visitors, so this whole block no-ops for them and their paywall is intact. // // Idempotent: guarded by sentinel.dataset.ssInfiniteInit so re-running on // pageshow (bfcache/back-forward restore, where DOMContentLoaded never fires) // can't double-observe an already-wired sentinel. function initSSInfiniteScroll() { var sentinel = document.getElementById('infinite-scroll-sentinel'); if (!sentinel || !sentinel.dataset.nextUrl) return; if (sentinel.dataset.ssInfiniteInit === '1') return; sentinel.dataset.ssInfiniteInit = '1'; // The "database" view renders TWO append targets — the mobile card list // and the desktop table tbody (one is display:none per viewport). Append // to both so infinite scroll works no matter which is visible. Tile views // have a single target. containers[0] drives the loaded-count readout. var containers = Array.prototype.slice.call(document.querySelectorAll('.database-append-target')); if (!containers.length) { delete sentinel.dataset.ssInfiniteInit; return; } var container = containers[0]; // Infinite scroll is live — hide the prev/next fallback for JS clients. var paginate = document.querySelector('.paginate'); if (paginate) paginate.style.display = 'none'; var numResults = document.querySelector('.num-results'); var loadingEl = sentinel.querySelector('.infinite-scroll-loading'); var nextUrl = sentinel.dataset.nextUrl; var loading = false; // Item nodes only — tile partials (e.g. _video) emit a sibling <style> // per render; those are global CSS we already have, so skip them when // appending and counting. function itemNodes(root) { return Array.prototype.filter.call(root.children, function (n) { return n.tagName !== 'STYLE' && n.tagName !== 'SCRIPT'; }); } function updateCount() { if (!numResults) return; var count = itemNodes(container).length; // Keep the "of N …" suffix; just bump the leading loaded-count. numResults.textContent = numResults.textContent.replace(/Showing\s+[\d,]+/, 'Showing ' + count.toLocaleString()); } function loadMore() { if (loading || !nextUrl) return; loading = true; if (loadingEl) loadingEl.style.display = ''; fetch(nextUrl, { headers: { 'X-Requested-With': 'XMLHttpRequest' } }) .then(function (r) { return r.text(); }) .then(function (html) { var doc = new DOMParser().parseFromString(html, 'text/html'); var srcs = doc.querySelectorAll('.database-append-target'); Array.prototype.forEach.call(srcs, function (src, i) { var dest = containers[i]; if (!dest) return; itemNodes(src).forEach(function (node) { dest.appendChild(document.importNode(node, true)); }); }); var ns = doc.getElementById('infinite-scroll-sentinel'); nextUrl = (ns && ns.dataset.nextUrl) || null; sentinel.dataset.nextUrl = nextUrl || ''; updateCount(); if (!nextUrl) { observer.disconnect(); sentinel.style.display = 'none'; } }) .catch(function () { /* leave nextUrl intact so a later scroll retries */ }) .finally(function () { loading = false; if (loadingEl) loadingEl.style.display = 'none'; }); } var observer = new IntersectionObserver(function (entries) { entries.forEach(function (e) { if (e.isIntersecting) loadMore(); }); }, { rootMargin: '600px 0px' }); observer.observe(sentinel); } newDocumentReady(initSSInfiniteScroll); // bfcache/back-forward restore doesn't fire DOMContentLoaded; pageshow does. // Idempotency guard above makes the re-call a no-op when already wired. window.addEventListener('pageshow', initSSInfiniteScroll); .blur-row { filter: blur(4px); pointer-events: none; user-select: none; } /* Mobile view toggle (rows ↔ cards) */ .db-view-toggle { display: inline-flex; align-items: center; gap: 5px; padding: 5px 11px; border: 0; border-radius: 6px; background: transparent; color: #64748b; font-size: 12px; font-weight: 600; cursor: pointer; transition: background-color 0.12s, color 0.12s; } .db-view-toggle-active { background: #0f172a; color: #ffffff; } .database-video-grid { display: grid; grid-template-columns: 1fr; gap: 18px; } @media (min-width: 768px) { .database-video-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } } /* Airbnb-style range slider (uses noUiSlider) */ .range-filter { display: inline-flex; flex-direction: column; justify-content: center; gap: 4px; padding: 6px 16px 10px; border: 1px solid rgb(226 232 240); background: #fff; border-radius: 9999px; min-width: 220px; margin-bottom: 0 !important; } .range-filter .range-filter-header { display: flex; align-items: baseline; gap: 6px; line-height: 1; } .range-filter .range-filter-header label { font-size: 0.875rem; color: rgb(100 116 139); font-weight: 500; margin: 0 !important; line-height: 1.2; flex-shrink: 0; } .range-filter .range-filter-header label::after { content: "|"; margin-left: 6px; color: rgb(203 213 225); font-weight: 400; } .range-filter .preview-label { font-size: 0.875rem; color: rgb(15 23 42); font-weight: 600; line-height: 1.2; margin: 0 !important; white-space: nowrap; } .range-filter .filter-slider.noUi-target { height: 3px; background: rgb(226 232 240); border: 0; box-shadow: none; border-radius: 9999px; margin: 3px 6px 0; } .range-filter.is-active { border-color: rgb(15 23 42); background: rgb(241 245 249); } .range-filter.is-active .range-filter-header label { color: rgb(15 23 42); } .range-filter .filter-slider .noUi-connect { background: rgb(15 23 42); } .range-filter .filter-slider .noUi-handle { height: 20px; width: 20px; top: -8px; right: -10px; border-radius: 9999px; background: #fff; border: 1px solid rgb(203 213 225); box-shadow: 0 1px 2px rgba(15, 23, 42, 0.12), 0 2px 4px rgba(15, 23, 42, 0.08); cursor: grab; transition: transform 0.1s ease, box-shadow 0.1s ease, border-color 0.1s ease; outline: none; } .range-filter .filter-slider .noUi-handle::before, .range-filter .filter-slider .noUi-handle::after { display: none; } .range-filter .filter-slider .noUi-handle:hover { border-color: rgb(15 23 42); transform: scale(1.05); } .range-filter .filter-slider .noUi-handle.noUi-active, .range-filter .filter-slider .noUi-handle:focus-visible { cursor: grabbing; box-shadow: 0 0 0 6px rgba(15, 23, 42, 0.08), 0 2px 6px rgba(15, 23, 42, 0.18); border-color: rgb(15 23 42); } .range-filter .filter-slider.noUi-horizontal { height: 4px; } .range-filter input[type="hidden"] { display: none; }

Discover Similar Business Ideas Like Community Card Playbook

IDEA REVENUE Marketing toolkit for rea... · coffeecontracts.com "Digital marketing toolkit for real estate professionals." $250K /mo Email marketing for e-com... · boundlesslabs.io Email marketing agency for booming eCommerce brands. $8.3M /mo Amazon listing optimizati... · kenjiroi.com Amazon Seller Agency for PPC Management and Listing Optimization. $105K /mo Holistic online marketing... · avci-media.com Online Marketing Agency Boosting Businesses with Paid Traffic. $10K /mo Ecommerce development agency · neversettle.it Digital agency specializing in eCommerce and marketing solutions. $150K /mo Pay for performance seo · greenbananaseo.com Performance-based SEO agency guaranteeing top Google rankings. $650K /mo Linkedin lead generation ... · Leadcookie.com B2B LinkedIn lead generation agency. $55K /mo newDocumentReady(function() { // Save-bookmark hover — delegated on document (guarded once) so rows // appended by infinite scroll get the behavior too. mouseover/mouseout // bubble (mouseenter/leave don't); closest('tr') scopes to the hovered row, // and the relatedTarget check suppresses flicker when moving cell-to-cell // within the same row. if (!window.__saveBookmarkHoverInit) { window.__saveBookmarkHoverInit = true; document.addEventListener('mouseover', function(e) { var row = e.target.closest('tr'); if (!row) return; var saveBookmark = row.querySelector('.save-bookmark'); if (saveBookmark) saveBookmark.classList.remove('invisible'); }); document.addEventListener('mouseout', function(e) { var row = e.target.closest('tr'); if (!row) return; if (e.relatedTarget && row.contains(e.relatedTarget)) return; var saveBookmark = row.querySelector('.save-bookmark'); if (saveBookmark) saveBookmark.classList.add('invisible'); }); } // ---- Tag-pill hover tooltip (LLM-generated context for each Tagging) ---- if (!window.__tagTooltipInit) { window.__tagTooltipInit = true; const tip = document.createElement('div'); tip.className = 'tag-tooltip-popover'; tip.style.cssText = [ 'position:fixed','z-index:9999','max-width:340px','display:none', 'background:#0f172a','color:#fff','font-size:12px','line-height:1.4', 'padding:8px 10px','border-radius:6px','box-shadow:0 8px 24px rgba(0,0,0,.18)', 'pointer-events:none','white-space:normal' ].join(';'); document.body.appendChild(tip); const showTip = function(e) { const target = e.currentTarget; const text = target.getAttribute('data-tag-tooltip'); if (!text) return; tip.textContent = text; tip.style.display = 'block'; const r = target.getBoundingClientRect(); const tr = tip.getBoundingClientRect(); let top = r.bottom + 8; if (top + tr.height > window.innerHeight - 8) top = r.top - 8 - tr.height; let left = r.left; if (left + tr.width > window.innerWidth - 8) left = window.innerWidth - tr.width - 8; if (left < 8) left = 8; tip.style.top = Math.round(top) + 'px'; tip.style.left = Math.round(left) + 'px'; }; const hideTip = function() { tip.style.display = 'none'; }; document.addEventListener('mouseover', function(e) { const el = e.target.closest('[data-tag-tooltip]'); if (el) showTip({ currentTarget: el }); }); document.addEventListener('mouseout', function(e) { const el = e.target.closest('[data-tag-tooltip]'); if (el) hideTip(); }); } });

More about Community Card Playbook:

Who is the owner of Community Card Playbook? When did Rachel Smith start Community Card Playbook? How much money has Rachel Smith made from Community Card Playbook? {"@context":"https://schema.org","@type":"FAQPage","mainEntity":[{"@type":"Question","name":"Who is the owner of Community Card Playbook?","acceptedAnswer":{"@type":"Answer","text":"Rachel Smith is the founder of Community Card Playbook."}},{"@type":"Question","name":"When did Rachel Smith start Community Card Playbook?","acceptedAnswer":{"@type":"Answer","text":"2024"}},{"@type":"Question","name":"How much money has Rachel Smith made from Community Card Playbook?","acceptedAnswer":{"@type":"Answer","text":"Rachel Smith started the business in 2024, and currently makes an average of $48K/year."}}]}