Beautiful garden
Free to join
Welcome to SnapBloom

Your yard, smarter.
Choose your username.

Pick a username and create your free account to get personalized plant picks, track your yard journey, and share Blooms with the community.

@
Letters, numbers, and underscores only. This is how the community sees you.
Welcome back

Sign in to your account

Pick up right where you left off with your saved plans and yard journey.

Step 2 of 3 — Your location

What's your zip code?

We use your zip code to match plants to your exact USDA hardiness zone. Every recommendation is tailored to what actually grows where you live.

🌍 Why this matters: A plant that thrives in Phoenix will die in Portland. Your zip lets us give you recommendations that actually work in your climate — not generic advice.
Step 3 of 3 — Your style

What kind of yard are you dreaming of?

Pick your garden styles and favorite colors. We use these to personalize every plant recommendation and your Blooms feed.

Garden style (pick all that apply)
🌸
Cottage Garden
Wildflowers, charm
🏡
Modern Minimal
Clean, structured
🦋
Native & Wildlife
Pollinators, birds
🌴
Tropical & Lush
Bold, dramatic
🌵
Drought Tolerant
Low water, smart
🌳
Formal & Classic
Symmetry, hedges
🌲
Woodland & Shade
Ferns, moss, calm
🫒
Mediterranean
Herbs, lavender, stone
🥦
Edible Garden
Veggies, herbs, fruit
🪨
Zen & Minimalist
Rock, gravel, peace
Favorite flower colors (pick all you love)
Pink
Purple
White
Yellow
Red
Orange
Blue
Green foliage
Peach & Cream
All the colors!
LIVE COMMUNITY

Your yard.
Their yards.
All growing.

Share your yard journey, see your neighbors' gardens, get AI feedback on what's growing, and discover 230+ native plants. It's free, it's real, and it's your community.

230+
Native plants
Free
Always
AI
Yard feedback
Join the ecosystem
Start your bloom journey
Free forever · No credit card
Already blooming? Sign in →
// Safe toast wrapper - works even if toast not yet defined window._safeToast = function(msg) { if (typeof toast === 'function') toast(msg); else { const t = document.createElement('div'); t.style.cssText='position:fixed;bottom:24px;left:50%;transform:translateX(-50%);background:#2d5a40;color:#fff;padding:12px 24px;border-radius:100px;font-size:14px;font-weight:600;z-index:9999;font-family:sans-serif'; t.textContent=msg; document.body.appendChild(t); setTimeout(()=>t.remove(),3000); } }; function updateHeroCard(user) { // Update hero card with user info if (!user) return; const nameEl = document.getElementById('hero-username'); const zipEl = document.getElementById('hero-zip'); if (nameEl) nameEl.textContent = '@' + (user.username || user.name || ''); if (zipEl) zipEl.textContent = user.zip ? 'Zone · ' + user.zip : ''; // Update welcome card if visible const wcName = document.getElementById('wc-username'); const wcZone = document.getElementById('wc-zone'); if (wcName) wcName.textContent = '@' + (user.username || user.name || ''); if (wcZone && user.zip) wcZone.textContent = 'Zone 7b · South Carolina'; } // ══ TOP TICKER (psb-track) — all 230 native plants ══════════ async function buildTopTicker() { const track = document.getElementById('psb-track'); if (!track || track.dataset.built) return; track.dataset.built = '1'; const plants = (typeof NATIVE_PLANTS_DB !== 'undefined' && NATIVE_PLANTS_DB.length) ? NATIVE_PLANTS_DB : []; if (!plants.length) { setTimeout(buildTopTicker, 400); return; } const shuffled = [...plants].sort(() => Math.random() - 0.5); // Duplicate for seamless infinite loop const all = [...shuffled, ...shuffled]; track.innerHTML = ''; all.forEach((plant, idx) => { const item = document.createElement('div'); item.className = 'psb-item'; item.title = plant.name; item.innerHTML = `
${plant.name}
${plant.latin}
💚 I Love this!
`; item.addEventListener('click', () => { if (typeof openPlantDetail === 'function') { openPlantDetail(JSON.stringify({name:plant.name,latin:plant.latin,type:plant.type,zones:plant.zones,bloom:plant.bloom,height:plant.height,sun:plant.sun,water:plant.water})); } }); track.appendChild(item); // Stagger photo loads setTimeout(() => { if (typeof getPlantPhoto !== 'function') return; getPlantPhoto(plant.name, plant.latin).then(url => { const shimmer = document.getElementById('ptop-' + idx); if (!shimmer) return; if (url) { const img = new Image(); img.alt = plant.name; img.style.cssText = 'width:100%;height:100%;object-fit:cover;display:block'; img.onload = () => shimmer.replaceWith(img); img.onerror = () => { shimmer.style.background='#3d6e50'; shimmer.style.animation='none'; }; img.src = url; } else { const colors=['#3d6e50','#4a8540','#2d5a40','#5aab4a','#1a3a28']; shimmer.style.background = colors[idx % colors.length]; shimmer.style.animation = 'none'; } }); }, (idx % shuffled.length) * 25); // stagger within one set }); // Duration: number of unique plants × ~1.4s each at scroll speed const dur = Math.max(60, shuffled.length * 1.4); track.style.animationDuration = Math.round(dur) + 's'; } // Init — wait for NATIVE_PLANTS_DB (function waitForDB(n) { if (typeof NATIVE_PLANTS_DB !== 'undefined' && NATIVE_PLANTS_DB.length) { buildTopTicker(); } else if (n < 30) { setTimeout(() => waitForDB(n+1), 300); } })(0); window.addEventListener('load', () => setTimeout(buildTopTicker, 300)); window.buildTopTicker = buildTopTicker;
> >
How it works

Four steps to your dream yard

Upload your yard
1

Snap your yard

Upload 1-3 real photos of your yard. Claude AI reads sunlight, shade, existing plants, and your yard structure from your actual space.

Describe your vision
2

Describe your vision

Pick your style, colors, and maintenance level. The more you share, the more personalized your AI-generated plant plan becomes.

Review plant picks
3

Review your plant picks

See real botanical photos of every recommended plant. Accept what you love, swap what you don't. You have full control over your plan.

Shop and grow
4

Shop, grow & get reminders

Buy direct from Home Depot and Lowe's with live pricing. Get a printable care guide and email or text reminders exactly when to act.

Live community

Real yards. Real people. Right now.

Every yard tells a story. See what your neighbors are growing.

Loading...
> >

🏡 List your business

Join the SnapBloom directory and get referrals from homeowners actively planning their yards. Basic listing is free. Featured placement available on the Landscaper plan.

🌿 Landscaper
🌱 Nursery
🏪 Garden Center
AI plant doctor

What's wrong with my plant?

Upload a photo of any struggling plant. Claude AI diagnoses pests, disease, watering issues, and recommends exactly how to fix it — plus products to buy.

🔍
Upload a photo of your plant
Leaves, stems, roots — any part that looks wrong. Claude will diagnose it.
Analyzing your plant...
The community

Blooms — real yards, real journeys

See what's growing in yards near you. Share your own yard journey — before and after, season by season. Every Bloom helps your neighbors grow smarter.

🌱
Sponsored · Local nursery
Advertise your nursery or landscaping business here
Reach homeowners actively planning their yards in your area. Native placement. No banner ads.

Share a Bloom 🌿

Share your yard journey with the SnapBloom community. Before/after, current season, or just something beautiful growing in your yard.

📸
Add photos of your yard
Up to 6 photos · Before & after encouraged
📅 Yard journey
📸 Before & after
🆘 Need help
🌿

Garden Name

📍 Location

0
Blooms
0
Grows received
0
Plants grown
🌱
SnapBloom Assistant
Plant expert · Works in every climate zone
Hi! I'm your SnapBloom plant expert. Ask me anything about your yard, plants, care schedules, or what grows best in your zone. 🌿
🔔

Never miss a care day

SnapBloom sends push notifications directly to your phone — exactly when to water, prune, fertilize, and prep for each season.

What you will be notified about
💧 Watering reminders for your plants and season
✂️ Pruning alerts before the window closes
🌱 Fertilizing schedule for your climate zone
❄️ Frost warnings and winter prep reminders
🌸 Bloom season alerts
Reminder frequency
Weekly
Bi-weekly
Monthly

Your phone will ask permission. Tap Allow. Turn off anytime in your phone settings.

Start growing smarter

Save your plans, get care reminders, and access your yard history from any device.

By creating an account you agree to our Privacy Policy and Terms of Use.
or

Upgrade to Pro

Unlock unlimited yard plans, AI yard visualization, email + SMS care reminders, and full landscaper directory access.

PRO
$9
per month
LANDSCAPER
$49
per month
✓ Unlimited yard plans  ✓ 6 personalized plants
✓ AI yard visualization (4 seasons)
✓ Email + SMS care reminders
✓ Landscaper directory access

Secure checkout via Stripe · Cancel anytime

Browse all plants

🌿
Loading...
@username
📍 Zone —
0
Blooms
0
Friends
0
Plans
🌸 Blooms
🤝 Friends
🌿 Plants
Loading blooms...
Loading friends...
Loading saved plants...
Friends
All Friends
Requests
Find People
🌿
📷
🌿
📷
Profile Photo
Your Garden
@username
Share a little about your yard and your growing story...
0
Blooms
0
Grows received
0
Friends
Zone —
Climate zone
My Blooms
No Blooms yet — post your first yard journey 🌱
🌿 Friends' Blooms
🌱
Add friends to see their yard journeys here
Share a Bloom 🌸

A Bloom is your yard journey — a moment, a season, a transformation. These photos are for sharing with the community, separate from your private yard analysis photos.

📸 Tap to add a yard photo Your Bloom, your story
Season:
🔔 Notifications
All
🌿 Social
🌱 Care
🔬 Analysis
🔔
All quiet in the garden
When friends request to connect, give your Blooms a Grow, or drop seeds of advice — you'll see it here.
🤝
No social updates yet
Friend requests, Grows on your Blooms, and seeds dropped in your comments will appear here.
Based on your saved plants
🌱
No reminders yet
Save plants to your plan and we'll send you exactly-timed care reminders based on your zone's frost dates.
AI plant identification from your Blooms
🔬
No analyses yet
Post a Bloom with yard photos and our AI will identify your plants, check their zone compatibility, and generate a personalized care guide.
// loadBloomsFromDB — alias for loadUserBlooms, keeps backward compat async function loadBloomsFromDB() { if (typeof loadUserBlooms === 'function') { await loadUserBlooms(); } else if (typeof renderBlooms === 'function') { await renderBlooms(); } } window.loadBloomsFromDB = loadBloomsFromDB;