Merge branch 'main' of git.bizmatch.net:tknuth/Greenlens

This commit is contained in:
2026-04-28 16:18:31 -05:00
103 changed files with 27039 additions and 14888 deletions

972
5blogpostseo.md Normal file
View File

@@ -0,0 +1,972 @@
# GreenLens Pro — 5 SEO Blog Posts
These posts are written for **greenlenspro.com** and optimized around high-intent SEO keywords. Each post includes: focus keyword, page title, meta description, URL slug, H1, image specifications, internal link structure, full SEO content, and FAQ section.
**Publishing order:**
1. `/plant-disease-identifier`
2. `/why-are-my-plant-leaves-yellow`
3. `/plant-doctor-app`
4. `/how-to-revive-a-dying-plant`
5. `/plant-identifier-app`
---
# Blog Post 1
## Focus Keyword
**plant disease identifier**
## URL Slug
`/plant-disease-identifier`
## Page Title
Plant Disease Identifier App | Scan Sick Plants With AI
## Meta Description
Scan sick plants with GreenLens Pro. Identify possible plant diseases, yellow leaves, brown spots, pests, and get clear next steps.
## H1
Plant Disease Identifier App: Scan Sick Plants With AI
## Image Filename
`plant-disease-identifier-app-greenlens-pro.jpg`
## Image Alt Tag
Plant disease identifier app scanning a sick houseplant with yellow leaves
## Internal Links
- `/why-are-my-plant-leaves-yellow`
- `/plant-doctor-app`
- `/how-to-revive-a-dying-plant`
- `/plant-pest-identification`
## Technical SEO Requirement
Add FAQPage Schema.org JSON-LD for all FAQ questions. Also add BreadcrumbList schema and SoftwareApplication schema for GreenLens Pro.
---
## Plant Disease Identifier App: Scan Sick Plants With AI
A **plant disease identifier** can help you understand what may be wrong with your plant before you start guessing. If your houseplant has yellow leaves, brown spots, curling leaves, sticky residue, weak growth, or signs of pests, it can be difficult to know what is actually happening. Many plant problems look similar at first. Overwatering can look like underwatering. Lack of light can look like nutrient stress. Pest damage can look like dryness. That is exactly why a plant disease identifier app can be useful.
GreenLens Pro is designed to help plant owners scan their plants, check visible symptoms, and get simple guidance about possible plant problems. Instead of reacting too fast with more water, more fertilizer, or repotting, you can slow down and observe the signs first.
This guide explains what a plant disease identifier does, which symptoms you should watch for, why plant diagnosis is harder than it looks, and when you should take action.
## What Is a Plant Disease Identifier?
A plant disease identifier is a tool that helps you analyze symptoms on a plant and understand possible causes. It can be used for houseplants, indoor plants, tropical plants, garden plants, and sometimes flowers. The goal is not only to name the plant, but to help you understand whether the plant may be stressed, infected, damaged, underwatered, overwatered, or affected by pests.
A classic plant identifier focuses mainly on the question:
"What plant is this?"
A plant disease identifier focuses more on the question:
"What is wrong with this plant?"
That difference matters. Many plant owners already know they have a monstera, pothos, snake plant, orchid, or fiddle leaf fig. Their real problem is not identification. Their real problem is that the plant suddenly looks unhealthy.
A plant disease identifier app like GreenLens Pro can help bridge that gap by combining plant scanning, symptom recognition, and care guidance.
## Why Plant Problems Are So Hard To Diagnose
Plant problems are difficult because the same symptom can point to completely different causes. A yellow leaf does not automatically mean your plant needs water. A drooping plant is not always thirsty. Brown spots are not always a disease.
This is where many plant owners make the problem worse. They react to the symptom instead of understanding the cause.
For example:
- **Yellow leaves** can mean overwatering, underwatering, low light, pests, root stress, or natural aging.
- **Drooping leaves** can mean the plant is dry, but they can also mean the roots are damaged and cannot absorb water.
- **Brown spots** can come from sunburn, fungal issues, bacterial problems, dry air, or pest damage.
- **Sticky leaves** are often not a watering issue at all, but a possible pest signal.
That is why guessing is risky. If your plant is overwatered and you water it again, you may make root stress worse. If your plant has pests and you only change the watering schedule, the actual problem continues. If your plant is suffering from low light and you add fertilizer, the plant still does not have enough energy to grow.
GreenLens Pro is built around this exact problem. Instead of treating every symptom the same way, it helps you scan the visible signs, understand possible causes, and decide what to check next.
## Common Symptoms a Plant Disease Identifier Can Help With
### Yellow Leaves
Yellow leaves are one of the most common houseplant problems. They can be harmless if only one old lower leaf is fading. But if many leaves are turning yellow at the same time, it may signal overwatering, root stress, poor light, or nutrient problems.
A plant disease identifier can help you compare yellowing patterns. Are the leaves yellow and soft? Are they yellow and crispy? Are only the lower leaves affected? Are new leaves coming out pale? These details matter.
### Brown Spots
Brown spots can appear for many reasons. Dry brown edges may point toward low humidity or underwatering. Dark, soft spots may suggest overwatering or fungal problems. Pale brown patches may come from sunburn. Tiny dots may suggest pests.
Before cutting leaves or spraying products, it helps to inspect the plant carefully.
### Wilting Leaves
Wilting does not always mean the plant needs water. A plant can wilt from underwatering, but it can also wilt when roots are damaged from overwatering. If the roots cannot take up oxygen and water properly, the plant may look thirsty even when the soil is wet.
This is one of the biggest beginner mistakes: seeing wilted leaves and immediately adding more water.
### Curling Leaves
Curling leaves can happen because of dry soil, low humidity, pests, temperature stress, or too much light. The direction and texture of the curl can help you understand what may be happening.
### Sticky Leaves
Sticky leaves are often a sign that pests may be present. Scale insects, aphids, and mealybugs can leave sticky residue behind. If you notice sticky spots on leaves, stems, or nearby surfaces, inspect the plant closely.
### Weak Growth
If your plant is alive but not growing, the cause may be light, root space, nutrients, temperature, or seasonal dormancy. A plant disease identifier may help you separate normal slow growth from actual plant stress.
## How To Use GreenLens Pro as a Plant Disease Identifier
Using GreenLens Pro is simple:
1. Open the app.
2. Take a clear photo of the plant.
3. Focus on the affected leaves or problem area.
4. Scan the plant.
5. Review the possible diagnosis and care guidance.
6. Compare the suggestions with your plant's environment.
For best results, take photos in natural light. Avoid blurry images, dark corners, or photos where the symptom is too far away. If the problem is on the leaf, take a close-up of the leaf. If the whole plant is drooping, take a wider photo that shows the full plant and pot.
## Plant Disease Identifier vs Plant Identifier
A plant identifier and a plant disease identifier are related, but they are not the same.
A plant identifier helps answer:
- What species is this?
- Is this a pothos, philodendron, monstera, or snake plant?
- What kind of care does this plant usually need?
A plant disease identifier helps answer:
- Why are the leaves yellow?
- Why are there brown spots?
- Why is the plant wilting?
- Could pests be involved?
- What should I check first?
GreenLens Pro combines both angles. You can identify a plant by photo and also use the app to understand possible plant health problems.
## Why You Should Not Guess Too Quickly
Many plant owners react emotionally when a plant looks sick. They want to help, so they do something immediately. They water it again. They move it to a window. They fertilize it. They repot it. They cut leaves. They spray it.
But more action is not always better.
A stressed plant often needs the right action, not more action. If the cause is overwatering, more water makes it worse. If the cause is low light, fertilizer will not solve the main issue. If the cause is pests, changing the watering schedule will not remove the pests.
That is why scanning and observing first can be smarter than guessing.
## What To Check Before Treating a Sick Plant
Before you take action, check these basics:
**Soil Moisture** — Put your finger into the soil or use a moisture meter. Is the soil wet, slightly moist, dry, or compacted? Many problems start in the root zone.
**Light Conditions** — Ask yourself how much real light the plant receives. Bright indoor light is often weaker than people think. A plant sitting far from a window may not receive enough energy to grow well.
**Drainage** — Check whether the pot has drainage holes. If water cannot escape, roots can sit in wet soil for too long.
**Pest Signs** <20><><EFBFBD> Look under leaves, around stems, and near new growth. Common signs include tiny moving dots, webbing, white cotton-like spots, sticky residue, or small bumps on stems.
**Recent Changes** — Did you recently repot, move the plant, fertilize it, water it differently, or expose it to colder temperatures? Sudden changes can trigger stress.
## When To Use a Plant Disease Identifier
You should use a plant disease identifier when:
- Several leaves turn yellow at once
- Brown spots spread quickly
- Leaves become soft, mushy, or black
- The plant wilts even when soil is wet
- You see sticky leaves or pest signs
- Growth suddenly stops
- New leaves come out damaged
- You are unsure whether to water or wait
The earlier you check, the easier it may be to correct the problem.
## Can AI Diagnose Plant Diseases Perfectly?
AI plant diagnosis can be very helpful, but it should be used as guidance, not as a guaranteed laboratory diagnosis. A photo-based plant disease identifier can analyze visible patterns, but plant health also depends on hidden factors such as root condition, soil quality, watering history, humidity, and light exposure.
The best approach is to use AI as a smart first step. GreenLens Pro can help you narrow down likely causes and decide what to inspect next.
## FAQ
- What is a plant disease identifier?
- Can I identify plant disease by photo?
- What is the best plant disease identification app?
- How do I know if my plant is sick?
- Can GreenLens Pro identify plant problems?
- What is a plant problem identifier?
- What is a plant sickness identifier?
- How does an AI plant disease app work?
- Can I use GreenLens Pro for free to identify plant disease?
---
# Blog Post 2
## Focus Keyword
**why are my plant leaves yellow**
## URL Slug
`/why-are-my-plant-leaves-yellow`
## Page Title
Why Are My Plant Leaves Yellow? 9 Common Causes
## Meta Description
Why are my plant leaves yellow? Learn 9 common causes like overwatering, pests, poor light, and when to scan with GreenLens Pro.
## H1
Why Are My Plant Leaves Yellow? 9 Common Causes
## Image Filename
`why-are-my-plant-leaves-yellow-greenlens-pro.jpg`
## Image Alt Tag
Why are my plant leaves yellow on an indoor houseplant
## Internal Links
- `/plant-disease-identifier`
- `/plant-doctor-app`
- `/how-to-revive-a-dying-plant`
- `/plant-pest-identification`
## Technical SEO Requirement
Add FAQPage Schema.org JSON-LD for all FAQ questions. Also add BreadcrumbList schema and SoftwareApplication schema for GreenLens Pro.
---
## Why Are My Plant Leaves Yellow? 9 Common Causes
**Why are my plant leaves yellow?** This is one of the most common questions houseplant owners ask, and the honest answer is: it depends. Yellow leaves can mean your plant is overwatered, underwatered, lacking light, losing old leaves naturally, struggling with pests, sitting in poor soil, or dealing with root stress.
The frustrating part is that many different problems create the same visible symptom. That is why yellow leaves are so easy to misread. A beginner may see yellow leaves and immediately water the plant. But if the real cause is overwatering, that extra water can make the problem worse.
GreenLens Pro can help you scan your plant, inspect visible symptoms, and understand possible causes before you guess. This guide explains the most common reasons plant leaves turn yellow and what you should check first.
## 1. Overwatering
Overwatering is one of the most common causes of yellow leaves. Many plant owners think watering is the safest way to help a stressed plant, but too much water can suffocate the roots.
Roots need oxygen. When soil stays wet for too long, the roots may struggle to breathe. Over time, this can lead to root rot or general root stress. The plant may respond with yellow leaves, soft leaves, wilting, or leaf drop.
Signs of overwatering may include:
- Yellow leaves that feel soft
- Wet soil that stays wet for days
- A heavy pot
- Mushy stems
- Fungus gnats
- Drooping even though the soil is wet
- A bad smell from the soil
If you suspect overwatering, do not water again immediately. Check the soil deeper than the surface. The top may feel dry while the lower soil is still wet.
## 2. Underwatering
Underwatering can also cause yellow leaves. When a plant does not get enough water, it may drop older leaves to conserve energy. Leaves may become yellow, crispy, curled, or dry around the edges.
Signs of underwatering may include:
- Very dry soil
- Soil pulling away from the pot edges
- Crispy leaf tips
- Limp leaves
- A light pot
- Leaves curling inward
The tricky part is that both overwatering and underwatering can cause drooping. That is why you should always check the soil before deciding what to do.
## 3. Not Enough Light
Light is energy for plants. If your plant does not receive enough light, it may not be able to support all of its leaves. Older leaves may turn yellow and drop. Growth may slow down, and new leaves may come out smaller or paler.
This is very common indoors. A room may look bright to you, but it may still be too dark for the plant.
Signs of low light may include:
- Slow growth
- Long, stretched stems
- Small new leaves
- Yellowing lower leaves
- Leaning toward the window
- Soil staying wet for too long
If your plant is in a dark corner, try moving it closer to a bright window. Avoid sudden harsh direct sun if the plant is not used to it.
## 4. Too Much Direct Sun
While low light can cause yellow leaves, too much direct sun can also stress some houseplants. Many tropical indoor plants prefer bright indirect light. Strong direct sun can burn leaves, creating pale yellow patches, brown crispy areas, or scorched spots.
Signs of sun stress may include:
- Yellow or pale patches
- Brown crispy spots
- Damage on leaves facing the window
- Dry edges
- Faded leaf color
If the yellowing appears on the sun-facing side, consider filtering the light with a curtain or moving the plant slightly away from the window.
## 5. Natural Leaf Aging
Not every yellow leaf is a problem. Plants naturally shed older leaves. If one lower leaf slowly turns yellow while the rest of the plant looks healthy, it may simply be aging.
Natural leaf aging usually looks like this:
- One or two older leaves yellow slowly
- New growth looks healthy
- The plant is otherwise stable
- No spreading spots or pests
- No major drooping
In this case, you usually do not need to panic. Remove the leaf once it is fully yellow or comes off easily.
## 6. Nutrient Problems
Plants need nutrients to grow. If the soil is depleted or the plant has been in the same pot for a long time, nutrient problems can appear. Yellowing patterns can vary depending on the nutrient involved.
Possible signs include:
- Pale new growth
- Yellowing between leaf veins
- Slow growth
- Weak stems
- Smaller leaves
However, fertilizer is not always the answer. Fertilizing a stressed or overwatered plant can make things worse. First check water, light, roots, and pests before adding fertilizer.
## 7. Pest Stress
Pests can cause yellow leaves by damaging plant tissue and draining energy from the plant. Common houseplant pests include spider mites, aphids, thrips, scale, fungus gnats, and mealybugs.
Signs of pest problems may include:
- Tiny dots on leaves
- Sticky residue
- Fine webbing
- White cotton-like clusters
- Small insects under leaves
- Silver streaks
- Deformed new growth
- Yellow speckling
Inspect the underside of leaves and new growth carefully. Many pests hide in small spaces.
## 8. Root Stress
Root stress is a hidden cause of yellow leaves. The leaves may show the symptom, but the real problem is below the soil.
Root stress can happen because of:
- Overwatering
- Poor drainage
- Compacted soil
- Root rot
- A pot that is too small
- A recent repot
- Damaged roots
If the plant keeps yellowing and the soil feels wrong, you may need to inspect the roots. Healthy roots are usually firm and light-colored. Rotten roots may be dark, mushy, or smelly.
## 9. Sudden Environmental Changes
Plants can react to sudden changes. Moving a plant from one room to another, changing light exposure, exposing it to cold drafts, repotting, or changing watering habits can trigger yellow leaves.
Common stress triggers include:
- Moving house
- Buying a new plant from a store
- Repotting
- Cold window drafts
- Heating vents
- Air conditioning
- Sudden direct sun
- Temperature drops
If the yellowing started after a recent change, that change may be part of the cause.
## What To Do When Plant Leaves Turn Yellow
Do not immediately water, fertilize, or repot. Follow this process first:
1. Check soil moisture.
2. Look at where the yellow leaves are located.
3. Inspect for pests.
4. Check the light level.
5. Review recent changes.
6. Scan the plant with GreenLens Pro.
7. Make one careful change at a time.
8. Observe the plant for several days.
The goal is not to do everything at once. Too many changes can stress the plant more.
## How GreenLens Pro Can Help
GreenLens Pro helps you scan your plant and understand possible causes of yellow leaves. The app can be useful when you are unsure whether the issue is watering, light, pests, disease, or general stress.
It works best when you take clear photos of the affected leaves and the full plant. You can use the app as a first step before deciding what to change.
## FAQ
- Why are my plant leaves yellow?
- Do yellow leaves mean overwatering?
- Should I cut yellow leaves off my plant?
- Can yellow leaves turn green again?
- Can GreenLens Pro help with yellow leaves?
- What causes yellow leaves on houseplants?
- Is overwatering or underwatering causing yellow leaves?
- How do I fix yellow leaves on my plant?
- Should I remove yellow leaves from my plant?
- Can nutrient deficiency cause yellow leaves?
---
# Blog Post 3
## Focus Keyword
**plant doctor app**
## URL Slug
`/plant-doctor-app`
## Page Title
Plant Doctor App | Diagnose Sick Houseplants With AI
## Meta Description
Use GreenLens Pro as your AI plant doctor. Scan sick houseplants, understand symptoms, and get clear care steps before guessing.
## H1
Plant Doctor App: Diagnose Sick Houseplants Fast
## Image Filename
`plant-doctor-app-sick-houseplant.jpg`
## Image Alt Tag
Plant doctor app checking a sick indoor plant with brown spots
## Internal Links
- `/plant-disease-identifier`
- `/why-are-my-plant-leaves-yellow`
- `/how-to-revive-a-dying-plant`
- `/plant-pest-identification`
## Technical SEO Requirement
Add FAQPage Schema.org JSON-LD for all FAQ questions. Also add BreadcrumbList schema and SoftwareApplication schema for GreenLens Pro.
---
## Plant Doctor App: Diagnose Sick Houseplants Fast
A **plant doctor app** can help you understand what may be wrong with your plant when the leaves turn yellow, brown, soft, curled, sticky, or weak. If you have ever looked at a struggling houseplant and thought, "I have no idea what this plant needs," you are not alone. Plant care can feel simple when everything looks healthy, but it becomes confusing as soon as symptoms appear.
GreenLens Pro works like a plant doctor app for everyday plant owners. You scan your plant, check visible symptoms, and get simple guidance that helps you make a better decision before watering, fertilizing, repotting, or cutting leaves.
This guide explains how a plant doctor app works, when to use one, what symptoms matter, and how GreenLens Pro can help you stop guessing.
## What Is a Plant Doctor App?
A plant doctor app is an app designed to help diagnose possible plant problems. It is not only about identifying the plant species. It is about understanding what the plant may be trying to tell you.
A good plant doctor app helps with questions like:
- Why are my plant leaves yellow?
- Why are the leaves turning brown?
- Why is my plant drooping?
- Does my plant have pests?
- Is my plant overwatered or underwatered?
- What should I do next?
The main value is guidance. A plant doctor app gives you a starting point when you do not know what is wrong.
## Why Plant Owners Need a Plant Doctor App
Most plant owners do not kill plants because they do not care. They kill plants because they care too much in the wrong direction.
A plant looks sad, so they water it.
It still looks sad, so they water it again.
Then they add fertilizer.
Then they move it to direct sun.
Then they repot it.
By the time they realize the issue was root stress or pests, the plant is already weaker.
A plant doctor app helps you pause before reacting. Instead of guessing, you inspect symptoms and possible causes.
## Common Problems a Plant Doctor App Can Help With
### Yellow Leaves
Yellow leaves are one of the biggest reasons people search for plant help. The problem is that yellow leaves are not specific. They can mean too much water, too little water, not enough light, stress, old leaves, poor drainage, nutrient issues, or root damage.
GreenLens Pro can help you look at the pattern and understand what to check next.
### Brown Spots
Brown spots can be dry, crispy, soft, dark, pale, circular, or irregular. Each pattern may point to a different issue. A plant doctor app can help you sort the possibilities instead of treating every brown spot the same way.
### Wilting
Wilting is confusing because both dry plants and overwatered plants can wilt. If the soil is dry and the plant is limp, watering may help. If the soil is wet and the plant is limp, the roots may be struggling. That difference is important.
### Pests
Pests are easy to miss. Spider mites, scale, aphids, thrips, and mealybugs can hide under leaves and near stems. By the time the damage is obvious, the pest population may already be growing.
### Weak Growth
If your plant is alive but not growing, it may not be getting enough light, nutrients, warmth, or root space. It may also simply be growing slowly because of the season. A plant doctor app can help you think through the environment.
## How GreenLens Pro Works as a Plant Doctor App
GreenLens Pro helps you scan your plant and understand possible problems in a simple way.
Here is the basic process:
1. Open GreenLens Pro.
2. Take a clear photo of the plant.
3. Focus on the problem area.
4. Scan the plant.
5. Review possible causes.
6. Follow simple next-step guidance.
The app is especially useful when you are unsure whether the issue is related to water, light, pests, disease, or general stress.
## How To Take a Good Plant Photo
A plant doctor app works best when the photo is clear. Here are some tips:
- Use natural light if possible.
- Avoid strong shadows.
- Take one close-up of the symptom.
- Take one wider photo of the whole plant.
- Include the pot and soil if relevant.
- Do not use a blurry image.
- Photograph both the top and underside of leaves if pests are possible.
The more visible the symptom, the better the analysis can be.
## Plant Doctor App vs Plant Care App
A plant care app usually focuses on ongoing routines. It may remind you to water, track plants, or provide general care tips.
A plant doctor app focuses more on solving a problem.
Plant care app question:
"How often should I water this plant?"
Plant doctor app question:
"Why does this plant look sick?"
GreenLens Pro fits both categories, but its strongest value is helping people diagnose issues when a plant already shows symptoms.
## Why Watering Reminders Are Not Always Enough
Watering reminders can be helpful, but they can also be risky if they are followed blindly. A plant does not need water just because a calendar says so. Water needs depend on light, temperature, pot size, soil type, humidity, season, and plant species.
For example, a plant near a bright window may dry out faster than the same plant in a darker corner. A plant in a small terracotta pot may dry faster than a plant in a large plastic pot.
A plant doctor app encourages observation instead of routine-only care.
## When You Should Act Quickly
Some plant problems need faster attention. Use a plant doctor app and inspect the plant closely if you notice:
- Black, mushy stems
- Rapidly spreading spots
- Sticky residue
- Webbing under leaves
- Sudden leaf drop
- A bad smell from the soil
- Wet soil that stays wet for many days
- White cotton-like pests
These signs may indicate pests, root rot, fungal issues, or serious stress.
## What a Plant Doctor App Cannot See
A photo-based app can analyze visible signs, but some problems are hidden. For example, root rot may only be confirmed by checking roots. Soil compaction may require touching the soil. Drainage issues may require checking the pot.
That is why the best approach is to combine scanning with physical inspection.
Use GreenLens Pro to narrow down likely causes, then check the environment.
## FAQ
- What does a plant doctor app do?
- Can GreenLens Pro diagnose sick plants?
- Is a plant doctor app better than a watering reminder?
- Can a plant doctor app detect pests?
- Should I repot a sick plant immediately?
- How accurate is an AI plant doctor?
- Plant doctor app vs Google Lens — what's the difference?
- Can I diagnose my plant without a vet?
- How does GreenLens Pro work as a plant doctor?
- When should I use a plant doctor app?
---
# Blog Post 4
## Focus Keyword
**how to revive a dying plant**
## URL Slug
`/how-to-revive-a-dying-plant`
## Page Title
How to Revive a Dying Plant: Simple Rescue Steps
## Meta Description
Learn how to revive a dying plant step by step. Check water, roots, light, pests, and scan symptoms with GreenLens Pro before guessing.
## H1
How to Revive a Dying Plant: Simple Rescue Steps
## Image Filename
`how-to-revive-a-dying-plant-greenlens-pro.jpg`
## Image Alt Tag
How to revive a dying plant with GreenLens Pro plant doctor app
## Internal Links
- `/plant-disease-identifier`
- `/plant-doctor-app`
- `/why-are-my-plant-leaves-yellow`
- `/plant-pest-identification`
## Technical SEO Requirement
Add FAQPage Schema.org JSON-LD for all FAQ questions. Also add BreadcrumbList schema and SoftwareApplication schema for GreenLens Pro.
---
## How to Revive a Dying Plant: Simple Rescue Steps
Learning **how to revive a dying plant** starts with one important idea: do not guess too quickly. When a plant looks weak, yellow, brown, droopy, crispy, or almost dead, most people react immediately. They water it again. They move it to another window. They add fertilizer. They cut leaves. They repot it. They spray something on it. Sometimes that helps, but very often it creates even more stress.
A dying plant does not need random care. It needs the right diagnosis first.
That is where GreenLens Pro can help. GreenLens Pro works like an AI plant doctor app that helps you scan your plant, check visible symptoms, and understand possible causes before you take action. If you are asking, "My plant is dying, what do I do?", the answer is not always more water. The answer is to slow down, inspect the signs, and fix the real problem.
In this guide, you will learn how to revive a dying plant step by step. We will go through water, roots, light, pests, soil, leaves, repotting, and recovery signs, so you can make a smarter plant rescue decision.
## First: Is Your Plant Really Dying?
Before you try to revive a dying plant, check whether the plant is truly dying or just stressed. Some plants look dramatic even when the problem is fixable. A peace lily, for example, can droop badly when thirsty and recover after watering. Other plants may drop older leaves naturally while still growing healthy new leaves.
Your plant may still be saveable if:
- Some leaves are still green
- The stems are firm
- The roots are not completely rotten
- There is new growth
- Only a few leaves are yellow
- The plant reacts after watering or better light
- The main stem is still alive
Your plant may be in serious trouble if:
- Most stems are mushy
- The soil smells rotten
- All leaves are dry or black
- Roots are dark, soft, and falling apart
- The plant collapses even though the soil is wet
- Pests have spread heavily
- No healthy growth points remain
Even then, do not throw it away immediately. Some plants can recover from a small healthy stem, node, or cutting.
## Step 1: Scan Your Plant Before You Guess
If you want to know **how to revive a dying plant**, the first step is observation. GreenLens Pro can help you scan visible symptoms and narrow down possible causes. This is useful because many plant problems look similar.
Yellow leaves can mean overwatering, underwatering, low light, pests, nutrient problems, or natural aging. Brown spots can mean sunburn, fungus, dry air, bacterial issues, or root stress. Drooping can mean the plant is thirsty, but it can also mean the roots are damaged from too much water.
To scan your plant with GreenLens Pro:
1. Open the app.
2. Take one clear photo of the full plant.
3. Take one close-up of the damaged leaves.
4. Use natural light if possible.
5. Make sure the image is not blurry.
6. Review the possible diagnosis and care guidance.
A scan is not magic, but it gives you a better starting point than guessing.
## Step 2: Check the Soil Moisture
Soil moisture is one of the biggest clues when trying to revive a dying plant. Most houseplant problems are connected to water in some way. But the key question is not simply, "Did I water it?" The better question is, "What does the soil feel like right now?"
Push your finger into the soil, not just on the surface. The top layer may feel dry while the deeper soil is still wet. You can also lift the pot. A very light pot often means the soil is dry. A heavy pot often means the soil is still holding water.
**If the soil is wet** — If your plant is drooping and the soil is wet, do not water again. This is one of the most common mistakes. A wet, drooping plant may have root stress. The roots may not be able to absorb oxygen properly because the soil has stayed wet for too long. Stop watering, move the plant to bright indirect light, make sure the pot has drainage holes, remove standing water, and inspect roots if the plant keeps declining.
**If the soil is bone dry** — If the soil is completely dry and the plant is limp, crispy, or curling, underwatering may be the issue. Water slowly and thoroughly, let extra water drain out, consider bottom watering if the soil rejects water, remove fully dead leaves, and keep the plant in stable light while it recovers.
## Step 3: Check Drainage and Pot Problems
A dying plant may not have a water problem because you watered too much. It may have a water problem because the pot traps water. Many decorative pots do not have drainage holes. If water collects at the bottom, the roots can sit in wet soil for too long.
Check whether the pot has drainage holes, whether the plant is sitting inside a decorative pot filled with water, whether water flows out when you water, whether the soil is compacted and hard, and whether the pot feels heavy for many days after watering.
If the pot has no drainage, move the plant into a nursery pot with holes. You can still place that nursery pot inside a decorative pot, but always empty extra water after watering.
## Step 4: Inspect the Roots
If you are trying to revive a dying plant and the symptoms keep getting worse, you may need to check the roots. Roots are the hidden part of the diagnosis. Leaves show the symptom, but roots often reveal the cause.
Healthy roots are usually firm and may be white, cream, tan, or light brown. Rotten roots are usually dark, mushy, slimy, and may smell bad.
Inspect the roots if the soil stays wet for too long, the plant droops despite wet soil, stems become soft, leaves turn yellow quickly, the soil smells rotten, you see fungus gnats, or the plant keeps declining after basic care changes.
If you find root rot:
1. Remove the plant from the pot.
2. Gently shake away wet, compacted soil.
3. Cut off mushy roots with clean scissors.
4. Keep firm, healthy roots.
5. Repot into fresh, well-draining soil.
6. Use a pot with drainage.
7. Water carefully after repotting.
8. Keep the plant in bright indirect light.
Do not fertilize immediately after root rot. Let the plant stabilize first.
## Step 5: Check the Light Situation
Light is one of the most underrated reasons plants slowly decline. Many indoor plants die because they receive too little light for too long. Low light also makes soil dry more slowly, which increases the risk of overwatering.
Signs your plant may need more light: slow growth, small new leaves, long stretched stems, yellowing lower leaves, leaning toward the window, soil staying wet too long, weak pale growth.
Signs your plant may get too much direct sun: crispy brown patches, pale burned spots, yellow patches on sun-facing leaves, dry edges, faded leaf color.
Most houseplants prefer bright indirect light. If your plant is in a dark corner, move it closer to a window gradually.
## Step 6: Inspect for Pests
If you want to know **how to save a dying plant**, pests must be part of the checklist. Many pest problems start small and become obvious only after the plant is already weak.
Look closely at undersides of leaves, new growth, stems, leaf joints, soil surface, and sticky areas around the plant.
Common pest signs include fine webbing, tiny moving dots, sticky residue, white cotton-like spots, small brown bumps, yellow speckling, silver streaks, and deformed new leaves.
If you find pests: isolate the plant, remove heavily damaged leaves, rinse or wipe leaves carefully, treat based on the pest type, repeat treatment as needed, and keep checking for new pests.
GreenLens Pro can help you scan suspicious symptoms, but physical inspection is still important because pests often hide under leaves.
## Step 7: Do Not Fertilize Too Early
Fertilizer is not medicine. If your plant is struggling because of root rot, pests, low light, or underwatering, fertilizer will not fix the real issue. In some cases, fertilizer can make things worse by adding stress to damaged roots.
Only fertilize when the plant is stable, roots are healthy, light conditions are good, the plant is actively growing, the soil is not too wet, and you are not dealing with serious pests.
## Step 8: Remove Dead Leaves Carefully
Dead leaves will not turn green again. Removing them can help the plant look cleaner and can reduce places where pests or rot may hide. But do not cut too much at once if the plant is already weak.
Remove leaves that are fully yellow, fully brown, crispy and dead, mushy or rotting, or covered in pests. Leave leaves that are still partly green if the plant does not have many healthy leaves left. Even damaged green leaves can still help the plant produce energy. Use clean scissors and avoid tearing the plant.
## Step 9: Make One Change at a Time
This step matters more than most people think. When your plant is dying, it is tempting to fix everything at once. But if you water it, repot it, move it, fertilize it, prune it, and treat pests all in one day, the plant may become even more stressed.
Instead, make one main change based on the most likely cause. Then observe. Plants recover slowly. New healthy growth is often a better sign than old damaged leaves improving.
## Step 10: Watch for Recovery Signs
A dying plant does not always look better immediately. Damaged leaves may stay damaged. Yellow leaves usually do not turn green again. The important question is whether the plant stops getting worse and starts producing healthier growth.
Good recovery signs include new leaves forming, stems becoming firmer, less drooping, soil drying at a normal pace, no new yellow leaves, no spreading brown spots, roots looking firmer, and pest activity decreasing.
Recovery may take days, weeks, or even months depending on the plant and the problem.
## Quick Diagnosis Guide
**Drooping plant with wet soil** — Possible cause: overwatering or root stress. Best next step: stop watering, check drainage, inspect roots.
**Drooping plant with dry soil** — Possible cause: underwatering. Best next step: water thoroughly and let excess water drain.
**Yellow leaves and wet soil** — Possible cause: overwatering. Best next step: pause watering and improve light or drainage.
**Yellow leaves and dry soil** — Possible cause: underwatering. Best next step: water properly and monitor.
**Brown crispy edges** — Possible cause: underwatering, dry air, sun stress, or salt buildup. Best next step: check soil, humidity, light, and watering consistency.
**Sticky leaves** — Possible cause: pests. Best next step: isolate plant and inspect under leaves.
**Black mushy stems** — Possible cause: rot. Best next step: inspect roots and remove rotten tissue.
## How GreenLens Pro Helps You Save a Dying Plant
GreenLens Pro helps you understand what may be happening before you act. Instead of searching through dozens of plant forums or guessing from one symptom, you can scan your plant and get simple guidance.
GreenLens Pro can help with yellow leaves, brown spots, drooping plants, pest-like damage, weak growth, plant identification, plant health checks, and plant rescue decisions. The app is especially useful for beginner plant owners because it turns confusing symptoms into a clearer next step.
## FAQ
- How do I revive a dying plant fast?
- Should I water a dying plant?
- Can a dying plant come back to life?
- Should I cut off dead leaves?
- Should I repot a dying plant?
- Can GreenLens Pro help me save a dying plant?
- Why is my plant dying even though I water it?
- How long does it take to revive a dying plant?
- How do I know if my plant has root rot?
- What is the best plant rescue app?
---
# Blog Post 5
## Focus Keyword
**plant identifier app**
## URL Slug
`/plant-identifier-app`
## Page Title
Plant Identifier App: Identify Plants by Photo With AI
## Meta Description
Identify plants by photo with GreenLens Pro. Scan houseplants, learn their name, and get simple care guidance in seconds.
## H1
Plant Identifier App: Identify Plants by Photo With AI
## Image Filename
`plant-identifier-app-by-photo-greenlens-pro.jpg`
## Image Alt Tag
Plant identifier app identifying a houseplant by photo
## Internal Links
- `/plant-disease-identifier`
- `/plant-doctor-app`
- `/free-plant-id-app`
- `/why-are-my-plant-leaves-yellow`
## Technical SEO Requirement
Add FAQPage Schema.org JSON-LD for all FAQ questions. Also add BreadcrumbList schema and SoftwareApplication schema for GreenLens Pro.
---
## Plant Identifier App: Identify Plants by Photo With AI
A **plant identifier app** helps you identify plants by photo and understand what kind of care they may need. If you have ever bought a plant without a label, received a cutting from a friend, or found a beautiful plant online and wanted to know its name, a plant identifier app can save a lot of time.
GreenLens Pro is designed to help you scan a plant, identify it, and get useful care guidance. But it goes one step further. Many plant owners do not only want to know the plant's name. They also want to know why the plant looks sick, why the leaves are yellow, or what to do if it starts declining.
This guide explains how plant identifier apps work, what to look for in a good plant identification app, and how GreenLens Pro can help you identify and care for your plants.
## What Is a Plant Identifier App?
A plant identifier app is a tool that uses a photo to help recognize a plant species. You take a picture of the plant, leaf, flower, stem, or overall shape, and the app compares visual patterns to provide an identification.
A plant identifier app can be useful for houseplants, garden plants, flowers, tropical plants, succulents, cuttings, unknown plants from a store, and plants without labels. The goal is simple: take a photo and learn what plant you are looking at.
## Why Plant Identification Matters
Plant identification matters because different plants need different care. A pothos, orchid, cactus, fern, and fiddle leaf fig do not all want the same conditions.
If you do not know what plant you have, it is hard to answer basic care questions:
- How much light does it need?
- How often should I water it?
- Does it like humidity?
- Is it sensitive to direct sun?
- Is it toxic to pets?
- Is it normal for leaves to drop?
A plant identifier app gives you the starting point. Once you know the plant, you can care for it more intelligently.
## How Does a Plant Identifier App Work?
Most plant identifier apps use image recognition. When you upload or take a photo, the app analyzes visible features such as leaf shape, leaf color, leaf texture, growth pattern, flower shape, stem structure, plant size, and arrangement of leaves.
The app then compares the image with known plant patterns and suggests possible matches.
For best results, the photo should be clear and focused. A blurry photo of a single damaged leaf may not be enough to identify the plant accurately. A wider photo showing the full plant can help.
## How To Identify a Plant by Photo
To identify a plant by photo with GreenLens Pro:
1. Open GreenLens Pro.
2. Place the plant in good light.
3. Take a clear photo of the full plant.
4. Add a close-up of the leaf if needed.
5. Scan the plant.
6. Review the suggested identification.
7. Read the care guidance.
If the plant has flowers, include them in the photo. Flowers can make identification easier. If the plant has unique leaves, photograph those clearly.
## Best Photo Tips for Plant Identification
Use natural light to help the app see the true color and shape of the plant. Show the whole plant in a wide photo to help with growth pattern and structure. Add a close-up of the leaf to show shape, edges, veins, and texture. Avoid cluttered backgrounds so the plant stands out clearly. Do not photograph only damaged leaves — if the goal is identification, photograph healthy parts too.
## Plant Identifier App vs Plant Disease Identifier
A plant identifier app tells you what the plant is. A plant disease identifier helps you understand what might be wrong with it.
Both are useful, but they solve different problems.
If you found an unknown plant, use a plant identifier app.
If your plant has yellow leaves, brown spots, pests, or wilting, use a plant disease identifier.
GreenLens Pro is useful because it supports both plant recognition and plant problem guidance.
## Why GreenLens Pro Is Useful for Houseplant Owners
Houseplant owners often face two main problems: they do not know what plant they have, and they do not know what is wrong when the plant looks sick.
GreenLens Pro helps with both. You can identify the plant by photo and then use the app to understand possible care needs or symptoms. This is especially helpful for beginner plant owners who may not know the difference between pothos, philodendron, scindapsus, monstera, or other common indoor plants.
## What To Do After Identifying a Plant
Once you identify your plant, do not stop there. The next step is understanding its care needs.
Check light requirements, watering preferences, soil type, humidity needs, growth speed, common problems, and toxicity information.
If your plant is healthy, use this information to build a good care routine. If your plant looks sick, scan the symptoms with GreenLens Pro and compare them with common problems for that plant.
## Why "Free Plant ID App" Searches Are Popular
Many people search for free plant ID apps because they want a quick answer without paying upfront. Plant identification often starts as a simple curiosity.
But the deeper value comes after identification. Once the app tells you the plant name, you still need to care for it. That is where GreenLens Pro can become more helpful than a basic identification tool. It connects plant identification with plant care and plant health guidance.
## Limitations of Plant Identification Apps
Plant identifier apps are powerful, but no app is perfect. Identification may be harder when the photo is blurry, the plant is very young, the plant is damaged, the plant has no flowers, the photo shows only one leaf, several species look very similar, or the lighting changes the plant color.
That is why it is smart to take multiple photos and compare the result with the plant's visible features.
## FAQ
- What is a plant identifier app?
- Can I identify a plant from a photo?
- What photo should I use for plant identification?
- Is GreenLens Pro only for identifying plants?
- Why should I identify my plant?
- Can GreenLens Pro help with plant health too?
- How accurate is a plant identifier app?
- Is there a free plant identification app?
- What plants can GreenLens Pro identify?
- How many plant species can GreenLens Pro recognize?

View File

@@ -90,3 +90,23 @@ The production-style stack lives in `greenlns-landing/docker-compose.yml` and in
- Nested plant metadata such as `categories` and `careInfo` uses `JSONB`.
- Billing idempotency responses also use `JSONB`.
- SQL placeholders use PostgreSQL syntax: `$1`, `$2`, ...
## Skill routing
When the user's request matches an available skill, ALWAYS invoke it using the Skill
tool as your FIRST action. Do NOT answer directly, do NOT use other tools first.
The skill has specialized workflows that produce better results than ad-hoc answers.
Key routing rules:
- Product ideas, "is this worth building", brainstorming -> invoke office-hours
- Bugs, errors, "why is this broken", 500 errors -> invoke investigate
- Ship, deploy, push, create PR -> invoke ship
- QA, test the site, find bugs -> invoke qa
- Code review, check my diff -> invoke review
- Update docs after shipping -> invoke document-release
- Weekly retro -> invoke retro
- Design system, brand -> invoke design-consultation
- Visual audit, design polish -> invoke design-review
- Architecture review -> invoke plan-eng-review
- Save progress, checkpoint, resume -> invoke checkpoint
- Code quality, health check -> invoke health

17
TODOS.md Normal file
View File

@@ -0,0 +1,17 @@
# TODOS
## Review
### Surface user-facing rescue proof once outcome data is trustworthy
**What:** Add a follow-up feature that exposes selective Plant ER proof to users, such as recovery progress or similar successful rescue cases.
**Why:** Outcome proof can become a major trust advantage, but only after GreenLns has enough honest rescue data to avoid fake or thin social proof.
**Context:** The CEO review for the Plant ER expansion decided that rescue outcomes should be tracked internally first and only become user-facing once the data is reliable. The immediate scope includes triage, rescue episodes, follow-ups, and internal outcome tracking. This TODO is the next step after those systems produce trustworthy recovery signals.
**Effort:** M
**Priority:** P2
**Depends on:** Rescue episode model, follow-up re-checks, and internal outcome tracking shipping first
## Completed

View File

@@ -0,0 +1,97 @@
import React from 'react';
import { render, waitFor } from '@testing-library/react-native';
import LexiconScreen from '../../app/lexicon';
const mockSearchPlants = jest.fn().mockResolvedValue([]);
jest.mock('expo-router', () => ({
useRouter: () => ({
back: jest.fn(),
}),
useLocalSearchParams: () => ({
categoryId: 'easy',
}),
}));
jest.mock('react-native-safe-area-context', () => {
const React = require('react');
const { View } = require('react-native');
return {
SafeAreaView: ({ children }: { children: React.ReactNode }) => <View>{children}</View>,
useSafeAreaInsets: () => ({ top: 0, right: 0, bottom: 0, left: 0 }),
};
});
jest.mock('../../context/AppContext', () => ({
useApp: () => ({
isDarkMode: false,
colorPalette: 'forest',
language: 'de',
t: {
lexiconTitle: 'Pflanzen-Lexikon',
lexiconSearchPlaceholder: 'Lexikon durchsuchen...',
noResults: 'Keine Pflanzen gefunden.',
searchHistory: 'Suchverlauf',
clearHistory: 'Verlauf löschen',
},
savePlant: jest.fn(),
getLexiconSearchHistory: jest.fn(() => []),
saveLexiconSearchQuery: jest.fn(),
clearLexiconSearchHistory: jest.fn(),
}),
}));
jest.mock('../../constants/Colors', () => ({
useColors: () => ({
background: '#ffffff',
text: '#111111',
textSecondary: '#444444',
textMuted: '#666666',
cardBg: '#ffffff',
cardBorder: '#dddddd',
inputBorder: '#cccccc',
cardShadow: '#000000',
danger: '#b91c1c',
primaryDark: '#1f5a37',
surface: '#f5f5f5',
chipBg: '#f3f4f6',
chipBorder: '#d1d5db',
}),
}));
jest.mock('../../components/ThemeBackdrop', () => ({
ThemeBackdrop: () => null,
}));
jest.mock('../../components/ResultCard', () => ({
ResultCard: () => null,
}));
jest.mock('../../components/SafeImage', () => ({
SafeImage: () => null,
}));
jest.mock('../../services/plantDatabaseService', () => ({
PlantDatabaseService: {
searchPlants: (...args: unknown[]) => mockSearchPlants(...args),
},
}));
describe('LexiconScreen category initialization', () => {
beforeEach(() => {
mockSearchPlants.mockClear();
});
it('uses an empty query with the selected category filter', async () => {
const { getByPlaceholderText } = render(<LexiconScreen />);
await waitFor(() => {
expect(mockSearchPlants).toHaveBeenCalledWith('', 'de', {
category: 'easy',
limit: 500,
});
});
expect(getByPlaceholderText('Lexikon durchsuchen...').props.value).toBe('');
});
});

View File

@@ -0,0 +1,112 @@
import React from 'react';
import { fireEvent, render } from '@testing-library/react-native';
import SearchScreen from '../../app/(tabs)/search';
const mockPush = jest.fn();
jest.mock('expo-router', () => ({
useRouter: () => ({
push: mockPush,
}),
}));
jest.mock('react-native-safe-area-context', () => {
const React = require('react');
const { View } = require('react-native');
return {
SafeAreaView: ({ children }: { children: React.ReactNode }) => <View>{children}</View>,
};
});
jest.mock('../../context/AppContext', () => ({
useApp: () => ({
plants: [],
isDarkMode: false,
colorPalette: 'forest',
language: 'de',
billingSummary: { credits: { available: 5 } },
refreshBillingSummary: jest.fn().mockResolvedValue(undefined),
t: {
searchTitle: 'Suche',
searchPlaceholder: 'Pflanzen suchen...',
catCareEasy: 'Pflegeleicht',
catLowLight: 'Wenig Licht',
catBrightLight: 'Helles Licht',
catSun: 'Sonnig',
catPetFriendly: 'Tierfreundlich',
catAirPurifier: 'Luftreiniger',
catHighHumidity: 'Hohe Luftfeuchte',
catHanging: 'Hängend',
catPatterned: 'Gemustert',
catFlowering: 'Blühend',
catSucculents: 'Sukkulenten',
catTree: 'Bäume',
catLarge: 'Groß',
catMedicinal: 'Heilpflanzen',
lexiconTitle: 'Pflanzen-Lexikon',
lexiconDesc: 'Lexikon Beschreibung',
browseLexicon: 'Im Lexikon stöbern',
},
}),
}));
jest.mock('../../constants/Colors', () => ({
useColors: () => ({
background: '#ffffff',
text: '#111111',
textSecondary: '#444444',
textMuted: '#666666',
cardBg: '#ffffff',
cardBorder: '#dddddd',
cardShadow: '#000000',
chipBorder: '#dddddd',
successTint: '#dff5e3',
success: '#2d8a4b',
infoTint: '#d9f1ff',
info: '#2469a7',
primaryTint: '#e8f2ea',
primaryDark: '#1f5a37',
warningTint: '#fff3d6',
warning: '#b7791f',
dangerTint: '#fde3e3',
danger: '#b91c1c',
surfaceStrong: '#eeeeee',
surface: '#f5f5f5',
heroButtonBorder: '#cad7cc',
iconOnImage: '#ffffff',
textOnImage: '#ffffff',
heroButton: '#dce9df',
primary: '#2f855a',
onPrimary: '#ffffff',
fabShadow: '#000000',
}),
}));
jest.mock('../../components/ThemeBackdrop', () => ({
ThemeBackdrop: () => null,
}));
jest.mock('../../services/plantDatabaseService', () => ({
PlantDatabaseService: {
searchPlants: jest.fn().mockResolvedValue([]),
},
}));
describe('SearchScreen category navigation', () => {
beforeEach(() => {
mockPush.mockClear();
});
it('navigates to lexicon with categoryId only when a category chip is tapped', () => {
const { getByText } = render(<SearchScreen />);
fireEvent.press(getByText('Pflegeleicht'));
expect(mockPush).toHaveBeenCalledWith({
pathname: '/lexicon',
params: {
categoryId: 'easy',
},
});
});
});

View File

@@ -68,77 +68,94 @@ describe('mockBackendService billing simulation', () => {
productId: 'topup_small',
});
expect(first.billing.credits.topupBalance).toBe(25);
expect(second.billing.credits.topupBalance).toBe(25);
expect(first.billing.credits.topupBalance).toBe(30);
expect(second.billing.credits.topupBalance).toBe(30);
});
it('consumes plan credits before topup credits', async () => {
const userId = 'test-user-credit-order';
await mockBackendService.simulatePurchase({
userId,
idempotencyKey: 'topup-order-1',
it('consumes plan credits before topup credits', async () => {
const userId = 'test-user-credit-order';
await mockBackendService.simulatePurchase({
userId,
idempotencyKey: 'sub-order-1',
productId: 'monthly_pro',
});
await mockBackendService.simulatePurchase({
userId,
idempotencyKey: 'topup-order-1',
productId: 'topup_small',
});
let lastScan = await runScan(userId, 'scan-order-0');
expect(lastScan.billing.credits.usedThisCycle).toBe(1);
expect(lastScan.billing.credits.topupBalance).toBe(25);
for (let i = 1; i <= 15; i += 1) {
lastScan = await runScan(userId, `scan-order-${i}`);
}
expect(lastScan.billing.credits.usedThisCycle).toBe(15);
expect(lastScan.billing.credits.topupBalance).toBe(24);
});
it('can deplete all available credits via webhook simulation', async () => {
const userId = 'test-user-deplete-credits';
await mockBackendService.simulatePurchase({
userId,
idempotencyKey: 'topup-deplete-1',
productId: 'topup_small',
});
const response = await mockBackendService.simulateWebhook({
userId,
idempotencyKey: 'webhook-deplete-1',
event: 'credits_depleted',
});
expect(response.billing.credits.available).toBe(0);
expect(response.billing.credits.topupBalance).toBe(0);
expect(response.billing.credits.usedThisCycle).toBe(response.billing.credits.monthlyAllowance);
});
expect(lastScan.billing.credits.usedThisCycle).toBe(1);
expect(lastScan.billing.credits.topupBalance).toBe(30);
let scanIndex = 1;
while (
lastScan.billing.credits.usedThisCycle < 100
&& lastScan.billing.credits.topupBalance === 30
&& scanIndex < 150
) {
lastScan = await runScan(userId, `scan-order-${scanIndex}`);
scanIndex += 1;
}
if (lastScan.billing.credits.topupBalance === 30) {
lastScan = await runScan(userId, `scan-order-${scanIndex}`);
}
expect(lastScan.billing.credits.usedThisCycle).toBe(100);
expect(lastScan.billing.credits.topupBalance).toBeLessThan(30);
expect(lastScan.billing.credits.topupBalance).toBeGreaterThanOrEqual(0);
});
it('can deplete all available credits via webhook simulation', async () => {
const userId = 'test-user-deplete-credits';
await mockBackendService.simulatePurchase({
userId,
idempotencyKey: 'topup-deplete-1',
productId: 'topup_small',
});
const response = await mockBackendService.simulateWebhook({
userId,
idempotencyKey: 'webhook-deplete-1',
event: 'credits_depleted',
});
expect(response.billing.credits.available).toBe(0);
expect(response.billing.credits.topupBalance).toBe(0);
expect(response.billing.credits.usedThisCycle).toBe(response.billing.credits.monthlyAllowance);
});
it('does not double-charge scan when idempotency key is reused', async () => {
const userId = 'test-user-scan-idempotency';
await mockBackendService.simulatePurchase({
userId,
idempotencyKey: 'sub-scan-idempotency',
productId: 'monthly_pro',
});
const first = await runScan(userId, 'scan-abc');
const second = await runScan(userId, 'scan-abc');
expect(first.creditsCharged).toBe(1);
expect(second.creditsCharged).toBe(1);
expect(second.billing.credits.available).toBe(first.billing.credits.available);
});
it('enforces free monthly credit limit', async () => {
const userId = 'test-user-credit-limit';
let successfulScans = 0;
let errorCode: string | null = null;
for (let i = 0; i < 30; i += 1) {
try {
await runScan(userId, `scan-${i}`);
successfulScans += 1;
} catch (error) {
errorCode = (error as { code?: string }).code || null;
break;
}
}
expect(first.creditsCharged).toBeGreaterThan(0);
expect(second.creditsCharged).toBe(first.creditsCharged);
expect(second.billing.credits.available).toBe(first.billing.credits.available);
});
it('blocks free users from real scans', async () => {
const userId = 'test-user-credit-limit';
let successfulScans = 0;
let errorCode: string | null = null;
try {
await runScan(userId, 'scan-free-hard-paywall');
successfulScans += 1;
} catch (error) {
errorCode = (error as { code?: string }).code || null;
}
expect(errorCode).toBe('INSUFFICIENT_CREDITS');
expect(successfulScans).toBeGreaterThanOrEqual(7);
expect(successfulScans).toBeLessThanOrEqual(15);
expect(successfulScans).toBe(0);
});
it('syncs pro entitlement from RevenueCat customer info', async () => {
@@ -162,6 +179,70 @@ describe('mockBackendService billing simulation', () => {
expect(response.billing.entitlement.renewsAt).toBe('2026-04-30T00:00:00.000Z');
});
it('limits RevenueCat trial entitlement to trial credits', async () => {
const response = await mockBackendService.syncRevenueCatState({
userId: 'test-user-rc-trial',
customerInfo: {
entitlements: {
active: {
pro: {
productIdentifier: 'monthly_pro',
expirationDate: '2026-04-30T00:00:00.000Z',
periodType: 'TRIAL',
},
},
},
nonSubscriptions: {},
},
});
expect(response.billing.entitlement.plan).toBe('pro');
expect(response.billing.credits.monthlyAllowance).toBe(30);
expect(response.billing.credits.available).toBe(30);
});
it('resets trial usage when RevenueCat trial converts to paid pro', async () => {
const userId = 'test-user-rc-trial-converts';
await mockBackendService.syncRevenueCatState({
userId,
customerInfo: {
entitlements: {
active: {
pro: {
productIdentifier: 'monthly_pro',
expirationDate: '2026-04-30T00:00:00.000Z',
periodType: 'TRIAL',
},
},
},
nonSubscriptions: {},
},
});
const trialScan = await runScan(userId, 'trial-conversion-scan');
expect(trialScan.billing.credits.usedThisCycle).toBeGreaterThan(0);
const paidResponse = await mockBackendService.syncRevenueCatState({
userId,
customerInfo: {
entitlements: {
active: {
pro: {
productIdentifier: 'monthly_pro',
expirationDate: '2026-05-30T00:00:00.000Z',
periodType: 'NORMAL',
},
},
},
nonSubscriptions: {},
},
});
expect(paidResponse.billing.credits.monthlyAllowance).toBe(100);
expect(paidResponse.billing.credits.usedThisCycle).toBe(0);
expect(paidResponse.billing.credits.available).toBe(100);
});
it('credits RevenueCat top-up transactions only once', async () => {
const userId = 'test-user-rc-topup';
await mockBackendService.syncRevenueCatState({
@@ -194,7 +275,7 @@ describe('mockBackendService billing simulation', () => {
},
});
expect(second.billing.credits.topupBalance).toBe(25);
expect(second.billing.credits.topupBalance).toBe(30);
});
it('ignores malformed pro entitlements coming from top-up customer info', async () => {
@@ -223,8 +304,8 @@ describe('mockBackendService billing simulation', () => {
expect(response.billing.entitlement.plan).toBe('free');
expect(response.billing.entitlement.status).toBe('inactive');
expect(response.billing.credits.topupBalance).toBe(25);
expect(response.billing.credits.available).toBe(40);
expect(response.billing.credits.topupBalance).toBe(30);
expect(response.billing.credits.available).toBe(0);
});
it('does not downgrade an existing pro user during a top-up sync', async () => {
@@ -270,7 +351,7 @@ describe('mockBackendService billing simulation', () => {
});
expect(response.billing.entitlement.plan).toBe('pro');
expect(response.billing.credits.available).toBe(275);
expect(response.billing.credits.topupBalance).toBe(25);
expect(response.billing.credits.available).toBe(130);
expect(response.billing.credits.topupBalance).toBe(30);
});
});

View File

@@ -2,7 +2,7 @@
"expo": {
"name": "GreenLens",
"slug": "greenlens",
"version": "2.2.1",
"version": "2.2.3",
"orientation": "portrait",
"icon": "./assets/icon.png",
"userInterfaceStyle": "automatic",
@@ -15,10 +15,11 @@
"assetBundlePatterns": [
"**/*"
],
"ios": {
"supportsTablet": true,
"bundleIdentifier": "com.greenlens.app",
"buildNumber": "35",
"ios": {
"supportsTablet": true,
"usesAppleSignIn": true,
"bundleIdentifier": "com.greenlens.app",
"buildNumber": "37",
"infoPlist": {
"NSCameraUsageDescription": "GreenLens needs camera access to identify plants.",
"NSPhotoLibraryUsageDescription": "GreenLens needs photo library access to identify plants from your gallery.",
@@ -31,7 +32,7 @@
"backgroundColor": "#111813"
},
"package": "com.greenlens.app",
"versionCode": 2,
"versionCode": 4,
"permissions": [
"android.permission.CAMERA",
"android.permission.RECORD_AUDIO"
@@ -46,8 +47,9 @@
"plugins": [
"expo-dev-client",
"expo-router",
"expo-camera",
"expo-image-picker",
"expo-camera",
"expo-apple-authentication",
"expo-image-picker",
"expo-secure-store",
"expo-asset",
"expo-font",

View File

@@ -10,55 +10,167 @@ import {
View,
Dimensions,
} from 'react-native';
import { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context';
import { useRouter } from 'expo-router';
import { Ionicons } from '@expo/vector-icons';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { useApp } from '../../context/AppContext';
import { useColors } from '../../constants/Colors';
import { ThemeBackdrop } from '../../components/ThemeBackdrop';
import { SafeImage } from '../../components/SafeImage';
import { Plant } from '../../types';
import { useCoachMarks } from '../../context/CoachMarksContext';
import { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context';
import { useRouter } from 'expo-router';
import { useFocusEffect } from '@react-navigation/native';
import { Ionicons } from '@expo/vector-icons';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { usePostHog } from 'posthog-react-native';
import { useApp } from '../../context/AppContext';
import { useColors } from '../../constants/Colors';
import { ThemeBackdrop } from '../../components/ThemeBackdrop';
import { SafeImage } from '../../components/SafeImage';
import { Plant } from '../../types';
import { useCoachMarks } from '../../context/CoachMarksContext';
import { OnboardingProgressService } from '../../services/onboardingProgressService';
const { width: SCREEN_W, height: SCREEN_H } = Dimensions.get('window');
type FilterKey = 'all' | 'today' | 'week' | 'healthy' | 'dormant';
const DAY_MS = 24 * 60 * 60 * 1000;
const CONTENT_BOTTOM_PADDING = 12;
const FAB_BOTTOM_OFFSET = 16;
function OnboardingChecklist({ plantsCount, colors, router, t }: { plantsCount: number; colors: any; router: any; t: any }) {
const checklist = [
{ id: 'scan', label: t.stepScan, completed: plantsCount > 0, icon: 'camera-outline', route: '/scanner' },
{ id: 'lexicon', label: t.stepLexicon, completed: false, icon: 'search-outline', route: '/lexicon' },
{ id: 'theme', label: t.stepTheme, completed: false, icon: 'color-palette-outline', route: '/profile/preferences' },
];
return (
<View style={[styles.checklistCard, { backgroundColor: colors.surface, borderColor: colors.border }]}>
<Text style={[styles.checklistTitle, { color: colors.text }]}>{t.nextStepsTitle}</Text>
<View style={styles.checklistGrid}>
{checklist.map((item) => (
<TouchableOpacity
key={item.id}
style={styles.checklistItem}
onPress={() => {
if (item.id === 'theme') {
router.push('/profile/preferences');
} else if (item.id === 'scan') {
router.push('/scanner');
} else if (item.id === 'lexicon') {
router.push('/lexicon');
} else {
router.push(item.route);
}
}}
disabled={item.completed}
>
<View style={[styles.checkIcon, { backgroundColor: item.completed ? colors.successSoft : colors.surfaceMuted }]}>
<Ionicons
const DAY_MS = 24 * 60 * 60 * 1000;
const CONTENT_BOTTOM_PADDING = 12;
const FAB_BOTTOM_OFFSET = 16;
type OnboardingStepId = 'scan' | 'reminder' | 'lexicon' | 'theme' | 'collection';
function OnboardingChecklist({
plants,
appearanceMode,
colorPalette,
lexiconExplored,
customizationDone,
colors,
router,
t,
getLexiconSearchHistory,
registerLayout,
posthog,
}: {
plants: Plant[];
appearanceMode: string;
colorPalette: string;
lexiconExplored: boolean;
customizationDone: boolean;
colors: any;
router: any;
t: any;
getLexiconSearchHistory: () => string[];
registerLayout: (key: string, layout: { x: number; y: number; width: number; height: number }) => void;
posthog: any;
}) {
const cardRef = useRef<View>(null);
const previousProgressRef = useRef<number | null>(null);
const lexiconHistoryCount = getLexiconSearchHistory().length;
const plantsCount = plants.length;
const reminderReady = plants.some((plant) => Boolean(plant.notificationsEnabled));
const themeCustomized = customizationDone || appearanceMode !== 'system' || colorPalette !== 'forest';
const lexiconCompleted = lexiconExplored || lexiconHistoryCount > 0;
const checklist = [
{ id: 'scan' as const, label: t.stepScan, completed: plantsCount > 0, icon: 'camera-outline' },
{ id: 'reminder' as const, label: t.stepReminder, completed: reminderReady, icon: 'notifications-outline' },
{ id: 'lexicon' as const, label: t.stepLexicon, completed: lexiconCompleted, icon: 'search-outline' },
{ id: 'theme' as const, label: t.stepTheme, completed: themeCustomized, icon: 'color-palette-outline' },
{ id: 'collection' as const, label: t.stepCollection, completed: plantsCount >= 3, icon: 'albums-outline' },
];
const completedCount = checklist.filter((item) => item.completed).length;
const progressRatio = completedCount / checklist.length;
const progressWidth: `${number}%` = completedCount === 0 ? '0%' : `${Math.max(progressRatio * 100, 12)}%`;
const nextItem = checklist.find((item) => !item.completed) ?? null;
useEffect(() => {
if (previousProgressRef.current === completedCount) return;
previousProgressRef.current = completedCount;
posthog.capture('onboarding_progress_updated', {
completed_count: completedCount,
total_count: checklist.length,
next_step_id: nextItem?.id ?? 'complete',
});
}, [completedCount, checklist.length, nextItem?.id, posthog]);
if (completedCount === checklist.length) {
return null;
}
const navigateToStep = (stepId: OnboardingStepId) => {
posthog.capture('onboarding_step_opened', {
step_id: stepId,
completed_count: completedCount,
});
if (stepId === 'scan' || stepId === 'collection') {
router.push('/scanner');
return;
}
if (stepId === 'reminder') {
if (plants[0]?.id) {
router.push(`/plant/${plants[0].id}`);
} else {
router.push('/scanner');
}
return;
}
if (stepId === 'lexicon') {
router.push('/lexicon');
return;
}
router.push('/onboarding/customize');
};
return (
<View
ref={cardRef}
style={[styles.checklistCard, { backgroundColor: colors.surface, borderColor: colors.border }]}
onLayout={() => {
cardRef.current?.measureInWindow((x, y, width, height) => {
registerLayout('onboarding_checklist', { x, y, width, height });
});
}}
>
<View style={styles.checklistHeader}>
<View style={styles.checklistHeaderCopy}>
<Text style={[styles.checklistEyebrow, { color: colors.primary }]}>
{t.onboardingChecklistIntro}
</Text>
<Text style={[styles.checklistTitle, { color: colors.text }]}>{t.onboardingChecklistTitle}</Text>
<Text style={[styles.checklistSubtitle, { color: colors.textSecondary }]}>
{(nextItem ? t.onboardingChecklistNextLabel : t.onboardingChecklistDone).replace('{0}', nextItem?.label ?? '')}
</Text>
</View>
<View style={[styles.checklistProgressPill, { backgroundColor: colors.primarySoft }]}>
<Text style={[styles.checklistProgressText, { color: colors.primaryDark }]}>
{t.onboardingChecklistProgress
.replace('{0}', completedCount.toString())
.replace('{1}', checklist.length.toString())}
</Text>
</View>
</View>
<View style={[styles.progressTrack, { backgroundColor: colors.surfaceMuted }]}>
<View
style={[
styles.progressFill,
{
backgroundColor: colors.primary,
width: progressWidth,
},
]}
/>
</View>
<View style={styles.checklistGrid}>
{checklist.map((item) => (
<TouchableOpacity
key={item.id}
style={styles.checklistItem}
onPress={() => navigateToStep(item.id)}
disabled={item.completed}
>
<View style={[styles.checkIcon, { backgroundColor: item.completed ? colors.successSoft : colors.surfaceMuted }]}>
<Ionicons
name={item.completed ? 'checkmark-circle' : item.icon as any}
size={18}
color={item.completed ? colors.success : colors.textMuted}
@@ -95,29 +207,50 @@ const getDaysUntilWatering = (plant: Plant): number => {
return Math.ceil(remainingMs / DAY_MS);
};
export default function HomeScreen() {
const {
plants,
isLoadingPlants,
profileImageUri,
profileName,
billingSummary,
isLoadingBilling,
language,
t,
isDarkMode,
colorPalette,
} = useApp();
const colors = useColors(isDarkMode, colorPalette);
const router = useRouter();
const insets = useSafeAreaInsets();
const [activeFilter, setActiveFilter] = useState<FilterKey>('all');
const { registerLayout, startTour } = useCoachMarks();
const fabRef = useRef<View>(null);
// Tour nach Registrierung starten
useEffect(() => {
const checkTour = async () => {
export default function HomeScreen() {
const {
session,
plants,
isLoadingPlants,
profileImageUri,
profileName,
billingSummary,
isLoadingBilling,
t,
isDarkMode,
appearanceMode,
colorPalette,
getLexiconSearchHistory,
} = useApp();
const colors = useColors(isDarkMode, colorPalette);
const router = useRouter();
const insets = useSafeAreaInsets();
const [activeFilter, setActiveFilter] = useState<FilterKey>('all');
const [onboardingSignals, setOnboardingSignals] = useState({
lexiconExplored: false,
customizationDone: false,
});
const { registerLayout, startTour } = useCoachMarks();
const fabRef = useRef<View>(null);
const posthog = usePostHog();
useFocusEffect(
React.useCallback(() => {
if (!session?.userId) {
setOnboardingSignals({
lexiconExplored: false,
customizationDone: false,
});
return;
}
setOnboardingSignals(OnboardingProgressService.getSignals(session.userId));
}, [session?.userId]),
);
// Tour nach Registrierung starten
useEffect(() => {
const checkTour = async () => {
const flag = await AsyncStorage.getItem('greenlens_show_tour');
if (flag !== 'true') return;
await AsyncStorage.removeItem('greenlens_show_tour');
@@ -143,17 +276,23 @@ export default function HomeScreen() {
description: t.tourSearchDesc,
tooltipSide: 'above',
},
{
elementKey: 'tab_profile',
title: t.tourProfileTitle,
description: t.tourProfileDesc,
tooltipSide: 'above',
},
]);
}, 1000);
};
checkTour();
}, []);
{
elementKey: 'tab_profile',
title: t.tourProfileTitle,
description: t.tourProfileDesc,
tooltipSide: 'above',
},
{
elementKey: 'onboarding_checklist',
title: t.tourChecklistTitle,
description: t.tourChecklistDesc,
tooltipSide: 'below',
},
]);
}, 1000);
};
checkTour();
}, [registerLayout, startTour, t.tourChecklistDesc, t.tourChecklistTitle, t.tourFabDesc, t.tourFabTitle, t.tourProfileDesc, t.tourProfileTitle, t.tourSearchDesc, t.tourSearchTitle]);
const copy = t;
const greetingText = useMemo(() => {
@@ -326,9 +465,19 @@ export default function HomeScreen() {
/>
</View>
{plants.length === 0 && (
<OnboardingChecklist plantsCount={plants.length} colors={colors} router={router} t={t} />
)}
<OnboardingChecklist
plants={plants}
appearanceMode={appearanceMode}
colorPalette={colorPalette}
lexiconExplored={onboardingSignals.lexiconExplored}
customizationDone={onboardingSignals.customizationDone}
colors={colors}
router={router}
t={t}
getLexiconSearchHistory={getLexiconSearchHistory}
registerLayout={registerLayout}
posthog={posthog}
/>
<ScrollView
horizontal
@@ -812,20 +961,59 @@ const styles = StyleSheet.create({
shadowOffset: { width: 0, height: 5 },
elevation: 9,
},
checklistCard: {
borderRadius: 24,
borderWidth: 1,
padding: 20,
marginBottom: 20,
},
checklistTitle: {
fontSize: 16,
fontWeight: '700',
marginBottom: 16,
},
checklistGrid: {
gap: 12,
},
checklistCard: {
borderRadius: 24,
borderWidth: 1,
padding: 20,
marginBottom: 20,
},
checklistHeader: {
flexDirection: 'row',
alignItems: 'flex-start',
justifyContent: 'space-between',
gap: 12,
marginBottom: 14,
},
checklistHeaderCopy: {
flex: 1,
gap: 4,
},
checklistEyebrow: {
fontSize: 12,
fontWeight: '700',
letterSpacing: 0.4,
textTransform: 'uppercase',
},
checklistTitle: {
fontSize: 16,
fontWeight: '700',
},
checklistSubtitle: {
fontSize: 13,
lineHeight: 18,
},
checklistProgressPill: {
borderRadius: 999,
paddingHorizontal: 10,
paddingVertical: 6,
},
checklistProgressText: {
fontSize: 12,
fontWeight: '700',
},
progressTrack: {
height: 8,
borderRadius: 999,
overflow: 'hidden',
marginBottom: 16,
},
progressFill: {
height: '100%',
borderRadius: 999,
},
checklistGrid: {
gap: 12,
},
checklistItem: {
flexDirection: 'row',
alignItems: 'center',

View File

@@ -267,15 +267,14 @@ export default function SearchScreen() {
}
};
const openCategoryLexicon = (categoryId: string, categoryName: string) => {
router.push({
pathname: '/lexicon',
params: {
categoryId,
categoryLabel: encodeURIComponent(categoryName),
},
});
};
const openCategoryLexicon = (categoryId: string) => {
router.push({
pathname: '/lexicon',
params: {
categoryId,
},
});
};
const clearAll = () => {
setSearchQuery('');
@@ -384,9 +383,9 @@ export default function SearchScreen() {
borderColor: colors.chipBorder,
},
]}
onPress={() => openCategoryLexicon(item.id, item.name)}
activeOpacity={0.8}
>
onPress={() => openCategoryLexicon(item.id)}
activeOpacity={0.8}
>
<Text style={[styles.catChipText, { color: getCategoryTextColor(item.bg, item.accent) }]}>
{item.name}
</Text>

View File

@@ -1,5 +1,5 @@
import { useEffect, useRef, useState } from 'react';
import { Animated, Easing, Image, StyleSheet, Text, View } from 'react-native';
import { Animated, AppState, Easing, Image, StyleSheet, Text, View } from 'react-native';
import { Redirect, Stack, usePathname } from 'expo-router';
import { StatusBar } from 'expo-status-bar';
import AsyncStorage from '@react-native-async-storage/async-storage';
@@ -54,13 +54,23 @@ const ensureInstallConsistency = async (): Promise<boolean> => {
import { AnimatedSplashScreen } from '../components/AnimatedSplashScreen';
function RootLayoutInner() {
const { isDarkMode, colorPalette, signOut, session, isInitializing, isLoadingPlants, syncRevenueCatState } = useApp();
const colors = useColors(isDarkMode, colorPalette);
const pathname = usePathname();
const [installCheckDone, setInstallCheckDone] = useState(false);
const [splashAnimationComplete, setSplashAnimationComplete] = useState(false);
const [revenueCatReady, setRevenueCatReady] = useState(Constants.appOwnership === 'expo');
const posthog = usePostHog();
const {
isDarkMode,
colorPalette,
signOut,
session,
billingSummary,
isInitializing,
isLoadingPlants,
isLoadingBilling,
syncRevenueCatState,
} = useApp();
const colors = useColors(isDarkMode, colorPalette);
const pathname = usePathname();
const [installCheckDone, setInstallCheckDone] = useState(false);
const [splashAnimationComplete, setSplashAnimationComplete] = useState(false);
const [revenueCatReady, setRevenueCatReady] = useState(Constants.appOwnership === 'expo');
const posthog = usePostHog();
useEffect(() => {
// RevenueCat requires native store access — not available in Expo Go
@@ -72,42 +82,42 @@ function RootLayoutInner() {
Purchases.setLogLevel(LOG_LEVEL.VERBOSE);
const iosApiKey = process.env.EXPO_PUBLIC_REVENUECAT_IOS_API_KEY || 'appl_hrSpsuUuVstbHhYIDnOqYxPOnmR';
const androidApiKey = process.env.EXPO_PUBLIC_REVENUECAT_ANDROID_API_KEY || 'goog_placeholder';
if (Platform.OS === 'ios') {
Purchases.configure({ apiKey: iosApiKey });
} else if (Platform.OS === 'android') {
Purchases.configure({ apiKey: androidApiKey });
}
setRevenueCatReady(true);
}, []);
useEffect(() => {
const isExpoGo = Constants.appOwnership === 'expo';
if (isExpoGo || !revenueCatReady) {
return;
}
let cancelled = false;
(async () => {
try {
if (session?.serverUserId) {
await Purchases.logIn(session.serverUserId);
const customerInfo = await Purchases.getCustomerInfo();
if (!cancelled) {
await syncRevenueCatState(customerInfo as any, 'app_init');
}
} else {
await Purchases.logOut();
}
} catch (error) {
console.error('Failed to align RevenueCat identity', error);
}
})();
return () => {
cancelled = true;
};
}, [revenueCatReady, session?.serverUserId, syncRevenueCatState]);
const androidApiKey = process.env.EXPO_PUBLIC_REVENUECAT_ANDROID_API_KEY || 'goog_placeholder';
if (Platform.OS === 'ios') {
Purchases.configure({ apiKey: iosApiKey });
} else if (Platform.OS === 'android') {
Purchases.configure({ apiKey: androidApiKey });
}
setRevenueCatReady(true);
}, []);
useEffect(() => {
const isExpoGo = Constants.appOwnership === 'expo';
if (isExpoGo || !revenueCatReady) {
return;
}
let cancelled = false;
(async () => {
try {
if (session?.serverUserId) {
await Purchases.logIn(session.serverUserId);
const customerInfo = await Purchases.getCustomerInfo();
if (!cancelled) {
await syncRevenueCatState(customerInfo as any, 'app_init');
}
} else {
await Purchases.logOut();
}
} catch (error) {
console.error('Failed to align RevenueCat identity', error);
}
})();
return () => {
cancelled = true;
};
}, [revenueCatReady, session?.serverUserId, syncRevenueCatState]);
useEffect(() => {
if (session?.serverUserId) {
@@ -120,6 +130,20 @@ function RootLayoutInner() {
}
}, [session, posthog]);
useEffect(() => {
posthog.capture('screen_viewed', { screen: pathname });
}, [pathname, posthog]);
useEffect(() => {
posthog.capture('app_opened');
const subscription = AppState.addEventListener('change', (nextState) => {
if (nextState === 'active') {
posthog.capture('app_opened');
}
});
return () => subscription.remove();
}, [posthog]);
useEffect(() => {
(async () => {
const didResetSessionForFreshInstall = await ensureInstallConsistency();
@@ -130,17 +154,25 @@ function RootLayoutInner() {
})();
}, [signOut]);
const isAppReady = installCheckDone && !isInitializing && !isLoadingPlants;
const isAppReady = installCheckDone && !isInitializing && !isLoadingPlants;
const hasActiveEntitlement = billingSummary?.entitlement?.plan === 'pro'
&& billingSummary?.entitlement?.status === 'active';
const isAllowedWithoutSession = pathname.includes('onboarding')
|| pathname.includes('auth/')
|| pathname.includes('scanner')
|| pathname.includes('profile/billing');
const isAllowedWithoutEntitlement = pathname.includes('auth/')
|| pathname.includes('scanner')
|| pathname.includes('profile/billing');
let content = null;
if (isAppReady) {
if (!session) {
// Only redirect if we are not already on an auth-related page or the scanner
const isAuthPage = pathname.includes('onboarding') || pathname.includes('auth/') || pathname.includes('scanner') || pathname.includes('profile/billing');
if (!isAuthPage) {
content = <Redirect href="/onboarding" />;
} else {
if (!session) {
// Only redirect if we are not already on an auth-related page or the scanner
if (!isAllowedWithoutSession) {
content = <Redirect href="/onboarding" />;
} else {
content = (
<Stack
screenOptions={{
@@ -148,9 +180,13 @@ function RootLayoutInner() {
contentStyle: { backgroundColor: colors.background },
}}
>
<Stack.Screen name="onboarding" options={{ animation: 'none' }} />
<Stack.Screen name="auth/login" options={{ animation: 'slide_from_right' }} />
<Stack.Screen name="auth/signup" options={{ animation: 'slide_from_right' }} />
<Stack.Screen name="onboarding" options={{ animation: 'none' }} />
<Stack.Screen name="onboarding/source" options={{ animation: 'slide_from_right' }} />
<Stack.Screen name="onboarding/goal" options={{ animation: 'slide_from_right' }} />
<Stack.Screen name="onboarding/experience" options={{ animation: 'slide_from_right' }} />
<Stack.Screen name="onboarding/customize" options={{ animation: 'slide_from_right' }} />
<Stack.Screen name="auth/login" options={{ animation: 'slide_from_right' }} />
<Stack.Screen name="auth/signup" options={{ animation: 'slide_from_right' }} />
<Stack.Screen
name="scanner"
options={{ presentation: 'fullScreenModal', animation: 'slide_from_bottom' }}
@@ -160,9 +196,11 @@ function RootLayoutInner() {
options={{ presentation: 'card', animation: 'slide_from_right' }}
/>
</Stack>
);
}
} else {
);
}
} else if (!hasActiveEntitlement && !isLoadingBilling && !isAllowedWithoutEntitlement) {
content = <Redirect href="/profile/billing" />;
} else {
content = (
<>
<Stack
@@ -171,9 +209,13 @@ function RootLayoutInner() {
contentStyle: { backgroundColor: colors.background },
}}
>
<Stack.Screen name="onboarding" options={{ animation: 'none' }} />
<Stack.Screen name="auth/login" options={{ animation: 'slide_from_right' }} />
<Stack.Screen name="auth/signup" options={{ animation: 'slide_from_right' }} />
<Stack.Screen name="onboarding" options={{ animation: 'none' }} />
<Stack.Screen name="onboarding/source" options={{ animation: 'slide_from_right' }} />
<Stack.Screen name="onboarding/goal" options={{ animation: 'slide_from_right' }} />
<Stack.Screen name="onboarding/experience" options={{ animation: 'slide_from_right' }} />
<Stack.Screen name="onboarding/customize" options={{ animation: 'slide_from_right' }} />
<Stack.Screen name="auth/login" options={{ animation: 'slide_from_right' }} />
<Stack.Screen name="auth/signup" options={{ animation: 'slide_from_right' }} />
<Stack.Screen name="(tabs)" options={{ animation: 'none' }} />
<Stack.Screen
name="scanner"
@@ -224,10 +266,10 @@ export default function RootLayout() {
initDatabase();
return (
<PostHogProvider apiKey={POSTHOG_API_KEY} options={{
host: 'https://us.i.posthog.com',
enableSessionReplay: true,
}}>
<PostHogProvider apiKey={POSTHOG_API_KEY} options={{
host: 'https://us.i.posthog.com',
enableSessionReplay: false,
}}>
<AppProvider>
<CoachMarksProvider>
<RootLayoutInner />

View File

@@ -1,4 +1,4 @@
import React, { useState } from 'react';
import React, { useEffect, useState } from 'react';
import {
View,
Text,
@@ -16,17 +16,35 @@ import { router } from 'expo-router';
import { useApp } from '../../context/AppContext';
import { useColors } from '../../constants/Colors';
import { ThemeBackdrop } from '../../components/ThemeBackdrop';
import { AuthService } from '../../services/authService';
import { AuthService } from '../../services/authService';
import * as AppleAuthentication from 'expo-apple-authentication';
import { usePostHog } from 'posthog-react-native';
export default function LoginScreen() {
const { isDarkMode, colorPalette, hydrateSession, t } = useApp();
const colors = useColors(isDarkMode, colorPalette);
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [showPassword, setShowPassword] = useState(false);
const [loading, setLoading] = useState(false);
const [error, setError] = useState<string | null>(null);
const { isDarkMode, colorPalette, hydrateSession, t } = useApp();
const colors = useColors(isDarkMode, colorPalette);
const posthog = usePostHog();
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [showPassword, setShowPassword] = useState(false);
const [appleAvailable, setAppleAvailable] = useState(false);
const [loading, setLoading] = useState(false);
const [error, setError] = useState<string | null>(null);
useEffect(() => {
let mounted = true;
AppleAuthentication.isAvailableAsync()
.then((available) => {
if (mounted) setAppleAvailable(available);
})
.catch(() => {
if (mounted) setAppleAvailable(false);
});
return () => {
mounted = false;
};
}, []);
const handleLogin = async () => {
if (!email.trim() || !password) {
@@ -36,9 +54,9 @@ export default function LoginScreen() {
setLoading(true);
setError(null);
try {
const session = await AuthService.login(email, password);
await hydrateSession(session);
router.replace('/(tabs)');
const session = await AuthService.login(email, password);
await hydrateSession(session);
router.replace('/profile/billing');
} catch (e: any) {
if (e.message === 'USER_NOT_FOUND') {
setError(t.errUserNotFound);
@@ -53,8 +71,53 @@ export default function LoginScreen() {
}
} finally {
setLoading(false);
}
};
}
};
const handleAppleSignIn = async () => {
setLoading(true);
setError(null);
posthog.capture('apple_login_started', { surface: 'login' });
try {
const credential = await AppleAuthentication.signInAsync({
requestedScopes: [
AppleAuthentication.AppleAuthenticationScope.FULL_NAME,
AppleAuthentication.AppleAuthenticationScope.EMAIL,
],
});
if (!credential.identityToken) {
throw new Error('APPLE_AUTH_INVALID');
}
const fullName = [
credential.fullName?.givenName,
credential.fullName?.familyName,
].filter(Boolean).join(' ');
const session = await AuthService.signInWithApple({
identityToken: credential.identityToken,
appleUser: credential.user,
email: credential.email,
name: fullName || undefined,
});
await hydrateSession(session);
posthog.capture('apple_login_succeeded', { surface: 'login' });
router.replace('/profile/billing');
} catch (e: any) {
if (e?.code === 'ERR_REQUEST_CANCELED') {
return;
}
posthog.capture('apple_login_failed', {
surface: 'login',
error: e instanceof Error ? e.message : String(e),
});
setError(e?.message === 'APPLE_BACKEND_UNAVAILABLE'
? 'Apple Login ist auf dem Backend noch nicht aktiviert. Bitte Backend neu starten oder deployen.'
: t.errAuthError);
} finally {
setLoading(false);
}
};
return (
<KeyboardAvoidingView
@@ -80,10 +143,30 @@ export default function LoginScreen() {
</Text>
</View>
{/* Card */}
<View style={[styles.card, { backgroundColor: colors.surface, borderColor: colors.cardBorder, shadowColor: colors.cardShadow }]}>
{/* Email */}
<View style={styles.fieldGroup}>
{/* Card */}
<View style={[styles.card, { backgroundColor: colors.surface, borderColor: colors.cardBorder, shadowColor: colors.cardShadow }]}>
{appleAvailable ? (
<AppleAuthentication.AppleAuthenticationButton
buttonType={AppleAuthentication.AppleAuthenticationButtonType.CONTINUE}
buttonStyle={isDarkMode
? AppleAuthentication.AppleAuthenticationButtonStyle.WHITE
: AppleAuthentication.AppleAuthenticationButtonStyle.BLACK}
cornerRadius={12}
style={styles.appleButton}
onPress={handleAppleSignIn}
/>
) : null}
{appleAvailable ? (
<View style={styles.dividerRowCompact}>
<View style={[styles.dividerLine, { backgroundColor: colors.border }]} />
<Text style={[styles.dividerText, { color: colors.textMuted }]}>{t.orDivider}</Text>
<View style={[styles.dividerLine, { backgroundColor: colors.border }]} />
</View>
) : null}
{/* Email */}
<View style={styles.fieldGroup}>
<Text style={[styles.label, { color: colors.textSecondary }]}>E-Mail</Text>
<View style={[styles.inputRow, { backgroundColor: colors.inputBg, borderColor: colors.inputBorder }]}>
<Ionicons name="mail-outline" size={18} color={colors.textMuted} style={styles.inputIcon} />
@@ -150,8 +233,8 @@ export default function LoginScreen() {
</TouchableOpacity>
</View>
{/* Divider */}
<View style={styles.dividerRow}>
{/* Divider */}
<View style={styles.dividerRow}>
<View style={[styles.dividerLine, { backgroundColor: colors.border }]} />
<Text style={[styles.dividerText, { color: colors.textMuted }]}>{t.orDivider}</Text>
<View style={[styles.dividerLine, { backgroundColor: colors.border }]} />
@@ -201,7 +284,7 @@ const styles = StyleSheet.create({
fontSize: 15,
fontWeight: '400',
},
card: {
card: {
borderRadius: 20,
borderWidth: 1,
padding: 24,
@@ -210,7 +293,18 @@ const styles = StyleSheet.create({
shadowOpacity: 1,
shadowRadius: 12,
elevation: 4,
},
},
appleButton: {
width: '100%',
height: 50,
marginBottom: 2,
},
dividerRowCompact: {
flexDirection: 'row',
alignItems: 'center',
gap: 12,
marginVertical: 2,
},
fieldGroup: {
gap: 6,
},

View File

@@ -1,4 +1,4 @@
import React, { useState } from 'react';
import React, { useEffect, useState } from 'react';
import {
View,
Text,
@@ -16,22 +16,40 @@ import { router } from 'expo-router';
import { useApp } from '../../context/AppContext';
import { useColors } from '../../constants/Colors';
import { ThemeBackdrop } from '../../components/ThemeBackdrop';
import { AuthService } from '../../services/authService';
import AsyncStorage from '@react-native-async-storage/async-storage';
import { AuthService } from '../../services/authService';
import AsyncStorage from '@react-native-async-storage/async-storage';
import * as AppleAuthentication from 'expo-apple-authentication';
import { usePostHog } from 'posthog-react-native';
export default function SignupScreen() {
const { isDarkMode, colorPalette, hydrateSession, getPendingPlant, t } = useApp();
const colors = useColors(isDarkMode, colorPalette);
const pendingPlant = getPendingPlant();
const { isDarkMode, colorPalette, hydrateSession, getPendingPlant, t } = useApp();
const colors = useColors(isDarkMode, colorPalette);
const posthog = usePostHog();
const pendingPlant = getPendingPlant();
const [name, setName] = useState('');
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [passwordConfirm, setPasswordConfirm] = useState('');
const [showPassword, setShowPassword] = useState(false);
const [showPasswordConfirm, setShowPasswordConfirm] = useState(false);
const [loading, setLoading] = useState(false);
const [error, setError] = useState<string | null>(null);
const [passwordConfirm, setPasswordConfirm] = useState('');
const [showPassword, setShowPassword] = useState(false);
const [showPasswordConfirm, setShowPasswordConfirm] = useState(false);
const [appleAvailable, setAppleAvailable] = useState(false);
const [loading, setLoading] = useState(false);
const [error, setError] = useState<string | null>(null);
useEffect(() => {
let mounted = true;
AppleAuthentication.isAvailableAsync()
.then((available) => {
if (mounted) setAppleAvailable(available);
})
.catch(() => {
if (mounted) setAppleAvailable(false);
});
return () => {
mounted = false;
};
}, []);
const validate = (): string | null => {
if (!name.trim()) return t.errNameRequired;
@@ -50,11 +68,11 @@ export default function SignupScreen() {
setLoading(true);
setError(null);
try {
const session = await AuthService.signUp(email, name, password);
await hydrateSession(session);
// Flag setzen: Tour beim nächsten App-Öffnen anzeigen
await AsyncStorage.setItem('greenlens_show_tour', 'true');
router.replace('/(tabs)');
const session = await AuthService.signUp(email, name, password);
await hydrateSession(session);
// Flag setzen: Tour beim nächsten App-Öffnen anzeigen
await AsyncStorage.setItem('greenlens_show_tour', 'true');
router.replace('/profile/billing');
} catch (e: any) {
if (e.message === 'EMAIL_TAKEN') {
setError(t.errEmailTaken);
@@ -71,8 +89,54 @@ export default function SignupScreen() {
}
} finally {
setLoading(false);
}
};
}
};
const handleAppleSignIn = async () => {
setLoading(true);
setError(null);
posthog.capture('apple_login_started', { surface: 'signup' });
try {
const credential = await AppleAuthentication.signInAsync({
requestedScopes: [
AppleAuthentication.AppleAuthenticationScope.FULL_NAME,
AppleAuthentication.AppleAuthenticationScope.EMAIL,
],
});
if (!credential.identityToken) {
throw new Error('APPLE_AUTH_INVALID');
}
const fullName = [
credential.fullName?.givenName,
credential.fullName?.familyName,
].filter(Boolean).join(' ');
const session = await AuthService.signInWithApple({
identityToken: credential.identityToken,
appleUser: credential.user,
email: credential.email,
name: fullName || undefined,
});
await hydrateSession(session);
await AsyncStorage.setItem('greenlens_show_tour', 'true');
posthog.capture('apple_login_succeeded', { surface: 'signup' });
router.replace('/profile/billing');
} catch (e: any) {
if (e?.code === 'ERR_REQUEST_CANCELED') {
return;
}
posthog.capture('apple_login_failed', {
surface: 'signup',
error: e instanceof Error ? e.message : String(e),
});
setError(e?.message === 'APPLE_BACKEND_UNAVAILABLE'
? 'Apple Login ist auf dem Backend noch nicht aktiviert. Bitte Backend neu starten oder deployen.'
: t.errAuthError);
} finally {
setLoading(false);
}
};
return (
<KeyboardAvoidingView
@@ -114,10 +178,30 @@ export default function SignupScreen() {
</View>
)}
{/* Card */}
<View style={[styles.card, { backgroundColor: colors.surface, borderColor: colors.cardBorder, shadowColor: colors.cardShadow }]}>
{/* Name */}
<View style={styles.fieldGroup}>
{/* Card */}
<View style={[styles.card, { backgroundColor: colors.surface, borderColor: colors.cardBorder, shadowColor: colors.cardShadow }]}>
{appleAvailable ? (
<AppleAuthentication.AppleAuthenticationButton
buttonType={AppleAuthentication.AppleAuthenticationButtonType.CONTINUE}
buttonStyle={isDarkMode
? AppleAuthentication.AppleAuthenticationButtonStyle.WHITE
: AppleAuthentication.AppleAuthenticationButtonStyle.BLACK}
cornerRadius={12}
style={styles.appleButton}
onPress={handleAppleSignIn}
/>
) : null}
{appleAvailable ? (
<View style={styles.dividerRowCompact}>
<View style={[styles.dividerLine, { backgroundColor: colors.border }]} />
<Text style={[styles.dividerText, { color: colors.textMuted }]}>{t.orDivider}</Text>
<View style={[styles.dividerLine, { backgroundColor: colors.border }]} />
</View>
) : null}
{/* Name */}
<View style={styles.fieldGroup}>
<Text style={[styles.label, { color: colors.textSecondary }]}>Name</Text>
<View style={[styles.inputRow, { backgroundColor: colors.inputBg, borderColor: colors.inputBorder }]}>
<Ionicons name="person-outline" size={18} color={colors.textMuted} style={styles.inputIcon} />
@@ -317,17 +401,36 @@ const styles = StyleSheet.create({
fontSize: 15,
fontWeight: '400',
},
card: {
borderRadius: 20,
borderWidth: 1,
card: {
borderRadius: 20,
borderWidth: 1,
padding: 24,
gap: 14,
shadowOffset: { width: 0, height: 4 },
shadowOpacity: 1,
shadowRadius: 12,
elevation: 4,
},
fieldGroup: {
shadowRadius: 12,
elevation: 4,
},
appleButton: {
width: '100%',
height: 50,
marginBottom: 2,
},
dividerRowCompact: {
flexDirection: 'row',
alignItems: 'center',
gap: 12,
marginVertical: 2,
},
dividerLine: {
flex: 1,
height: 1,
},
dividerText: {
fontSize: 12,
fontWeight: '500',
},
fieldGroup: {
gap: 6,
},
label: {

View File

@@ -11,35 +11,25 @@ import { PlantDatabaseService } from '../services/plantDatabaseService';
import { IdentificationResult } from '../types';
import { DatabaseEntry } from '../services/plantDatabaseService';
import { ResultCard } from '../components/ResultCard';
import { ThemeBackdrop } from '../components/ThemeBackdrop';
import { SafeImage } from '../components/SafeImage';
import { resolveImageUri } from '../utils/imageUri';
export default function LexiconScreen() {
const { isDarkMode, colorPalette, language, t, savePlant, getLexiconSearchHistory, saveLexiconSearchQuery, clearLexiconSearchHistory } = useApp();
const colors = useColors(isDarkMode, colorPalette);
const insets = useSafeAreaInsets();
const router = useRouter();
const params = useLocalSearchParams();
const categoryIdParam = Array.isArray(params.categoryId) ? params.categoryId[0] : params.categoryId;
const categoryLabelParam = Array.isArray(params.categoryLabel) ? params.categoryLabel[0] : params.categoryLabel;
const decodeParam = (value?: string | string[]) => {
if (!value || typeof value !== 'string') return '';
try {
return decodeURIComponent(value);
} catch {
return value;
}
};
const initialCategoryId = typeof categoryIdParam === 'string' ? categoryIdParam : null;
const initialCategoryLabel = decodeParam(categoryLabelParam);
const topInsetFallback = Platform.OS === 'android' ? (StatusBar.currentHeight || 0) : 20;
const topInset = insets.top > 0 ? insets.top : topInsetFallback;
const [searchQuery, setSearchQuery] = useState(initialCategoryLabel);
const [activeCategoryId, setActiveCategoryId] = useState<string | null>(initialCategoryId);
import { ThemeBackdrop } from '../components/ThemeBackdrop';
import { SafeImage } from '../components/SafeImage';
import { resolveImageUri } from '../utils/imageUri';
import { OnboardingProgressService } from '../services/onboardingProgressService';
export default function LexiconScreen() {
const { session, isDarkMode, colorPalette, language, t, savePlant, getLexiconSearchHistory, saveLexiconSearchQuery, clearLexiconSearchHistory } = useApp();
const colors = useColors(isDarkMode, colorPalette);
const insets = useSafeAreaInsets();
const router = useRouter();
const params = useLocalSearchParams();
const categoryIdParam = Array.isArray(params.categoryId) ? params.categoryId[0] : params.categoryId;
const initialCategoryId = typeof categoryIdParam === 'string' ? categoryIdParam : null;
const topInsetFallback = Platform.OS === 'android' ? (StatusBar.currentHeight || 0) : 20;
const topInset = insets.top > 0 ? insets.top : topInsetFallback;
const [searchQuery, setSearchQuery] = useState('');
const [activeCategoryId, setActiveCategoryId] = useState<string | null>(initialCategoryId);
const [selectedItem, setSelectedItem] = useState<(IdentificationResult & { imageUri: string }) | null>(null);
const [isAiSearching, setIsAiSearching] = useState(false);
const [aiResults, setAiResults] = useState<DatabaseEntry[] | null>(null);
@@ -66,20 +56,25 @@ export default function LexiconScreen() {
}
}
}
}, [detailParam]);
}, [detailParam]);
React.useEffect(() => {
setActiveCategoryId(initialCategoryId);
setSearchQuery('');
}, [initialCategoryId]);
React.useEffect(() => {
setActiveCategoryId(initialCategoryId);
setSearchQuery(initialCategoryLabel);
}, [initialCategoryId, initialCategoryLabel]);
React.useEffect(() => {
const loadHistory = async () => {
const history = getLexiconSearchHistory();
setSearchHistory(history);
};
loadHistory();
}, []);
React.useEffect(() => {
const loadHistory = async () => {
const history = getLexiconSearchHistory();
setSearchHistory(history);
};
loadHistory();
}, []);
React.useEffect(() => {
if (!session?.userId) return;
OnboardingProgressService.completeStep(session.userId, 'lexicon');
}, [session?.userId]);
const handleResultClose = () => {
if (openedWithDetail) {

View File

@@ -0,0 +1,341 @@
import React from 'react';
import { ScrollView, StyleSheet, Text, TouchableOpacity, View } from 'react-native';
import { SafeAreaView } from 'react-native-safe-area-context';
import { Ionicons } from '@expo/vector-icons';
import { useRouter } from 'expo-router';
import { usePostHog } from 'posthog-react-native';
import { ThemeBackdrop } from '../../components/ThemeBackdrop';
import { useColors } from '../../constants/Colors';
import { useApp } from '../../context/AppContext';
import { OnboardingProgressService } from '../../services/onboardingProgressService';
import { AppearanceMode, ColorPalette, Language } from '../../types';
const PALETTE_SWATCHES: Record<ColorPalette, string[]> = {
forest: ['#5fa779', '#3d7f57'],
ocean: ['#5a90be', '#3d6f99'],
sunset: ['#c98965', '#a36442'],
mono: ['#7b8796', '#5b6574'],
};
export default function CustomizeOnboardingScreen() {
const router = useRouter();
const posthog = usePostHog();
const {
session,
isDarkMode,
appearanceMode,
colorPalette,
language,
setAppearanceMode,
setColorPalette,
changeLanguage,
t,
} = useApp();
const colors = useColors(isDarkMode, colorPalette);
const finishCustomization = () => {
if (session?.userId) {
OnboardingProgressService.completeStep(session.userId, 'customize');
}
posthog.capture('onboarding_customization_completed', {
appearance_mode: appearanceMode,
color_palette: colorPalette,
language,
});
router.back();
};
const skipCustomization = () => {
posthog.capture('onboarding_customization_skipped');
router.back();
};
return (
<View style={[styles.container, { backgroundColor: colors.background }]}>
<ThemeBackdrop colors={colors} />
<SafeAreaView style={styles.safeArea} edges={['top', 'left', 'right', 'bottom']}>
<View style={styles.header}>
<TouchableOpacity onPress={skipCustomization} style={[styles.iconBtn, { backgroundColor: colors.surface, borderColor: colors.border }]}>
<Ionicons name="close" size={20} color={colors.text} />
</TouchableOpacity>
<View style={styles.headerCopy}>
<Text style={[styles.eyebrow, { color: colors.primary }]}>{t.onboardingChecklistIntro}</Text>
<Text style={[styles.title, { color: colors.text }]}>{t.customizeOnboardingTitle}</Text>
<Text style={[styles.subtitle, { color: colors.textSecondary }]}>{t.customizeOnboardingSubtitle}</Text>
</View>
</View>
<ScrollView contentContainerStyle={styles.content} showsVerticalScrollIndicator={false}>
<View style={[styles.previewCard, { backgroundColor: colors.surface, borderColor: colors.border }]}>
<Text style={[styles.previewLabel, { color: colors.textMuted }]}>{t.customizeOnboardingPreview}</Text>
<Text style={[styles.previewTitle, { color: colors.text }]}>{t.onboardingTagline}</Text>
<View style={styles.previewMeta}>
<View style={[styles.previewChip, { backgroundColor: colors.primarySoft }]}>
<Text style={[styles.previewChipText, { color: colors.primaryDark }]}>{appearanceMode}</Text>
</View>
<View style={[styles.previewChip, { backgroundColor: colors.surfaceMuted }]}>
<Text style={[styles.previewChipText, { color: colors.text }]}>{colorPalette}</Text>
</View>
<View style={[styles.previewChip, { backgroundColor: colors.surfaceMuted }]}>
<Text style={[styles.previewChipText, { color: colors.text }]}>{language.toUpperCase()}</Text>
</View>
</View>
</View>
<View style={[styles.card, { backgroundColor: colors.surface, borderColor: colors.border }]}>
<Text style={[styles.sectionTitle, { color: colors.text }]}>{t.appearanceMode}</Text>
<View style={styles.segmentedControl}>
{(['system', 'light', 'dark'] as AppearanceMode[]).map((mode) => {
const isActive = appearanceMode === mode;
const label = mode === 'system' ? t.themeSystem : mode === 'light' ? t.themeLight : t.themeDark;
return (
<TouchableOpacity
key={mode}
style={[styles.segmentBtn, isActive && { backgroundColor: colors.primary }]}
onPress={() => setAppearanceMode(mode)}
>
<Text style={[styles.segmentText, { color: isActive ? colors.onPrimary : colors.text }]}>
{label}
</Text>
</TouchableOpacity>
);
})}
</View>
</View>
<View style={[styles.card, { backgroundColor: colors.surface, borderColor: colors.border }]}>
<Text style={[styles.sectionTitle, { color: colors.text }]}>{t.colorPalette}</Text>
<View style={styles.swatchContainer}>
{(['forest', 'ocean', 'sunset', 'mono'] as ColorPalette[]).map((palette) => {
const isActive = colorPalette === palette;
const swatch = PALETTE_SWATCHES[palette];
const label =
palette === 'forest'
? t.paletteForest
: palette === 'ocean'
? t.paletteOcean
: palette === 'sunset'
? t.paletteSunset
: t.paletteMono;
return (
<TouchableOpacity
key={palette}
style={[styles.swatchWrap, isActive && { borderColor: colors.primary }]}
onPress={() => setColorPalette(palette)}
>
<View style={[styles.swatch, { backgroundColor: swatch[0] }]} />
<Text style={[styles.swatchLabel, { color: colors.text }]}>{label}</Text>
</TouchableOpacity>
);
})}
</View>
</View>
<View style={[styles.card, { backgroundColor: colors.surface, borderColor: colors.border }]}>
<Text style={[styles.sectionTitle, { color: colors.text }]}>{t.language}</Text>
<View style={styles.languageRow}>
{(['en', 'de', 'es'] as Language[]).map((lang) => {
const isActive = language === lang;
const label = lang === 'en' ? 'English' : lang === 'de' ? 'Deutsch' : 'Español';
return (
<TouchableOpacity
key={lang}
style={[styles.languageBtn, isActive && { backgroundColor: colors.primary }]}
onPress={() => changeLanguage(lang)}
>
<Text style={{ color: isActive ? colors.onPrimary : colors.text, fontWeight: '600' }}>
{label}
</Text>
</TouchableOpacity>
);
})}
</View>
</View>
</ScrollView>
<View style={styles.footer}>
<TouchableOpacity
style={[styles.secondaryBtn, { borderColor: colors.borderStrong, backgroundColor: colors.surface }]}
onPress={skipCustomization}
>
<Text style={[styles.secondaryBtnText, { color: colors.text }]}>{t.customizeOnboardingSkip}</Text>
</TouchableOpacity>
<TouchableOpacity style={[styles.primaryBtn, { backgroundColor: colors.primary }]} onPress={finishCustomization}>
<Text style={[styles.primaryBtnText, { color: colors.onPrimary }]}>{t.customizeOnboardingContinue}</Text>
</TouchableOpacity>
</View>
</SafeAreaView>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
},
safeArea: {
flex: 1,
},
header: {
flexDirection: 'row',
alignItems: 'flex-start',
gap: 14,
paddingHorizontal: 20,
paddingTop: 12,
},
iconBtn: {
width: 40,
height: 40,
borderRadius: 20,
borderWidth: 1,
alignItems: 'center',
justifyContent: 'center',
},
headerCopy: {
flex: 1,
gap: 6,
paddingTop: 2,
},
eyebrow: {
fontSize: 12,
fontWeight: '700',
letterSpacing: 0.4,
textTransform: 'uppercase',
},
title: {
fontSize: 28,
fontWeight: '800',
lineHeight: 32,
},
subtitle: {
fontSize: 14,
lineHeight: 20,
},
content: {
padding: 20,
gap: 16,
},
previewCard: {
borderWidth: 1,
borderRadius: 24,
padding: 18,
gap: 10,
},
previewLabel: {
fontSize: 11,
fontWeight: '700',
letterSpacing: 0.5,
textTransform: 'uppercase',
},
previewTitle: {
fontSize: 20,
fontWeight: '700',
},
previewMeta: {
flexDirection: 'row',
flexWrap: 'wrap',
gap: 8,
},
previewChip: {
borderRadius: 999,
paddingHorizontal: 10,
paddingVertical: 6,
},
previewChipText: {
fontSize: 12,
fontWeight: '700',
},
card: {
padding: 18,
borderRadius: 20,
borderWidth: 1,
gap: 14,
},
sectionTitle: {
fontSize: 15,
fontWeight: '700',
},
segmentedControl: {
flexDirection: 'row',
backgroundColor: '#00000010',
borderRadius: 14,
padding: 4,
},
segmentBtn: {
flex: 1,
paddingVertical: 12,
borderRadius: 10,
alignItems: 'center',
},
segmentText: {
fontSize: 14,
fontWeight: '600',
},
swatchContainer: {
flexDirection: 'row',
justifyContent: 'space-between',
gap: 10,
},
swatchWrap: {
flex: 1,
alignItems: 'center',
paddingVertical: 8,
borderRadius: 16,
borderWidth: 2,
borderColor: 'transparent',
gap: 8,
},
swatch: {
width: 52,
height: 52,
borderRadius: 26,
},
swatchLabel: {
fontSize: 12,
fontWeight: '600',
},
languageRow: {
flexDirection: 'row',
flexWrap: 'wrap',
gap: 12,
},
languageBtn: {
paddingHorizontal: 16,
paddingVertical: 12,
borderRadius: 14,
backgroundColor: '#00000010',
},
footer: {
flexDirection: 'row',
gap: 12,
paddingHorizontal: 20,
paddingBottom: 20,
},
secondaryBtn: {
flex: 1,
height: 52,
borderRadius: 16,
borderWidth: 1.5,
alignItems: 'center',
justifyContent: 'center',
},
secondaryBtnText: {
fontSize: 15,
fontWeight: '600',
},
primaryBtn: {
flex: 1.3,
height: 52,
borderRadius: 16,
alignItems: 'center',
justifyContent: 'center',
},
primaryBtnText: {
fontSize: 15,
fontWeight: '700',
},
});

View File

@@ -0,0 +1,129 @@
import React, { useMemo, useState } from 'react';
import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
import { SafeAreaView } from 'react-native-safe-area-context';
import { useRouter } from 'expo-router';
import { Ionicons } from '@expo/vector-icons';
import { usePostHog } from 'posthog-react-native';
import { ThemeBackdrop } from '../../components/ThemeBackdrop';
import { useColors } from '../../constants/Colors';
import { useApp } from '../../context/AppContext';
import { OnboardingProgressService } from '../../services/onboardingProgressService';
const EXPERIENCE_OPTIONS = [
{ id: 'beginner', icon: 'leaf-outline' as const },
{ id: 'intermediate', icon: 'sunny-outline' as const },
{ id: 'advanced', icon: 'flask-outline' as const },
];
export default function OnboardingExperienceScreen() {
const router = useRouter();
const posthog = usePostHog();
const { session, isDarkMode, colorPalette, t } = useApp();
const colors = useColors(isDarkMode, colorPalette);
const [selectedLevel, setSelectedLevel] = useState<string | null>(null);
const levelLabels = useMemo(
() => ({
beginner: t.experienceOptionBeginner,
intermediate: t.experienceOptionIntermediate,
advanced: t.experienceOptionAdvanced,
}),
[t.experienceOptionAdvanced, t.experienceOptionBeginner, t.experienceOptionIntermediate],
);
const finish = (level: string | null) => {
if (session?.userId && level) {
OnboardingProgressService.setExperienceLevel(session.userId, level);
}
posthog.capture('onboarding_experience_completed', {
experience_level: level ?? 'skipped',
});
router.replace('/(tabs)');
};
return (
<View style={[styles.container, { backgroundColor: colors.background }]}>
<ThemeBackdrop colors={colors} />
<SafeAreaView style={styles.safeArea} edges={['top', 'left', 'right', 'bottom']}>
<View style={styles.header}>
<View style={[styles.headerIcon, { backgroundColor: colors.primarySoft }]}>
<Ionicons name="sparkles-outline" size={26} color={colors.primaryDark} />
</View>
<Text style={[styles.title, { color: colors.text }]}>{t.experienceOnboardingTitle}</Text>
<Text style={[styles.subtitle, { color: colors.textSecondary }]}>{t.experienceOnboardingSubtitle}</Text>
</View>
<View style={styles.options}>
{EXPERIENCE_OPTIONS.map((option) => {
const isActive = selectedLevel === option.id;
return (
<TouchableOpacity
key={option.id}
style={[
styles.optionCard,
{
backgroundColor: isActive ? colors.primarySoft : colors.surface,
borderColor: isActive ? colors.primary : colors.border,
},
]}
onPress={() => setSelectedLevel(option.id)}
activeOpacity={0.85}
>
<View style={[styles.optionIcon, { backgroundColor: isActive ? colors.primary : colors.surfaceMuted }]}>
<Ionicons name={option.icon} size={18} color={isActive ? colors.onPrimary : colors.textMuted} />
</View>
<Text style={[styles.optionLabel, { color: colors.text }]}>{levelLabels[option.id as keyof typeof levelLabels]}</Text>
{isActive && <Ionicons name="checkmark-circle" size={18} color={colors.primary} />}
</TouchableOpacity>
);
})}
</View>
<View style={styles.footer}>
<TouchableOpacity
style={[styles.secondaryBtn, { borderColor: colors.borderStrong, backgroundColor: colors.surface }]}
onPress={() => finish(null)}
>
<Text style={[styles.secondaryBtnText, { color: colors.text }]}>{t.experienceOnboardingSkip}</Text>
</TouchableOpacity>
<TouchableOpacity
style={[styles.primaryBtn, { backgroundColor: selectedLevel ? colors.primary : colors.surfaceMuted }]}
onPress={() => finish(selectedLevel)}
disabled={!selectedLevel}
>
<Text style={[styles.primaryBtnText, { color: selectedLevel ? colors.onPrimary : colors.textMuted }]}>
{t.experienceOnboardingContinue}
</Text>
</TouchableOpacity>
</View>
</SafeAreaView>
</View>
);
}
const styles = StyleSheet.create({
container: { flex: 1 },
safeArea: { flex: 1, paddingHorizontal: 20, paddingTop: 24, paddingBottom: 20 },
header: { alignItems: 'center', gap: 10, marginBottom: 28 },
headerIcon: { width: 64, height: 64, borderRadius: 32, alignItems: 'center', justifyContent: 'center' },
title: { fontSize: 28, fontWeight: '800', textAlign: 'center', lineHeight: 32 },
subtitle: { fontSize: 14, textAlign: 'center', lineHeight: 20, maxWidth: 320 },
options: { gap: 12, flex: 1 },
optionCard: {
minHeight: 64,
borderRadius: 18,
borderWidth: 1.5,
flexDirection: 'row',
alignItems: 'center',
paddingHorizontal: 16,
gap: 12,
},
optionIcon: { width: 36, height: 36, borderRadius: 18, alignItems: 'center', justifyContent: 'center' },
optionLabel: { flex: 1, fontSize: 15, fontWeight: '600' },
footer: { flexDirection: 'row', gap: 12, marginTop: 16 },
secondaryBtn: { flex: 1, height: 52, borderRadius: 16, borderWidth: 1.5, alignItems: 'center', justifyContent: 'center' },
secondaryBtnText: { fontSize: 15, fontWeight: '600' },
primaryBtn: { flex: 1.2, height: 52, borderRadius: 16, alignItems: 'center', justifyContent: 'center' },
primaryBtnText: { fontSize: 15, fontWeight: '700' },
});

131
app/onboarding/goal.tsx Normal file
View File

@@ -0,0 +1,131 @@
import React, { useMemo, useState } from 'react';
import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
import { SafeAreaView } from 'react-native-safe-area-context';
import { useRouter } from 'expo-router';
import { Ionicons } from '@expo/vector-icons';
import { usePostHog } from 'posthog-react-native';
import { ThemeBackdrop } from '../../components/ThemeBackdrop';
import { useColors } from '../../constants/Colors';
import { useApp } from '../../context/AppContext';
import { OnboardingProgressService } from '../../services/onboardingProgressService';
const GOAL_OPTIONS = [
{ id: 'identify', icon: 'scan-outline' as const },
{ id: 'care', icon: 'water-outline' as const },
{ id: 'collection', icon: 'albums-outline' as const },
{ id: 'learn', icon: 'book-outline' as const },
];
export default function OnboardingGoalScreen() {
const router = useRouter();
const posthog = usePostHog();
const { session, isDarkMode, colorPalette, t } = useApp();
const colors = useColors(isDarkMode, colorPalette);
const [selectedGoal, setSelectedGoal] = useState<string | null>(null);
const goalLabels = useMemo(
() => ({
identify: t.goalOptionIdentify,
care: t.goalOptionCare,
collection: t.goalOptionCollection,
learn: t.goalOptionLearn,
}),
[t.goalOptionCare, t.goalOptionCollection, t.goalOptionIdentify, t.goalOptionLearn],
);
const finish = (goal: string | null) => {
if (session?.userId && goal) {
OnboardingProgressService.setPrimaryGoal(session.userId, goal);
}
posthog.capture('onboarding_goal_completed', {
goal: goal ?? 'skipped',
});
router.replace('/onboarding/experience');
};
return (
<View style={[styles.container, { backgroundColor: colors.background }]}>
<ThemeBackdrop colors={colors} />
<SafeAreaView style={styles.safeArea} edges={['top', 'left', 'right', 'bottom']}>
<View style={styles.header}>
<View style={[styles.headerIcon, { backgroundColor: colors.primarySoft }]}>
<Ionicons name="flag-outline" size={26} color={colors.primaryDark} />
</View>
<Text style={[styles.title, { color: colors.text }]}>{t.goalOnboardingTitle}</Text>
<Text style={[styles.subtitle, { color: colors.textSecondary }]}>{t.goalOnboardingSubtitle}</Text>
</View>
<View style={styles.options}>
{GOAL_OPTIONS.map((option) => {
const isActive = selectedGoal === option.id;
return (
<TouchableOpacity
key={option.id}
style={[
styles.optionCard,
{
backgroundColor: isActive ? colors.primarySoft : colors.surface,
borderColor: isActive ? colors.primary : colors.border,
},
]}
onPress={() => setSelectedGoal(option.id)}
activeOpacity={0.85}
>
<View style={[styles.optionIcon, { backgroundColor: isActive ? colors.primary : colors.surfaceMuted }]}>
<Ionicons name={option.icon} size={18} color={isActive ? colors.onPrimary : colors.textMuted} />
</View>
<Text style={[styles.optionLabel, { color: colors.text }]}>{goalLabels[option.id as keyof typeof goalLabels]}</Text>
{isActive && <Ionicons name="checkmark-circle" size={18} color={colors.primary} />}
</TouchableOpacity>
);
})}
</View>
<View style={styles.footer}>
<TouchableOpacity
style={[styles.secondaryBtn, { borderColor: colors.borderStrong, backgroundColor: colors.surface }]}
onPress={() => finish(null)}
>
<Text style={[styles.secondaryBtnText, { color: colors.text }]}>{t.goalOnboardingSkip}</Text>
</TouchableOpacity>
<TouchableOpacity
style={[styles.primaryBtn, { backgroundColor: selectedGoal ? colors.primary : colors.surfaceMuted }]}
onPress={() => finish(selectedGoal)}
disabled={!selectedGoal}
>
<Text style={[styles.primaryBtnText, { color: selectedGoal ? colors.onPrimary : colors.textMuted }]}>
{t.goalOnboardingContinue}
</Text>
</TouchableOpacity>
</View>
</SafeAreaView>
</View>
);
}
const styles = StyleSheet.create({
container: { flex: 1 },
safeArea: { flex: 1, paddingHorizontal: 20, paddingTop: 24, paddingBottom: 20 },
header: { alignItems: 'center', gap: 10, marginBottom: 28 },
headerIcon: { width: 64, height: 64, borderRadius: 32, alignItems: 'center', justifyContent: 'center' },
title: { fontSize: 28, fontWeight: '800', textAlign: 'center', lineHeight: 32 },
subtitle: { fontSize: 14, textAlign: 'center', lineHeight: 20, maxWidth: 320 },
options: { gap: 12, flex: 1 },
optionCard: {
minHeight: 64,
borderRadius: 18,
borderWidth: 1.5,
flexDirection: 'row',
alignItems: 'center',
paddingHorizontal: 16,
gap: 12,
},
optionIcon: { width: 36, height: 36, borderRadius: 18, alignItems: 'center', justifyContent: 'center' },
optionLabel: { flex: 1, fontSize: 15, fontWeight: '600' },
footer: { flexDirection: 'row', gap: 12, marginTop: 16 },
secondaryBtn: { flex: 1, height: 52, borderRadius: 16, borderWidth: 1.5, alignItems: 'center', justifyContent: 'center' },
secondaryBtnText: { fontSize: 15, fontWeight: '600' },
primaryBtn: { flex: 1.2, height: 52, borderRadius: 16, alignItems: 'center', justifyContent: 'center' },
primaryBtnText: { fontSize: 15, fontWeight: '700' },
});

213
app/onboarding/source.tsx Normal file
View File

@@ -0,0 +1,213 @@
import React, { useMemo, useState } from 'react';
import { StyleSheet, Text, TouchableOpacity, View } from 'react-native';
import { SafeAreaView } from 'react-native-safe-area-context';
import { useRouter } from 'expo-router';
import { Ionicons } from '@expo/vector-icons';
import { usePostHog } from 'posthog-react-native';
import { ThemeBackdrop } from '../../components/ThemeBackdrop';
import { useColors } from '../../constants/Colors';
import { useApp } from '../../context/AppContext';
import { OnboardingProgressService } from '../../services/onboardingProgressService';
const SOURCE_OPTIONS = [
{ id: 'app_store', icon: 'phone-portrait-outline' as const },
{ id: 'instagram', icon: 'logo-instagram' as const },
{ id: 'tiktok', icon: 'musical-notes-outline' as const },
{ id: 'friend', icon: 'people-outline' as const },
{ id: 'search', icon: 'search-outline' as const },
{ id: 'other', icon: 'ellipsis-horizontal-circle-outline' as const },
];
export default function OnboardingSourceScreen() {
const router = useRouter();
const posthog = usePostHog();
const { session, isDarkMode, colorPalette, t } = useApp();
const colors = useColors(isDarkMode, colorPalette);
const [selectedSource, setSelectedSource] = useState<string | null>(null);
const sourceLabels = useMemo(
() => ({
app_store: t.sourceOptionAppStore,
instagram: t.sourceOptionInstagram,
tiktok: t.sourceOptionTikTok,
friend: t.sourceOptionFriend,
search: t.sourceOptionSearch,
other: t.sourceOptionOther,
}),
[
t.sourceOptionAppStore,
t.sourceOptionFriend,
t.sourceOptionInstagram,
t.sourceOptionOther,
t.sourceOptionSearch,
t.sourceOptionTikTok,
],
);
const finish = (source: string | null) => {
if (session?.userId && source) {
OnboardingProgressService.setAcquisitionSource(session.userId, source);
}
posthog.capture('onboarding_source_completed', {
source: source ?? 'skipped',
});
router.replace('/onboarding/goal');
};
return (
<View style={[styles.container, { backgroundColor: colors.background }]}>
<ThemeBackdrop colors={colors} />
<SafeAreaView style={styles.safeArea} edges={['top', 'left', 'right', 'bottom']}>
<View style={styles.header}>
<View style={[styles.headerIcon, { backgroundColor: colors.primarySoft }]}>
<Ionicons name="paper-plane-outline" size={26} color={colors.primaryDark} />
</View>
<Text style={[styles.title, { color: colors.text }]}>{t.sourceOnboardingTitle}</Text>
<Text style={[styles.subtitle, { color: colors.textSecondary }]}>{t.sourceOnboardingSubtitle}</Text>
</View>
<View style={styles.options}>
{SOURCE_OPTIONS.map((option) => {
const isActive = selectedSource === option.id;
return (
<TouchableOpacity
key={option.id}
style={[
styles.optionCard,
{
backgroundColor: isActive ? colors.primarySoft : colors.surface,
borderColor: isActive ? colors.primary : colors.border,
},
]}
onPress={() => setSelectedSource(option.id)}
activeOpacity={0.85}
>
<View style={[styles.optionIcon, { backgroundColor: isActive ? colors.primary : colors.surfaceMuted }]}>
<Ionicons name={option.icon} size={18} color={isActive ? colors.onPrimary : colors.textMuted} />
</View>
<Text style={[styles.optionLabel, { color: colors.text }]}>{sourceLabels[option.id as keyof typeof sourceLabels]}</Text>
{isActive && <Ionicons name="checkmark-circle" size={18} color={colors.primary} />}
</TouchableOpacity>
);
})}
</View>
<View style={styles.footer}>
<TouchableOpacity
style={[styles.secondaryBtn, { borderColor: colors.borderStrong, backgroundColor: colors.surface }]}
onPress={() => finish(null)}
>
<Text style={[styles.secondaryBtnText, { color: colors.text }]}>{t.sourceOnboardingSkip}</Text>
</TouchableOpacity>
<TouchableOpacity
style={[
styles.primaryBtn,
{ backgroundColor: selectedSource ? colors.primary : colors.surfaceMuted },
]}
onPress={() => finish(selectedSource)}
disabled={!selectedSource}
>
<Text
style={[
styles.primaryBtnText,
{ color: selectedSource ? colors.onPrimary : colors.textMuted },
]}
>
{t.sourceOnboardingContinue}
</Text>
</TouchableOpacity>
</View>
</SafeAreaView>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
},
safeArea: {
flex: 1,
paddingHorizontal: 20,
paddingTop: 24,
paddingBottom: 20,
},
header: {
alignItems: 'center',
gap: 10,
marginBottom: 28,
},
headerIcon: {
width: 64,
height: 64,
borderRadius: 32,
alignItems: 'center',
justifyContent: 'center',
},
title: {
fontSize: 28,
fontWeight: '800',
textAlign: 'center',
lineHeight: 32,
},
subtitle: {
fontSize: 14,
textAlign: 'center',
lineHeight: 20,
maxWidth: 320,
},
options: {
gap: 12,
flex: 1,
},
optionCard: {
minHeight: 64,
borderRadius: 18,
borderWidth: 1.5,
flexDirection: 'row',
alignItems: 'center',
paddingHorizontal: 16,
gap: 12,
},
optionIcon: {
width: 36,
height: 36,
borderRadius: 18,
alignItems: 'center',
justifyContent: 'center',
},
optionLabel: {
flex: 1,
fontSize: 15,
fontWeight: '600',
},
footer: {
flexDirection: 'row',
gap: 12,
marginTop: 16,
},
secondaryBtn: {
flex: 1,
height: 52,
borderRadius: 16,
borderWidth: 1.5,
alignItems: 'center',
justifyContent: 'center',
},
secondaryBtnText: {
fontSize: 15,
fontWeight: '600',
},
primaryBtn: {
flex: 1.2,
height: 52,
borderRadius: 16,
alignItems: 'center',
justifyContent: 'center',
},
primaryBtnText: {
fontSize: 15,
fontWeight: '700',
},
});

View File

@@ -12,15 +12,26 @@ import Purchases, {
PurchasesStoreProduct,
} from 'react-native-purchases';
import { useApp } from '../../context/AppContext';
import { usePostHog } from 'posthog-react-native';
import { useColors } from '../../constants/Colors';
import { ThemeBackdrop } from '../../components/ThemeBackdrop';
import { Language } from '../../types';
import { PurchaseProductId } from '../../services/backend/contracts';
type SubscriptionProductId = 'monthly_pro' | 'yearly_pro';
type TopupProductId = Extract<PurchaseProductId, 'topup_small' | 'topup_medium' | 'topup_large'>;
type SubscriptionPackages = Partial<Record<SubscriptionProductId, PurchasesPackage>>;
type TopupProducts = Partial<Record<TopupProductId, PurchasesStoreProduct>>;
type TopupProductId = Extract<PurchaseProductId, 'topup_small' | 'topup_medium' | 'topup_large'>;
type SubscriptionPackages = Partial<Record<SubscriptionProductId, PurchasesPackage>>;
type TopupProducts = Partial<Record<TopupProductId, PurchasesStoreProduct>>;
const TOPUP_CREDITS_BY_PRODUCT: Record<TopupProductId, number> = {
topup_small: 30,
topup_medium: 100,
topup_large: 250,
};
const isTopupProductId = (productId: PurchaseProductId): productId is TopupProductId => (
productId === 'topup_small' || productId === 'topup_medium' || productId === 'topup_large'
);
const isMatchingPackage = (
pkg: PurchasesPackage,
@@ -78,7 +89,22 @@ const getBillingCopy = (language: Language) => {
manageSubscription: 'Abo verwalten',
subscriptionTitle: 'Abos',
subscriptionHint: 'Wähle ein Abo und schalte stärkere KI-Scans sowie mehr Credits frei.',
freePlanName: 'Free',
paywallTitle: 'Vollstaendige Diagnose freischalten',
paywallHint: 'Starte Pro fuer echte GPT-5.4 Scans, deinen 7-Tage-Rettungsplan und 100 Credits fuer AI-Scans und Follow-ups.',
startTrial: '7 Tage kostenlos testen',
monthlyCta: 'Monatlich starten',
yearlyCta: 'Jaehrlich starten',
yearlyTrialBadge: '7 TAGE GRATIS',
monthlyBadge: 'FLEXIBEL',
yearlySubline: 'Danach 39,99 EUR/Jahr. Jederzeit kuendbar.',
monthlySubline: '4,99 EUR/Monat. Ohne Jahresbindung.',
saveLabel: 'Bester Wert',
expoGoPurchaseTitle: 'Kauf nur im Dev Build',
expoGoPurchaseMessage: 'Expo Go kann keine Apple- oder RevenueCat-Kaufmaske anzeigen. Im Development Build oder TestFlight erscheint hier der echte 7-Tage-Trial. Fuer lokale Tests kannst du Pro simulieren.',
expoGoSimulate: 'Pro simulieren',
perYear: '/ Jahr',
perMonth: '/ Monat',
freePlanName: 'Free',
freePlanPrice: '0 EUR / Monat',
proPlanName: 'Pro',
proPlanPrice: '4,99 € / Monat',
@@ -87,17 +113,20 @@ const getBillingCopy = (language: Language) => {
proYearlyPlanPrice: '39,99 € / Jahr',
proYearlyBadgeText: 'SPAREN',
proBenefits: [
'250 Credits jeden Monat',
'100 Credits für AI-Scans und Follow-ups jeden Monat',
'Pro-Scans mit GPT-5.4',
'Unbegrenzte Historie & Galerie',
'KI-Pflanzendoktor inklusive',
'Priorisierter Support'
],
topupTitle: 'Credits Aufladen',
topupSmall: '25 Credits 1,99 €',
topupMedium: '120 Credits 6,99 €',
topupLarge: '300 Credits 12,99 €',
topupBestValue: 'BESTES ANGEBOT',
topupHint: 'Für aktive Pro-Nutzer, wenn die Monatscredits nicht reichen.',
topupSmall: '30 Credits 2,99 €',
topupMedium: '100 Credits 6,99 €',
topupLarge: '250 Credits 12,99 €',
topupBestValue: 'BESTES ANGEBOT',
topupRequiresProTitle: 'Pro erforderlich',
topupRequiresProMessage: 'Top-ups sind für aktive Pro-Nutzer gedacht. Starte Pro, um zusätzliche Credits zu kaufen.',
cancelTitle: 'Schade, dass du gehst',
cancelQuestion: 'Dürfen wir fragen, warum du kündigst?',
reasonTooExpensive: 'Es ist mir zu teuer',
@@ -123,7 +152,22 @@ const getBillingCopy = (language: Language) => {
manageSubscription: 'Administrar Suscripción',
subscriptionTitle: 'Suscripciones',
subscriptionHint: 'Elige un plan y desbloquea escaneos con IA más potentes y más créditos.',
freePlanName: 'Gratis',
paywallTitle: 'Desbloquear diagnostico completo',
paywallHint: 'Inicia Pro para escaneos reales con GPT-5.4, tu plan de rescate de 7 dias y 100 creditos para escaneos IA y seguimientos.',
startTrial: 'Probar 7 dias gratis',
monthlyCta: 'Empezar mensual',
yearlyCta: 'Empezar anual',
yearlyTrialBadge: '7 DIAS GRATIS',
monthlyBadge: 'FLEXIBLE',
yearlySubline: 'Despues 39.99 EUR/ano. Cancela cuando quieras.',
monthlySubline: '4.99 EUR/mes. Sin compromiso anual.',
saveLabel: 'Mejor valor',
expoGoPurchaseTitle: 'Compra solo en Dev Build',
expoGoPurchaseMessage: 'Expo Go no puede mostrar la compra nativa de Apple o RevenueCat. En Development Build o TestFlight aparecera el trial real de 7 dias. Para pruebas locales puedes simular Pro.',
expoGoSimulate: 'Simular Pro',
perYear: '/ ano',
perMonth: '/ mes',
freePlanName: 'Gratis',
freePlanPrice: '0 EUR / Mes',
proPlanName: 'Pro',
proPlanPrice: '4.99 EUR / Mes',
@@ -132,17 +176,20 @@ const getBillingCopy = (language: Language) => {
proYearlyPlanPrice: '39.99 EUR / Año',
proYearlyBadgeText: 'AHORRAR',
proBenefits: [
'250 créditos cada mes',
'100 créditos para escaneos IA y seguimientos cada mes',
'Escaneos Pro con GPT-5.4',
'Historial y galería ilimitados',
'Doctor de plantas de IA incluido',
'Soporte prioritario'
],
topupTitle: 'Recargar Créditos',
topupSmall: '25 Créditos 1,99 €',
topupMedium: '120 Créditos 6,99 €',
topupLarge: '300 Créditos 12,99 €',
topupBestValue: 'MEJOR OFERTA',
topupHint: 'Para usuarios Pro activos cuando los créditos mensuales no alcanzan.',
topupSmall: '30 Créditos 2,99 €',
topupMedium: '100 Créditos 6,99 €',
topupLarge: '250 Créditos 12,99 €',
topupBestValue: 'MEJOR OFERTA',
topupRequiresProTitle: 'Pro requerido',
topupRequiresProMessage: 'Los top-ups son para usuarios Pro activos. Inicia Pro para comprar créditos adicionales.',
cancelTitle: 'Lamentamos verte ir',
cancelQuestion: '¿Podemos saber por qué cancelas?',
reasonTooExpensive: 'Es muy caro',
@@ -168,7 +215,22 @@ const getBillingCopy = (language: Language) => {
manageSubscription: 'Manage Subscription',
subscriptionTitle: 'Subscriptions',
subscriptionHint: 'Choose a plan to unlock stronger AI scans and more credits.',
freePlanName: 'Free',
paywallTitle: 'Unlock the full diagnosis',
paywallHint: 'Start Pro for real GPT-5.4 scans, your 7-day rescue plan, and 100 credits for AI scans and follow-ups.',
startTrial: 'Start 7-day free trial',
monthlyCta: 'Start monthly',
yearlyCta: 'Start yearly',
yearlyTrialBadge: '7 DAYS FREE',
monthlyBadge: 'FLEXIBLE',
yearlySubline: 'Then EUR 39.99/year. Cancel anytime.',
monthlySubline: 'EUR 4.99/month. No annual commitment.',
saveLabel: 'Best value',
expoGoPurchaseTitle: 'Purchase requires a dev build',
expoGoPurchaseMessage: 'Expo Go cannot show the native Apple or RevenueCat purchase sheet. In a Development Build or TestFlight this opens the real 7-day trial. For local testing you can simulate Pro.',
expoGoSimulate: 'Simulate Pro',
perYear: '/ year',
perMonth: '/ month',
freePlanName: 'Free',
freePlanPrice: '0 EUR / Month',
proPlanName: 'Pro',
proPlanPrice: '4.99 EUR / Month',
@@ -177,17 +239,20 @@ const getBillingCopy = (language: Language) => {
proYearlyPlanPrice: '39.99 EUR / Year',
proYearlyBadgeText: 'SAVE',
proBenefits: [
'250 credits every month',
'100 credits for AI scans and follow-ups every month',
'Pro scans with GPT-5.4',
'Unlimited history & gallery',
'AI Plant Doctor included',
'Priority support'
],
topupTitle: 'Topup Credits',
topupSmall: '25 Credits €1.99',
topupMedium: '120 Credits 6.99',
topupLarge: '300 Credits 12.99',
topupBestValue: 'BEST VALUE',
topupHint: 'For active Pro users when monthly credits are not enough.',
topupSmall: '30 Credits 2.99',
topupMedium: '100 Credits 6.99',
topupLarge: '250 Credits €12.99',
topupBestValue: 'BEST VALUE',
topupRequiresProTitle: 'Pro required',
topupRequiresProMessage: 'Top-ups are for active Pro users. Start Pro to buy extra credits.',
cancelTitle: 'Sorry to see you go',
cancelQuestion: 'May we ask why you are cancelling?',
reasonTooExpensive: 'It is too expensive',
@@ -211,6 +276,7 @@ export default function BillingScreen() {
const router = useRouter();
const { isDarkMode, language, billingSummary, isLoadingBilling, simulatePurchase, simulateWebhookEvent, syncRevenueCatState, colorPalette, session } = useApp();
const colors = useColors(isDarkMode, colorPalette);
const posthog = usePostHog();
const copy = getBillingCopy(language);
const isExpoGo = Constants.appOwnership === 'expo';
@@ -223,8 +289,9 @@ export default function BillingScreen() {
// Cancel Flow State
const [cancelStep, setCancelStep] = useState<'none' | 'survey' | 'offer'>('none');
const planId = billingSummary?.entitlement?.plan || 'free';
const credits = isLoadingBilling && !billingSummary ? '...' : (billingSummary?.credits?.available ?? '--');
const planId = billingSummary?.entitlement?.plan || 'free';
const credits = isLoadingBilling && !billingSummary ? '...' : (billingSummary?.credits?.available ?? '--');
const showPaywallPlans = !session || planId !== 'pro';
useEffect(() => {
let cancelled = false;
@@ -272,6 +339,16 @@ export default function BillingScreen() {
};
}, [isExpoGo]);
useEffect(() => {
posthog.capture('paywall_viewed', { plan_id: planId });
if (showPaywallPlans) {
posthog.capture('hard_paywall_viewed', {
plan_id: planId,
authenticated: Boolean(session),
});
}
}, [posthog, planId, session?.serverUserId, showPaywallPlans]);
const monthlyPackage = subscriptionPackages.monthly_pro;
const yearlyPackage = subscriptionPackages.yearly_pro;
@@ -279,21 +356,60 @@ export default function BillingScreen() {
const yearlyPrice = yearlyPackage?.product.priceString ?? copy.proYearlyPlanPrice;
const topupLabels = useMemo(() => ({
topup_small: topupProducts.topup_small ? `25 Credits - ${topupProducts.topup_small.priceString}` : copy.topupSmall,
topup_medium: topupProducts.topup_medium ? `120 Credits - ${topupProducts.topup_medium.priceString}` : copy.topupMedium,
topup_large: topupProducts.topup_large ? `300 Credits - ${topupProducts.topup_large.priceString}` : copy.topupLarge,
topup_small: topupProducts.topup_small ? `${TOPUP_CREDITS_BY_PRODUCT.topup_small} Credits - ${topupProducts.topup_small.priceString}` : copy.topupSmall,
topup_medium: topupProducts.topup_medium ? `${TOPUP_CREDITS_BY_PRODUCT.topup_medium} Credits - ${topupProducts.topup_medium.priceString}` : copy.topupMedium,
topup_large: topupProducts.topup_large ? `${TOPUP_CREDITS_BY_PRODUCT.topup_large} Credits - ${topupProducts.topup_large.priceString}` : copy.topupLarge,
}), [copy.topupLarge, copy.topupMedium, copy.topupSmall, topupProducts.topup_large, topupProducts.topup_medium, topupProducts.topup_small]);
const openAppleSubscriptions = async () => {
await Linking.openURL('itms-apps://apps.apple.com/account/subscriptions');
};
const handlePurchase = async (productId: PurchaseProductId) => {
setIsUpdating(true);
const openAppleSubscriptions = async () => {
await Linking.openURL('itms-apps://apps.apple.com/account/subscriptions');
};
const handleBack = () => {
if (showPaywallPlans) {
router.replace(session ? '/scanner' : '/onboarding');
return;
}
router.back();
};
const completeExpoGoSimulation = async (productId: PurchaseProductId) => {
setIsUpdating(true);
try {
await simulatePurchase(productId);
if (productId === 'monthly_pro' || productId === 'yearly_pro') {
posthog.capture('subscription_started', { product_id: productId, simulated: true });
posthog.capture('trial_started', { product_id: productId, simulated: true });
} else {
posthog.capture('topup_purchased', { product_id: productId, simulated: true });
}
} finally {
setIsUpdating(false);
}
};
const handlePurchase = async (productId: PurchaseProductId) => {
if (isTopupProductId(productId) && planId !== 'pro') {
Alert.alert(copy.topupRequiresProTitle, copy.topupRequiresProMessage, [
{ text: copy.manageSubscription, onPress: () => setSubModalVisible(true) },
]);
return;
}
setIsUpdating(true);
posthog.capture('purchase_initiated', { product_id: productId });
try {
if (isExpoGo) {
// ExpoGo has no native RevenueCat — use simulation for development only
await simulatePurchase(productId);
setIsUpdating(false);
if (productId === 'monthly_pro' || productId === 'yearly_pro') {
Alert.alert(copy.expoGoPurchaseTitle, copy.expoGoPurchaseMessage, [
{ text: 'OK', style: 'cancel' },
]);
return;
}
await completeExpoGoSimulation(productId);
return;
} else {
if (productId === 'monthly_pro' || productId === 'yearly_pro') {
if (planId === 'pro') {
@@ -316,7 +432,7 @@ export default function BillingScreen() {
// Derive plan locally from RevenueCat — backend sync via webhook comes later (Step 3)
const customerInfo = await Purchases.getCustomerInfo();
await syncRevenueCatState(customerInfo as any, 'subscription_purchase');
} else {
} else {
const selectedProduct = topupProducts[productId];
if (!selectedProduct) {
throw new Error('Top-up Produkt konnte nicht geladen werden. Bitte Store-Produkt IDs prüfen.');
@@ -324,16 +440,24 @@ export default function BillingScreen() {
await Purchases.purchaseStoreProduct(selectedProduct);
const customerInfo = await Purchases.getCustomerInfo();
await syncRevenueCatState(customerInfo as any, 'topup_purchase');
}
}
setSubModalVisible(false);
}
}
if (productId === 'monthly_pro' || productId === 'yearly_pro') {
posthog.capture('subscription_started', { product_id: productId });
posthog.capture('trial_started', { product_id: productId });
} else {
posthog.capture('topup_purchased', { product_id: productId });
}
setSubModalVisible(false);
} catch (e) {
const msg = e instanceof Error ? e.message : String(e);
const userCancelled = typeof e === 'object' && e !== null && 'userCancelled' in e && Boolean((e as { userCancelled?: boolean }).userCancelled);
if (userCancelled) {
return;
}
if (userCancelled) {
posthog.capture('purchase_cancelled', { product_id: productId });
posthog.capture('paywall_purchase_cancelled', { product_id: productId });
return;
}
// RevenueCat error code 7 = PRODUCT_ALREADY_PURCHASED — the Apple ID already
// owns this subscription on a different GreenLens account. Silently dismiss;
@@ -345,6 +469,7 @@ export default function BillingScreen() {
}
console.error('Payment failed', e);
posthog.capture('purchase_failed', { product_id: productId, error: msg });
Alert.alert('Unerwarteter Fehler', msg);
} finally {
setIsUpdating(false);
@@ -394,7 +519,7 @@ export default function BillingScreen() {
<ThemeBackdrop colors={colors} />
<SafeAreaView style={styles.safeArea} edges={['top']}>
<View style={styles.header}>
<TouchableOpacity onPress={() => router.back()} style={styles.backButton}>
<TouchableOpacity onPress={handleBack} style={styles.backButton}>
<Ionicons name="arrow-back" size={24} color={colors.text} />
</TouchableOpacity>
<Text style={[styles.title, { color: colors.text }]}>{copy.title}</Text>
@@ -406,7 +531,7 @@ export default function BillingScreen() {
<ActivityIndicator size="large" color={colors.primary} style={{ marginTop: 40 }} />
) : (
<>
{session && (
{session && planId === 'pro' && (
<View style={[styles.card, { backgroundColor: colors.cardBg, borderColor: colors.border }]}>
<Text style={[styles.sectionTitle, { color: colors.text }]}>{copy.planLabel}</Text>
<View style={[styles.row, { marginBottom: 16 }]}>
@@ -425,66 +550,73 @@ export default function BillingScreen() {
<Text style={[styles.creditsValue, { color: colors.text }]}>{credits}</Text>
</View>
)}
{!session && (
<View style={[styles.card, { backgroundColor: colors.cardBg, borderColor: colors.border }]}>
<Text style={[styles.sectionTitle, { color: colors.text }]}>Subscription Plans</Text>
<Text style={[styles.modalHint, { color: colors.text + '80', marginBottom: 16 }]}>
Choose a plan to unlock AI plant scans and care features.
</Text>
{showPaywallPlans && (
<View style={[styles.card, { backgroundColor: colors.cardBg, borderColor: colors.border }]}>
<Text style={[styles.paywallTitle, { color: colors.text }]}>{copy.paywallTitle}</Text>
<Text style={[styles.modalHint, { color: colors.text + '80', marginBottom: 16 }]}>
{copy.paywallHint}
</Text>
{/* Monthly */}
<View style={[styles.guestPlanCard, { borderColor: colors.primary, backgroundColor: colors.primary + '10' }]}>
<View style={styles.guestPlanHeader}>
<Text style={[styles.guestPlanName, { color: colors.text }]}>GreenLens Pro</Text>
<View style={[styles.proBadge, { backgroundColor: colors.primary }]}>
<Text style={styles.proBadgeText}>MONTHLY</Text>
</View>
</View>
<Text style={[styles.guestPlanPrice, { color: colors.text }]}>{monthlyPrice}</Text>
<Text style={[styles.guestPlanRenew, { color: colors.textMuted }]}>{copy.autoRenewMonthly}</Text>
<View style={{ gap: 4, marginTop: 8 }}>
{copy.proBenefits.map((b, i) => (
<View key={i} style={styles.benefitRow}>
<Ionicons name="checkmark" size={14} color={colors.primary} />
<Text style={[styles.benefitText, { color: colors.textSecondary }]}>{b}</Text>
</View>
))}
</View>
<TouchableOpacity
style={[styles.guestSubscribeBtn, { backgroundColor: colors.primary }]}
onPress={() => handlePurchase('monthly_pro')}
disabled={isUpdating || !storeReady}
>
<Text style={styles.manageBtnText}>Subscribe Monthly</Text>
</TouchableOpacity>
</View>
{/* Yearly */}
<View style={[styles.guestPlanCard, { borderColor: colors.border, marginTop: 12 }]}>
<View style={styles.guestPlanHeader}>
<Text style={[styles.guestPlanName, { color: colors.text }]}>GreenLens Pro</Text>
<View style={[styles.proBadge, { backgroundColor: colors.primary }]}>
<Text style={styles.proBadgeText}>YEARLY</Text>
</View>
</View>
<Text style={[styles.guestPlanPrice, { color: colors.text }]}>{yearlyPrice}</Text>
<Text style={[styles.guestPlanRenew, { color: colors.textMuted }]}>{copy.autoRenewYearly}</Text>
<View style={{ gap: 4, marginTop: 8 }}>
{copy.proBenefits.map((b, i) => (
<View key={i} style={styles.benefitRow}>
<Ionicons name="checkmark" size={14} color={colors.primary} />
<Text style={[styles.benefitText, { color: colors.textSecondary }]}>{b}</Text>
</View>
))}
</View>
<TouchableOpacity
style={[styles.guestSubscribeBtn, { backgroundColor: colors.primary }]}
onPress={() => handlePurchase('yearly_pro')}
disabled={isUpdating || !storeReady}
>
<Text style={styles.manageBtnText}>Subscribe Yearly</Text>
</TouchableOpacity>
</View>
<View style={styles.paywallValueRows}>
{copy.proBenefits.slice(0, 3).map((benefit, index) => (
<View key={benefit} style={[styles.paywallValueRow, { backgroundColor: colors.surfaceMuted }]}>
<Ionicons
name={index === 0 ? 'scan-outline' : index === 1 ? 'medkit-outline' : 'calendar-outline'}
size={17}
color={colors.primary}
/>
<Text style={[styles.paywallValueText, { color: colors.text }]}>{benefit}</Text>
</View>
))}
</View>
<TouchableOpacity
style={[styles.paywallPlanCardPrimary, { borderColor: colors.primary, backgroundColor: colors.primary + '12' }]}
onPress={() => handlePurchase('yearly_pro')}
disabled={isUpdating || !storeReady}
activeOpacity={0.9}
>
<View style={styles.planTopRow}>
<View>
<Text style={[styles.guestPlanName, { color: colors.text }]}>GreenLens Pro</Text>
<Text style={[styles.planSubline, { color: colors.textMuted }]}>{copy.saveLabel}</Text>
</View>
<View style={[styles.proBadge, { backgroundColor: colors.primary }]}>
<Text style={styles.proBadgeText}>{copy.yearlyTrialBadge}</Text>
</View>
</View>
<View style={styles.priceRow}>
<Text style={[styles.guestPlanPrice, { color: colors.text }]}>{yearlyPrice}</Text>
<Text style={[styles.planTerm, { color: colors.textMuted }]}>{copy.perYear}</Text>
</View>
<Text style={[styles.guestPlanRenew, { color: colors.textMuted }]}>{copy.yearlySubline}</Text>
<View style={[styles.trialCallout, { backgroundColor: colors.primarySoft }]}>
<Ionicons name="sparkles-outline" size={16} color={colors.primary} />
<Text style={[styles.trialCalloutText, { color: colors.text }]}>{copy.startTrial}</Text>
</View>
</TouchableOpacity>
<TouchableOpacity
style={[styles.paywallPlanCardSecondary, { borderColor: colors.border }]}
onPress={() => handlePurchase('monthly_pro')}
disabled={isUpdating || !storeReady}
activeOpacity={0.9}
>
<View style={styles.planTopRow}>
<View>
<Text style={[styles.guestPlanName, { color: colors.text }]}>Monatlich</Text>
<Text style={[styles.planSubline, { color: colors.textMuted }]}>{copy.monthlySubline}</Text>
</View>
<View style={[styles.secondaryBadge, { borderColor: colors.borderStrong }]}>
<Text style={[styles.secondaryBadgeText, { color: colors.textSecondary }]}>{copy.monthlyBadge}</Text>
</View>
</View>
<View style={styles.priceRow}>
<Text style={[styles.guestPlanPrice, { color: colors.text }]}>{monthlyPrice}</Text>
<Text style={[styles.planTerm, { color: colors.textMuted }]}>{copy.perMonth}</Text>
</View>
<Text style={[styles.monthlyCtaText, { color: colors.primary }]}>{copy.monthlyCta}</Text>
</TouchableOpacity>
<View style={[styles.legalLinksRow, { marginTop: 16 }]}>
<TouchableOpacity onPress={() => Linking.openURL('https://greenlenspro.com/privacy')}>
@@ -501,9 +633,11 @@ export default function BillingScreen() {
</View>
)}
<View style={[styles.card, { backgroundColor: colors.cardBg, borderColor: colors.border }]}>
<Text style={[styles.sectionTitle, { color: colors.text }]}>{copy.topupTitle}</Text>
<View style={{ gap: 10, marginTop: 8 }}>
{session && planId === 'pro' && !isExpoGo ? (
<View style={[styles.card, { backgroundColor: colors.cardBg, borderColor: colors.border }]}>
<Text style={[styles.sectionTitle, { color: colors.text }]}>{copy.topupTitle}</Text>
<Text style={[styles.modalHint, { color: colors.text + '80', marginBottom: 8 }]}>{copy.topupHint}</Text>
<View style={{ gap: 10, marginTop: 8 }}>
{([
{ id: 'topup_small' as PurchaseProductId, label: topupLabels.topup_small },
{ id: 'topup_medium' as PurchaseProductId, label: topupLabels.topup_medium, badge: copy.topupBestValue },
@@ -549,10 +683,11 @@ export default function BillingScreen() {
<Text style={[styles.legalLink, { color: colors.primary }]}>Terms of Use</Text>
</TouchableOpacity>
</View>
<TouchableOpacity style={styles.restoreBtn} onPress={handleRestore} disabled={isUpdating}>
<Text style={[styles.legalLink, { color: colors.textMuted }]}>{copy.restorePurchases}</Text>
</TouchableOpacity>
</View>
<TouchableOpacity style={styles.restoreBtn} onPress={handleRestore} disabled={isUpdating}>
<Text style={[styles.legalLink, { color: colors.textMuted }]}>{copy.restorePurchases}</Text>
</TouchableOpacity>
</View>
) : null}
</>
)}
</ScrollView>
@@ -768,11 +903,36 @@ const styles = StyleSheet.create({
fontSize: 14,
fontWeight: '600',
},
creditsValue: {
fontSize: 32,
fontWeight: '700',
},
topupBtn: {
creditsValue: {
fontSize: 32,
fontWeight: '700',
},
paywallTitle: {
fontSize: 24,
fontWeight: '800',
lineHeight: 30,
marginBottom: 8,
},
paywallValueRows: {
gap: 8,
marginBottom: 14,
},
paywallValueRow: {
minHeight: 42,
borderRadius: 12,
paddingHorizontal: 12,
paddingVertical: 10,
flexDirection: 'row',
alignItems: 'center',
gap: 9,
},
paywallValueText: {
flex: 1,
fontSize: 13,
fontWeight: '700',
lineHeight: 18,
},
topupBtn: {
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
@@ -929,29 +1089,93 @@ const styles = StyleSheet.create({
fontSize: 15,
fontWeight: '500',
},
guestPlanCard: {
borderWidth: 2,
borderRadius: 12,
padding: 16,
},
guestPlanHeader: {
flexDirection: 'row',
alignItems: 'center',
gap: 8,
marginBottom: 4,
},
guestPlanName: {
fontSize: 18,
fontWeight: '700',
},
guestPlanPrice: {
fontSize: 22,
fontWeight: '700',
marginBottom: 2,
},
guestPlanRenew: {
fontSize: 12,
},
guestPlanCard: {
borderWidth: 2,
borderRadius: 12,
padding: 16,
},
paywallPlanCardPrimary: {
borderWidth: 2,
borderRadius: 14,
padding: 16,
marginTop: 2,
},
paywallPlanCardSecondary: {
borderWidth: 1,
borderRadius: 14,
padding: 14,
marginTop: 10,
},
guestPlanHeader: {
flexDirection: 'row',
alignItems: 'center',
gap: 8,
marginBottom: 4,
},
planTopRow: {
flexDirection: 'row',
justifyContent: 'space-between',
alignItems: 'flex-start',
gap: 10,
marginBottom: 10,
},
guestPlanName: {
fontSize: 18,
fontWeight: '700',
},
planSubline: {
fontSize: 12,
fontWeight: '600',
marginTop: 2,
},
priceRow: {
flexDirection: 'row',
alignItems: 'baseline',
gap: 6,
},
guestPlanPrice: {
fontSize: 22,
fontWeight: '700',
marginBottom: 2,
},
planTerm: {
fontSize: 13,
fontWeight: '600',
},
guestPlanRenew: {
fontSize: 12,
lineHeight: 17,
},
trialCallout: {
minHeight: 46,
borderRadius: 12,
paddingHorizontal: 12,
paddingVertical: 10,
flexDirection: 'row',
alignItems: 'center',
justifyContent: 'center',
gap: 8,
marginTop: 14,
},
trialCalloutText: {
fontSize: 15,
fontWeight: '800',
},
secondaryBadge: {
borderWidth: 1,
borderRadius: 999,
paddingHorizontal: 8,
paddingVertical: 3,
},
secondaryBadgeText: {
fontSize: 10,
fontWeight: '800',
},
monthlyCtaText: {
fontSize: 13,
fontWeight: '800',
marginTop: 8,
},
guestSubscribeBtn: {
marginTop: 14,
paddingVertical: 12,

View File

@@ -6,18 +6,20 @@ import { useLocalSearchParams, useRouter } from 'expo-router';
import { Ionicons } from '@expo/vector-icons';
import { CameraView, useCameraPermissions } from 'expo-camera';
import { useSafeAreaInsets } from 'react-native-safe-area-context';
import * as ImagePicker from 'expo-image-picker';
import * as ImageManipulator from 'expo-image-manipulator';
import * as Haptics from 'expo-haptics';
import { usePostHog } from 'posthog-react-native';
import * as ImagePicker from 'expo-image-picker';
import * as ImageManipulator from 'expo-image-manipulator';
import * as Haptics from 'expo-haptics';
import * as AppleAuthentication from 'expo-apple-authentication';
import { usePostHog } from 'posthog-react-native';
import { useApp } from '../context/AppContext';
import { useColors } from '../constants/Colors';
import { PlantRecognitionService } from '../services/plantRecognitionService';
import { IdentificationResult } from '../types';
import { ResultCard } from '../components/ResultCard';
import { backendApiClient, isInsufficientCreditsError, isNetworkError, isTimeoutError } from '../services/backend/backendApiClient';
import { isBackendApiError } from '../services/backend/contracts';
import { createIdempotencyKey } from '../utils/idempotency';
import { backendApiClient, isInsufficientCreditsError, isNetworkError, isTimeoutError } from '../services/backend/backendApiClient';
import { isBackendApiError } from '../services/backend/contracts';
import { createIdempotencyKey } from '../utils/idempotency';
import { AuthService } from '../services/authService';
const HEALTH_CHECK_CREDIT_COST = 2;
@@ -37,13 +39,20 @@ const getBillingCopy = (language: 'de' | 'en' | 'es') => {
timeoutTitle: 'Scan zu langsam',
timeoutMessage: 'Die Analyse hat zu lange gedauert. Bitte erneut versuchen.',
retryLabel: 'Erneut versuchen',
notAPlantTitle: 'Keine Pflanze erkannt',
notAPlantMessage: 'Das Bild zeigt keine erkennbare Pflanze. Bitte fotografiere eine Pflanze und versuche es erneut.',
providerErrorMessage: 'KI-Scan gerade nicht verfügbar. Bitte versuche es erneut.',
healthProviderErrorMessage: 'KI-Health-Check gerade nicht verfügbar. Bitte versuche es erneut.',
healthTitle: 'Health Check',
healthDoneTitle: 'Health Check abgeschlossen',
healthDoneMessage: 'Neues Foto wurde geprueft und zur Galerie hinzugefuegt.',
signupLabel: 'Registrieren',
};
healthTitle: 'Health Check',
healthDoneTitle: 'Health Check abgeschlossen',
healthDoneMessage: 'Neues Foto wurde geprueft und zur Galerie hinzugefuegt.',
signupLabel: 'Registrieren',
demoTitle: 'Rettungsplan bereit',
demoMessage: 'Wir haben mögliche Ursachen erkannt. Schalte die vollständige KI-Diagnose und deinen 7-Tage-Rettungsplan frei.',
appleCta: 'Mit Apple fortfahren',
emailCta: 'Mit E-Mail fortfahren',
unlockCta: 'Vollständige Diagnose freischalten',
};
}
if (language === 'es') {
@@ -61,13 +70,20 @@ const getBillingCopy = (language: 'de' | 'en' | 'es') => {
timeoutTitle: 'Escaneo lento',
timeoutMessage: 'El análisis tardó demasiado. Inténtalo de nuevo.',
retryLabel: 'Reintentar',
notAPlantTitle: 'No es una planta',
notAPlantMessage: 'La imagen no muestra una planta reconocible. Por favor fotografía una planta e inténtalo de nuevo.',
providerErrorMessage: 'Escaneo IA no disponible ahora. Inténtalo de nuevo.',
healthProviderErrorMessage: 'Health-check IA no disponible ahora. Inténtalo de nuevo.',
healthTitle: 'Health Check',
healthDoneTitle: 'Health-check completado',
healthDoneMessage: 'La foto nueva fue analizada y guardada en la galeria.',
signupLabel: 'Registrarse',
};
healthTitle: 'Health Check',
healthDoneTitle: 'Health-check completado',
healthDoneMessage: 'La foto nueva fue analizada y guardada en la galeria.',
signupLabel: 'Registrarse',
demoTitle: 'Plan de rescate listo',
demoMessage: 'Detectamos posibles causas. Desbloquea el diagnóstico completo con IA y tu plan de rescate de 7 días.',
appleCta: 'Continuar con Apple',
emailCta: 'Continuar con email',
unlockCta: 'Desbloquear diagnóstico completo',
};
}
return {
@@ -84,14 +100,21 @@ const getBillingCopy = (language: 'de' | 'en' | 'es') => {
timeoutTitle: 'Scan Too Slow',
timeoutMessage: 'Analysis took too long. Please try again.',
retryLabel: 'Try again',
notAPlantTitle: 'No plant detected',
notAPlantMessage: 'The image does not show a recognizable plant. Please photograph a plant and try again.',
providerErrorMessage: 'AI scan is currently unavailable. Please try again.',
healthProviderErrorMessage: 'AI health check is currently unavailable. Please try again.',
healthTitle: 'Health Check',
healthDoneTitle: 'Health Check Complete',
healthDoneMessage: 'The new photo was analyzed and added to gallery.',
signupLabel: 'Sign Up',
};
};
healthTitle: 'Health Check',
healthDoneTitle: 'Health Check Complete',
healthDoneMessage: 'The new photo was analyzed and added to gallery.',
signupLabel: 'Sign Up',
demoTitle: 'Rescue plan ready',
demoMessage: 'We found possible causes. Unlock the full AI diagnosis and your 7-day rescue plan.',
appleCta: 'Continue with Apple',
emailCta: 'Continue with email',
unlockCta: 'Unlock full diagnosis',
};
};
export default function ScannerScreen() {
const params = useLocalSearchParams<{ mode?: string; plantId?: string }>();
@@ -106,36 +129,53 @@ export default function ScannerScreen() {
updatePlant,
billingSummary,
refreshBillingSummary,
isLoadingBilling,
session,
setPendingPlant,
guestScanCount,
incrementGuestScanCount,
} = useApp();
isLoadingBilling,
session,
hydrateSession,
setPendingPlant,
} = useApp();
const colors = useColors(isDarkMode, colorPalette);
const router = useRouter();
const insets = useSafeAreaInsets();
const billingCopy = getBillingCopy(language);
const isHealthMode = params.mode === 'health';
const healthPlantId = Array.isArray(params.plantId) ? params.plantId[0] : params.plantId;
const healthPlant = isHealthMode && healthPlantId
? plants.find((item) => item.id === healthPlantId)
: null;
const availableCredits = session
? (billingSummary?.credits.available ?? 0)
: Math.max(0, 5 - guestScanCount);
const [permission, requestPermission] = useCameraPermissions();
const [selectedImage, setSelectedImage] = useState<string | null>(null);
const [isAnalyzing, setIsAnalyzing] = useState(false);
const [analysisProgress, setAnalysisProgress] = useState(0);
const [analysisResult, setAnalysisResult] = useState<IdentificationResult | null>(null);
const cameraRef = useRef<CameraView>(null);
const healthPlant = isHealthMode && healthPlantId
? plants.find((item) => item.id === healthPlantId)
: null;
const hasActiveEntitlement = billingSummary?.entitlement?.plan === 'pro'
&& billingSummary?.entitlement?.status === 'active';
const isDemoMode = !hasActiveEntitlement;
const availableCredits = hasActiveEntitlement ? (billingSummary?.credits.available ?? 0) : 0;
const [permission, requestPermission] = useCameraPermissions();
const [selectedImage, setSelectedImage] = useState<string | null>(null);
const [isAnalyzing, setIsAnalyzing] = useState(false);
const [isAuthLoading, setIsAuthLoading] = useState(false);
const [appleAvailable, setAppleAvailable] = useState(false);
const [analysisProgress, setAnalysisProgress] = useState(0);
const [analysisResult, setAnalysisResult] = useState<IdentificationResult | null>(null);
const [demoResultVisible, setDemoResultVisible] = useState(false);
const cameraRef = useRef<CameraView>(null);
const scanLineProgress = useRef(new Animated.Value(0)).current;
const scanPulse = useRef(new Animated.Value(0)).current;
useEffect(() => {
if (!isAnalyzing) {
useEffect(() => {
let mounted = true;
AppleAuthentication.isAvailableAsync()
.then((available) => {
if (mounted) setAppleAvailable(available);
})
.catch(() => {
if (mounted) setAppleAvailable(false);
});
return () => {
mounted = false;
};
}, []);
useEffect(() => {
if (!isAnalyzing) {
scanLineProgress.stopAnimation();
scanLineProgress.setValue(0);
scanPulse.stopAnimation();
@@ -181,8 +221,8 @@ export default function ScannerScreen() {
try {
const result = await ImageManipulator.manipulateAsync(
uri,
[{ resize: { width: 1024 } }],
{ compress: 0.6, format: ImageManipulator.SaveFormat.JPEG, base64: true },
[{ resize: { width: 768 } }],
{ compress: 0.7, format: ImageManipulator.SaveFormat.JPEG, base64: true },
);
return result.base64 ? `data:image/jpeg;base64,${result.base64}` : result.uri;
} catch {
@@ -193,29 +233,25 @@ export default function ScannerScreen() {
const analyzeImage = async (imageUri: string, galleryImageUri?: string) => {
if (isAnalyzing) return;
if (availableCredits <= 0) {
if (!session) {
// Guest: show paywall directly — no registration required to purchase
router.push('/profile/billing');
return;
}
if (!isDemoMode && availableCredits <= 0) {
Alert.alert(
billingCopy.noCreditsTitle,
isHealthMode ? billingCopy.healthNoCreditsMessage : billingCopy.noCreditsMessage,
[
{ text: billingCopy.dismiss, style: 'cancel' },
{
text: billingCopy.managePlan,
onPress: () => router.replace('/(tabs)/profile'),
},
],
);
{ text: billingCopy.dismiss, style: 'cancel' },
{
text: billingCopy.managePlan,
onPress: () => router.replace('/profile/billing'),
},
],
);
return;
}
setIsAnalyzing(true);
setAnalysisProgress(0);
setAnalysisResult(null);
setIsAnalyzing(true);
setAnalysisProgress(0);
setAnalysisResult(null);
setDemoResultVisible(false);
const startTime = Date.now();
@@ -228,10 +264,32 @@ export default function ScannerScreen() {
});
}, 150);
try {
if (isHealthMode) {
if (!healthPlant) {
Alert.alert(billingCopy.genericErrorTitle, billingCopy.genericErrorMessage);
try {
if (isDemoMode) {
posthog.capture('demo_scan_started', {
authenticated: Boolean(session),
scan_type: isHealthMode ? 'health_check' : 'identification',
});
await new Promise(resolve => setTimeout(resolve, 2100));
setAnalysisProgress(100);
await Haptics.notificationAsync(Haptics.NotificationFeedbackType.Success);
await new Promise(resolve => setTimeout(resolve, 350));
setDemoResultVisible(true);
posthog.capture('demo_scan_completed', {
authenticated: Boolean(session),
latency_ms: Date.now() - startTime,
});
return;
}
posthog.capture('paid_scan_started', {
scan_type: isHealthMode ? 'health_check' : 'identification',
credits_available: availableCredits,
});
if (isHealthMode) {
if (!healthPlant) {
Alert.alert(billingCopy.genericErrorTitle, billingCopy.genericErrorMessage);
setSelectedImage(null);
setIsAnalyzing(false);
return;
@@ -255,11 +313,7 @@ export default function ScannerScreen() {
latency_ms: Date.now() - startTime,
});
if (!session) {
incrementGuestScanCount();
}
const currentGallery = healthPlant.gallery || [];
const currentGallery = healthPlant.gallery || [];
const existingChecks = healthPlant.healthChecks || [];
const updatedChecks = [response.healthCheck, ...existingChecks].slice(0, 6);
const updatedPlant = {
@@ -279,16 +333,16 @@ export default function ScannerScreen() {
latency_ms: Date.now() - startTime,
});
if (!session) {
incrementGuestScanCount();
}
setAnalysisResult(result);
}
setAnalysisProgress(100);
await Haptics.notificationAsync(Haptics.NotificationFeedbackType.Success);
await new Promise(resolve => setTimeout(resolve, 500));
setIsAnalyzing(false);
setAnalysisResult(result);
}
setAnalysisProgress(100);
await Haptics.notificationAsync(Haptics.NotificationFeedbackType.Success);
posthog.capture('paid_scan_completed', {
scan_type: isHealthMode ? 'health_check' : 'identification',
latency_ms: Date.now() - startTime,
});
await new Promise(resolve => setTimeout(resolve, 500));
setIsAnalyzing(false);
if (isHealthMode && healthPlant) {
Alert.alert(billingCopy.healthDoneTitle, billingCopy.healthDoneMessage, [
{ text: billingCopy.dismiss, onPress: () => router.replace(`/plant/${healthPlant.id}`) },
@@ -309,13 +363,13 @@ export default function ScannerScreen() {
billingCopy.noCreditsTitle,
isHealthMode ? billingCopy.healthNoCreditsMessage : billingCopy.noCreditsMessage,
[
{ text: billingCopy.dismiss, style: 'cancel' },
{
text: billingCopy.managePlan,
onPress: () => router.replace('/(tabs)/profile'),
},
],
);
{ text: billingCopy.dismiss, style: 'cancel' },
{
text: billingCopy.managePlan,
onPress: () => router.replace('/profile/billing'),
},
],
);
} else if (isTimeoutError(error)) {
Alert.alert(
billingCopy.timeoutTitle,
@@ -334,6 +388,12 @@ export default function ScannerScreen() {
{ text: billingCopy.retryLabel, onPress: () => analyzeImage(imageUri, galleryImageUri) },
],
);
} else if (isBackendApiError(error) && error.code === 'NOT_A_PLANT') {
Alert.alert(
billingCopy.notAPlantTitle,
billingCopy.notAPlantMessage,
[{ text: billingCopy.dismiss, style: 'cancel' }],
);
} else if (isBackendApiError(error) && error.code === 'PROVIDER_ERROR') {
Alert.alert(
billingCopy.genericErrorTitle,
@@ -348,23 +408,24 @@ export default function ScannerScreen() {
}
setSelectedImage(null);
setIsAnalyzing(false);
} finally {
clearInterval(progressInterval);
await refreshBillingSummary();
}
};
} finally {
clearInterval(progressInterval);
setIsAnalyzing(false);
if (!isDemoMode) {
await refreshBillingSummary();
}
}
};
const takePicture = async () => {
if (!cameraRef.current || isAnalyzing) return;
await Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Medium);
const photo = await cameraRef.current.takePictureAsync({ base64: true, quality: 0.5 });
if (photo) {
const analysisUri = photo.base64
? `data:image/jpeg;base64,${photo.base64}`
: photo.uri;
const galleryUri = photo.uri || analysisUri;
setSelectedImage(analysisUri);
analyzeImage(analysisUri, galleryUri);
const photo = await cameraRef.current.takePictureAsync({ base64: false, quality: 0.9 });
if (photo) {
const analysisUri = await resizeForAnalysis(photo.uri);
setDemoResultVisible(false);
setSelectedImage(analysisUri);
analyzeImage(analysisUri, photo.uri);
}
};
@@ -376,15 +437,16 @@ export default function ScannerScreen() {
quality: 1,
base64: false,
});
if (!result.canceled && result.assets[0]) {
const asset = result.assets[0];
const analysisUri = await resizeForAnalysis(asset.uri);
setSelectedImage(asset.uri);
if (!result.canceled && result.assets[0]) {
const asset = result.assets[0];
const analysisUri = await resizeForAnalysis(asset.uri);
setDemoResultVisible(false);
setSelectedImage(asset.uri);
analyzeImage(analysisUri, asset.uri);
}
};
const handleSave = async () => {
const handleSave = async () => {
if (analysisResult && selectedImage) {
if (!session) {
// Guest mode: store result and go to signup
@@ -400,10 +462,72 @@ export default function ScannerScreen() {
console.error('Saving identified plant failed', error);
Alert.alert(billingCopy.genericErrorTitle, billingCopy.genericErrorMessage);
}
}
};
const handleClose = () => {
}
};
const routeToHardPaywall = () => {
posthog.capture('auth_prompt_shown', {
authenticated: Boolean(session),
surface: 'demo_scan_result',
});
if (session) {
router.replace('/profile/billing');
return;
}
router.replace('/auth/signup');
};
const handleDemoAppleSignIn = async () => {
if (!appleAvailable) {
routeToHardPaywall();
return;
}
setIsAuthLoading(true);
posthog.capture('apple_login_started', { surface: 'scanner_demo' });
try {
const credential = await AppleAuthentication.signInAsync({
requestedScopes: [
AppleAuthentication.AppleAuthenticationScope.FULL_NAME,
AppleAuthentication.AppleAuthenticationScope.EMAIL,
],
});
if (!credential.identityToken) {
throw new Error('APPLE_AUTH_INVALID');
}
const fullName = [
credential.fullName?.givenName,
credential.fullName?.familyName,
].filter(Boolean).join(' ');
const nextSession = await AuthService.signInWithApple({
identityToken: credential.identityToken,
appleUser: credential.user,
email: credential.email,
name: fullName || undefined,
});
await hydrateSession(nextSession);
posthog.capture('apple_login_succeeded', { surface: 'scanner_demo' });
router.replace('/profile/billing');
} catch (error: any) {
if (error?.code === 'ERR_REQUEST_CANCELED') {
return;
}
posthog.capture('apple_login_failed', {
surface: 'scanner_demo',
error: error instanceof Error ? error.message : String(error),
});
Alert.alert(
billingCopy.genericErrorTitle,
error instanceof Error && error.message === 'APPLE_BACKEND_UNAVAILABLE'
? 'Apple Login ist auf dem Backend noch nicht aktiviert. Bitte Backend neu starten oder deployen.'
: billingCopy.genericErrorMessage,
);
} finally {
setIsAuthLoading(false);
}
};
const handleClose = () => {
router.back();
};
@@ -461,14 +585,14 @@ export default function ScannerScreen() {
</TouchableOpacity>
<Text style={[styles.headerTitle, { color: colors.iconOnImage }]}>
{isHealthMode ? billingCopy.healthTitle : t.scanner}
</Text>
<View style={[styles.creditBadge, { backgroundColor: colors.heroButton, borderColor: colors.heroButtonBorder }]}>
<Ionicons name="wallet-outline" size={12} color={colors.text} />
<Text style={[styles.creditBadgeText, { color: colors.text }]}>
{billingCopy.creditsLabel}: {availableCredits}
</Text>
</View>
</View>
</Text>
<View style={[styles.creditBadge, { backgroundColor: colors.heroButton, borderColor: colors.heroButtonBorder }]}>
<Ionicons name={isDemoMode ? 'sparkles-outline' : 'wallet-outline'} size={12} color={colors.text} />
<Text style={[styles.creditBadgeText, { color: colors.text }]}>
{isDemoMode ? 'Demo' : `${billingCopy.creditsLabel}: ${availableCredits}`}
</Text>
</View>
</View>
{/* Camera */}
<View style={styles.cameraContainer}>
@@ -551,10 +675,65 @@ export default function ScannerScreen() {
</Text>
</View>
</View>
)}
{/* Bottom Controls */}
<View
)}
{demoResultVisible && !isAnalyzing ? (
<View
style={[
styles.demoSheet,
{
backgroundColor: colors.background,
borderColor: colors.border,
bottom: analysisBottomOffset,
},
]}
>
<View style={[styles.demoIconWrap, { backgroundColor: colors.primarySoft }]}>
<Ionicons name="sparkles" size={22} color={colors.primary} />
</View>
<Text style={[styles.demoTitle, { color: colors.text }]}>{billingCopy.demoTitle}</Text>
<Text style={[styles.demoMessage, { color: colors.textSecondary }]}>{billingCopy.demoMessage}</Text>
{!session && appleAvailable ? (
<AppleAuthentication.AppleAuthenticationButton
buttonType={AppleAuthentication.AppleAuthenticationButtonType.CONTINUE}
buttonStyle={isDarkMode
? AppleAuthentication.AppleAuthenticationButtonStyle.WHITE
: AppleAuthentication.AppleAuthenticationButtonStyle.BLACK}
cornerRadius={12}
style={styles.demoAppleButton}
onPress={handleDemoAppleSignIn}
/>
) : (
<TouchableOpacity
style={[styles.demoPrimaryBtn, { backgroundColor: colors.primary }]}
onPress={session ? routeToHardPaywall : handleDemoAppleSignIn}
disabled={isAuthLoading}
activeOpacity={0.85}
>
<Text style={[styles.demoPrimaryText, { color: colors.onPrimary }]}>
{isAuthLoading ? '...' : session ? billingCopy.unlockCta : billingCopy.appleCta}
</Text>
</TouchableOpacity>
)}
{!session ? (
<TouchableOpacity
style={[styles.demoSecondaryBtn, { borderColor: colors.borderStrong }]}
onPress={() => {
posthog.capture('auth_prompt_shown', { surface: 'demo_scan_result', method: 'email' });
router.replace('/auth/signup');
}}
activeOpacity={0.85}
>
<Text style={[styles.demoSecondaryText, { color: colors.text }]}>{billingCopy.emailCta}</Text>
</TouchableOpacity>
) : null}
</View>
) : null}
{/* Bottom Controls */}
<View
style={[
styles.controls,
{
@@ -677,7 +856,7 @@ const styles = StyleSheet.create({
},
shutterInner: { width: 64, height: 64, borderRadius: 32 },
shutterBtnDisabled: { opacity: 0.6 },
analysisSheet: {
analysisSheet: {
position: 'absolute',
left: 16,
right: 16,
@@ -690,9 +869,68 @@ const styles = StyleSheet.create({
shadowOffset: { width: 0, height: 4 },
shadowOpacity: 0.28,
shadowRadius: 14,
elevation: 14,
},
analysisHeader: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', marginBottom: 10 },
elevation: 14,
},
demoSheet: {
position: 'absolute',
left: 16,
right: 16,
borderRadius: 22,
borderWidth: 1,
padding: 18,
zIndex: 25,
shadowColor: '#000',
shadowOffset: { width: 0, height: 4 },
shadowOpacity: 0.24,
shadowRadius: 12,
elevation: 12,
},
demoIconWrap: {
width: 42,
height: 42,
borderRadius: 21,
justifyContent: 'center',
alignItems: 'center',
marginBottom: 10,
},
demoTitle: {
fontSize: 20,
fontWeight: '800',
marginBottom: 6,
},
demoMessage: {
fontSize: 14,
lineHeight: 20,
marginBottom: 14,
},
demoAppleButton: {
width: '100%',
height: 50,
marginBottom: 10,
},
demoPrimaryBtn: {
height: 50,
borderRadius: 12,
alignItems: 'center',
justifyContent: 'center',
marginBottom: 10,
},
demoPrimaryText: {
fontSize: 15,
fontWeight: '800',
},
demoSecondaryBtn: {
height: 48,
borderRadius: 12,
borderWidth: 1,
alignItems: 'center',
justifyContent: 'center',
},
demoSecondaryText: {
fontSize: 14,
fontWeight: '700',
},
analysisHeader: { flexDirection: 'row', justifyContent: 'space-between', alignItems: 'center', marginBottom: 10 },
analysisBadge: {
flexDirection: 'row',
alignItems: 'center',

View File

@@ -0,0 +1,555 @@
# GreenLens SEO + AI-SEO Roadmap
Stand: 2026-04-10
Quelle:
- Keyword-Datensatz: [keyword-research.csv](C:/Users/a931627/Documents/apps/GreenLns/keyword-research.csv)
- Landing Site: [greenlns-landing](C:/Users/a931627/Documents/apps/GreenLns/greenlns-landing)
## Executive Summary
GreenLens hat genug Nachfrage im Keyword-Set, um eine kleine, sehr fokussierte SEO-Architektur aufzubauen. Das größte Problem ist nicht fehlendes Suchvolumen, sondern fehlende Seitenabdeckung. Die aktuelle Landing Site deckt im Wesentlichen nur Homepage-, Support- und zwei Vergleichsintentionen ab, obwohl die Keyword-Liste starke Nachfrage in vier Kernbereichen zeigt:
1. Plant identification
2. Plant health / diagnosis
3. Plant care / reminders
4. German-language app intent
Zusätzlich gibt es AI-SEO-Potenzial, weil GreenLens bereits mit einem klaren Angle arbeitet:
- plant ER / triage
- next-step diagnosis
- calmer guidance instead of care overload
Dieser Angle ist für AI-Antworten gut verwertbar, wenn die Inhalte als zitierfähige Antwortblöcke statt als generische Marketing-Flächen gebaut werden.
## Phase 0: Fixes Before Content Rollout
Diese Punkte sollten vor dem großen Content-Rollout erledigt werden:
1. Root-canonical aus dem globalen Layout entfernen und pro Seite selbstreferenzierende Canonicals setzen.
2. Keine `hreflang`-Alternates auf `/` ausgeben, solange keine echten Locale-URLs existieren.
3. Für `/privacy`, `/terms` und `/imprint` eigene `metadata` ergänzen.
4. Platzhalter in den Rechtstexten ersetzen.
5. Encoding-/Mojibake-Probleme in sichtbarem Text bereinigen.
6. `Last updated` und Autoren-/Brand-Signale für neue SEO-Seiten einführen.
Ohne diese Vorarbeiten besteht das Risiko, dass neue Seiten schlechter indexiert oder im Snippet-Kontext schwächer interpretiert werden.
## Nachfragebild
### Brutto aus CSV
- Rohsumme: ca. `350.220` bis `3.502.200` Suchen / Monat
### Realistisch dedupliziert
Nach Clusterung ähnlicher Intentionen und konservativem Überlappungsabschlag:
- realistisch: ca. `178.052` bis `1.780.520` Suchen / Monat
- Planungs-Midpoint: ca. `979.286` / Monat
### Interpretation
- Das ist kein Traffic-Forecast.
- Das ist ein adressierbares Suchinteresse aus der vorhandenen Liste.
- Der größte Hebel liegt klar in `plant identifier app`.
- Der zweitgrößte Hebel liegt in diagnosis/symptom content und German app intent.
## Priorisierte Seitenarchitektur
### Wave 1: Highest ROI
#### 1. `/plant-identifier-app`
- Primärkeyword: `plant identifier app`
- Unterstützende Keywords:
- `plant identifier`
- `identify plants by photo`
- `identify plant from picture`
- `plant recognition app`
- `plant id app`
- `free plant identifier app`
- `app to identify plants`
- `ai plant identifier`
- Realistisches Seitenpotenzial: `140.842` bis `1.408.420`
- Planungs-Midpoint: `774.631`
Ziel:
- Haupt-SEO-Landingpage für die Kategorie
- AI-citable Definition und evaluation page
Title:
- `Plant Identifier App for Fast Diagnosis and Care | GreenLens`
Meta Description:
- `GreenLens is a plant identifier app that helps you identify plants by photo, diagnose common plant problems, and get the next best care step in one app.`
H1:
- `Plant Identifier App That Goes Beyond Naming the Plant`
Core outline:
- What is a plant identifier app?
- How GreenLens identifies plants by photo
- Why plant identification alone is not enough
- GreenLens vs generic plant ID apps
- FAQ
AI-SEO answer blocks:
- 40-60 word definition block directly under H1
- short “how it works” numbered list
- table: `GreenLens vs generic plant identifier apps`
- 3-5 symptom-based mini use cases
- FAQ with natural-language questions
Schema:
- `SoftwareApplication`
- `FAQPage`
- optional `HowTo`
Internal links:
- link to `/plant-disease-identifier`
- link to `/plant-care-app`
- link to `/vs/inaturalist`
- link to App Store CTA
Notes:
- This page should be the internal-link hub for the whole organic cluster.
#### 2. `/plant-disease-identifier`
- Primärkeyword: `plant disease identifier`
- Unterstützende Keywords:
- `plant health checker`
- `sick plant diagnosis`
- `plant disease app`
- `plant problem diagnosis`
- `plant health app`
- `pest identification`
- `plant diagnosis app`
- Realistisches Seitenpotenzial: `1.900` bis `19.000`
- Planungs-Midpoint: `10.450`
Ziel:
- Category page for plant diagnosis and symptom-led queries
- Strong AI-overview target because the query is informational and evaluative
Title:
- `Plant Disease Identifier for Houseplant Problems | GreenLens`
Meta Description:
- `Use GreenLens as a plant disease identifier to check common plant problems, understand symptoms, and decide on the next safe care step.`
H1:
- `Plant Disease Identifier for Real-World Plant Problems`
Core outline:
- What a plant disease identifier can and cannot do
- Common symptoms GreenLens helps interpret
- How to avoid wrong next steps
- When a symptom is likely not a disease
- FAQ
AI-SEO answer blocks:
- “What is a plant disease identifier?” answer block
- symptom matrix:
- yellow leaves
- brown leaves
- soft stems
- pest signs
- “most likely cause vs safest next step” table
- FAQ framed around beginner decisions
Schema:
- `FAQPage`
- `HowTo` for diagnosis workflow
Internal links:
- `/plant-identifier-app`
- future `/plant-leaves-turning-yellow`
- future `/brown-leaves-on-houseplants`
#### 3. `/plant-care-app`
- Primärkeyword: `plant care app`
- Unterstützende Keywords:
- `plant care`
- `plant watering reminder`
- `plant watering app`
- `plant care reminder app`
- `houseplant care app`
- `indoor plant care app`
- Realistisches Seitenpotenzial: `1.254` bis `12.540`
- Planungs-Midpoint: `6.897`
Ziel:
- Category page for ongoing care and reminder intent
- Commercial-intent support page that complements diagnosis pages
Title:
- `Plant Care App for Reminders, Routines, and Recovery | GreenLens`
Meta Description:
- `GreenLens is a plant care app for reminders, care routines, plant tracking, and symptom-based next steps when your plant starts to struggle.`
H1:
- `Plant Care App for Better Routines and Better Decisions`
Core outline:
- Why most care apps stop at reminders
- What GreenLens tracks
- Reminder logic vs real plant context
- Care routines for indoor plant owners
- FAQ
AI-SEO answer blocks:
- direct answer: what a plant care app helps with
- feature table: reminders, collection, scan, diagnosis, care notes
- short “when reminders help vs when they hurt” section
Schema:
- `SoftwareApplication`
- `FAQPage`
Internal links:
- `/plant-identifier-app`
- `/plant-disease-identifier`
- future `/plant-tracker-app`
#### 4. `/pflanzen-erkennen-app`
- Primärkeyword: `pflanzen erkennen app`
- Unterstützende Keywords:
- `pflanzenerkennung app`
- `pflanzen bestimmen app`
- `pflanzen app`
- `pflanzen scanner app`
- `pflanzen identifizieren app`
- Realistisches Seitenpotenzial: `1.640` bis `16.400`
- Planungs-Midpoint: `9.020`
Ziel:
- Separate German landing page for German app-intent queries
- Also strong AI-citation candidate for German-language questions
Title:
- `Pflanzen Erkennen App mit Diagnose und Pflegehilfe | GreenLens`
Meta Description:
- `GreenLens ist eine Pflanzen-Erkennen-App, mit der du Pflanzen per Foto bestimmen, Probleme einordnen und die nächsten Pflegeschritte klarer ableiten kannst.`
H1:
- `Pflanzen Erkennen App fuer Fotoerkennung und Pflanzenhilfe`
Core outline:
- Was ist eine Pflanzen-Erkennen-App?
- Pflanzen per Foto bestimmen
- Warum Bestimmung allein nicht reicht
- GreenLens fuer Diagnose und naechste Schritte
- FAQ
AI-SEO answer blocks:
- direkte Antwort auf Deutsch unter dem H1
- “So funktioniert es” als nummerierte Liste
- Vergleichstabelle: `GreenLens vs klassische Pflanzen-Apps`
- FAQ in natuerlicher deutscher Fragesprache
Schema:
- `SoftwareApplication`
- `FAQPage`
Internal links:
- `/plant-identifier-app`
- optional future `/zimmerpflanzen`
- support/legal pages
Notes:
- Diese Seite sollte nicht nur die Homepage uebersetzen, sondern German intent wirklich bedienen.
#### 5. `/vs/inaturalist`
- Primärkeyword: `inaturalist`
- Unterstützende Keywords:
- category fit: alternative / evaluation intent
- Realistisches Seitenpotenzial: `10.000` bis `100.000`
- Planungs-Midpoint: `55.000`
Ziel:
- Comparison page with high citation likelihood in AI answers
- Complements existing `/vs/picturethis` and `/vs/plantum`
Title:
- `GreenLens vs iNaturalist for Plant Identification and Diagnosis`
Meta Description:
- `Compare GreenLens vs iNaturalist for plant identification, plant diagnosis, next-step care guidance, and beginner-friendly decision support.`
H1:
- `GreenLens vs iNaturalist`
Core outline:
- who each product is for
- biodiversity/community app vs plant triage workflow
- identification depth vs next-step diagnosis
- beginner clarity vs expert observation workflow
- FAQ
AI-SEO answer blocks:
- fair comparison summary in first 60 words
- structured comparison table
- “choose GreenLens if / choose iNaturalist if” bullets
- explicit caveat on where iNaturalist is stronger
Schema:
- `FAQPage`
- optional `ItemList`-style structured comparison
Internal links:
- `/plant-identifier-app`
- `/plant-disease-identifier`
- existing comparison pages
### Wave 2: Strong Follow-Up Pages
Diese Seiten haben gute Ergänzungsfunktion oder Long-Tail-/AI-SEO-Wert:
1. `/best-plant-identification-app`
2. `/plant-leaves-turning-yellow`
3. `/brown-leaves-on-houseplants`
4. `/zimmerpflanzen`
5. `/identificador-de-plantas`
6. `/plant-tracker-app`
## Cannibalization Rules
Damit die Seiten sich nicht gegenseitig schwächen:
- `/plant-identifier-app`
- category page
- broad commercial + informational intent
- `/plant-disease-identifier`
- diagnosis-specific category page
- `/plant-care-app`
- routine/reminder/tracking intent
- `/pflanzen-erkennen-app`
- German-language category page
- `/vs/*`
- comparison intent only
- symptom pages
- narrow problem-specific intent only
Regel:
- Jede Seite braucht ein klar eigenes Primärkeyword.
- Das Primärkeyword muss in `title`, `H1`, intro copy, slug und interner Verlinkung konsistent sein.
- Keine zweite Seite sollte dasselbe Keyword-Set als Primärziel bekommen.
## AI-SEO Content Pattern
Alle neuen Pages sollten dieselbe Grundstruktur für AI-Citation verwenden.
### Required above-the-fold structure
1. Direct answer paragraph
2. Clear H1 matching the query
3. 3-bullet summary of when GreenLens is useful
4. Primary CTA
### Required extractable blocks
1. Definition block
- 40-60 words
- answers the primary query directly
2. Comparison block
- table or side-by-side bullets
- especially important for category and alternative pages
3. Decision block
- “Choose GreenLens if...”
- “Not the best fit if...”
4. FAQ block
- 4-6 natural-language questions
- answers should stand alone without surrounding context
5. Freshness block
- visible “Last updated”
- visible review/update cadence
### Recommended AI-citation signals
- specific numbers where they are true and defensible
- product facts in plain language
- one-sentence summary paragraphs
- balanced tone on comparison pages
- author/reviewer attribution
- sources for third-party claims
## Metadata Rules
For all new pages:
- title length target: `50-60` chars where possible
- description target: `140-160` chars
- self-referencing canonical
- Open Graph aligned to title and description
- one H1 only
Template:
```txt
Title: [Primary Keyword] + [specific benefit] | GreenLens
Meta: Clear value proposition with keyword, no fluff, no repetition
H1: Match query closely, but read naturally
```
## Schema Plan
Minimum schema for rollout:
1. Global:
- `Organization`
- `SoftwareApplication`
2. Per page:
- category pages: `FAQPage`
- workflow pages: `HowTo`
- comparison pages: `FAQPage`
Optional later:
- `Review`
- `AggregateRating`
- `BreadcrumbList`
## Internal Linking Plan
### Homepage
Homepage should link prominently to:
- `/plant-identifier-app`
- `/plant-disease-identifier`
- `/plant-care-app`
- `/pflanzen-erkennen-app`
- `/vs/inaturalist`
### Category hub logic
- `/plant-identifier-app` links to all other money pages
- `/plant-disease-identifier` links to symptom pages
- `/plant-care-app` links to tracker/reminder pages
- `/pflanzen-erkennen-app` links to German support cluster
- `/vs/*` links back into category pages
### Anchor text examples
Use varied, natural anchors:
- `plant identifier app`
- `plant disease identifier`
- `plant care app`
- `Pflanzen erkennen App`
- `compare GreenLens and iNaturalist`
Do not overuse exact-match anchors sitewide.
## AI Visibility Monitoring Plan
Test these queries monthly in:
- Google AI Overviews
- ChatGPT search
- Perplexity
### Priority queries
1. `plant identifier app`
2. `identify plants by photo`
3. `plant disease identifier`
4. `plant care app`
5. `best plant identification app`
6. `GreenLens vs PictureThis`
7. `GreenLens vs Plantum`
8. `GreenLens vs iNaturalist`
9. `pflanzen erkennen app`
10. `plant leaves turning yellow`
### Tracking sheet fields
- query
- platform
- AI answer present
- GreenLens cited
- competitor cited
- source page cited
- sentiment / framing
## Off-Site AI-SEO Presence
AI visibility will not come only from GreenLens pages. Parallel actions:
1. Expand comparison page set for major apps in the category.
2. Build review-site presence where relevant.
3. Seek mentions in plant-care roundups and app lists.
4. Create at least one referenceable “best app” style page with a balanced tone.
5. Consider one explainer asset on YouTube for plant diagnosis workflows.
## 30/60/90 Rollout
### First 30 days
1. Fix canonicals, metadata inheritance, legal placeholders, encoding issues.
2. Build:
- `/plant-identifier-app`
- `/plant-disease-identifier`
- `/plant-care-app`
3. Add homepage internal links to these pages.
### Days 31-60
1. Build `/pflanzen-erkennen-app`
2. Build `/vs/inaturalist`
3. Add page-specific schema and update sitemap
4. Start AI visibility checks on top 10 queries
### Days 61-90
1. Build symptom pages:
- `/plant-leaves-turning-yellow`
- `/brown-leaves-on-houseplants`
2. Build `/best-plant-identification-app`
3. Build `/zimmerpflanzen`
4. Review internal links and refresh snippets based on early ranking/citation behavior
## Implementation Notes for This Repo
Recommended file pattern in `greenlns-landing/app`:
- `app/plant-identifier-app/page.tsx`
- `app/plant-disease-identifier/page.tsx`
- `app/plant-care-app/page.tsx`
- `app/pflanzen-erkennen-app/page.tsx`
- `app/vs/inaturalist/page.tsx`
Recommended shared components:
- reusable FAQ component
- reusable comparison table component
- reusable page hero component for category pages
- shared page-level metadata helper
## Recommended First Build Order
If only one wave is built now:
1. `/plant-identifier-app`
2. `/plant-disease-identifier`
3. `/plant-care-app`
4. `/pflanzen-erkennen-app`
5. `/vs/inaturalist`
Reason:
- highest combined SEO + AI-SEO leverage
- strongest match to existing product positioning
- cleanest internal-link structure
- fastest path to broad category coverage

241
google-ads-keywords.md Normal file
View File

@@ -0,0 +1,241 @@
# GreenLens — Google Ads Keyword Planner
## Plant Identification
**Von Ihnen eingegebene Begriffe**
| Keyword | Suchvolumen | Trend | Comp. | Volatilität | Gebot (oberer Bereich) | CPC |
|---|---|---|---|---|---|---|
| plant identifier app | 1.000 10.000 | 0% | 0% | Mittel | — | 0,95 € |
| identify plant by photo | 1.000 10.000 | 0% | 0% | — | — | — |
| plant scanner app | 1.000 10.000 | 0% | 0% | — | — | — |
| plant identification app | 1.000 10.000 | 0% | 0% | — | — | — |
| plant id app | 1.000 10.000 | 0% | 0% | — | — | — |
| plant recognition app | 1.000 10.000 | 0% | 0% | — | — | — |
| scan plant app | 1.000 10.000 | 0% | 0% | — | — | — |
| identify houseplants | 1.000 10.000 | 0% | 0% | — | — | — |
| plant species identifier | 1.000 10.000 | 0% | 0% | — | — | — |
| plant photo identifier | 1.000 10.000 | 0% | 0% | — | — | — |
---
## Plant Problems / Diagnosis
**Von Ihnen eingegebene Begriffe**
| Keyword | Suchvolumen | Trend | Comp. | Volatilität | Gebot (oberer Bereich) | CPC |
|---|---|---|---|---|---|---|
| plant disease identifier | 1.000 10.000 | +900% | 0% | Mittel | — | 0,95 € |
| why are my plant leaves yellow | 100 1.000 | 0% | 0% | Gering | — | 0,03 € |
| plant pest identification | 100 1.000 | 0% | 0% | Gering | — | 0,94 € |
| diagnose sick plant | 100 1.000 | 0% | -90% | Hoch | — | 0,96 € |
| plant problem solver | 10 100 | 0% | -100% | — | — | — |
| plant doctor app | 1.000 10.000 | 0% | -90% | Mittel | — | 1,25 € |
| plant health check | 100 1.000 | 0% | -90% | Hoch | — | 0,77 € |
| plant rescue app | 10 100 | 0% | 0% | Hoch | — | 0,59 € |
**Keyword-Ideen**
| Keyword | Suchvolumen | Trend | Comp. | Volatilität | Gebot (oberer Bereich) | CPC |
|---|---|---|---|---|---|---|
| plant disease identification | 1.000 10.000 | +900% | 0% | Mittel | — | 0,95 € |
| plant problem identifier | 100 1.000 | 0% | 0% | Hoch | — | 0,96 € |
| plant sickness identifier | 100 1.000 | 0% | 0% | Mittel | — | 1,62 € |
| identify plant disease | 1.000 10.000 | +900% | 0% | Mittel | — | 0,95 € |
---
## Plant Care
**Von Ihnen eingegebene Begriffe**
| Keyword | Suchvolumen | Trend | Comp. | Volatilität | Gebot (oberer Bereich) | CPC |
|---|---|---|---|---|---|---|
| plant care app | 1.000 10.000 | 0% | 0% | Mittel | — | 1,32 € |
| indoor plant care guide | 100 1.000 | 0% | 0% | Mittel | — | 0,54 € |
| plant watering reminders | 100 1.000 | 0% | 0% | Hoch | — | 0,48 € |
| houseplant care tips | 10.000 100.000 | -90% | -90% | Gering | — | 0,08 € |
| plant care reminder app | 10 100 | 0% | 0% | Gering | — | 0,75 € |
| how to care for plants | 1.000 10.000 | 0% | 0% | Gering | — | 0,85 € |
| plant water schedule | 100 1.000 | 0% | 0% | Mittel | — | 1,07 € |
| best plant care app | 1.000 10.000 | 0% | 0% | Mittel | — | 1,54 € |
| indoor plant maintenance | 100 1.000 | +900% | 0% | Mittel | — | 0,34 € |
| plant watering tracker | 10 100 | 0% | 0% | Hoch | — | 0,77 € |
**Keyword-Ideen**
| Keyword | Suchvolumen | Trend | Comp. | Volatilität | Gebot (oberer Bereich) | CPC |
|---|---|---|---|---|---|---|
| plant health app | 1.000 10.000 | 0% | 0% | Hoch | — | 1,49 € |
| free plant care app | 1.000 10.000 | 0% | 0% | Hoch | — | 0,52 € |
| plant app care | 100 1.000 | 0% | 0% | Hoch | — | 2,32 € |
| plant care app free | 1.000 10.000 | 0% | 0% | Hoch | — | 0,70 € |
| plant app care free | 10 100 | 0% | 0% | Hoch | — | 1,06 € |
| plant parent app | 1.000 10.000 | +900% | 0% | Mittel | — | — |
---
## Beginner Plant Owners
**Von Ihnen eingegebene Begriffe**
| Keyword | Suchvolumen | Trend | Comp. | Volatilität | Gebot (oberer Bereich) | CPC |
|---|---|---|---|---|---|---|
| plant care for beginners | 100 1.000 | 0% | 0% | Gering | — | 0,08 € |
| easy indoor plants for beginners | 100 1.000 | 0% | 0% | Hoch | — | 0,05 € |
| easy care plants | 1.000 10.000 | 0% | 0% | Hoch | — | 0,09 € |
**Keyword-Ideen**
| Keyword | Suchvolumen | Trend | Comp. | Volatilität | Gebot (oberer Bereich) | CPC |
|---|---|---|---|---|---|---|
| low maintenance indoor plants | 1.000 10.000 | 0% | 0% | Hoch | — | 0,05 € |
| easy houseplants | 1.000 10.000 | +900% | 0% | Hoch | — | 0,04 € |
| low maintenance outdoor plants | 1.000 10.000 | 0% | 0% | Hoch | — | 0,04 € |
| low maintenance house plants | 1.000 10.000 | 0% | 0% | — | — | — |
---
## AI Plant Tech
**Von Ihnen eingegebene Begriffe**
| Keyword | Suchvolumen | Trend | Comp. | Volatilität | Gebot (oberer Bereich) | CPC |
|---|---|---|---|---|---|---|
| ai plant identifier | 1.000 10.000 | 0% | 0% | Mittel | — | 0,67 € |
| ai plant doctor | 10 100 | 0% | 0% | Gering | — | 1,14 € |
| ai plant care app | 10 100 | 0% | 0% | Mittel | — | 0,34 € |
| plant ai app | 100 1.000 | 0% | 0% | Mittel | — | 0,96 € |
**Keyword-Ideen**
| Keyword | Suchvolumen | Trend | Comp. | Volatilität | Gebot (oberer Bereich) | CPC |
|---|---|---|---|---|---|---|
| ai plant identification app | 10 100 | 0% | 0% | Gering | — | 0,10 € |
| ai flower recognition | 10 100 | +inf | 0% | Mittel | — | 0,55 € |
| ai plant recognition | 10 100 | — | — | — | — | — |
---
## Comparison / Alternatives
**Von Ihnen eingegebene Begriffe**
| Keyword | Suchvolumen | Trend | Comp. | Volatilität | Gebot (oberer Bereich) | CPC |
|---|---|---|---|---|---|---|
| picturethis alternative | 10 100 | 0% | 0% | Gering | — | 0,24 € |
| plant identifier free app | 100 1.000 | 0% | 0% | Mittel | — | 0,31 € |
| best plant identification app | 1.000 10.000 | 0% | 0% | Mittel | — | 0,95 € |
| free plant id app | 10.000 100.000 | +900% | 0% | Mittel | — | 0,32 € |
**Keyword-Ideen**
| Keyword | Suchvolumen | Trend | Comp. | Volatilität | Gebot (oberer Bereich) | CPC |
|---|---|---|---|---|---|---|
| free plant identifier | 1.000 10.000 | 0% | 0% | Mittel | — | 0,32 € |
| free plant identification app | 1.000 10.000 | 0% | 0% | Mittel | — | 0,27 € |
| app to identify plants | 10.000 100.000 | 0% | 0% | Mittel | — | 0,62 € |
| plant app free | 1.000 10.000 | 0% | 0% | — | — | — |
---
## Emergency / Rescue
**Von Ihnen eingegebene Begriffe**
| Keyword | Suchvolumen | Trend | Comp. | Volatilität | Gebot (oberer Bereich) | CPC |
|---|---|---|---|---|---|---|
| revive dying plant | 100 1.000 | 0% | -90% | Gering | — | 0,66 € |
**Keyword-Ideen**
| Keyword | Suchvolumen | Trend | Comp. | Volatilität | Gebot (oberer Bereich) | CPC |
|---|---|---|---|---|---|---|
| my plant is dying what do i do | 10 100 | 0% | 0% | Mittel | — | 1,92 € |
| how to save dying plants indoor | 100 1.000 | 0% | 0% | Gering | — | 0,98 € |
| how to bring a plant back to life | 100 1.000 | 0% | 0% | Mittel | — | 1,07 € |
| how to revive a dying plant | 1.000 10.000 | 0% | -90% | Gering | — | 0,89 € |
| how to save my plant from dying | 10 100 | 0% | 0% | Mittel | — | 1,39 € |
| how to bring my plant back to life | 10 100 | 0% | — | — | — | — |
---
## Specific Plant Types
**Von Ihnen eingegebene Begriffe**
| Keyword | Suchvolumen | Trend | Comp. | Volatilität | Gebot (oberer Bereich) | CPC |
|---|---|---|---|---|---|---|
| succulent care app | 10 100 | 0% | 0% | Gering | — | — |
| monstera care tips | 100 1.000 | 0% | 0% | Gering | — | 0,01 € |
| pothos plant care | 10.000 100.000 | 0% | 0% | Gering | — | 0,02 € |
| snake plant identification | 10 100 | 0% | 0% | Gering | — | — |
| fiddle leaf fig problems | 100 1.000 | 0% | 0% | Gering | — | 0,01 € |
| orchid care app | 10 100 | 0% | 0% | Gering | — | 0,64 € |
| identify tropical plants | 10 100 | +900% | 0% | Mittel | — | 0,66 € |
**Keyword-Ideen**
| Keyword | Suchvolumen | Trend | Comp. | Volatilität | Gebot (oberer Bereich) | CPC |
|---|---|---|---|---|---|---|
| golden pothos care | 1.000 10.000 | 0% | 0% | Gering | — | 0,02 € |
| tropical plant identification | 10 100 | +900% | 0% | Mittel | — | 0,66 € |
| pothos care | 1.000 10.000 | 0% | 0% | Gering | — | 0,02 € |
| tropical house plant identification | 10 100 | +900% | 0% | Mittel | — | 0,27 € |
| pothos soil | 1.000 10.000 | 0% | 0% | Hoch | — | 0,16 € |
| pothos plant care indoor | 1.000 10.000 | 0% | 0% | Mittel | — | 0,02 € |
| silver pothos plant | 1.000 10.000 | 0% | 0% | Hoch | — | 0,25 € |
| tropical plant identification by leaf | 10 100 | 0% | 0% | Gering | — | — |
| scindapsus plant | 100 1.000 | 0% | 0% | Hoch | — | 0,02 € |
| plant pothos | 100.000 1 Mio. | 0% | 0% | Hoch | — | 0,03 € |
| best potting soil for pothos | 100 1.000 | 0% | 0% | Hoch | — | 0,22 € |
| potting soil for pothos | 1.000 10.000 | 0% | 0% | — | — | — |
---
## DACH Market (Deutsch)
**Von Ihnen eingegebene Begriffe**
| Keyword | Suchvolumen | Trend | Comp. | Volatilität | Gebot (oberer Bereich) | CPC |
|---|---|---|---|---|---|---|
| pflanze erkennen app | 1.000 10.000 | 0% | 0% | Mittel | — | 0,13 € |
| pflanzenkrankheit erkennen | 100 1.000 | 0% | 0% | Mittel | — | 0,25 € |
| pflanzendoktor app | 100 1.000 | 0% | 0% | Mittel | — | 0,25 € |
| pflanzenpflege app | 100 1.000 | 0% | 0% | Mittel | — | 0,30 € |
| zimmerpflanzen pflege tipps | 10 100 | 0% | 0% | Gering | — | — |
| pflanzen scanner app | 100 1.000 | +900% | 0% | Mittel | — | 0,25 € |
| zimmerpflanzen lexikon | 100 1.000 | 0% | 0% | Mittel | — | 0,02 € |
| pflanze retten app | 10 100 | 0% | +inf | Hoch | — | 0,31 € |
| kranke pflanze retten | 10 100 | 0% | 0% | Hoch | — | — |
**Keyword-Ideen**
| Keyword | Suchvolumen | Trend | Comp. | Volatilität | Gebot (oberer Bereich) | CPC |
|---|---|---|---|---|---|---|
| pflanzen erkennen | 10.000 100.000 | 0% | 0% | Mittel | — | 0,15 € |
| app pflanzen erkennen | 1.000 10.000 | 0% | 0% | Mittel | — | 0,13 € |
| pflanzen erkennen app kostenlos | 1.000 10.000 | +900% | 0% | Mittel | — | 0,11 € |
| pflanzen bestimmen app | 1.000 10.000 | +900% | 0% | Mittel | — | 0,11 € |
| pflanzen erkennen online kostenlos | 1.000 10.000 | +900% | 0% | Gering | — | 0,12 € |
| pflanzenerkennung app | 1.000 10.000 | +900% | 0% | Mittel | — | 0,12 € |
| beste app für pflanzenbestimmung kostenlos | 1.000 10.000 | +900% | 0% | Gering | — | 0,09 € |
| blumen erkennen app | 1.000 10.000 | 0% | 0% | Mittel | — | 0,10 € |
| pflanzenbestimmung app | 1.000 10.000 | 0% | 0% | Mittel | — | — |
---
## High-Volume Opportunities (Top Picks)
| Keyword | Suchvolumen | CPC (oberer Bereich) | CPC |
|---|---|---|---|
| free plant id app | 10.000 100.000 | 1,25 € | 0,32 € |
| plant pothos | 100.000 1 Mio. | 0,93 € | 0,03 € |
| app to identify plants | 10.000 100.000 | 2,57 € | 0,62 € |
| pflanzen erkennen | 10.000 100.000 | 0,61 € | 0,15 € |
| pothos plant care | 10.000 100.000 | 0,08 € | 0,02 € |
| plant health app | 1.000 10.000 | 4,72 € | 1,49 € |
| free plant care app | 1.000 10.000 | 1,68 € | 0,52 € |
| plant disease identifier | 1.000 10.000 | 3,04 € | 0,95 € |
| best plant care app | 1.000 10.000 | 4,23 € | 1,54 € |
| my plant is dying what do i do | 10 100 | 4,21 € | 1,92 € |

58
greenlens-promo/AGENTS.md Normal file
View File

@@ -0,0 +1,58 @@
# HyperFrames Composition Project
## Skills
This project uses AI agent skills for framework-specific patterns. Install them if not already present:
```bash
npx skills add heygen-com/hyperframes
```
Skills encode patterns like `window.__timelines` registration, `data-*` attribute semantics, and shader-compatible CSS rules that are not in generic web docs. Using them produces correct compositions from the start.
## Commands
```bash
npx hyperframes preview # preview in browser (studio editor)
npx hyperframes render # render to MP4
npx hyperframes lint # validate compositions (errors + warnings)
npx hyperframes lint --json # machine-readable output for CI
npx hyperframes docs <topic> # reference docs in terminal
```
## Project Structure
- `index.html` — main composition (root timeline)
- `compositions/` — sub-compositions referenced via `data-composition-src`
- `assets/` — media files (video, audio, images)
- `meta.json` — project metadata (id, name)
- `transcript.json` — whisper word-level transcript (if generated)
## Linting — Always Run After Changes
After creating or editing any `.html` composition, run the linter before considering the task complete:
```bash
npx hyperframes lint
```
Fix all errors before presenting the result.
## Key Rules
1. Every timed element needs `data-start`, `data-duration`, and `data-track-index`
2. Visible timed elements **must** have `class="clip"` — the framework uses this for visibility control
3. GSAP timelines must be paused and registered on `window.__timelines`:
```js
window.__timelines = window.__timelines || {};
window.__timelines["composition-id"] = gsap.timeline({ paused: true });
```
4. Videos use `muted` with a separate `<audio>` element for the audio track
5. Sub-compositions use `data-composition-src="compositions/file.html"`
6. Only deterministic logic — no `Date.now()`, no `Math.random()`, no network fetches
## Documentation
Full docs: https://hyperframes.heygen.com/introduction
Machine-readable index for AI tools: https://hyperframes.heygen.com/llms.txt

73
greenlens-promo/CLAUDE.md Normal file
View File

@@ -0,0 +1,73 @@
# HyperFrames Composition Project
## Skills — USE THESE FIRST
**Always invoke the relevant skill before writing or modifying compositions.** Skills encode framework-specific patterns (e.g., `window.__timelines` registration, `data-*` attribute semantics, shader-compatible CSS rules) that are NOT in generic web docs. Skipping them produces broken compositions.
| Skill | Command | When to use |
| -------------------------- | ------------------------- | ------------------------------------------------------------------------------------------------- |
| **hyperframes** | `/hyperframes` | Creating or editing HTML compositions, captions, TTS, audio-reactive animation, marker highlights |
| **hyperframes-cli** | `/hyperframes-cli` | CLI commands: init, lint, preview, render, transcribe, tts |
| **hyperframes-registry** | `/hyperframes-registry` | Installing blocks and components via `hyperframes add` |
| **website-to-hyperframes** | `/website-to-hyperframes` | Capturing a URL and turning it into a video — full website-to-video pipeline |
| **gsap** | `/gsap` | GSAP animations for HyperFrames — tweens, timelines, easing, performance |
> **Skills not available?** Ask the user to run `npx hyperframes skills` and restart their
> agent session, or install manually: `npx skills add heygen-com/hyperframes`.
## Commands
```bash
npx hyperframes preview # preview in browser (studio editor)
npx hyperframes render # render to MP4
npx hyperframes lint # validate compositions (errors + warnings)
npx hyperframes lint --verbose # include info-level findings
npx hyperframes lint --json # machine-readable output for CI
npx hyperframes docs <topic> # reference docs in terminal
```
## Documentation
**For quick reference**, use the local CLI docs command (no network required):
```bash
npx hyperframes docs <topic>
```
Topics: `data-attributes`, `gsap`, `compositions`, `rendering`, `examples`, `troubleshooting`
**For full documentation**, discover pages via the machine-readable index — do NOT guess URLs:
```
https://hyperframes.heygen.com/llms.txt
```
## Project Structure
- `index.html` — main composition (root timeline)
- `compositions/` — sub-compositions referenced via `data-composition-src`
- `meta.json` — project metadata (id, name)
- `transcript.json` — whisper word-level transcript (if generated)
## Linting — ALWAYS RUN AFTER CHANGES
After creating or editing any `.html` composition, **always** run the linter before considering the task complete:
```bash
npx hyperframes lint
```
Fix all errors before presenting the result. Warnings are informational and usually safe to ignore.
## Key Rules
1. Every timed element needs `data-start`, `data-duration`, and `data-track-index`
2. Elements with timing **MUST** have `class="clip"` — the framework uses this for visibility control
3. Timelines must be paused and registered on `window.__timelines`:
```js
window.__timelines = window.__timelines || {};
window.__timelines["composition-id"] = gsap.timeline({ paused: true });
```
4. Videos use `muted` with a separate `<audio>` element for the audio track
5. Sub-compositions use `data-composition-src="compositions/file.html"` to reference other HTML files
6. Only deterministic logic — no `Date.now()`, no `Math.random()`, no network fetches

53
greenlens-promo/DESIGN.md Normal file
View File

@@ -0,0 +1,53 @@
# Design System
## Overview
GreenLens uses a premium botanical landing-page identity: dark forest surfaces, cream typography, warm coral CTAs, and layered plant imagery. The design combines editorial serif headlines with practical app UI cards, bento-style feature blocks, and cinematic plant photography. It should feel calm, intelligent, and tactile rather than loud or generic.
## Colors
- **Forest Surface**: `#131f16` - primary dark background.
- **Forest Alt**: `#1c2e21` - secondary panels and depth layers.
- **Leaf Green**: `#2a5c3f` - core brand green.
- **Leaf Mid**: `#3d7a56` - supporting accents and UI strokes.
- **Leaf Light**: `#56a074` - highlights, scan lines, and positive states.
- **Coral CTA**: `#e07a50` - primary action color.
- **Coral Hover**: `#c96840` - darker warm accent.
- **Cream**: `#f4f1e8` - main text on dark backgrounds.
- **Cream Alt**: `#eae6d8` - quiet surfaces and secondary text.
- **Muted Sage**: `#7a8c7d` - secondary labels.
## Typography
- **Display**: Playfair Display, Georgia, serif. Used for large brand headlines and emotional words. Weight 900 for confident title moments, italic for botanical emphasis.
- **Body/UI**: Inter, system sans-serif. Used for labels, feature chips, captions, and app-style interface cards. Weights 500-800 for product promo readability.
- **Hierarchy**: Promo hero text can sit between 86-132px. Scene headings should stay above 64px. Captions and UI labels should stay above 22px for encoded video clarity.
## Elevation
Depth comes from layered photos, soft radial glows, thin cream/green translucent borders, and rounded UI panels. Avoid generic hard drop shadows; use warm bloom, inset highlights, glassy overlays, and perspective tilt on app frames.
## Components
- **Cinematic Hero Split**: Editorial text on one side with a framed app/demo visual on the other.
- **Scan Badge**: Small rounded status label with a pulsing green dot.
- **Bento Feature Cards**: Rounded image cards with dark overlays, feature chips, and short action headlines.
- **Botanical Intelligence Panel**: AI analysis visual paired with compact capability rows.
- **Step Timeline**: Four numbered actions: photograph, identify, care plan, growth tracking.
- **Store CTA Row**: Two compact dark buttons with platform labels.
## Do's and Don'ts
### Do's
- Use `#131f16`, `#f4f1e8`, `#56a074`, and `#e07a50` as the recognizable brand anchors.
- Keep plant imagery visible and moving with slow zooms, pans, and layered parallax.
- Use Playfair Display for the largest words and Inter for product facts.
- Treat UI as crafted panels with borders, glows, and botanical scan details.
### Don'ts
- Do not switch into neon tech blues or generic SaaS purple.
- Do not make the promo text-only; the website depends on plant and app visuals.
- Do not use flat, static screenshots without motion treatment.
- Do not use hard black-white contrast when cream and forest tones are available.

11
greenlens-promo/SCRIPT.md Normal file
View File

@@ -0,0 +1,11 @@
# Script
## 20-second VO
What if every plant came with instructions?
Open GreenLens. Scan a leaf. Get the name, the care plan, and the next step in seconds.
Track watering, growth, notes, and plant health in one calm place.
GreenLens. Scan it. Track it. Grow it.

View File

@@ -0,0 +1,86 @@
# Storyboard
**Format:** 1920x1080 landscape
**Audio:** Voiceover-first promo. Light organic underscore can be added later.
**VO direction:** Calm, warm, confident, premium app-store register.
**Style basis:** DESIGN.md from the GreenLens landing page.
## Asset Audit
| Asset | Type | Assign to Beat | Role |
| --- | --- | --- | --- |
| `favicon.svg` | Logo | 1, 5 | Brand mark in opener and closer |
| `hero-plant.png` | Hero image | 1 | Full-bleed botanical hook |
| `greenlens.mp4` | Product video | 2 | Framed moving app/demo visual |
| `scan-feature.png` | Feature image | 2, 4 | Scan action and how-it-works panel |
| `ai-analysis.png` | Product image | 3 | Botanical intelligence / analysis |
| `track-feature.png` | Feature image | 4 | Tracking and reminders |
| `plant-collection.png` | Feature image | 4, 5 | Collection and CTA visual |
## Beat 1 - Hook, 0.0-4.0s
**Concept:** The viewer enters a calm botanical world. The plant photo breathes in the background while the question lands like a premium app-store promise.
**VO cue:** "What if every plant came with instructions?"
**Visual description:** Full-frame `hero-plant.png` slowly pushes forward. A dark forest overlay gives contrast. The GreenLens wordmark and favicon settle near the top. Large Playfair Display type fills the left-center. A thin scan line travels across the image and small leaf particles drift in the foreground.
**Transition:** Velocity-matched blur upward into the product demo.
## Beat 2 - Scan, 4.0-8.5s
**Concept:** The abstract promise becomes a concrete action: open, scan, identify. This beat should feel like the app is actively seeing the plant.
**VO cue:** "Open GreenLens. Scan a leaf. Get the name..."
**Visual description:** A tilted phone-like frame plays `greenlens.mp4`. `scan-feature.png` sits behind it as a botanical plate. Green scan brackets draw around the phone, a pulsing "AI Scan" badge appears, and compact result chips cascade in.
**Transition:** Whip-pan left into the care intelligence scene.
## Beat 3 - Care Plan, 8.5-13.0s
**Concept:** Identification becomes guidance. The frame shifts from seeing to understanding.
**VO cue:** "...the care plan, and the next step in seconds."
**Visual description:** `ai-analysis.png` becomes a large analysis panel. Three care cards slide in: Watering, Light, Health. The coral CTA accent draws a route from "scan" to "next step." Botanical labels count up and settle.
**Transition:** Blur-through into a wider tracking system.
## Beat 4 - Track, 13.0-17.0s
**Concept:** GreenLens is not a one-off scanner; it is the plant owner's quiet operating system.
**VO cue:** "Track watering, growth, notes, and plant health in one calm place."
**Visual description:** Three bento cards form a clean grid using `track-feature.png`, `plant-collection.png`, and `scan-feature.png`. Timeline ticks animate across the bottom. Four labels appear in rhythm: Watering, Growth, Notes, Health.
**Transition:** Soft zoom out into final CTA.
## Beat 5 - CTA, 17.0-20.0s
**Concept:** End on the product name and the landing page's tagline rhythm.
**VO cue:** "GreenLens. Scan it. Track it. Grow it."
**Visual description:** Cream background lightens the frame. The favicon and GreenLens wordmark center up. A coral button appears below with the final action line. `plant-collection.png` drifts as a soft rounded card in the background.
**Transition:** Hold to end.
## Production Architecture
```
greenlens-promo/
|-- index.html
|-- DESIGN.md
|-- SCRIPT.md
|-- STORYBOARD.md
|-- assets/
| |-- favicon.svg
| |-- hero-plant.png
| |-- greenlens.mp4
| |-- scan-feature.png
| |-- ai-analysis.png
| |-- track-feature.png
| |-- plant-collection.png
```

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View File

@@ -0,0 +1,4 @@
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M16 4C11 10 6 14 4 18C2 22 4 28 10 28C14 28 16 26 16 26C16 26 18 28 22 28C28 28 30 22 28 18C26 14 21 10 16 4Z" fill="#2A5C3F"/>
<path d="M16 4C14 8 13 12 14 16C15 20 18 22 16 26" stroke="#F4F1E8" stroke-width="1.5" stroke-linecap="round"/>
</svg>

After

Width:  |  Height:  |  Size: 356 B

View File

@@ -0,0 +1,30 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
<defs>
<filter id="shadow" x="-20%" y="-20%" width="140%" height="140%">
<feDropShadow dx="0" dy="2" stdDeviation="2" flood-opacity="0.2"/>
</filter>
<g id="cursor-arrow">
<path d="M0 0 L 16 16 L 9.5 16 L 6.5 23 L 6.5 16 L 0 16 Z" fill="white" stroke="#000" stroke-width="1.5" stroke-linejoin="round" filter="url(#shadow)"/>
</g>
</defs>
<rect width="1920" height="1080" fill="#f0f0f0" />
<g id="cursor-designer" transform="translate(600, 500)">
<use href="#cursor-arrow" x="0" y="0"/>
<rect x="16" y="20" width="90" height="24" rx="4" fill="#A259FF"/>
<text x="61" y="36" font-family="Inter, sans-serif" font-size="12" fill="white" text-anchor="middle" font-weight="bold">Designer</text>
</g>
<g id="cursor-engineer" transform="translate(900, 400)">
<use href="#cursor-arrow" x="0" y="0"/>
<rect x="16" y="20" width="90" height="24" rx="4" fill="#1ABCFE"/>
<text x="61" y="36" font-family="Inter, sans-serif" font-size="12" fill="white" text-anchor="middle" font-weight="bold">Engineer</text>
</g>
<g id="cursor-pm" transform="translate(1200, 600)">
<use href="#cursor-arrow" x="0" y="0"/>
<rect x="16" y="20" width="50" height="24" rx="4" fill="#F24E1E"/>
<text x="41" y="36" font-family="Inter, sans-serif" font-size="12" fill="white" text-anchor="middle" font-weight="bold">PM</text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -0,0 +1,15 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
<g transform="translate(880, 420)">
<!-- Top-left: rounded square -->
<path id="logo-tl" d="M 40 0 A 40 40 0 0 0 0 40 L 0 80 A 40 40 0 0 0 40 120 A 40 40 0 0 0 80 80 L 80 40 A 40 40 0 0 0 40 0 Z" fill="#F24E1E" />
<!-- Top-right: rounded square -->
<path id="logo-tr" d="M 120 0 A 40 40 0 0 0 80 40 L 80 80 A 40 40 0 0 0 120 120 A 40 40 0 0 0 160 80 L 160 40 A 40 40 0 0 0 120 0 Z" fill="#A259FF" />
<!-- Bottom-left: half-circle -->
<path id="logo-bl" d="M 0 120 A 40 120 0 0 0 80 120 Z" fill="#1ABCFE" />
<!-- Bottom-right: half-circle -->
<path id="logo-br" d="M 80 120 A 40 120 0 0 0 160 120 Z" fill="#0ACF83" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 771 B

View File

@@ -0,0 +1,6 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080" width="1920" height="1080">
<rect id="pill-tl" x="870" y="410" width="80" height="120" rx="40" fill="#F24E1E" />
<rect id="pill-tr" x="970" y="410" width="80" height="120" rx="40" fill="#A259FF" />
<rect id="pill-bl" x="870" y="550" width="80" height="120" rx="40" fill="#1ABCFE" />
<rect id="pill-br" x="970" y="550" width="80" height="120" rx="40" fill="#0ACF83" />
</svg>

After

Width:  |  Height:  |  Size: 446 B

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 95 KiB

View File

@@ -0,0 +1,9 @@
{
"$schema": "https://hyperframes.heygen.com/schema/hyperframes.json",
"registry": "https://raw.githubusercontent.com/heygen-com/hyperframes/main/registry",
"paths": {
"blocks": "compositions",
"components": "compositions/components",
"assets": "assets"
}
}

758
greenlens-promo/index.html Normal file
View File

@@ -0,0 +1,758 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=1920, height=1080" />
<title>GreenLens Product Promo</title>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.14.2/dist/gsap.min.js"></script>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Playfair+Display:ital,wght@0,700;0,900;1,700;1,900&display=block"
rel="stylesheet"
/>
<style>
:root {
--forest: #131f16;
--forest-alt: #1c2e21;
--green: #2a5c3f;
--green-mid: #3d7a56;
--green-light: #56a074;
--coral: #e07a50;
--coral-dark: #c96840;
--cream: #f4f1e8;
--cream-alt: #eae6d8;
--muted-sage: #7a8c7d;
--display: "Playfair Display", Georgia, serif;
--body: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
}
* {
box-sizing: border-box;
}
html,
body {
width: 1920px;
height: 1080px;
margin: 0;
overflow: hidden;
background: var(--forest);
color: var(--cream);
font-family: var(--body);
}
[data-composition-id="greenlens-promo"] {
position: relative;
width: 1920px;
height: 1080px;
overflow: hidden;
isolation: isolate;
background: var(--forest);
}
.scene {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
overflow: hidden;
opacity: 0;
}
.scene-content {
position: relative;
z-index: 3;
width: 100%;
height: 100%;
display: flex;
box-sizing: border-box;
}
.brand {
display: flex;
align-items: center;
gap: 16px;
font-family: var(--display);
font-weight: 900;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.brand img {
width: 48px;
height: 48px;
}
.brand-mark {
width: 48px;
height: 48px;
border-radius: 999px;
background:
radial-gradient(circle at 52% 38%, var(--green-light), transparent 34%),
var(--green);
box-shadow: inset 0 0 0 2px rgba(244, 241, 232, 0.24), 0 0 34px rgba(86, 160, 116, 0.36);
}
.eyebrow {
display: inline-flex;
align-items: center;
gap: 12px;
color: var(--coral);
font-size: 18px;
font-weight: 800;
letter-spacing: 0.18em;
text-transform: uppercase;
}
.eyebrow::before {
content: "";
width: 10px;
height: 10px;
border-radius: 999px;
background: var(--green-light);
box-shadow: 0 0 28px rgba(86, 160, 116, 0.9);
}
h1,
h2 {
margin: 0;
font-family: var(--display);
font-weight: 900;
line-height: 0.96;
}
h1 {
font-size: 124px;
max-width: 880px;
}
h2 {
font-size: 92px;
}
em {
color: var(--green-light);
font-style: italic;
}
p {
margin: 0;
}
.caption {
font-size: 34px;
line-height: 1.35;
color: rgba(244, 241, 232, 0.76);
max-width: 680px;
}
.glass {
border: 1px solid rgba(244, 241, 232, 0.14);
background: rgba(19, 31, 22, 0.72);
box-shadow: 0 30px 110px rgba(0, 0, 0, 0.34);
backdrop-filter: blur(18px);
}
.image-fill {
width: 100%;
height: 100%;
object-fit: cover;
}
.scene-1 {
background: var(--forest);
}
.hero-bg {
position: absolute;
inset: 0;
z-index: 0;
}
.hero-bg img {
width: 100%;
height: 100%;
object-fit: cover;
opacity: 0.9;
}
.hero-overlay {
position: absolute;
inset: 0;
z-index: 1;
background:
radial-gradient(circle at 72% 42%, rgba(86, 160, 116, 0.36), transparent 32%),
linear-gradient(90deg, rgba(19, 31, 22, 0.96), rgba(19, 31, 22, 0.72) 46%, rgba(19, 31, 22, 0.2));
}
.scan-line {
position: absolute;
z-index: 2;
left: 0;
right: 0;
top: 0;
height: 3px;
background: linear-gradient(90deg, transparent, var(--green-light), transparent);
box-shadow: 0 0 42px rgba(86, 160, 116, 0.88);
opacity: 0.8;
}
.particle {
position: absolute;
z-index: 2;
width: 10px;
height: 22px;
border-radius: 999px 0 999px 0;
background: rgba(244, 241, 232, 0.22);
}
.scene-1 .scene-content {
flex-direction: column;
justify-content: center;
gap: 34px;
padding: 96px 120px 110px;
}
.scene-1 .brand {
position: absolute;
top: 72px;
left: 120px;
}
.scene-2 .scene-content {
align-items: center;
justify-content: space-between;
gap: 80px;
padding: 86px 128px;
background:
radial-gradient(circle at 30% 20%, rgba(86, 160, 116, 0.22), transparent 26%),
var(--forest);
}
.copy-stack {
width: 680px;
display: flex;
flex-direction: column;
gap: 28px;
}
.phone-stage {
position: relative;
width: 780px;
height: 820px;
display: flex;
align-items: center;
justify-content: center;
}
.botanical-plate {
position: absolute;
width: 620px;
height: 720px;
border-radius: 42px;
overflow: hidden;
opacity: 0.45;
border: 1px solid rgba(244, 241, 232, 0.15);
}
.phone-frame {
position: relative;
z-index: 2;
width: 420px;
height: 744px;
border-radius: 48px;
padding: 18px;
background: #0d130f;
border: 2px solid rgba(244, 241, 232, 0.22);
box-shadow: 0 42px 110px rgba(0, 0, 0, 0.44);
overflow: hidden;
}
.phone-frame video {
width: 100%;
height: 100%;
object-fit: cover;
border-radius: 34px;
}
.scan-bracket {
position: absolute;
z-index: 3;
width: 108px;
height: 108px;
border-color: var(--green-light);
opacity: 0.9;
}
.scan-bracket.tl {
top: 112px;
left: 120px;
border-top: 5px solid;
border-left: 5px solid;
}
.scan-bracket.br {
right: 120px;
bottom: 112px;
border-right: 5px solid;
border-bottom: 5px solid;
}
.badge {
display: inline-flex;
align-items: center;
gap: 12px;
width: fit-content;
padding: 12px 18px;
border-radius: 999px;
color: var(--cream);
font-size: 18px;
font-weight: 800;
letter-spacing: 0.12em;
text-transform: uppercase;
border: 1px solid rgba(86, 160, 116, 0.45);
background: rgba(42, 92, 63, 0.42);
}
.badge::before {
content: "";
width: 12px;
height: 12px;
border-radius: 999px;
background: var(--green-light);
}
.result-card {
position: absolute;
z-index: 4;
right: 26px;
bottom: 156px;
width: 318px;
padding: 24px;
border-radius: 24px;
}
.result-card strong {
display: block;
font-family: var(--display);
font-size: 34px;
line-height: 1;
}
.result-card span {
display: block;
margin-top: 8px;
color: rgba(244, 241, 232, 0.68);
font-size: 20px;
}
.scene-3 .scene-content {
align-items: center;
gap: 74px;
padding: 82px 120px;
background:
radial-gradient(circle at 74% 48%, rgba(224, 122, 80, 0.18), transparent 26%),
var(--forest-alt);
}
.analysis-frame {
width: 820px;
height: 760px;
border-radius: 38px;
overflow: hidden;
position: relative;
}
.analysis-frame img {
width: 100%;
height: 100%;
object-fit: cover;
}
.analysis-frame::after {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(180deg, transparent, rgba(19, 31, 22, 0.64));
}
.care-grid {
display: grid;
grid-template-columns: 1fr;
gap: 18px;
width: 540px;
}
.care-card {
display: flex;
align-items: center;
gap: 20px;
min-height: 122px;
padding: 26px;
border-radius: 24px;
}
.care-icon {
width: 58px;
height: 58px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 18px;
color: var(--forest);
background: var(--green-light);
font-size: 30px;
font-weight: 900;
}
.care-card strong {
display: block;
font-size: 28px;
}
.care-card span {
display: block;
margin-top: 6px;
color: rgba(244, 241, 232, 0.68);
font-size: 20px;
}
.route-line {
position: absolute;
left: 880px;
top: 562px;
z-index: 4;
width: 260px;
height: 5px;
border-radius: 999px;
background: var(--coral);
box-shadow: 0 0 36px rgba(224, 122, 80, 0.8);
}
.scene-4 .scene-content {
flex-direction: column;
justify-content: center;
gap: 34px;
padding: 82px 110px 96px;
background: var(--cream);
color: var(--forest);
}
.scene-4 .eyebrow {
color: var(--coral-dark);
}
.bento {
display: grid;
grid-template-columns: 1.2fr 1fr 1fr;
gap: 22px;
height: 560px;
}
.bento-card {
position: relative;
overflow: hidden;
border-radius: 30px;
border: 1px solid rgba(19, 31, 22, 0.14);
background: var(--forest);
}
.bento-card img {
width: 100%;
height: 100%;
object-fit: cover;
}
.bento-card.bg-track,
.bento-card.bg-collection,
.bento-card.bg-scan,
.final-image {
background-size: cover;
background-position: center;
}
.bento-card.bg-track {
background-image: url("assets/track-feature.png");
}
.bento-card.bg-collection,
.final-image {
background-image: url("assets/plant-collection.png");
}
.bento-card.bg-scan {
background-image: url("assets/scan-feature.png");
}
.bento-card::after {
content: "";
position: absolute;
inset: 0;
background: linear-gradient(180deg, rgba(19, 31, 22, 0.05), rgba(19, 31, 22, 0.75));
}
.bento-label {
position: absolute;
z-index: 2;
left: 30px;
right: 30px;
bottom: 30px;
display: flex;
flex-direction: column;
gap: 8px;
color: var(--cream);
}
.bento-label strong {
font-family: var(--display);
font-size: 44px;
line-height: 1;
}
.bento-label span {
font-size: 20px;
color: rgba(244, 241, 232, 0.76);
}
.timeline {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 18px;
}
.timeline-pill {
min-height: 72px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 18px;
background: #ffffff;
border: 1px solid rgba(19, 31, 22, 0.1);
color: var(--green);
font-weight: 800;
font-size: 24px;
}
.scene-5 .scene-content {
align-items: center;
justify-content: center;
padding: 80px;
background:
radial-gradient(circle at 76% 38%, rgba(86, 160, 116, 0.2), transparent 28%),
var(--forest);
}
.final-card {
position: relative;
z-index: 3;
width: 980px;
min-height: 620px;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 28px;
padding: 70px;
border-radius: 44px;
text-align: center;
}
.final-card .brand {
justify-content: center;
font-size: 34px;
}
.final-card h2 {
font-size: 110px;
}
.cta-button {
margin-top: 8px;
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 300px;
height: 76px;
padding: 0 34px;
border-radius: 999px;
background: var(--coral);
color: white;
font-size: 24px;
font-weight: 800;
}
.final-image {
position: absolute;
z-index: 1;
right: 120px;
bottom: 92px;
width: 470px;
height: 580px;
border-radius: 36px;
overflow: hidden;
opacity: 0.34;
border: 1px solid rgba(244, 241, 232, 0.16);
}
.final-image img {
width: 100%;
height: 100%;
object-fit: cover;
}
</style>
</head>
<body>
<div
id="root"
data-composition-id="greenlens-promo"
data-start="0"
data-duration="20"
data-width="1920"
data-height="1080"
>
<section id="scene-1" class="scene clip scene-1" data-start="0" data-duration="3.82" data-track-index="1">
<div class="hero-bg"><img src="assets/hero-plant.png" alt="" /></div>
<div class="hero-overlay"></div>
<div class="scan-line"></div>
<div class="particle" style="left: 1400px; top: 210px"></div>
<div class="particle" style="left: 1620px; top: 660px"></div>
<div class="particle" style="left: 1040px; top: 780px"></div>
<div class="scene-content">
<div class="brand"><img src="assets/favicon.svg" alt="" /><span>GreenLens</span></div>
<div class="eyebrow">Plant care, decoded</div>
<h1>What if every plant came with <em>instructions?</em></h1>
<p class="caption">Instant identification and care guidance for the plants you live with.</p>
</div>
</section>
<section id="scene-2" class="scene clip scene-2" data-start="3.82" data-duration="4.48" data-track-index="1">
<div class="scene-content">
<div class="copy-stack">
<div class="eyebrow">AI Scan</div>
<h2>Open. Scan. <em>Know.</em></h2>
<p class="caption">Scan a leaf and get the name, context, and next step in seconds.</p>
<div class="badge">Live plant match</div>
</div>
<div class="phone-stage">
<div class="botanical-plate"><img class="image-fill" src="assets/scan-feature.png" alt="" /></div>
<div class="scan-bracket tl"></div>
<div class="scan-bracket br"></div>
<div class="phone-frame">
<video src="assets/greenlens.mp4" muted playsinline></video>
</div>
<div class="result-card glass">
<strong>Monstera</strong>
<span>Identified with care tips ready.</span>
</div>
</div>
</div>
</section>
<section id="scene-3" class="scene clip scene-3" data-start="8.3" data-duration="4.54" data-track-index="1">
<div class="scene-content">
<div class="analysis-frame glass"><img src="assets/ai-analysis.png" alt="" /></div>
<div class="copy-stack">
<div class="eyebrow">Botanical Intelligence</div>
<h2>From photo to <em>care plan.</em></h2>
<p class="caption">GreenLens turns identification into practical care decisions.</p>
<div class="care-grid">
<div class="care-card glass"><div class="care-icon">1</div><div><strong>Watering</strong><span>Personalized rhythm</span></div></div>
<div class="care-card glass"><div class="care-icon">2</div><div><strong>Light</strong><span>Location-aware guidance</span></div></div>
<div class="care-card glass"><div class="care-icon">3</div><div><strong>Health</strong><span>Early diagnosis cues</span></div></div>
</div>
</div>
<div class="route-line"></div>
</div>
</section>
<section id="scene-4" class="scene clip scene-4" data-start="12.84" data-duration="3.98" data-track-index="1">
<div class="scene-content">
<div class="eyebrow">Your plant system</div>
<h2>Track watering, growth, notes, and <em>health.</em></h2>
<div class="bento">
<div class="bento-card bg-track"><div class="bento-label"><strong>Track it.</strong><span>Care reminders stay organized.</span></div></div>
<div class="bento-card bg-collection"><div class="bento-label"><strong>Collect.</strong><span>Your plants in one place.</span></div></div>
<div class="bento-card bg-scan"><div class="bento-label"><strong>Grow.</strong><span>Build a better routine.</span></div></div>
</div>
<div class="timeline">
<div class="timeline-pill">Watering</div>
<div class="timeline-pill">Growth</div>
<div class="timeline-pill">Notes</div>
<div class="timeline-pill">Health</div>
</div>
</div>
</section>
<section id="scene-5" class="scene clip scene-5" data-start="16.82" data-duration="3.18" data-track-index="1">
<div class="final-image"></div>
<div class="scene-content">
<div class="final-card glass">
<div class="brand"><span class="brand-mark"></span><span>GreenLens</span></div>
<h2>Scan it.<br />Track it.<br /><em>Grow it.</em></h2>
<div class="cta-button">Start with one plant</div>
</div>
</div>
</section>
</div>
<script>
window.__timelines = window.__timelines || {};
const tl = gsap.timeline({ paused: true });
gsap.set("#scene-1", { opacity: 1 });
gsap.set(".scene:not(#scene-1)", { opacity: 0 });
gsap.set(".phone-frame", { transformPerspective: 1200, rotationY: -8, rotationX: 3 });
gsap.set(".botanical-plate", { transformPerspective: 1200, rotationY: 8, rotationX: -2 });
gsap.set(".analysis-frame", { transformPerspective: 1200, rotationY: 7 });
gsap.set(".final-image", { transformPerspective: 1200, rotationY: -10 });
tl.from("#scene-1 .brand", { y: -28, opacity: 0, duration: 0.55, ease: "power3.out" }, 0);
tl.from("#scene-1 .eyebrow", { y: 34, opacity: 0, duration: 0.55, ease: "power3.out" }, 0.22);
tl.from("#scene-1 h1", { y: 58, opacity: 0, duration: 0.72, ease: "power3.out" }, 0.42);
tl.from("#scene-1 .caption", { y: 30, opacity: 0, duration: 0.48, ease: "power2.out" }, 1.02);
tl.fromTo(".hero-bg img", { scale: 1.04 }, { scale: 1.11, duration: 4.0, ease: "none" }, 0);
tl.fromTo(".scan-line", { y: -20 }, { y: 1120, duration: 2.8, ease: "power1.inOut" }, 0.45);
tl.to(".particle", { y: -38, x: 18, opacity: 0.55, duration: 2.2, stagger: 0.25, ease: "sine.inOut" }, 0.7);
tl.to("#scene-1", { y: -120, filter: "blur(18px)", opacity: 0, duration: 0.4, ease: "power2.in" }, 3.6);
tl.set("#scene-2", { y: 120, filter: "blur(18px)", opacity: 1 }, 3.82);
tl.to("#scene-2", { y: 0, filter: "blur(0px)", duration: 0.55, ease: "power3.out" }, 3.82);
tl.from("#scene-2 .copy-stack > *", { y: 42, opacity: 0, duration: 0.55, stagger: 0.12, ease: "power3.out" }, 4.08);
tl.from(".phone-stage", { x: 90, opacity: 0, duration: 0.75, ease: "power3.out" }, 4.2);
tl.from(".scan-bracket", { scale: 0.55, opacity: 0, duration: 0.48, stagger: 0.08, ease: "back.out(1.8)" }, 4.75);
tl.from(".result-card", { y: 46, opacity: 0, duration: 0.5, ease: "power3.out" }, 5.35);
tl.to(".phone-frame", { y: -12, duration: 1.7, repeat: 2, yoyo: true, ease: "sine.inOut" }, 5.0);
tl.to(".botanical-plate img", { scale: 1.07, duration: 4.2, ease: "none" }, 4.0);
tl.to("#scene-2", { x: -360, filter: "blur(22px)", opacity: 0, duration: 0.35, ease: "power3.in" }, 8.15);
tl.set("#scene-3", { x: 360, filter: "blur(22px)", opacity: 1 }, 8.3);
tl.to("#scene-3", { x: 0, filter: "blur(0px)", duration: 0.48, ease: "power3.out" }, 8.3);
tl.from(".analysis-frame", { scale: 0.9, opacity: 0, duration: 0.58, ease: "power3.out" }, 8.48);
tl.from("#scene-3 .copy-stack > *:not(.care-grid)", { y: 38, opacity: 0, duration: 0.5, stagger: 0.1, ease: "power3.out" }, 8.65);
tl.from(".care-card", { x: 70, opacity: 0, duration: 0.48, stagger: 0.15, ease: "power3.out" }, 9.25);
tl.from(".route-line", { scaleX: 0, opacity: 0, duration: 0.65, ease: "power3.out" }, 9.65);
tl.to(".analysis-frame img", { scale: 1.06, duration: 4.5, ease: "none" }, 8.5);
tl.to(".care-icon", { scale: 1.08, duration: 0.5, repeat: 5, yoyo: true, ease: "sine.inOut" }, 10.0);
tl.to("#scene-3", { scale: 1.08, filter: "blur(18px)", opacity: 0, duration: 0.38, ease: "power2.in" }, 12.62);
tl.set("#scene-4", { scale: 0.94, filter: "blur(18px)", opacity: 1 }, 12.84);
tl.to("#scene-4", { scale: 1, filter: "blur(0px)", duration: 0.48, ease: "power3.out" }, 12.84);
tl.from("#scene-4 .eyebrow, #scene-4 h2", { y: 34, opacity: 0, duration: 0.5, stagger: 0.1, ease: "power3.out" }, 13.0);
tl.from(".bento-card", { y: 80, opacity: 0, duration: 0.55, stagger: 0.12, ease: "power3.out" }, 13.45);
tl.from(".timeline-pill", { y: 24, opacity: 0, duration: 0.36, stagger: 0.07, ease: "power2.out" }, 14.32);
tl.to(".timeline-pill", { y: -8, duration: 0.55, repeat: 3, yoyo: true, stagger: 0.08, ease: "sine.inOut" }, 15.0);
tl.to("#scene-4", { scale: 0.88, filter: "blur(18px)", opacity: 0, duration: 0.38, ease: "power2.in" }, 16.62);
tl.set("#scene-5", { scale: 1.1, filter: "blur(16px)", opacity: 1 }, 16.82);
tl.to("#scene-5", { scale: 1, filter: "blur(0px)", duration: 0.52, ease: "power3.out" }, 16.82);
tl.from(".final-card", { y: 52, opacity: 0, duration: 0.68, ease: "power3.out" }, 17.0);
tl.from(".final-card h2", { y: 42, opacity: 0, duration: 0.62, ease: "power3.out" }, 17.22);
tl.from(".cta-button", { y: 30, opacity: 0, scale: 0.92, duration: 0.5, ease: "back.out(1.7)" }, 17.82);
tl.from(".final-image", { x: 100, opacity: 0, duration: 0.8, ease: "power3.out" }, 17.0);
tl.to(".cta-button", { boxShadow: "0 0 44px rgba(224, 122, 80, 0.55)", duration: 0.8, repeat: 2, yoyo: true, ease: "sine.inOut" }, 18.35);
window.__timelines["greenlens-promo"] = tl;
</script>
</body>
</html>

View File

@@ -0,0 +1,5 @@
{
"id": "greenlens-promo",
"name": "greenlens-promo",
"createdAt": "2026-04-26T21:56:37.923Z"
}

View File

@@ -0,0 +1,33 @@
import type { Metadata } from 'next'
import { notFound } from 'next/navigation'
import SeoCategoryPage from '@/components/SeoCategoryPage'
import { getSeoPageBySlug } from '@/lib/seoPages'
import { siteConfig } from '@/lib/site'
const profile = getSeoPageBySlug('best-plant-identification-app')
export const metadata: Metadata = !profile
? {}
: {
title: profile.metaTitle,
description: profile.metaDescription,
alternates: { canonical: profile.canonical },
openGraph: {
title: profile.metaTitle,
description: profile.metaDescription,
url: `${siteConfig.domain}${profile.canonical}`,
type: 'website',
images: [{ url: '/og-image.png', width: 1200, height: 630, alt: profile.metaTitle }],
},
twitter: {
card: 'summary_large_image',
title: profile.metaTitle,
description: profile.metaDescription,
images: ['/og-image.png'],
},
}
export default function Page() {
if (!profile) notFound()
return <SeoCategoryPage profile={profile} />
}

View File

@@ -0,0 +1,33 @@
import type { Metadata } from 'next'
import { notFound } from 'next/navigation'
import SeoCategoryPage from '@/components/SeoCategoryPage'
import { getSeoPageBySlug } from '@/lib/seoPages'
import { siteConfig } from '@/lib/site'
const profile = getSeoPageBySlug('blumen-scanner')
export const metadata: Metadata = !profile
? {}
: {
title: profile.metaTitle,
description: profile.metaDescription,
alternates: { canonical: profile.canonical },
openGraph: {
title: profile.metaTitle,
description: profile.metaDescription,
url: `${siteConfig.domain}${profile.canonical}`,
type: 'website',
images: [{ url: '/og-image.png', width: 1200, height: 630, alt: profile.metaTitle }],
},
twitter: {
card: 'summary_large_image',
title: profile.metaTitle,
description: profile.metaDescription,
images: ['/og-image.png'],
},
}
export default function Page() {
if (!profile) notFound()
return <SeoCategoryPage profile={profile} />
}

View File

@@ -0,0 +1,33 @@
import type { Metadata } from 'next'
import { notFound } from 'next/navigation'
import SeoCategoryPage from '@/components/SeoCategoryPage'
import { getSeoPageBySlug } from '@/lib/seoPages'
import { siteConfig } from '@/lib/site'
const profile = getSeoPageBySlug('flower-scanner')
export const metadata: Metadata = !profile
? {}
: {
title: profile.metaTitle,
description: profile.metaDescription,
alternates: { canonical: profile.canonical },
openGraph: {
title: profile.metaTitle,
description: profile.metaDescription,
url: `${siteConfig.domain}${profile.canonical}`,
type: 'website',
images: [{ url: '/og-image.png', width: 1200, height: 630, alt: profile.metaTitle }],
},
twitter: {
card: 'summary_large_image',
title: profile.metaTitle,
description: profile.metaDescription,
images: ['/og-image.png'],
},
}
export default function Page() {
if (!profile) notFound()
return <SeoCategoryPage profile={profile} />
}

View File

@@ -0,0 +1,33 @@
import type { Metadata } from 'next'
import { notFound } from 'next/navigation'
import SeoCategoryPage from '@/components/SeoCategoryPage'
import { getSeoPageBySlug } from '@/lib/seoPages'
import { siteConfig } from '@/lib/site'
const profile = getSeoPageBySlug('houseplant-identifier')
export const metadata: Metadata = !profile
? {}
: {
title: profile.metaTitle,
description: profile.metaDescription,
alternates: { canonical: profile.canonical },
openGraph: {
title: profile.metaTitle,
description: profile.metaDescription,
url: `${siteConfig.domain}${profile.canonical}`,
type: 'website',
images: [{ url: '/og-image.png', width: 1200, height: 630, alt: profile.metaTitle }],
},
twitter: {
card: 'summary_large_image',
title: profile.metaTitle,
description: profile.metaDescription,
images: ['/og-image.png'],
},
}
export default function Page() {
if (!profile) notFound()
return <SeoCategoryPage profile={profile} />
}

View File

@@ -0,0 +1,33 @@
import type { Metadata } from 'next'
import { notFound } from 'next/navigation'
import SeoCategoryPage from '@/components/SeoCategoryPage'
import { getSeoPageBySlug } from '@/lib/seoPages'
import { siteConfig } from '@/lib/site'
const profile = getSeoPageBySlug('identify-plant-photo')
export const metadata: Metadata = !profile
? {}
: {
title: profile.metaTitle,
description: profile.metaDescription,
alternates: { canonical: profile.canonical },
openGraph: {
title: profile.metaTitle,
description: profile.metaDescription,
url: `${siteConfig.domain}${profile.canonical}`,
type: 'website',
images: [{ url: '/og-image.png', width: 1200, height: 630, alt: profile.metaTitle }],
},
twitter: {
card: 'summary_large_image',
title: profile.metaTitle,
description: profile.metaDescription,
images: ['/og-image.png'],
},
}
export default function Page() {
if (!profile) notFound()
return <SeoCategoryPage profile={profile} />
}

View File

@@ -0,0 +1,71 @@
'use client'
import Link from 'next/link'
import { useLang } from '@/context/LangContext'
import { siteConfig } from '@/lib/site'
const CONTENT = {
de: {
title: 'Impressum',
companyLabel: 'Unternehmen',
addressLabel: 'Adresse',
representativeLabel: 'Vertretungsberechtigt',
contactLabel: 'Kontakt',
registryLabel: 'Register',
vatLabel: 'USt-ID',
},
en: {
title: 'Imprint',
companyLabel: 'Company',
addressLabel: 'Address',
representativeLabel: 'Represented by',
contactLabel: 'Contact',
registryLabel: 'Registry',
vatLabel: 'VAT ID',
},
es: {
title: 'Aviso Legal',
companyLabel: 'Empresa',
addressLabel: 'Direccion',
representativeLabel: 'Representante',
contactLabel: 'Contacto',
registryLabel: 'Registro',
vatLabel: 'IVA',
},
}
export default function ImprintContent() {
const { lang } = useLang()
const c = CONTENT[lang]
return (
<main className="container" style={{ paddingTop: '8rem', paddingBottom: '8rem', maxWidth: '800px' }}>
<p style={{ marginBottom: '1rem', opacity: 0.75 }}>
<Link href="/">Home</Link> / <span>Legal</span> / <span>{c.title}</span>
</p>
<h1>{c.title}</h1>
<div style={{ marginTop: '2rem', lineHeight: '1.8', opacity: 0.9 }}>
<p>
<strong>{c.companyLabel}:</strong> {siteConfig.company.legalName}
</p>
{siteConfig.company.addressLine1 ? (
<p><strong>{c.addressLabel}:</strong> {siteConfig.company.addressLine1}</p>
) : null}
{siteConfig.company.addressLine2 ? <p>{siteConfig.company.addressLine2}</p> : null}
<p>{siteConfig.company.country}</p>
<p>
<strong>{c.representativeLabel}:</strong> {siteConfig.company.representative}
</p>
<p>
<strong>{c.contactLabel}:</strong> <a href={`mailto:${siteConfig.legalEmail}`}>{siteConfig.legalEmail}</a>
</p>
{siteConfig.company.registry ? (
<p><strong>{c.registryLabel}:</strong> {siteConfig.company.registry}</p>
) : null}
{siteConfig.company.vatId ? (
<p><strong>{c.vatLabel}:</strong> {siteConfig.company.vatId}</p>
) : null}
</div>
</main>
)
}

View File

@@ -1,67 +1,37 @@
'use client'
import { useLang } from '@/context/LangContext'
import { siteConfig } from '@/lib/site'
const CONTENT = {
de: {
title: 'Impressum',
companyLabel: 'Unternehmen',
addressLabel: 'Adresse',
representativeLabel: 'Vertretungsberechtigt',
contactLabel: 'Kontakt',
registryLabel: 'Register',
vatLabel: 'USt-ID',
},
en: {
title: 'Imprint',
companyLabel: 'Company',
addressLabel: 'Address',
representativeLabel: 'Represented by',
contactLabel: 'Contact',
registryLabel: 'Registry',
vatLabel: 'VAT ID',
},
es: {
title: 'Aviso Legal',
companyLabel: 'Empresa',
addressLabel: 'Direccion',
representativeLabel: 'Representante',
contactLabel: 'Contacto',
registryLabel: 'Registro',
vatLabel: 'IVA',
},
}
export default function ImprintPage() {
const { lang } = useLang()
const c = CONTENT[lang]
return (
<main className="container" style={{ paddingTop: '8rem', paddingBottom: '8rem', maxWidth: '800px' }}>
<h1>{c.title}</h1>
<div style={{ marginTop: '2rem', lineHeight: '1.8', opacity: 0.9 }}>
<p>
<strong>{c.companyLabel}:</strong> {siteConfig.company.legalName}
</p>
{siteConfig.company.addressLine1 ? (
<p><strong>{c.addressLabel}:</strong> {siteConfig.company.addressLine1}</p>
) : null}
{siteConfig.company.addressLine2 ? <p>{siteConfig.company.addressLine2}</p> : null}
<p>{siteConfig.company.country}</p>
<p>
<strong>{c.representativeLabel}:</strong> {siteConfig.company.representative}
</p>
<p>
<strong>{c.contactLabel}:</strong> <a href={`mailto:${siteConfig.legalEmail}`}>{siteConfig.legalEmail}</a>
</p>
{siteConfig.company.registry ? (
<p><strong>{c.registryLabel}:</strong> {siteConfig.company.registry}</p>
) : null}
{siteConfig.company.vatId ? (
<p><strong>{c.vatLabel}:</strong> {siteConfig.company.vatId}</p>
) : null}
</div>
</main>
)
}
import type { Metadata } from 'next'
import Navbar from '@/components/Navbar'
import Footer from '@/components/Footer'
import ImprintContent from './ImprintContent'
import { siteConfig } from '@/lib/site'
const title = 'Imprint'
const description = 'Legal imprint and company contact information for GreenLens.'
export const metadata: Metadata = {
title,
description,
alternates: {
canonical: '/imprint',
},
openGraph: {
title: `${title} | GreenLens`,
description,
url: `${siteConfig.domain}/imprint`,
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: `${title} | GreenLens`,
description,
},
}
export default function ImprintPage() {
return (
<>
<Navbar />
<ImprintContent />
<Footer />
</>
)
}

View File

@@ -7,41 +7,36 @@ import { siteConfig, hasIosStoreUrl } from '@/lib/site'
export const metadata: Metadata = {
metadataBase: new URL(siteConfig.domain),
title: {
default: 'GreenLens - Plant Identifier and Care Planner',
default: 'GreenLens Pflanzen erkennen & Pflege-App',
template: '%s | GreenLens',
},
description:
'GreenLens helps you identify plants, organize your collection, and keep up with care routines in one app.',
'GreenLens erkennt Pflanzen per Foto in Sekunden und liefert sofort Pflegeplan, Gießerinnerungen und Gesundheitscheck — alles in einer App.',
keywords: [
'plant identifier by picture',
'Pflanzen erkennen App',
'Pflanzen bestimmen per Foto',
'Blumen Scanner',
'Pflanzen erkennen per Foto',
'plant identifier app',
'plant care app',
'watering reminders',
'houseplant tracker',
'plant identification',
'plant health check',
'Pflanzen App',
'GreenLens',
],
authors: [{ name: siteConfig.name }],
openGraph: {
title: 'GreenLens - Plant Identifier and Care Planner',
description: 'Identify plants, get care guidance, and manage your collection with GreenLens.',
title: 'GreenLens Pflanzen erkennen & Pflege-App',
description: 'Pflanzen per Foto erkennen, Pflegeplan erhalten und Gesundheitsprobleme diagnostizieren — alles in einer App.',
type: 'website',
url: siteConfig.domain,
},
alternates: {
// Do not emit hreflang until each language has its own URL.
languages: {},
},
twitter: {
card: 'summary_large_image',
title: 'GreenLens - Plant Identifier and Care Planner',
description: 'Identify plants, get care guidance, and manage your collection with GreenLens.',
},
alternates: {
canonical: '/',
languages: {
de: '/',
en: '/',
es: '/',
'x-default': '/',
},
title: 'GreenLens Pflanzen erkennen & Pflege-App',
description: 'Pflanzen per Foto erkennen, Pflegeplan erhalten und Gesundheitsprobleme diagnostizieren — alles in einer App.',
},
}
@@ -61,6 +56,13 @@ export default async function RootLayout({ children }: { children: React.ReactNo
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify([
{
'@context': 'https://schema.org',
'@type': 'WebSite',
name: siteConfig.name,
url: siteConfig.domain,
inLanguage: ['de', 'en', 'es'],
},
{
'@context': 'https://schema.org',
'@type': 'SoftwareApplication',
@@ -68,7 +70,7 @@ export default async function RootLayout({ children }: { children: React.ReactNo
operatingSystem: 'iOS, Android',
applicationCategory: 'LifestyleApplication',
description:
'Identify plants, track care schedules, and manage your collection with AI-powered scans.',
'Pflanzen per Foto erkennen, Pflegeplan erhalten und Gesundheitsprobleme diagnostizieren.',
inLanguage: ['de', 'en', 'es'],
...(hasIosStoreUrl && { downloadUrl: siteConfig.iosAppStoreUrl }),
offers: {
@@ -83,7 +85,7 @@ export default async function RootLayout({ children }: { children: React.ReactNo
name: siteConfig.name,
url: siteConfig.domain,
description:
'GreenLens is a plant identification and care planning app for iOS and Android.',
'GreenLens ist eine App zur Pflanzenerkennung und Pflegeplanung r iOS und Android.',
contactPoint: {
'@type': 'ContactPoint',
contactType: 'customer support',

View File

@@ -1,3 +1,4 @@
import type { Metadata } from 'next'
import Navbar from '@/components/Navbar'
import Hero from '@/components/Hero'
import Ticker from '@/components/Ticker'
@@ -9,6 +10,12 @@ import FAQ from '@/components/FAQ'
import CTA from '@/components/CTA'
import Footer from '@/components/Footer'
export const metadata: Metadata = {
alternates: {
canonical: '/',
},
}
const howToSchema = {
'@context': 'https://schema.org',
'@type': 'HowTo',

View File

@@ -0,0 +1,33 @@
import type { Metadata } from 'next'
import { notFound } from 'next/navigation'
import SeoCategoryPage from '@/components/SeoCategoryPage'
import { getSeoPageBySlug } from '@/lib/seoPages'
import { siteConfig } from '@/lib/site'
const profile = getSeoPageBySlug('pflanzen-bestimmen')
export const metadata: Metadata = !profile
? {}
: {
title: profile.metaTitle,
description: profile.metaDescription,
alternates: { canonical: profile.canonical },
openGraph: {
title: profile.metaTitle,
description: profile.metaDescription,
url: `${siteConfig.domain}${profile.canonical}`,
type: 'website',
images: [{ url: '/og-image.png', width: 1200, height: 630, alt: profile.metaTitle }],
},
twitter: {
card: 'summary_large_image',
title: profile.metaTitle,
description: profile.metaDescription,
images: ['/og-image.png'],
},
}
export default function Page() {
if (!profile) notFound()
return <SeoCategoryPage profile={profile} />
}

View File

@@ -0,0 +1,33 @@
import type { Metadata } from 'next'
import { notFound } from 'next/navigation'
import SeoCategoryPage from '@/components/SeoCategoryPage'
import { getSeoPageBySlug } from '@/lib/seoPages'
import { siteConfig } from '@/lib/site'
const profile = getSeoPageBySlug('pflanzen-erkennen-app')
export const metadata: Metadata = !profile
? {}
: {
title: profile.metaTitle,
description: profile.metaDescription,
alternates: { canonical: profile.canonical },
openGraph: {
title: profile.metaTitle,
description: profile.metaDescription,
url: `${siteConfig.domain}${profile.canonical}`,
type: 'website',
images: [{ url: '/og-image.png', width: 1200, height: 630, alt: profile.metaTitle }],
},
twitter: {
card: 'summary_large_image',
title: profile.metaTitle,
description: profile.metaDescription,
images: ['/og-image.png'],
},
}
export default function Page() {
if (!profile) notFound()
return <SeoCategoryPage profile={profile} />
}

View File

@@ -0,0 +1,33 @@
import type { Metadata } from 'next'
import { notFound } from 'next/navigation'
import SeoCategoryPage from '@/components/SeoCategoryPage'
import { getSeoPageBySlug } from '@/lib/seoPages'
import { siteConfig } from '@/lib/site'
const profile = getSeoPageBySlug('pflanzen-erkennen-kostenlos')
export const metadata: Metadata = !profile
? {}
: {
title: profile.metaTitle,
description: profile.metaDescription,
alternates: { canonical: profile.canonical },
openGraph: {
title: profile.metaTitle,
description: profile.metaDescription,
url: `${siteConfig.domain}${profile.canonical}`,
type: 'website',
images: [{ url: '/og-image.png', width: 1200, height: 630, alt: profile.metaTitle }],
},
twitter: {
card: 'summary_large_image',
title: profile.metaTitle,
description: profile.metaDescription,
images: ['/og-image.png'],
},
}
export default function Page() {
if (!profile) notFound()
return <SeoCategoryPage profile={profile} />
}

View File

@@ -0,0 +1,33 @@
import type { Metadata } from 'next'
import { notFound } from 'next/navigation'
import SeoCategoryPage from '@/components/SeoCategoryPage'
import { getSeoPageBySlug } from '@/lib/seoPages'
import { siteConfig } from '@/lib/site'
const profile = getSeoPageBySlug('pflanzen-krankheiten-erkennen')
export const metadata: Metadata = !profile
? {}
: {
title: profile.metaTitle,
description: profile.metaDescription,
alternates: { canonical: profile.canonical },
openGraph: {
title: profile.metaTitle,
description: profile.metaDescription,
url: `${siteConfig.domain}${profile.canonical}`,
type: 'website',
images: [{ url: '/og-image.png', width: 1200, height: 630, alt: profile.metaTitle }],
},
twitter: {
card: 'summary_large_image',
title: profile.metaTitle,
description: profile.metaDescription,
images: ['/og-image.png'],
},
}
export default function Page() {
if (!profile) notFound()
return <SeoCategoryPage profile={profile} />
}

View File

@@ -0,0 +1,33 @@
import type { Metadata } from 'next'
import { notFound } from 'next/navigation'
import SeoCategoryPage from '@/components/SeoCategoryPage'
import { getSeoPageBySlug } from '@/lib/seoPages'
import { siteConfig } from '@/lib/site'
const profile = getSeoPageBySlug('pflanzen-pflege-app')
export const metadata: Metadata = !profile
? {}
: {
title: profile.metaTitle,
description: profile.metaDescription,
alternates: { canonical: profile.canonical },
openGraph: {
title: profile.metaTitle,
description: profile.metaDescription,
url: `${siteConfig.domain}${profile.canonical}`,
type: 'website',
images: [{ url: '/og-image.png', width: 1200, height: 630, alt: profile.metaTitle }],
},
twitter: {
card: 'summary_large_image',
title: profile.metaTitle,
description: profile.metaDescription,
images: ['/og-image.png'],
},
}
export default function Page() {
if (!profile) notFound()
return <SeoCategoryPage profile={profile} />
}

View File

@@ -0,0 +1,33 @@
import type { Metadata } from 'next'
import { notFound } from 'next/navigation'
import SeoCategoryPage from '@/components/SeoCategoryPage'
import { getSeoPageBySlug } from '@/lib/seoPages'
import { siteConfig } from '@/lib/site'
const profile = getSeoPageBySlug('plant-care-app')
export const metadata: Metadata = !profile
? {}
: {
title: profile.metaTitle,
description: profile.metaDescription,
alternates: { canonical: profile.canonical },
openGraph: {
title: profile.metaTitle,
description: profile.metaDescription,
url: `${siteConfig.domain}${profile.canonical}`,
type: 'website',
images: [{ url: '/og-image.png', width: 1200, height: 630, alt: profile.metaTitle }],
},
twitter: {
card: 'summary_large_image',
title: profile.metaTitle,
description: profile.metaDescription,
images: ['/og-image.png'],
},
}
export default function Page() {
if (!profile) notFound()
return <SeoCategoryPage profile={profile} />
}

View File

@@ -0,0 +1,33 @@
import type { Metadata } from 'next'
import { notFound } from 'next/navigation'
import SeoCategoryPage from '@/components/SeoCategoryPage'
import { getSeoPageBySlug } from '@/lib/seoPages'
import { siteConfig } from '@/lib/site'
const profile = getSeoPageBySlug('plant-disease-identifier')
export const metadata: Metadata = !profile
? {}
: {
title: profile.metaTitle,
description: profile.metaDescription,
alternates: { canonical: profile.canonical },
openGraph: {
title: profile.metaTitle,
description: profile.metaDescription,
url: `${siteConfig.domain}${profile.canonical}`,
type: 'website',
images: [{ url: '/og-image.png', width: 1200, height: 630, alt: profile.metaTitle }],
},
twitter: {
card: 'summary_large_image',
title: profile.metaTitle,
description: profile.metaDescription,
images: ['/og-image.png'],
},
}
export default function Page() {
if (!profile) notFound()
return <SeoCategoryPage profile={profile} />
}

View File

@@ -0,0 +1,33 @@
import type { Metadata } from 'next'
import { notFound } from 'next/navigation'
import SeoCategoryPage from '@/components/SeoCategoryPage'
import { getSeoPageBySlug } from '@/lib/seoPages'
import { siteConfig } from '@/lib/site'
const profile = getSeoPageBySlug('plant-health-app')
export const metadata: Metadata = !profile
? {}
: {
title: profile.metaTitle,
description: profile.metaDescription,
alternates: { canonical: profile.canonical },
openGraph: {
title: profile.metaTitle,
description: profile.metaDescription,
url: `${siteConfig.domain}${profile.canonical}`,
type: 'website',
images: [{ url: '/og-image.png', width: 1200, height: 630, alt: profile.metaTitle }],
},
twitter: {
card: 'summary_large_image',
title: profile.metaTitle,
description: profile.metaDescription,
images: ['/og-image.png'],
},
}
export default function Page() {
if (!profile) notFound()
return <SeoCategoryPage profile={profile} />
}

View File

@@ -0,0 +1,33 @@
import type { Metadata } from 'next'
import { notFound } from 'next/navigation'
import SeoCategoryPage from '@/components/SeoCategoryPage'
import { getSeoPageBySlug } from '@/lib/seoPages'
import { siteConfig } from '@/lib/site'
const profile = getSeoPageBySlug('plant-identifier-app')
export const metadata: Metadata = !profile
? {}
: {
title: profile.metaTitle,
description: profile.metaDescription,
alternates: { canonical: profile.canonical },
openGraph: {
title: profile.metaTitle,
description: profile.metaDescription,
url: `${siteConfig.domain}${profile.canonical}`,
type: 'website',
images: [{ url: '/og-image.png', width: 1200, height: 630, alt: profile.metaTitle }],
},
twitter: {
card: 'summary_large_image',
title: profile.metaTitle,
description: profile.metaDescription,
images: ['/og-image.png'],
},
}
export default function Page() {
if (!profile) notFound()
return <SeoCategoryPage profile={profile} />
}

View File

@@ -0,0 +1,33 @@
import type { Metadata } from 'next'
import { notFound } from 'next/navigation'
import SeoCategoryPage from '@/components/SeoCategoryPage'
import { getSeoPageBySlug } from '@/lib/seoPages'
import { siteConfig } from '@/lib/site'
const profile = getSeoPageBySlug('plant-scanner')
export const metadata: Metadata = !profile
? {}
: {
title: profile.metaTitle,
description: profile.metaDescription,
alternates: { canonical: profile.canonical },
openGraph: {
title: profile.metaTitle,
description: profile.metaDescription,
url: `${siteConfig.domain}${profile.canonical}`,
type: 'website',
images: [{ url: '/og-image.png', width: 1200, height: 630, alt: profile.metaTitle }],
},
twitter: {
card: 'summary_large_image',
title: profile.metaTitle,
description: profile.metaDescription,
images: ['/og-image.png'],
},
}
export default function Page() {
if (!profile) notFound()
return <SeoCategoryPage profile={profile} />
}

View File

@@ -0,0 +1,84 @@
'use client'
import Link from 'next/link'
import { useLang } from '@/context/LangContext'
import { siteConfig } from '@/lib/site'
const CONTENT = {
de: {
title: 'Datenschutzerklaerung',
intro:
'Der Schutz personenbezogener Daten ist uns wichtig. Diese Seite beschreibt in knapper Form, welche Daten GreenLens verarbeiten kann und warum.',
section1: '1. Verarbeitete Daten',
text1:
'Je nach Nutzung der App koennen Pflanzenfotos, Kontodaten, technische Geraeteinformationen, In-App-Kaufdaten sowie freiwillig uebermittelte Support-Anfragen verarbeitet werden.',
section2: '2. Zweck der Verarbeitung',
text2:
'Diese Daten werden verwendet, um Pflanzenscans auszufuehren, deine Sammlung zu speichern, Erinnerungen bereitzustellen, Abos und Credits zu verwalten sowie Support-Anfragen zu beantworten.',
section3: '3. Drittanbieter',
text3:
'GreenLens nutzt technische Dienstleister fuer App-Betrieb, Analyse, Authentifizierung und In-App-Kaeufe. Dazu koennen je nach Plattform Apple, RevenueCat, PostHog oder Hosting-Anbieter gehoeren.',
section4: '4. Kontakt',
text4: 'Bei Fragen zum Datenschutz oder zu deinen Datenrechten kannst du uns per E-Mail kontaktieren.',
},
en: {
title: 'Privacy Policy',
intro:
'Protecting personal data matters to us. This page summarizes what GreenLens may process and why.',
section1: '1. Data we may process',
text1:
'Depending on how you use the app, GreenLens may process plant photos, account details, technical device information, in-app purchase data, and support messages you send to us.',
section2: '2. Why we process it',
text2:
'We use this information to run plant scans, store your collection, provide reminders, manage subscriptions and credits, and respond to support requests.',
section3: '3. Third-party services',
text3:
'GreenLens uses service providers for app delivery, analytics, authentication, and in-app purchases. Depending on platform and setup, this can include Apple, RevenueCat, PostHog, or hosting providers.',
section4: '4. Contact',
text4: 'If you have privacy questions or want to exercise your data rights, contact us by email.',
},
es: {
title: 'Politica de Privacidad',
intro:
'La proteccion de los datos personales es importante para nosotros. Esta pagina resume que datos puede procesar GreenLens y por que.',
section1: '1. Datos que podemos procesar',
text1:
'Segun el uso de la app, GreenLens puede procesar fotos de plantas, datos de cuenta, informacion tecnica del dispositivo, datos de compras dentro de la app y mensajes de soporte.',
section2: '2. Para que los usamos',
text2:
'Usamos estos datos para ejecutar escaneos, guardar tu coleccion, ofrecer recordatorios, gestionar suscripciones y creditos, y responder solicitudes de soporte.',
section3: '3. Servicios de terceros',
text3:
'GreenLens utiliza proveedores para la operacion de la app, analitica, autenticacion y compras integradas. Segun la plataforma, esto puede incluir Apple, RevenueCat, PostHog o proveedores de hosting.',
section4: '4. Contacto',
text4: 'Si tienes preguntas sobre privacidad o tus derechos de datos, contactanos por correo electronico.',
},
}
export default function PrivacyContent() {
const { lang } = useLang()
const c = CONTENT[lang]
return (
<main className="container" style={{ paddingTop: '8rem', paddingBottom: '8rem', maxWidth: '800px' }}>
<p style={{ marginBottom: '1rem', opacity: 0.75 }}>
<Link href="/">Home</Link> / <span>Legal</span> / <span>{c.title}</span>
</p>
<h1>{c.title}</h1>
<div style={{ marginTop: '2rem', lineHeight: '1.8', opacity: 0.9 }}>
<p>{c.intro}</p>
<h2 style={{ marginTop: '1.5rem', fontSize: '1.25rem' }}>{c.section1}</h2>
<p>{c.text1}</p>
<h2 style={{ marginTop: '1.5rem', fontSize: '1.25rem' }}>{c.section2}</h2>
<p>{c.text2}</p>
<h2 style={{ marginTop: '1.5rem', fontSize: '1.25rem' }}>{c.section3}</h2>
<p>{c.text3}</p>
<h2 style={{ marginTop: '1.5rem', fontSize: '1.25rem' }}>{c.section4}</h2>
<p>{c.text4}</p>
<p style={{ marginTop: '0.75rem' }}>
<a href={`mailto:${siteConfig.legalEmail}`}>{siteConfig.legalEmail}</a>
</p>
</div>
</main>
)
}

View File

@@ -1,80 +1,37 @@
'use client'
import { useLang } from '@/context/LangContext'
import { siteConfig } from '@/lib/site'
const CONTENT = {
de: {
title: 'Datenschutzerklaerung',
intro:
'Der Schutz personenbezogener Daten ist uns wichtig. Diese Seite beschreibt in knapper Form, welche Daten GreenLens verarbeiten kann und warum.',
section1: '1. Verarbeitete Daten',
text1:
'Je nach Nutzung der App koennen Pflanzenfotos, Kontodaten, technische Geraeteinformationen, In-App-Kaufdaten sowie freiwillig uebermittelte Support-Anfragen verarbeitet werden.',
section2: '2. Zweck der Verarbeitung',
text2:
'Diese Daten werden verwendet, um Pflanzenscans auszufuehren, deine Sammlung zu speichern, Erinnerungen bereitzustellen, Abos und Credits zu verwalten sowie Support-Anfragen zu beantworten.',
section3: '3. Drittanbieter',
text3:
'GreenLens nutzt technische Dienstleister fuer App-Betrieb, Analyse, Authentifizierung und In-App-Kaeufe. Dazu koennen je nach Plattform Apple, RevenueCat, PostHog oder Hosting-Anbieter gehoeren.',
section4: '4. Kontakt',
text4: 'Bei Fragen zum Datenschutz oder zu deinen Datenrechten kannst du uns per E-Mail kontaktieren.',
},
en: {
title: 'Privacy Policy',
intro:
'Protecting personal data matters to us. This page summarizes what GreenLens may process and why.',
section1: '1. Data we may process',
text1:
'Depending on how you use the app, GreenLens may process plant photos, account details, technical device information, in-app purchase data, and support messages you send to us.',
section2: '2. Why we process it',
text2:
'We use this information to run plant scans, store your collection, provide reminders, manage subscriptions and credits, and respond to support requests.',
section3: '3. Third-party services',
text3:
'GreenLens uses service providers for app delivery, analytics, authentication, and in-app purchases. Depending on platform and setup, this can include Apple, RevenueCat, PostHog, or hosting providers.',
section4: '4. Contact',
text4: 'If you have privacy questions or want to exercise your data rights, contact us by email.',
},
es: {
title: 'Politica de Privacidad',
intro:
'La proteccion de los datos personales es importante para nosotros. Esta pagina resume que datos puede procesar GreenLens y por que.',
section1: '1. Datos que podemos procesar',
text1:
'Segun el uso de la app, GreenLens puede procesar fotos de plantas, datos de cuenta, informacion tecnica del dispositivo, datos de compras dentro de la app y mensajes de soporte.',
section2: '2. Para que los usamos',
text2:
'Usamos estos datos para ejecutar escaneos, guardar tu coleccion, ofrecer recordatorios, gestionar suscripciones y creditos, y responder solicitudes de soporte.',
section3: '3. Servicios de terceros',
text3:
'GreenLens utiliza proveedores para la operacion de la app, analitica, autenticacion y compras integradas. Segun la plataforma, esto puede incluir Apple, RevenueCat, PostHog o proveedores de hosting.',
section4: '4. Contacto',
text4: 'Si tienes preguntas sobre privacidad o tus derechos de datos, contactanos por correo electronico.',
},
}
export default function PrivacyPage() {
const { lang } = useLang()
const c = CONTENT[lang]
return (
<main className="container" style={{ paddingTop: '8rem', paddingBottom: '8rem', maxWidth: '800px' }}>
<h1>{c.title}</h1>
<div style={{ marginTop: '2rem', lineHeight: '1.8', opacity: 0.9 }}>
<p>{c.intro}</p>
<h2 style={{ marginTop: '1.5rem', fontSize: '1.25rem' }}>{c.section1}</h2>
<p>{c.text1}</p>
<h2 style={{ marginTop: '1.5rem', fontSize: '1.25rem' }}>{c.section2}</h2>
<p>{c.text2}</p>
<h2 style={{ marginTop: '1.5rem', fontSize: '1.25rem' }}>{c.section3}</h2>
<p>{c.text3}</p>
<h2 style={{ marginTop: '1.5rem', fontSize: '1.25rem' }}>{c.section4}</h2>
<p>{c.text4}</p>
<p style={{ marginTop: '0.75rem' }}>
<a href={`mailto:${siteConfig.legalEmail}`}>{siteConfig.legalEmail}</a>
</p>
</div>
</main>
)
}
import type { Metadata } from 'next'
import Navbar from '@/components/Navbar'
import Footer from '@/components/Footer'
import PrivacyContent from './PrivacyContent'
import { siteConfig } from '@/lib/site'
const title = 'Privacy Policy'
const description = 'Learn what personal data GreenLens processes, why it is used, and how to contact us about privacy.'
export const metadata: Metadata = {
title,
description,
alternates: {
canonical: '/privacy',
},
openGraph: {
title: `${title} | GreenLens`,
description,
url: `${siteConfig.domain}/privacy`,
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: `${title} | GreenLens`,
description,
},
}
export default function PrivacyPage() {
return (
<>
<Navbar />
<PrivacyContent />
<Footer />
</>
)
}

View File

@@ -6,7 +6,7 @@ export default function sitemap(): MetadataRoute.Sitemap {
return [
{
url: baseUrl,
lastModified: new Date('2026-04-08'),
lastModified: new Date('2026-04-27'),
changeFrequency: 'weekly',
priority: 1,
},
@@ -16,18 +16,132 @@ export default function sitemap(): MetadataRoute.Sitemap {
changeFrequency: 'monthly',
priority: 0.5,
},
{
url: `${baseUrl}/plant-identifier-app`,
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.8,
},
{
url: `${baseUrl}/plant-disease-identifier`,
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.75,
},
{
url: `${baseUrl}/plant-care-app`,
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.75,
},
{
url: `${baseUrl}/pflanzen-erkennen-app`,
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.85,
},
{
url: `${baseUrl}/blumen-scanner`,
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.8,
},
{
url: `${baseUrl}/pflanzen-bestimmen`,
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.8,
},
{
url: `${baseUrl}/vs/picturethis`,
lastModified: new Date('2026-04-10'),
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.65,
},
{
url: `${baseUrl}/vs/plantum`,
lastModified: new Date('2026-04-10'),
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.65,
},
{
url: `${baseUrl}/vs/inaturalist`,
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.65,
},
{
url: `${baseUrl}/vs/google-lens`,
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.75,
},
{
url: `${baseUrl}/flower-scanner`,
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.8,
},
{
url: `${baseUrl}/identify-plant-photo`,
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.8,
},
{
url: `${baseUrl}/plant-scanner`,
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.8,
},
{
url: `${baseUrl}/houseplant-identifier`,
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.75,
},
{
url: `${baseUrl}/succulent-identifier`,
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.75,
},
{
url: `${baseUrl}/pflanzen-krankheiten-erkennen`,
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.8,
},
{
url: `${baseUrl}/pflanzen-pflege-app`,
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.75,
},
{
url: `${baseUrl}/zimmerpflanzen-bestimmen`,
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.8,
},
{
url: `${baseUrl}/best-plant-identification-app`,
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.85,
},
{
url: `${baseUrl}/plant-health-app`,
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.8,
},
{
url: `${baseUrl}/pflanzen-erkennen-kostenlos`,
lastModified: new Date('2026-04-27'),
changeFrequency: 'monthly',
priority: 0.85,
},
{
url: `${baseUrl}/imprint`,
lastModified: new Date('2026-04-08'),

View File

@@ -0,0 +1,33 @@
import type { Metadata } from 'next'
import { notFound } from 'next/navigation'
import SeoCategoryPage from '@/components/SeoCategoryPage'
import { getSeoPageBySlug } from '@/lib/seoPages'
import { siteConfig } from '@/lib/site'
const profile = getSeoPageBySlug('succulent-identifier')
export const metadata: Metadata = !profile
? {}
: {
title: profile.metaTitle,
description: profile.metaDescription,
alternates: { canonical: profile.canonical },
openGraph: {
title: profile.metaTitle,
description: profile.metaDescription,
url: `${siteConfig.domain}${profile.canonical}`,
type: 'website',
images: [{ url: '/og-image.png', width: 1200, height: 630, alt: profile.metaTitle }],
},
twitter: {
card: 'summary_large_image',
title: profile.metaTitle,
description: profile.metaDescription,
images: ['/og-image.png'],
},
}
export default function Page() {
if (!profile) notFound()
return <SeoCategoryPage profile={profile} />
}

View File

@@ -1,11 +1,27 @@
import type { Metadata } from 'next'
import Link from 'next/link'
import { siteConfig } from '@/lib/site'
import type { Metadata } from 'next'
import Link from 'next/link'
import Navbar from '@/components/Navbar'
import Footer from '@/components/Footer'
import { siteConfig } from '@/lib/site'
export const metadata: Metadata = {
title: 'Support',
description: 'Get support for GreenLens, including contact details, onboarding help, billing guidance, and privacy links.',
}
export const metadata: Metadata = {
title: 'Support',
description: 'Get support for GreenLens, including contact details, onboarding help, billing guidance, and privacy links.',
alternates: {
canonical: '/support',
},
openGraph: {
title: 'Support | GreenLens',
description: 'Get support for GreenLens, including contact details, onboarding help, billing guidance, and privacy links.',
url: `${siteConfig.domain}/support`,
type: 'website',
},
twitter: {
card: 'summary_large_image',
title: 'Support | GreenLens',
description: 'Get support for GreenLens, including contact details, onboarding help, billing guidance, and privacy links.',
},
}
const faqs = [
{
@@ -30,75 +46,83 @@ const faqs = [
},
]
export default function SupportPage() {
return (
<main className="support-page">
<section className="support-hero">
<div className="container support-hero-inner">
<p className="tag">Support</p>
<h1>Help for scans, care plans, billing, and account questions.</h1>
<p className="support-lead">
GreenLens helps users identify plants, understand their condition, and keep a collection organized.
If something breaks or feels unclear, this is the fastest place to start.
</p>
<div className="support-actions">
<a className="btn-primary" href={`mailto:${siteConfig.supportEmail}`}>
Email Support
</a>
<Link className="btn-outline support-outline" href="/privacy">
Privacy Policy
</Link>
</div>
</div>
</section>
<section className="support-grid-wrap">
<div className="container support-grid">
<div className="support-card">
<h2>Contact</h2>
<p>
Email us at <a href={`mailto:${siteConfig.supportEmail}`}>{siteConfig.supportEmail}</a>
</p>
<p>Include your device type, app version, and what happened right before the issue.</p>
</div>
<div className="support-card">
<h2>Common topics</h2>
<ul className="support-list">
<li>Plant identification issues</li>
<li>Care reminder questions</li>
<li>Subscriptions and credit purchases</li>
<li>Account access and saved data</li>
</ul>
</div>
<div className="support-card">
<h2>Legal</h2>
<p>
Review our <Link href="/privacy">Privacy Policy</Link> and <Link href="/imprint">Imprint</Link>.
</p>
<p>These links should be used in App Store Connect before submission.</p>
</div>
</div>
</section>
<section className="support-faq">
<div className="container">
<div className="support-section-head">
<p className="tag">FAQ</p>
<h2>Quick answers before you write support.</h2>
</div>
<div className="support-faq-list">
{faqs.map((item) => (
<article key={item.question} className="support-faq-item">
<h3>{item.question}</h3>
<p>{item.answer}</p>
</article>
))}
</div>
</div>
</section>
</main>
)
}
export default function SupportPage() {
return (
<>
<Navbar />
<main className="support-page">
<section className="support-hero">
<div className="container support-hero-inner">
<p style={{ marginBottom: '1rem', opacity: 0.75 }}>
<Link href="/">Home</Link> / <span>Support</span>
</p>
<p className="tag">Support</p>
<h1>Help for scans, care plans, billing, and account questions.</h1>
<p className="support-lead">
GreenLens helps users identify plants, understand their condition, and keep a collection organized.
If something breaks or feels unclear, this is the fastest place to start.
</p>
<div className="support-actions">
<a className="btn-primary" href={`mailto:${siteConfig.supportEmail}`}>
Email Support
</a>
<Link className="btn-outline support-outline" href="/privacy">
Privacy Policy
</Link>
</div>
</div>
</section>
<section className="support-grid-wrap">
<div className="container support-grid">
<div className="support-card">
<h2>Contact</h2>
<p>
Email us at <a href={`mailto:${siteConfig.supportEmail}`}>{siteConfig.supportEmail}</a>
</p>
<p>Include your device type, app version, and what happened right before the issue.</p>
</div>
<div className="support-card">
<h2>Common topics</h2>
<ul className="support-list">
<li>Plant identification issues</li>
<li>Care reminder questions</li>
<li>Subscriptions and credit purchases</li>
<li>Account access and saved data</li>
</ul>
</div>
<div className="support-card">
<h2>Legal</h2>
<p>
Review our <Link href="/privacy">Privacy Policy</Link>, <Link href="/terms">Terms of Service</Link>,
and <Link href="/imprint">Imprint</Link>.
</p>
<p>These links should be used in App Store Connect before submission.</p>
</div>
</div>
</section>
<section className="support-faq">
<div className="container">
<div className="support-section-head">
<p className="tag">FAQ</p>
<h2>Quick answers before you write support.</h2>
</div>
<div className="support-faq-list">
{faqs.map((item) => (
<article key={item.question} className="support-faq-item">
<h3>{item.question}</h3>
<p>{item.answer}</p>
</article>
))}
</div>
</div>
</section>
</main>
<Footer />
</>
)
}

View File

@@ -0,0 +1,51 @@
'use client'
import Link from 'next/link'
import { useLang } from '@/context/LangContext'
import { siteConfig } from '@/lib/site'
const CONTENT = {
de: {
title: 'Nutzungsbedingungen',
intro: 'Diese Bedingungen regeln die Nutzung von GreenLens und der dazugehoerigen Services.',
section1: 'GreenLens wird als digitale App und Web-Service fuer Pflanzenscans, Informationen und accountbezogene Funktionen bereitgestellt.',
section2: 'Vor dem Livegang muessen diese Bedingungen durch rechtlich gepruefte und vollstaendige Vertragstexte ersetzt werden.',
contactLabel: 'Kontakt',
},
en: {
title: 'Terms of Service',
intro: 'These terms govern the use of GreenLens and its related services.',
section1: 'GreenLens is provided as a digital app and web service for plant scans, information, and account-related functionality.',
section2: 'Before launch, replace this placeholder with legally reviewed and complete terms for your business.',
contactLabel: 'Contact',
},
es: {
title: 'Terminos del Servicio',
intro: 'Estos terminos regulan el uso de GreenLens y sus servicios relacionados.',
section1: 'GreenLens se ofrece como app y servicio web para escaneo de plantas, informacion y funciones de cuenta.',
section2: 'Antes del lanzamiento, sustituye este texto por terminos completos revisados legalmente.',
contactLabel: 'Contacto',
},
}
export default function TermsContent() {
const { lang } = useLang()
const c = CONTENT[lang]
return (
<main className="container" style={{ paddingTop: '8rem', paddingBottom: '8rem', maxWidth: '800px' }}>
<p style={{ marginBottom: '1rem', opacity: 0.75 }}>
<Link href="/">Home</Link> / <span>Legal</span> / <span>{c.title}</span>
</p>
<h1>{c.title}</h1>
<div style={{ marginTop: '2rem', lineHeight: '1.8', opacity: 0.9 }}>
<p>{c.intro}</p>
<p>{c.section1}</p>
<p>{c.section2}</p>
<p>
<strong>{c.contactLabel}:</strong> <a href={`mailto:${siteConfig.legalEmail}`}>{siteConfig.legalEmail}</a>
</p>
</div>
</main>
)
}

View File

@@ -1,47 +1,37 @@
'use client'
import { useLang } from '@/context/LangContext'
import type { Metadata } from 'next'
import Navbar from '@/components/Navbar'
import Footer from '@/components/Footer'
import TermsContent from './TermsContent'
import { siteConfig } from '@/lib/site'
const CONTENT = {
de: {
title: 'Nutzungsbedingungen',
intro: 'Diese Bedingungen regeln die Nutzung von GreenLens und der dazugehoerigen Services.',
section1: 'GreenLens wird als digitale App und Web-Service fuer Pflanzenscans, Informationen und accountbezogene Funktionen bereitgestellt.',
section2: 'Vor dem Livegang muessen diese Bedingungen durch rechtlich gepruefte und vollstaendige Vertragstexte ersetzt werden.',
contactLabel: 'Kontakt',
const title = 'Terms of Service'
const description = 'Review the current GreenLens terms governing use of the app and related services.'
export const metadata: Metadata = {
title,
description,
alternates: {
canonical: '/terms',
},
en: {
title: 'Terms of Service',
intro: 'These terms govern the use of GreenLens and its related services.',
section1: 'GreenLens is provided as a digital app and web service for plant scans, information, and account-related functionality.',
section2: 'Before launch, replace this placeholder with legally reviewed and complete terms for your business.',
contactLabel: 'Contact',
openGraph: {
title: `${title} | GreenLens`,
description,
url: `${siteConfig.domain}/terms`,
type: 'website',
},
es: {
title: 'Terminos del Servicio',
intro: 'Estos terminos regulan el uso de GreenLens y sus servicios relacionados.',
section1: 'GreenLens se ofrece como app y servicio web para escaneo de plantas, informacion y funciones de cuenta.',
section2: 'Antes del lanzamiento, sustituye este texto por terminos completos revisados legalmente.',
contactLabel: 'Contacto',
twitter: {
card: 'summary_large_image',
title: `${title} | GreenLens`,
description,
},
}
export default function TermsPage() {
const { lang } = useLang()
const c = CONTENT[lang]
return (
<main className="container" style={{ paddingTop: '8rem', paddingBottom: '8rem', maxWidth: '800px' }}>
<h1>{c.title}</h1>
<div style={{ marginTop: '2rem', lineHeight: '1.8', opacity: 0.9 }}>
<p>{c.intro}</p>
<p>{c.section1}</p>
<p>{c.section2}</p>
<p>
<strong>{c.contactLabel}:</strong> <a href={`mailto:${siteConfig.legalEmail}`}>{siteConfig.legalEmail}</a>
</p>
</div>
</main>
<>
<Navbar />
<TermsContent />
<Footer />
</>
)
}

View File

@@ -0,0 +1,33 @@
import type { Metadata } from 'next'
import { notFound } from 'next/navigation'
import SeoCategoryPage from '@/components/SeoCategoryPage'
import { getSeoPageBySlug } from '@/lib/seoPages'
import { siteConfig } from '@/lib/site'
const profile = getSeoPageBySlug('zimmerpflanzen-bestimmen')
export const metadata: Metadata = !profile
? {}
: {
title: profile.metaTitle,
description: profile.metaDescription,
alternates: { canonical: profile.canonical },
openGraph: {
title: profile.metaTitle,
description: profile.metaDescription,
url: `${siteConfig.domain}${profile.canonical}`,
type: 'website',
images: [{ url: '/og-image.png', width: 1200, height: 630, alt: profile.metaTitle }],
},
twitter: {
card: 'summary_large_image',
title: profile.metaTitle,
description: profile.metaDescription,
images: ['/og-image.png'],
},
}
export default function Page() {
if (!profile) notFound()
return <SeoCategoryPage profile={profile} />
}

View File

@@ -37,11 +37,11 @@ export default function CTA() {
<span className="store-btn-big">{hasIosStoreUrl ? 'App Store' : t.cta.supportLabel}</span>
</div>
</a>
<a
href={hasAndroidStoreUrl ? siteConfig.androidPlayStoreUrl : `mailto:${siteConfig.supportEmail}`}
className="store-btn"
id="cta-googleplay"
aria-label="Google Play or contact"
<a
href={hasAndroidStoreUrl ? siteConfig.androidPlayStoreUrl : '/support'}
className="store-btn"
id="cta-googleplay"
aria-label="Google Play or contact"
>
<svg className="store-btn-icon" viewBox="0 0 24 24" fill="currentColor" aria-hidden="true">
<path d="M3.18 23.76c.33.18.7.24 1.08.17L14.84 12 11.17 8.33 3.18 23.76zm17.16-12.38-3.32-1.89-3.78 3.78 3.78 3.78 3.34-1.9c.95-.54.95-1.92-.02-2.77zM2.01 1.11C1.7 1.44 1.5 1.97 1.5 2.67v18.66c0 .7.2 1.23.51 1.56l.08.08L12.16 12v-.22L2.09 1.03l-.08.08zm9.16 10.67 2.67 2.67-10.5 5.97 7.83-8.64z" />

View File

@@ -24,12 +24,35 @@ export default function ComparisonPage({ competitor, peers }: ComparisonPageProp
})),
}
const breadcrumbSchema = {
'@context': 'https://schema.org',
'@type': 'BreadcrumbList',
itemListElement: [
{
'@type': 'ListItem',
position: 1,
name: 'Home',
item: siteConfig.domain,
},
{
'@type': 'ListItem',
position: 2,
name: `${siteConfig.name} vs ${competitor.name}`,
item: `${siteConfig.domain}/vs/${competitor.slug}`,
},
],
}
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(faqSchema) }}
/>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(breadcrumbSchema) }}
/>
<Navbar />
<main className="comparison-page">
<section className="comparison-hero">

View File

@@ -1,56 +1,81 @@
'use client'
import Link from 'next/link'
import { useLang } from '@/context/LangContext'
import { siteConfig } from '@/lib/site'
const LINK_HREFS = [
['#features', '#intelligence', '#cta', '/support'],
['/#how', '/#faq', '/support'],
['/imprint', '/privacy'],
]
export default function Footer() {
const { t } = useLang()
return (
<footer className="footer" id="footer">
<div className="container">
<div className="footer-inner">
<div>
<Link href="/" className="nav-logo" style={{ fontSize: '1.5rem' }}>
GREENLENS
</Link>
<p className="footer-brand-desc">{t.footer.brand}</p>
</div>
{t.footer.cols.map((col, ci) => (
<div className="footer-col" key={col.title}>
<div className="footer-col-title">{col.title}</div>
'use client'
import Link from 'next/link'
import { usePathname } from 'next/navigation'
import { useLang } from '@/context/LangContext'
import { siteConfig } from '@/lib/site'
export default function Footer() {
const pathname = usePathname()
const { t } = useLang()
const homeHref = (hash: string) => (pathname === '/' ? hash : `/${hash}`)
const linkHrefs = [
[homeHref('#features'), homeHref('#intelligence'), homeHref('#cta'), '/support'],
[homeHref('#how'), homeHref('#faq'), '/support'],
['/imprint', '/privacy', '/terms'],
]
return (
<footer className="footer" id="footer">
<div className="container">
<div className="footer-inner">
<div>
<Link href="/" className="nav-logo" style={{ fontSize: '1.5rem' }}>
GREENLENS
</Link>
<p className="footer-brand-desc">{t.footer.brand}</p>
</div>
{t.footer.cols.map((col, ci) => (
<div className="footer-col" key={col.title}>
<div className="footer-col-title">{col.title}</div>
{col.links.map((label, li) => (
<Link key={label} href={LINK_HREFS[ci]?.[li] ?? '/support'}>
<Link key={label} href={linkHrefs[ci]?.[li] ?? '/support'}>
{label}
</Link>
))}
{ci === 1 && (
<>
<Link href="/vs/picturethis">GreenLens vs PictureThis</Link>
<Link href="/vs/plantum">GreenLens vs Plantum</Link>
</>
)}
</div>
))}
<div className="footer-col">
<div className="footer-col-title">Identify &amp; Care</div>
<Link href="/best-plant-identification-app">Best Plant ID App</Link>
<Link href="/plant-identifier-app">Plant Identifier App</Link>
<Link href="/plant-scanner">Plant Scanner</Link>
<Link href="/flower-scanner">Flower Scanner</Link>
<Link href="/houseplant-identifier">Houseplant Identifier</Link>
<Link href="/succulent-identifier">Succulent Identifier</Link>
<Link href="/identify-plant-photo">Identify Plant by Photo</Link>
<Link href="/plant-disease-identifier">Plant Disease Identifier</Link>
<Link href="/plant-health-app">Plant Health App</Link>
<Link href="/plant-care-app">Plant Care App</Link>
<Link href="/vs/picturethis">vs PictureThis</Link>
<Link href="/vs/plantum">vs Plantum</Link>
<Link href="/vs/inaturalist">vs iNaturalist</Link>
<Link href="/vs/google-lens">vs Google Lens</Link>
</div>
<div className="footer-col">
<div className="footer-col-title">Pflanzen &amp; Erkennen</div>
<Link href="/pflanzen-erkennen-kostenlos">Pflanzen erkennen kostenlos</Link>
<Link href="/pflanzen-erkennen-app">Pflanzen erkennen App</Link>
<Link href="/pflanzen-bestimmen">Pflanzen bestimmen</Link>
<Link href="/blumen-scanner">Blumen Scanner</Link>
<Link href="/zimmerpflanzen-bestimmen">Zimmerpflanzen bestimmen</Link>
<Link href="/pflanzen-pflege-app">Pflanzen Pflege App</Link>
<Link href="/pflanzen-krankheiten-erkennen">Pflanzenkrankheiten erkennen</Link>
</div>
</div>
<div className="footer-brand-xl" aria-hidden="true">GREENLENS</div>
<div className="footer-bottom">
<p>{t.footer.copy}</p>
<a href={`mailto:${siteConfig.supportEmail}`} className="footer-contact">
{siteConfig.supportEmail}
</a>
</div>
</div>
</footer>
)
}
<div className="footer-brand-xl" aria-hidden="true">GREENLENS</div>
<div className="footer-bottom">
<p>{t.footer.copy}</p>
<Link href="/support" className="footer-contact">
Support
</Link>
</div>
</div>
</footer>
)
}

View File

@@ -1,9 +1,10 @@
'use client'
import Link from 'next/link'
import { useEffect, useState } from 'react'
import { useLang } from '@/context/LangContext'
import type { Lang } from '@/lib/i18n'
'use client'
import Link from 'next/link'
import { usePathname } from 'next/navigation'
import { useEffect, useState } from 'react'
import { useLang } from '@/context/LangContext'
import type { Lang } from '@/lib/i18n'
const LANGS: { code: Lang; label: string; flag: string }[] = [
{ code: 'de', label: 'DE', flag: 'DE' },
@@ -11,10 +12,12 @@ const LANGS: { code: Lang; label: string; flag: string }[] = [
{ code: 'es', label: 'ES', flag: 'ES' },
]
export default function Navbar() {
const [scrolled, setScrolled] = useState(false)
const [menuOpen, setMenuOpen] = useState(false)
const { lang, setLang, t } = useLang()
export default function Navbar() {
const [scrolled, setScrolled] = useState(false)
const [menuOpen, setMenuOpen] = useState(false)
const pathname = usePathname()
const { lang, setLang, t } = useLang()
const homeHref = (hash: string) => (pathname === '/' ? hash : `/${hash}`)
useEffect(() => {
const onScroll = () => setScrolled(window.scrollY > 40)
@@ -29,13 +32,13 @@ export default function Navbar() {
GREENLENS
</Link>
<div className={`nav-links${menuOpen ? ' nav-links--open' : ''}`}>
<a href="#features" onClick={() => setMenuOpen(false)}>{t.nav.features}</a>
<a href="#intelligence" onClick={() => setMenuOpen(false)}>{t.nav.tech}</a>
<a href="#faq" onClick={() => setMenuOpen(false)}>FAQ</a>
<a href="#how" onClick={() => setMenuOpen(false)}>{t.nav.how}</a>
<Link href="/support" onClick={() => setMenuOpen(false)}>Support</Link>
<a href="#cta" onClick={() => setMenuOpen(false)}>{t.nav.download}</a>
<div className={`nav-links${menuOpen ? ' nav-links--open' : ''}`}>
<a href={homeHref('#features')} onClick={() => setMenuOpen(false)}>{t.nav.features}</a>
<a href={homeHref('#intelligence')} onClick={() => setMenuOpen(false)}>{t.nav.tech}</a>
<a href={homeHref('#faq')} onClick={() => setMenuOpen(false)}>FAQ</a>
<a href={homeHref('#how')} onClick={() => setMenuOpen(false)}>{t.nav.how}</a>
<Link href="/support" onClick={() => setMenuOpen(false)}>Support</Link>
<a href={homeHref('#cta')} onClick={() => setMenuOpen(false)}>{t.nav.download}</a>
<div className="lang-switcher" role="group" aria-label="Language selector">
{LANGS.map((l) => (
@@ -55,8 +58,8 @@ export default function Navbar() {
))}
</div>
<a href="#cta" className="nav-cta" onClick={() => setMenuOpen(false)}>{t.nav.cta}</a>
</div>
<a href={homeHref('#cta')} className="nav-cta" onClick={() => setMenuOpen(false)}>{t.nav.cta}</a>
</div>
<button
className="nav-hamburger"

View File

@@ -0,0 +1,200 @@
import Link from 'next/link'
import Navbar from '@/components/Navbar'
import CTA from '@/components/CTA'
import Footer from '@/components/Footer'
import type { SeoPageProfile } from '@/lib/seoPages'
import { siteConfig, hasIosStoreUrl } from '@/lib/site'
interface SeoCategoryPageProps {
profile: SeoPageProfile
}
export default function SeoCategoryPage({ profile }: SeoCategoryPageProps) {
const faqSchema = {
'@context': 'https://schema.org',
'@type': 'FAQPage',
mainEntity: profile.faqs.map((item) => ({
'@type': 'Question',
name: item.question,
acceptedAnswer: {
'@type': 'Answer',
text: item.answer,
},
})),
}
const appSchema = profile.includeAppSchema
? {
'@context': 'https://schema.org',
'@type': 'SoftwareApplication',
name: siteConfig.name,
operatingSystem: 'iOS, Android',
applicationCategory: 'LifestyleApplication',
description: profile.directAnswer,
...(hasIosStoreUrl && { downloadUrl: siteConfig.iosAppStoreUrl }),
offers: {
'@type': 'Offer',
price: '0',
priceCurrency: 'EUR',
},
}
: null
const breadcrumbSchema = {
'@context': 'https://schema.org',
'@type': 'BreadcrumbList',
itemListElement: [
{
'@type': 'ListItem',
position: 1,
name: 'Home',
item: siteConfig.domain,
},
{
'@type': 'ListItem',
position: 2,
name: profile.h1,
item: `${siteConfig.domain}${profile.canonical}`,
},
],
}
return (
<>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(faqSchema) }}
/>
{appSchema && (
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(appSchema) }}
/>
)}
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(breadcrumbSchema) }}
/>
<Navbar />
<main className="comparison-page">
{/* Hero */}
<section className="comparison-hero">
<div className="container comparison-hero-grid">
<div className="comparison-hero-copy">
<p className="tag">GreenLens</p>
<h1>{profile.h1}</h1>
<p className="comparison-lead">{profile.tagline}</p>
<p>{profile.directAnswer}</p>
<div className="comparison-actions">
<a href="#cta" className="btn-primary">Try GreenLens</a>
<a href="#feature-table" className="btn-outline">See full comparison</a>
</div>
</div>
<aside className="comparison-hero-card">
<p className="comparison-card-label">Definition</p>
<p>{profile.definitionBlock}</p>
<p className="comparison-verified">Last updated: {profile.lastUpdated}</p>
</aside>
</div>
</section>
{/* Feature table */}
<section className="comparison-table-section" id="feature-table">
<div className="container">
<div className="comparison-section-head">
<p className="tag">At a glance</p>
<h2>{profile.featureTable.title}</h2>
</div>
<div className="comparison-table">
<div className="comparison-table-header">
<span>Feature</span>
<span>GreenLens</span>
<span>{profile.featureTable.alternativeLabel}</span>
</div>
{profile.featureTable.rows.map((row) => (
<article key={row.feature} className="comparison-row">
<div className="comparison-row-title">{row.feature}</div>
<div className="comparison-cell comparison-cell--greenlens">{row.greenlens}</div>
<div className="comparison-cell comparison-cell--competitor">{row.alternative}</div>
</article>
))}
</div>
</div>
</section>
{/* Fit cards */}
<section className="comparison-fit">
<div className="container comparison-fit-grid">
<article className="comparison-fit-card comparison-fit-card--greenlens">
<p className="tag">Best fit</p>
<h2>Choose GreenLens if:</h2>
<ul className="comparison-bullet-list comparison-bullet-list--dark">
{profile.greenLensIf.map((item) => (
<li key={item}>{item}</li>
))}
</ul>
</article>
<article className="comparison-fit-card">
<p className="tag">Not the best fit</p>
<h2>GreenLens is not the right tool if:</h2>
<ul className="comparison-bullet-list comparison-bullet-list--dark">
{profile.notBestIf.map((item) => (
<li key={item}>{item}</li>
))}
</ul>
</article>
</div>
</section>
{/* FAQ */}
<section className="comparison-faq">
<div className="container">
<div className="comparison-section-head">
<p className="tag">FAQ</p>
<h2>Common questions answered directly.</h2>
</div>
<div className="comparison-faq-grid">
{profile.faqs.map((item) => (
<article key={item.question} className="comparison-faq-card">
<h3>{item.question}</h3>
<p>{item.answer}</p>
</article>
))}
</div>
</div>
</section>
{/* Related links */}
{profile.relatedLinks.length > 0 && (
<section className="comparison-links">
<div className="container comparison-links-grid">
{profile.relatedLinks.map((link) => (
<Link key={link.href} href={link.href} className="comparison-link-card">
<p className="comparison-mini-label">Related</p>
<h3>{link.label}</h3>
<p>{link.description}</p>
</Link>
))}
<Link href="/support" className="comparison-link-card comparison-link-card--support">
<p className="comparison-mini-label">Need help?</p>
<h3>Talk to GreenLens support</h3>
<p>
Questions about scans, care plans, billing, or features? Use the support page.
</p>
</Link>
</div>
</section>
)}
<CTA />
</main>
<Footer />
</>
)
}

View File

@@ -1,4 +1,4 @@
export type CompetitorSlug = 'picturethis' | 'plantum'
export type CompetitorSlug = 'picturethis' | 'plantum' | 'inaturalist' | 'google-lens'
export interface ComparisonThesis {
title: string
@@ -365,12 +365,333 @@ export const competitorProfiles: Record<CompetitorSlug, CompetitorProfile> = {
},
],
},
inaturalist: {
slug: 'inaturalist',
name: 'iNaturalist',
metaTitle: 'GreenLens vs iNaturalist',
metaDescription:
'Compare GreenLens vs iNaturalist for plant identification, care guidance, and disease triage. See which app fits your situation — owned plant care or biodiversity discovery.',
heroSummary:
'iNaturalist is one of the most respected citizen science platforms in the world. GreenLens is built for a different job: helping you decide what to do next when a plant you own is struggling. These two tools solve different problems, and the right choice depends entirely on what you are trying to accomplish.',
heroVerdict: [
'Choose GreenLens if you own the plant and need the next actionable step — care guidance, symptom triage, or rescue decisions.',
'Choose iNaturalist if your goal is species discovery, community identification, or contributing to biodiversity research.',
'The comparison only becomes interesting when someone wants both. For plant owners in triage mode, GreenLens is the faster path.',
],
disclaimer:
'iNaturalist is a non-profit platform. This comparison is based on public features and user-reported use cases. GreenLens and iNaturalist serve different primary audiences.',
lastVerified: 'April 2026',
competitorSnapshot:
'iNaturalist is a global biodiversity mapping platform backed by the California Academy of Sciences and National Geographic. It is primarily a citizen science tool: users upload observations, receive community-sourced identifications, and contribute to scientific datasets. Its plant identification is broad and accurate, but the platform is not designed around plant ownership, care routines, or emergency triage.',
greenLensPositioning:
'GreenLens is an owned-plant companion. It assumes you are already responsible for the plant and need help deciding what to do next — whether that is diagnosis, care scheduling, or understanding why a leaf is turning yellow.',
whyPeopleCompare: [
'They found iNaturalist useful for ID but now need care guidance the platform does not provide.',
'They want a free identification option and are evaluating whether iNaturalist is enough.',
'They are confused by whether a citizen science app can replace a dedicated plant care app.',
],
theses: [
{
title: 'Community ID vs owned-plant triage',
greenlens:
'GreenLens assumes you own the plant and need a next step. Diagnosis, care context, and actionable decisions are built into the core workflow.',
competitor:
'iNaturalist crowdsources identifications from a global community. The platform is optimized for observation accuracy, not for what you should do once you know the species.',
},
{
title: 'App-first speed vs community dependence',
greenlens:
'GreenLens returns AI-driven results instantly, without waiting for community votes or reviews.',
competitor:
'iNaturalist offers instant AI suggestions at upload, but expert community confirmation — the step that makes an observation Research Grade — can take hours or days. That process works well for research; it is slow for a plant that looks wrong right now.',
},
{
title: 'Care integration vs observation logging',
greenlens:
'GreenLens connects identification to care plans, watering reminders, and health checks in one flow.',
competitor:
'iNaturalist focuses on observation logging and scientific accuracy. There is no care guidance, no reminder system, and no disease triage built in.',
},
],
categories: [
{
title: 'Plant identification',
greenlens:
'AI-powered scan results in seconds. Accurate enough for the 450+ common species most plant owners encounter.',
competitor:
'Strong and often highly accurate, especially for unusual or rare species. Community input adds credibility over time.',
whyItMatters:
'If you need ID for a common houseplant right now, both work. For rare or regionally specific species, iNaturalist has a deeper expert pool.',
},
{
title: 'Care guidance after identification',
greenlens:
'Automatic care plan, watering schedule, and contextual next-step recommendations after every scan.',
competitor:
'No care guidance. iNaturalist tells you what the plant is, not what to do with it.',
whyItMatters:
'For plant owners, the ID is only step one. Everything that follows is missing from iNaturalist.',
},
{
title: 'Disease and symptom triage',
greenlens:
'Health check feature analyzes symptoms and narrows down the most likely cause with a clear next action.',
competitor:
'No disease or symptom support. iNaturalist is not designed for diagnostic or rescue workflows.',
whyItMatters:
'If your plant looks sick, iNaturalist gives you a name. GreenLens gives you something to do about it.',
},
{
title: 'Collection and reminders',
greenlens:
'Save plants to your collection, track care history, and receive context-aware watering and fertilizing reminders.',
competitor:
'Observation history exists for logging, but there is no personal collection management or care reminder system.',
whyItMatters:
'Ongoing care requires memory. GreenLens maintains that context; iNaturalist does not.',
},
{
title: 'Citizen science and community',
greenlens:
'No community science layer. GreenLens is a private, individual tool for plant owners.',
competitor:
'This is the core iNaturalist strength. Millions of observations, expert community, and real scientific impact.',
whyItMatters:
'If contributing to biodiversity data or reaching expert naturalists matters to you, iNaturalist is the clear choice.',
},
{
title: 'Offline and rare species depth',
greenlens:
'Identification and health checks require connectivity. Saved collection and care notes are available offline.',
competitor:
'Community data is vast and includes rare, regional, and unusual species that mainstream apps often miss.',
whyItMatters:
'For unusual plants or fieldwork in low-connectivity areas, iNaturalist has meaningful advantages.',
},
],
greenLensBestFor: [
'Plant owners who need care guidance, not just a species name.',
'Anyone dealing with a struggling plant and looking for a concrete next step.',
'People who want reminders, care history, and health checks in one app.',
],
competitorBestFor: [
'Nature enthusiasts who want to document and share biodiversity observations.',
'Users who need rare or unusual species identified by a global expert community.',
'Anyone contributing to citizen science or academic research projects.',
],
emergencyScenarios: [
{
symptom: 'Yellowing leaves on a houseplant',
greenlens:
'GreenLens prompts a health check, asks about recent changes, and surfaces the most likely cause with a recommended next action.',
competitor:
'iNaturalist can confirm the species, but there is no diagnostic flow. You would need to search for care information elsewhere.',
},
{
symptom: 'Unknown plant in the garden — what is it?',
greenlens:
'GreenLens identifies it and immediately adds it to your collection with care guidance.',
competitor:
'iNaturalist is excellent here: fast community confirmation, high accuracy, and a permanent observation record.',
},
{
symptom: 'Soft stems after repotting',
greenlens:
'GreenLens connects the symptom to a likely overwatering or root disturbance scenario and recommends the safest next step.',
competitor:
'Not designed for this use case. iNaturalist has no triage or post-repotting recovery guidance.',
},
],
faqs: [
{
question: 'Is iNaturalist free compared to GreenLens?',
answer:
'iNaturalist is fully free and non-profit. GreenLens includes free functionality with optional paid features for advanced AI scans and unlimited health checks. If cost is the only factor, iNaturalist wins. If you need care guidance alongside identification, GreenLens is the more complete tool.',
},
{
question: 'Can iNaturalist identify plant diseases?',
answer:
'iNaturalist can identify what the plant is, and community members may occasionally comment on visible symptoms. But it has no built-in disease diagnosis, health check workflow, or triage guidance. GreenLens is built specifically for that use case.',
},
{
question: 'Why would someone use GreenLens instead of a free app like iNaturalist?',
answer:
'iNaturalist solves the identification problem well. GreenLens solves what comes after: care scheduling, symptom analysis, collection tracking, and rescue decisions. They are complementary tools for different moments.',
},
{
question: 'Is iNaturalist accurate enough to replace a paid plant app?',
answer:
'For identification alone, iNaturalist is often accurate and sometimes more detailed than paid apps. The gap opens up when you need ongoing care, reminders, or help diagnosing a problem. iNaturalist does not address those needs at all.',
},
],
},
'google-lens': {
slug: 'google-lens',
name: 'Google Lens',
metaTitle: 'GreenLens vs Google Lens — Pflanzen erkennen App im Vergleich',
metaDescription:
'Google Lens nennt den Pflanzennamen. GreenLens liefert danach Pflegeplan, Gießerinnerungen und Gesundheitscheck. Vergleich: Was Google Lens kann — und was fehlt.',
heroSummary:
'Google Lens kann Pflanzen erkennen — aber es hört genau dort auf. GreenLens ist die spezialisierte Alternative: Pflanze fotografieren, sofort Name erhalten, und dann direkt Pflegeplan, Diagnose und Erinnerungen — alles ohne Umweg über Google-Suchergebnisse.',
heroVerdict: [
'Wähle GreenLens, wenn du nach dem Pflanzennamen auch wissen willst, wie du sie pflegst.',
'Nutze Google Lens, wenn du nur schnell einen Namen nachschlagen möchtest und keine Pflegefunktionen brauchst.',
'Für alles nach dem Namen — Pflege, Diagnose, Erinnerungen — ist Google Lens nicht gebaut.',
],
disclaimer:
'Google Lens ist ein kostenloses, allgemeines Bildsuchwerkzeug von Google. Dieser Vergleich basiert auf öffentlich zugänglichen Funktionen (Stand April 2026).',
lastVerified: 'April 2026',
competitorSnapshot:
'Google Lens ist in die Google-Kamera und Google-Fotos integriert und kostenlos nutzbar. Es erkennt Pflanzen, Tiere, Objekte und Text anhand von Fotos. Für Pflanzenerkennung liefert es einen Namen und Links zu Google-Suchergebnissen — aber keinen Pflegeplan, keine Diagnose und keine Erinnerungen.',
greenLensPositioning:
'GreenLens ist kein allgemeines Suchwerkzeug. Die App ist ausschließlich für Pflanzen entwickelt: Erkennung, Pflegeplanung, Gesundheitscheck und Sammelverwaltung in einer Oberfläche — ohne Weiterleitung auf externe Webseiten.',
whyPeopleCompare: [
'Sie haben Google Lens für schnelle Erkennung genutzt, aber keine Pflegeinformationen erhalten.',
'Sie suchen eine kostenlose Alternative zu Google, die nach der Erkennung weitergeht.',
'Sie wollen nach dem Scan direkt wissen, was sie tun sollen — nicht auf eine Suchergebnisseite weitergeleitet werden.',
],
theses: [
{
title: 'Allgemeine Suche vs. Pflanzen-App',
greenlens:
'GreenLens ist ausschließlich für Pflanzen entwickelt. Scan, Pflege und Diagnose sind auf den Pflanzenkontext ausgerichtet.',
competitor:
'Google Lens ist ein universelles Bildsuchwerkzeug. Pflanzenerkennung ist eine von vielen Funktionen — keine Kernkompetenz.',
},
{
title: 'Name vs. nächster Schritt',
greenlens:
'Nach dem Scan liefert GreenLens sofort Pflegeplan, Gießerinnerungen und Gesundheitscheck — ohne weiteren Klick.',
competitor:
'Google Lens gibt einen Namen zurück und leitet auf Suchergebnisse weiter. Was du als nächstes tun sollst, bleibt offen.',
},
{
title: 'Pflege und Diagnose',
greenlens:
'Jede erkannte Pflanze bekommt automatisch Pflegeinformationen, Gießplan und die Möglichkeit eines Gesundheitschecks bei Symptomen.',
competitor:
'Google Lens hat keine Pflegefunktionen, keine Erinnerungen und keine Möglichkeit, Symptome wie gelbe Blätter zu analysieren.',
},
],
categories: [
{
title: 'Pflanzenerkennung',
greenlens:
'KI-gestützter Scan über 450 Arten. Ergebnis erscheint direkt in der App mit Namen, Artportrait und Pflegeprofil.',
competitor:
'Erkennt eine große Bandbreite an Pflanzen schnell und kostenlos. Ergebnis sind Links zu Google-Suchergebnissen.',
whyItMatters:
'Für einfache Namenssuche ist Google Lens gut. Für alles, was danach kommt, ist GreenLens die richtigere Wahl.',
},
{
title: 'Pflegeplan und Gießerinnerungen',
greenlens:
'Automatischer Pflegeplan nach dem Scan. Gießerinnerungen, Düngepläne und Umtopf-Hinweise pro Pflanze.',
competitor:
'Keine Pflegefunktionen. Nach der Erkennung gibt es keinen weiteren Schritt in der App.',
whyItMatters:
'Den Namen einer Pflanze zu kennen löst das eigentliche Problem nicht. Zu wissen, wann sie Wasser braucht, schon.',
},
{
title: 'Gesundheitscheck und Diagnose',
greenlens:
'Eigener Scan für Symptome: gelbe Blätter, weiche Stiele, Flecken. GreenLens nennt die wahrscheinlichste Ursache und einen konkreten nächsten Schritt.',
competitor:
'Keine Diagnosefunktion. Google Lens erkennt die Pflanze, aber nicht ihren Zustand oder Symptome.',
whyItMatters:
'Wenn eine Pflanze krank aussieht, braucht man eine Diagnose — keinen Pflanzennamen.',
},
{
title: 'Pflanzensammlung',
greenlens:
'Erkannte Pflanzen in persönlicher Sammlung mit Fotos, Pflegeverlauf und individuellen Erinnerungen speichern.',
competitor:
'Keine Sammelfunktion. Google Lens hat keinen Pflanzenbereich, in dem erkannte Pflanzen dauerhaft verwaltet werden.',
whyItMatters:
'Wer mehrere Pflanzen hat, braucht mehr als eine Suchhistorie.',
},
{
title: 'Preis',
greenlens:
'Kostenlose Pflanzenerkennung mit optionalen Paid-Funktionen für unbegrenzte KI-Scans und Gesundheitschecks.',
competitor:
'Vollständig kostenlos — allerdings auch ohne Pflegefunktionen.',
whyItMatters:
'Google Lens ist der günstigste Weg, eine Pflanze zu benennen. GreenLens liefert den Wert, der danach kommt.',
},
{
title: 'Offline-Nutzung',
greenlens:
'Scans und Gesundheitschecks benötigen Internet. Gespeicherte Sammlung und Erinnerungen sind offline verfügbar.',
competitor:
'Benötigt ebenfalls eine Internetverbindung für die Bilderkennung.',
whyItMatters:
'Beide benötigen Internet für die Erkennung. GreenLens bietet mehr Offline-Datenzugang für gespeicherte Pflanzen.',
},
],
greenLensBestFor: [
'Pflanzenbesitzer, die nach dem Namen auch wissen wollen, wie sie ihre Pflanze pflegen.',
'Nutzer, die bei Problemen wie gelben Blättern oder weichen Stielen schnell eine Diagnose brauchen.',
'Alle, die ihre Pflanzensammlung verwalten und Pflegeerinnerungen nutzen möchten.',
],
competitorBestFor: [
'Schnelle kostenlose Namenssuche ohne weitere Ansprüche an die App.',
'Gelegenheitsnutzer, die nur selten und ohne Pflanzenpflege-Kontext identifizieren möchten.',
'Nutzer, die die Google-Kamera bereits verwenden und keinen separaten App-Download wollen.',
],
emergencyScenarios: [
{
symptom: 'Gelbe Blätter — Was tun?',
greenlens:
'GreenLens analysiert die Symptome, fragt nach Veränderungen in der Pflege und nennt den wahrscheinlichsten Grund mit einem konkreten nächsten Schritt.',
competitor:
'Google Lens kann das Pflanzenbild erkennen, aber keine Diagnose für Symptome stellen. Es gibt keine Pflegeanalyse oder Handlungsempfehlung.',
},
{
symptom: 'Unbekannte Pflanze im Garten — Was ist das?',
greenlens:
'GreenLens identifiziert die Pflanze und speichert sie direkt mit Pflegeplan in der Sammlung.',
competitor:
'Google Lens liefert schnell und kostenlos einen Namen — für einfache Identifikation eine gute Option.',
},
{
symptom: 'Pflanze hängt nach dem Umtopfen',
greenlens:
'GreenLens verbindet das Symptom mit der jüngsten Veränderung und empfiehlt den nächsten risikoärmsten Schritt.',
competitor:
'Nicht für diesen Anwendungsfall entwickelt. Google Lens bietet keine Pflegekontext-Analyse.',
},
],
faqs: [
{
question: 'Kann Google Lens Pflanzen genauso gut erkennen wie GreenLens?',
answer:
'Für einfache Identifikation häufiger Pflanzen ist Google Lens schnell und kostenlos. GreenLens ist spezialisiert auf Pflanzen und liefert nach der Erkennung direkt einen Pflegeplan — Google Lens leitet auf Suchergebnisse weiter.',
},
{
question: 'Warum GreenLens nutzen, wenn Google Lens kostenlos ist?',
answer:
'Google Lens nennt den Namen. GreenLens erklärt, was du als nächstes tun sollst: Wie oft gießen, welches Licht, wann umtopfen — und bei Problemen wie gelben Blättern, was die Ursache ist und was du konkret tun kannst.',
},
{
question: 'Hat Google Lens eine Pflanzenpflege-Funktion?',
answer:
'Nein. Google Lens ist ein allgemeines Bildsuchwerkzeug ohne Pflegeplan, Gießerinnerungen, Gesundheitscheck oder Sammlungsverwaltung.',
},
{
question: 'Ist GreenLens besser als Google Lens für Pflanzenerkennung?',
answer:
'Für die reine Erkennung sind beide gut. Der Unterschied liegt im Danach: GreenLens gibt Pflegeplan, Diagnose und Erinnerungen — Google Lens gibt Links zu Webseiten.',
},
],
},
}
export const competitorOrder: CompetitorSlug[] = ['picturethis', 'plantum']
export const competitorOrder: CompetitorSlug[] = ['picturethis', 'plantum', 'inaturalist', 'google-lens']
export function getCompetitorBySlug(slug: string): CompetitorProfile | undefined {
if (slug === 'picturethis' || slug === 'plantum') {
if (slug === 'picturethis' || slug === 'plantum' || slug === 'inaturalist' || slug === 'google-lens') {
return competitorProfiles[slug]
}

View File

@@ -63,7 +63,7 @@ export const translations = {
cols: [
{ title: 'Produkt', links: ['Features', 'Technologie', 'App laden', 'Support'] },
{ title: 'Ressourcen', links: ['So funktioniert es', 'FAQ', 'Support'] },
{ title: 'Rechtliches', links: ['Impressum', 'Datenschutz'] },
{ title: 'Rechtliches', links: ['Impressum', 'Datenschutz', 'Nutzungsbedingungen'] },
],
},
},
@@ -129,7 +129,7 @@ export const translations = {
cols: [
{ title: 'Product', links: ['Features', 'Technology', 'Get the App', 'Support'] },
{ title: 'Resources', links: ['How it works', 'FAQ', 'Support'] },
{ title: 'Legal', links: ['Imprint', 'Privacy Policy'] },
{ title: 'Legal', links: ['Imprint', 'Privacy Policy', 'Terms of Service'] },
],
},
},
@@ -195,7 +195,7 @@ export const translations = {
cols: [
{ title: 'Producto', links: ['Funciones', 'Tecnologia', 'Descargar', 'Support'] },
{ title: 'Recursos', links: ['Como funciona', 'FAQ', 'Support'] },
{ title: 'Legal', links: ['Aviso legal', 'Privacidad'] },
{ title: 'Legal', links: ['Aviso legal', 'Privacidad', 'Terminos del servicio'] },
],
},
},

File diff suppressed because it is too large Load Diff

View File

@@ -3,8 +3,8 @@ const siteUrl = (process.env.NEXT_PUBLIC_SITE_URL || 'https://greenlenspro.com')
export const siteConfig = {
name: 'GreenLens',
domain: siteUrl,
supportEmail: 'knuth.timo@gmail.com',
legalEmail: 'knuth.timo@gmail.com',
supportEmail: 'timo@greenlenspro.com',
legalEmail: 'timo@greenlenspro.com',
iosAppStoreUrl: 'https://apps.apple.com/de/app/greenlens-pro/id6759843546?l=en-GB',
androidPlayStoreUrl: '',
company: {

33
greenlns-landing/proxy.ts Normal file
View File

@@ -0,0 +1,33 @@
import type { NextRequest } from 'next/server'
import { NextResponse } from 'next/server'
const APEX_HOST = 'greenlenspro.com'
const WWW_HOST = `www.${APEX_HOST}`
export function proxy(request: NextRequest) {
const host = request.headers.get('host')
const forwardedProto = request.headers.get('x-forwarded-proto')
if (!host || (host !== APEX_HOST && host !== WWW_HOST)) {
return NextResponse.next()
}
const url = request.nextUrl.clone()
let shouldRedirect = false
if (host === WWW_HOST) {
url.host = APEX_HOST
shouldRedirect = true
}
if (forwardedProto === 'http' || url.protocol === 'http:') {
url.protocol = 'https:'
shouldRedirect = true
}
return shouldRedirect ? NextResponse.redirect(url, 308) : NextResponse.next()
}
export const config = {
matcher: '/:path*',
}

19
leads/README.md Normal file
View File

@@ -0,0 +1,19 @@
# GreenLens Leads
Reports from automated scheduled agents. Copy results from the run logs here.
## Folders
- `churn/` — Daily churn alerts from PostHog (users gone silent 7+ days)
- `b2b/` — Weekly B2B leads: garden centers, nurseries, botanical gardens
- `influencer/` — Weekly influencer & creator outreach
## Run Logs
- Churn Alert: https://claude.ai/code/scheduled/trig_011v9tTdx2CGpyRvY7pEURxf
- B2B Lead Finder: https://claude.ai/code/scheduled/trig_01Bg1R3jLuHHqmxLpvy7iGsS
- Influencer Scout: https://claude.ai/code/scheduled/trig_01YGuMwcfcuP59zx8s3TCmSK
## File naming
`YYYY-MM-DD_report.md` — e.g. `2026-04-15_report.md`

View File

@@ -0,0 +1,116 @@
# GreenLens — Weekly B2B Lead Report
Week of April 15, 2026 | Markets: US, UK, Australia, Canada
## Summary
| Metric | Value |
|--------|-------|
| Companies researched | ~30 |
| Companies shortlisted (5200 employees) | 15 |
| Top 10 leads selected | 10 |
| New Apollo contacts created | 10 |
| Apollo label applied | GreenLens B2B Leads |
| Lead credits consumed | 0 |
| Credits remaining | 110 |
> Note: Apollo free plan restricts bulk search. Upgrading to Basic/Professional unlocks full keyword-based prospecting.
---
## Top 10 Leads
### 1. Plant Delights Nursery
- **Location:** Raleigh, North Carolina, USA
- **Contact:** Tony Avent — Owner & Founder
- **Phone:** +1 919-772-4794
- **LinkedIn:** linkedin.com/in/tony-avent-39163b29
- **Website:** plantdelights.com
- **Employees:** 2050
- **Why:** World-renowned specialty nursery for rare plants. Customers constantly need to identify unfamiliar species — GreenLens's sweet spot.
### 2. Logee's Greenhouses
- **Location:** Danielson, Connecticut, USA
- **Contact:** Byron Martin — President & Owner
- **Phone:** +1 860-774-8038
- **LinkedIn:** linkedin.com/in/byron-martin-6213a213b
- **Website:** logees.com
- **Employees:** 2040
- **Why:** Founded 1892, specializes in tropical plants with hundreds of look-alike species. 4th-gen owner actively modernizing the business.
### 3. High Country Gardens
- **Location:** Santa Fe, New Mexico, USA
- **Contact:** David Salman — Founder & Chief Horticulturist
- **Phone:** +1 800-925-9387
- **Website:** highcountrygardens.com
- **Employees:** 1540
- **Why:** Water-wise and native plants niche with strong educational demand. Content-led brand perfectly aligned with GreenLens.
### 4. Annie's Annuals & Perennials
- **Location:** Richmond, California, USA
- **Contact:** Annie Hayes — Founder & Owner
- **Phone:** +1 888-266-4370
- **LinkedIn:** linkedin.com/in/annie-hayes-95800716
- **Website:** anniesannuals.com
- **Employees:** 3070
- **Why:** Cult following among passionate gardeners. Strong newsletter and community — ideal for co-marketing.
### 5. White Flower Farm
- **Location:** Litchfield, Connecticut, USA
- **Contact:** Eliot Wadsworth — Owner
- **Phone:** +1 800-503-9624
- **LinkedIn:** linkedin.com/in/eliotwadsworth
- **Website:** whiteflowerfarm.com
- **Employees:** 50150
- **Why:** Premium nursery built on plant education. QR codes on plant tags linking to GreenLens would enhance unboxing experience.
### 6. Sarah Raven
- **Location:** Perch Hill, East Sussex, United Kingdom
- **Contact:** Sarah Raven — Founder & Director
- **Phone:** +44 345 092 0283
- **Website:** sarahraven.com
- **Employees:** 50100
- **Why:** UK's most prominent gardening brand. Education-first mission is a natural match for GreenLens. Hundreds of thousands of engaged customers.
### 7. Crocus
- **Location:** Windlesham, Surrey, United Kingdom
- **Contact:** Mark Fane — Co-Founder & Managing Director
- **Phone:** +44 134 457 8111
- **Website:** crocus.co.uk
- **Employees:** 50120
- **Why:** UK's largest online plant retailer, explicitly technology-forward. API integration ("Photograph it and find it in our shop") would be a direct commercial win.
### 8. Hillier Nurseries
- **Location:** Ampfield, Hampshire, United Kingdom
- **Contact:** Robert Hillier — Managing Director
- **Phone:** +44 179 436 8733
- **Website:** hillier.co.uk
- **Employees:** 150200
- **Why:** One of UK's most prestigious nursery groups, 9 centres, heritage since 1864. In-store GreenLens deployment (QR codes, staff iPads) is a clear use case.
### 9. Sheridan Nurseries
- **Location:** Georgetown, Ontario, Canada
- **Contact:** Karl Stensson — President & Owner
- **Phone:** +1 416-798-7970
- **LinkedIn:** linkedin.com/in/karl-stensson-27786218
- **Website:** sheridannurseries.com
- **Employees:** 100200
- **Why:** Canada's largest family-owned garden centre (8 locations). Industry association leader — winning here generates Canadian market credibility.
### 10. Flower Power
- **Location:** Rydalmere, New South Wales, Australia
- **Contact:** Harold Delmege — Founder & CEO
- **Website:** flowerpower.com.au
- **Employees:** 100200
- **Why:** Australia's largest independent garden centre (30+ locations). Native Australian plants are notoriously hard to identify — perfect GreenLens use case.
---
## Next Steps
| Priority | Action |
|----------|--------|
| High | Upgrade Apollo plan to unlock bulk search |
| High | Run email enrichment on 10 contacts once plan upgraded |
| Medium | Draft outreach emails for top 3: Plant Delights, Crocus, Sheridan |
| Medium | Enrol all 10 in Apollo sequence once emails retrieved |
| Low | Expand next week: florists, landscape architects, university botanic departments |

View File

@@ -0,0 +1,233 @@
# GreenLens — Weekly B2B Lead Report
Week of April 20, 2026 | Markets: US, UK, Australia, Canada
## Summary
| Metric | Value |
|--------|-------|
| Companies researched | ~30 |
| Top 10 leads selected | 10 |
| Apollo contacts created | 10 |
| Apollo label applied | GreenLns-B2B-Leads |
| Apollo phone numbers auto-enriched | 7 of 10 |
| Cold email sequences written | 5 (15 emails total) |
> Note: Apollo paid plan (Basic+) required to unlock people/company search and email enrichment. Contacts were created manually via Apollo API.
---
## Top 10 Leads
| # | Company | Country | Type | Est. Employees | Contact | Title | Phone (Apollo) |
|---|---------|---------|------|---------------|---------|-------|----------------|
| 1 | Flora Grubb Gardens | 🇺🇸 US | Garden center / plant shop | ~15 | Flora Grubb | Co-Founder & Owner | — |
| 2 | Pistils Nursery | 🇺🇸 US | Urban nursery | ~12 | Lisa Muddiman | Co-Owner | +1 503-288-4889 |
| 3 | Swansons Nursery | 🇺🇸 US | Independent nursery | ~45 | Nick Hage | Owner | +1 206-782-2543 |
| 4 | The Plant Society | 🇦🇺 AU | Boutique plant shop | ~12 | Jason Chongue | Co-Founder & Creative Director | +61 439 282 409 |
| 5 | Petersham Nurseries | 🇬🇧 UK | Destination nursery & restaurant | ~80 | Gael Boglione | Founder & Director | +44 20 8940 5230 |
| 6 | Leaf Supply | 🇦🇺 AU | Plant shop / media brand | ~8 | Lauren Camilleri | Co-Founder | — |
| 7 | The Plant Runner | 🇦🇺 AU | Plant shop & care products | ~10 | Ian Drummond | Founder | — |
| 8 | Clifton Nurseries | 🇬🇧 UK | Independent nursery (est. 1851) | ~30 | — (needs research) | — | +44 20 7289 6851 |
| 9 | GardenWorks | 🇨🇦 CA | Garden center chain (6 locations) | ~120 | — (needs research) | — | +1 604-299-0621 |
| 10 | Chelsea Physic Garden | 🇬🇧 UK | Botanical garden (est. 1673) | ~35 | Sue Minter* | Chief Executive | +44 20 7352 5646 |
*Verify Sue Minter's current role — may have moved to consultancy.
---
## Opportunity Scoring — Top 5 Selected for Sequences
| Lead | Key Fit Signal | Primary GreenLens Value Prop |
|------|---------------|------------------------------|
| Flora Grubb Gardens | Farm-to-store model, design-literate clientele, two locations | QR tags + white-label API |
| Pistils Nursery | Education-led community, active class program, rare plant selection | In-store ID experience + staff tool |
| Swansons Nursery | 45+ staff, 100-year heritage, high-volume spring season | Staff training + seasonal onboarding |
| The Plant Society | Strong brand identity, pop-up events, two published books | QR tags + white-label API |
| Petersham Nurseries | 80 staff, destination visitor model, premium brand | Staff training + visitor experience |
---
## Cold Email Sequences
### Lead 1 — Flora Grubb | Flora Grubb Gardens | San Francisco, CA 🇺🇸
**Email 1 — Initial Outreach**
Subject: `plants customers can't name`
The farm-to-store model with Grubb & Nadler Nursery is something you don't see in retail — the provenance story is right there, and it naturally drives that "I need to know everything about this plant" feeling from your customers.
GreenLens is an AI plant ID app that turns that curiosity into a self-serve experience. A QR code on each plant tag lets customers scan, instantly identify the species, and pull up care guides — without needing to flag down your floor team for every uncommon cultivar or unusual California native.
Worth a quick chat to see if that fits the Flora Grubb experience?
---
**Email 2 — Follow-up: multi-location knowledge consistency**
Subject: `sf and la knowledge gap`
With retail locations in both SF and LA now, keeping consistent plant knowledge across two floors is a real challenge — especially for staff at the LA location who haven't spent time at the Fallbrook farm and don't have that same hands-on grounding.
GreenLens gives both teams the same identification resource in their pocket: scan any plant on the floor and get species details, care notes, and common customer questions in real time. A few multi-location nurseries use it specifically as a knowledge-levelling tool across sites where expertise naturally concentrates at the original location.
Relevant to how you're managing that as you expand?
---
**Email 3 — Follow-up: white-label brand extension**
Subject: `flora grubb branded plant id`
One last angle before I leave this with you: GreenLens offers a white-label API that lets retailers embed plant identification directly into their own website or app — under your brand, not ours.
For a business that's built a genuine identity around plant expertise and farm provenance, owning that digital layer makes sense. Your customers are clearly the type to go deep on the plants they buy, and that tool becomes part of the Flora Grubb experience rather than a third-party add-on.
Is a 20-minute call worth it?
---
### Lead 2 — Lisa Muddiman | Pistils Nursery | Portland, OR 🇺🇸
**Email 1 — Initial Outreach**
Subject: `id for your class days`
The education program at Pistils is what sets you apart from every other Portland nursery — you've built a community around plant curiosity, and that's harder to replicate than inventory.
GreenLens slots into that naturally. QR codes on your plant tags let customers self-serve species info and care guidance mid-browse, extending the education experience to the floor between classes. A few urban nurseries with active programming have used it to carry the "class feeling" into everyday visits when the schedule is quieter.
Worth a quick conversation?
---
**Email 2 — Follow-up: staff tool for rare inventory**
Subject: `your rarest plants unidentified`
Pistils carries a genuinely unusual selection — which means your team probably fields a lot of "what even is this?" questions from customers handling plants they've never encountered before.
GreenLens handles those instantly with a phone scan. Nurseries with similarly diverse inventories use it to free up their most knowledgeable staff for higher-value conversations — growing advice, plant pairings, troubleshooting — rather than repeating identification work on the floor all day.
Relevant to how you run things with your current team size?
---
**Email 3 — Follow-up: purchase conversion for unfamiliar plants**
Subject: `the hesitation before buying`
One more thought before I go quiet: customers who can't confidently name a plant they're considering often don't buy it — they hesitate, put it back, and think about it later (meaning they don't come back for it). GreenLens closes that gap in the aisle. Scan, identify, get care info, feel confident, buy.
For a nursery that specifically stocks unusual cultivars, reducing that friction matters more than at a store selling the same hostas as every garden center in the city.
Happy to share what we're seeing at comparable stores if that's useful.
---
### Lead 3 — Nick Hage | Swansons Nursery | Seattle, WA 🇺🇸
**Email 1 — Initial Outreach**
Subject: `your floor team at peak`
Swansons has one of the best-known floor teams of any independent nursery in the Pacific Northwest — that reputation for expertise is decades in the making and clearly a competitive moat.
GreenLens sits alongside that human knowledge rather than replacing it: QR codes on your plant tags let customers self-serve species info and care guides during the peak weekend rush when your team is stretched and every conversation has a queue. The expertise is there; the tool just helps route it more efficiently.
Worth a quick conversation?
---
**Email 2 — Follow-up: seasonal staff onboarding**
Subject: `spring hires on day one`
Spring staffing is a pressure point for most nurseries — you bring in seasonal team members who need to get up to speed fast on a large, rotating inventory, while your permanent staff are already at full capacity handling customers.
GreenLens works as an on-the-job training resource: new hires scan plants on the floor and instantly get species details, common names, and care requirements in context. A few nurseries with 40+ person teams have used it specifically to compress their onboarding timeline without sacrificing the knowledge quality Swansons is known for.
Relevant to how you manage the spring ramp-up?
---
**Email 3 — Follow-up: events program extension**
Subject: `your events beyond the room`
One more angle worth floating before I leave this with you: Swansons' classes and workshops are clearly a loyalty engine — well-attended and a meaningful part of how you hold the community year-round.
GreenLens could add an interactive identification layer to plant walks and hands-on workshops: participants scan plants in real time and build botanical context on the spot. A few nurseries also add branded QR codes to event handouts so attendees can identify plants they encounter at home afterward — extending the relationship past the event itself.
Happy to show you a quick demo if any of this is the kind of thing you'd find useful.
---
### Lead 4 — Jason Chongue | The Plant Society | Melbourne, VIC 🇦🇺
**Email 1 — Initial Outreach**
Subject: `id at point of curiosity`
The way The Plant Society merges retail with plant literacy — the books, styling content, the curation — there's a clear appetite from your customers to go deeper on what they're buying, not just take it home and hope for the best.
GreenLens puts an instant identification layer on that curiosity. QR codes on your plant tags let customers scan a Monstera obliqua or an unusual Hoya and immediately get species context, care requirements, and interesting botanical notes — turning the browsing moment into the kind of discovery experience your store already signals it's for.
Worth a chat to see if it fits what you're building?
---
**Email 2 — Follow-up: pop-up and event activations**
Subject: `identification at your popups`
A separate angle worth floating: your pop-ups reach a lot of people who may be encountering some of your rarer varieties for the first time, with no floor team ratio to handle the curiosity that creates at a market table.
GreenLens works offline and can be configured with branded QR codes for specific events — giving customers a take-home identification experience even after they've left the table. A few specialty plant retailers have used it as a standalone pop-up activation that drives follow-on online traffic after the event.
Relevant to what you're doing with events this season?
---
**Email 3 — Follow-up: white-label API as brand extension**
Subject: `plant id under your brand`
Last thought: GreenLens offers a white-label API that lets retailers embed plant identification directly into their own website or app — under your name, not ours.
Given the authority The Plant Society has built — two published books, a design reputation, a loyal following — owning a plant ID tool under your brand is a logical extension of the expertise you've already made public. It also makes your digital presence genuinely useful to existing customers, not just a catalogue for new ones.
Worth 20 minutes to walk through what that looks like in practice?
---
### Lead 5 — Gael Boglione | Petersham Nurseries | Richmond, London 🇬🇧
**Email 1 — Initial Outreach**
Subject: `your plant knowledge at scale`
Petersham has built something genuinely rare — a garden destination where horticultural expertise and an editorial sensibility come together in the same physical space, and visitors arrive expecting both.
GreenLens extends that knowledgeable experience beyond the staff. QR codes on plant labels in the nursery let visitors scan, identify, and get detailed care information independently — the kind of self-directed discovery that fits a destination audience who come to spend time in the space, not just pick up a pot and leave.
Worth exploring whether that makes sense for the nursery side?
---
**Email 2 — Follow-up: staff knowledge consistency at scale**
Subject: `consistent expertise across 80 staff`
With a team the size of Petersham's — and the seasonal variation that comes with it — keeping plant knowledge consistent across the floor is a real operational challenge. Not every team member carries the same horticultural depth, and customers who come specifically for the expertise notice when that's uneven.
GreenLens can function as a staff training resource: newer team members scan plants in the nursery and learn species, common names, and care notes in context, on the floor, rather than from a handbook in a back room. A few garden destinations with 50+ staff have used it specifically to reduce the knowledge gap between experienced and seasonal employees without a formal training programme.
Relevant to how you manage plant knowledge operationally?
---
**Email 3 — Follow-up: self-guided visitor experience / dwell time**
Subject: `the self-guided visitor experience`
One final thought: Petersham attracts visitors who want to linger — people engaging with the plants and the walled garden setting as an aesthetic experience, not just a shopping exercise.
A GreenLens-powered identification layer across the nursery beds and seasonal plantings gives those visitors a tool to explore independently at their own pace. Some botanical gardens and destination nurseries use it specifically to deepen the visitor's connection to the collection and increase dwell time — which in a dual nursery-restaurant setting has obvious downstream value.
Happy to share a couple of examples from comparable venues — worth a quick call?
---
## Open Items
- [ ] Upgrade Apollo to Basic+ to unlock email enrichment for all 10 contacts
- [ ] Find named contacts for Clifton Nurseries and GardenWorks via LinkedIn
- [ ] Verify Sue Minter's current role at Chelsea Physic Garden
- [ ] Personalise `[Name, GreenLens]` signatures before sending
- [ ] Load sequences into Apollo Sequences once email addresses are confirmed

View File

@@ -0,0 +1,91 @@
# GreenLens — Weekly Influencer Scout Report
Week of April 15, 2026 | Markets: US, UK, Australia, Canada
## Summary
| Metric | Count |
|--------|-------|
| Markets Searched | 4 (US, UK, Australia, Canada) |
| Total Potential Partners Identified | 10 |
| Contacts Saved to Apollo | 10 (all new, label: GreenLens - Influencer Prospects) |
| Emails Available | 0 (requires Apollo paid plan) |
---
## Top 10 Most Promising Partners
### 1. Summer Rayne Oakes
- **Title:** Plant Influencer & Environmental Scientist
- **Platform:** Homestead Brooklyn — New York, USA
- **Following:** ~300K YouTube · ~400K Instagram
- **Why:** Science-backed houseplant content, exact target audience. Existing brand partnership history. High trust, high reach.
### 2. Hilton Carter
- **Title:** Plant Stylist, Author & Content Creator
- **Platform:** Hilton Carter Creative — Baltimore, USA
- **Following:** ~500K Instagram · HGTV collaborator
- **Why:** Audience buys unfamiliar statement plants they immediately need to identify. Natural fit for "new plant unboxing" sponsorship.
### 3. Christopher Griffin (Plant Kween)
- **Title:** Plant Influencer & Content Creator
- **Platform:** Plant Kween LLC — New York, USA
- **LinkedIn:** linkedin.com/in/chris-grif
- **Following:** ~400K Instagram · growing TikTok
- **Why:** One of the most culturally influential plant creators in the US. Huge, highly engaged, diverse community. Strong ambassador candidate.
### 4. Nick Cutsumpas (Farmer Nick)
- **Title:** Horticulturist, Plant Coach & Content Creator
- **Platform:** Farmer Nick — New York, USA
- **Following:** ~200K Instagram · TEDx speaker
- **Why:** Licensed horticulturist — endorsement adds credibility to GreenLens AI accuracy claims. Sustainability brand aligns with GreenLens values.
### 5. Darryl Cheng (House Plant Journal)
- **Title:** Plant Content Creator & Author
- **Platform:** House Plant Journal — Toronto, Canada
- **LinkedIn:** linkedin.com/in/darryl-t-cheng
- **Following:** ~400K Instagram
- **Why:** Already operates in plant-tech intersection (advisor to plant care app). Audience actively seeks ID help. **Priority outreach target.**
### 6. Jane Perrone
- **Title:** Houseplant Podcaster, Journalist & Educator
- **Platform:** On The Ledge Podcast — United Kingdom
- **Following:** 10K50K dedicated podcast listeners
- **Why:** UK's leading houseplant podcast. High-intent audience. Promo code partnership would convert well in underserved UK market.
### 7. James Wong
- **Title:** Botanist, Garden Designer & TV Presenter
- **Platform:** BBC / Freelance — London, UK
- **Phone:** +44 20 7580 0702
- **Following:** ~200K Twitter/X · BBC TV audience
- **Why:** MSc from Kew Gardens, trains botanist. Challenges plant misinformation — perfectly aligned with GreenLens accuracy mission.
### 8. Monty Don
- **Title:** Garden Expert, Author & TV Presenter
- **Platform:** BBC Gardeners' World — Herefordshire, UK
- **Following:** ~500K Twitter/X · millions of TV viewers
- **Why:** Most recognized gardening personality in UK. Requires talent agency outreach. Mainstream credibility multiplier.
### 9. Costa Georgiadis
- **Title:** Garden Expert & TV Presenter
- **Platform:** ABC Gardening Australia — Sydney, Australia
- **Phone:** +61 2 8333 2821
- **Following:** National TV audience · 50K100K social
- **Why:** Gateway to Australia. Native flora is a GreenLens competitive advantage. Warm, approachable style makes sponsorships feel organic.
### 10. Harli G
- **Title:** Plant Content Creator & YouTuber
- **Platform:** Harli G Plants — United States
- **Following:** ~300K YouTube · growing Instagram
- **Why:** Young audience (1834), acquisition-stage. Live GreenLens demos ("scan this mystery plant") convert well. High conversion per video.
---
## Next Steps
| Priority | Action |
|----------|--------|
| High | Upgrade Apollo plan to unlock email enrichment |
| High | Priority outreach: Darryl Cheng, Nick Cutsumpas, Harli G |
| Medium | Ambassador/podcast deal: Plant Kween, Jane Perrone |
| Low | Agency route for Monty Don & Costa Georgiadis |
| Next week | Add TikTok-native micro-influencers (<100K) and plant photographers |

View File

@@ -0,0 +1,308 @@
# GreenLens Weekly Influencer Scout Report
**Date:** April 16, 2026 | **Scout Region:** US, UK, Australia, Canada | **Apollo Label:** GreenLens-Influencer-Prospects
---
## STEP 1 — SCOUT REPORT: 10 Prospects Added to Apollo
**Note:** The free-tier access token restricts the People Search, Enrichment, and Company Search endpoints to paid plans. All 10 prospects were sourced from verified public profiles and saved directly via the Contacts API. Upgrading to Apollo's Basic plan ($49/mo) will unlock full database prospecting for future weekly runs.
### Prospect Roster
| # | Name | Title | Market | Organization | Fit Score |
|---|------|-------|--------|--------------|----------|
| 1 | Summer Rayne Oakes | Horticulturist & Plant Influencer | 🇺🇸 US | Homestead Brooklyn | ⭐⭐⭐⭐⭐ |
| 2 | Christopher Griffin (Plant Kween) | Plant Influencer & Content Creator | 🇺🇸 US | Plant Kween LLC | ⭐⭐⭐⭐⭐ |
| 3 | Amanda Switzer (Planterina) | Plant Content Creator & YouTuber | 🇺🇸 US | Planterina | ⭐⭐⭐⭐⭐ |
| 4 | James Wong | Botanist & Science Communicator | 🇬🇧 UK | BBC / Royal Botanic Gardens Kew | ⭐⭐⭐⭐⭐ |
| 5 | Niki Jabbour | Garden Author & Content Creator | 🇨🇦 CA | Savvy Gardening | ⭐⭐⭐⭐☆ |
| 6 | Hilton Carter | Plant Stylist & Author | 🇺🇸 US | Hilton Carter Creative | ⭐⭐⭐⭐☆ |
| 7 | Monty Don | Garden Designer & TV Presenter | 🇬🇧 UK | BBC Gardeners' World | ⭐⭐⭐☆☆ |
| 8 | Costa Georgiadis | Garden Presenter & Horticulturist | 🇦🇺 AU | ABC Gardening Australia | ⭐⭐⭐☆☆ |
| 9 | Josh Byrne | Horticulturist & Garden Presenter | 🇦🇺 AU | Josh Byrne & Associates | ⭐⭐⭐☆☆ |
| 10 | Angus Stewart | Horticulturist & Plant Author | 🇦🇺 AU | Gardening with Angus | ⭐⭐⭐☆☆ |
### Top 5 Selection Rationale
| Rank | Name | Why Top 5 |
|------|------|----------|
| 1 | Summer Rayne Oakes | Science-forward plant ID content, 1,000+ plant collection, digitally native audience who asks "what species is this?" constantly. Perfect product-audience fit. |
| 2 | Christopher Griffin | Highest community engagement in the plant space. Millennial/Gen-Z plant parents — the exact daily-app demographic. Co-creation upside is huge. |
| 3 | Amanda Switzer | YouTube tutorials generate the "what plant is this?" comments GreenLens solves directly. Conversion-friendly audience of active learners. |
| 4 | James Wong | Scientific credibility from BBC + Kew lends authority to AI plant ID. UK market anchor. His audience trusts data accuracy — exactly what we offer. |
| 5 | Niki Jabbour | Year-round gardening educator in Canada — underserved market for plant apps. Blog + book + radio reach = multi-channel exposure with one partnership. |
---
## STEP 2 — OUTREACH SEQUENCES
**3 messages per influencer · 15 total · Peer-to-peer tone · One soft CTA per message · Each follow-up adds a new angle**
### 1. SUMMER RAYNE OAKES
**US · Horticulturist & Plant Influencer · Homestead Brooklyn**
**Message 1 — Initial Outreach**
> **subject:** your plant id moments
>
> Hey Summer Rayne,
>
> The way you break down a plant ID — latin binomial, native habitat, light requirements — in a single post and still make it feel accessible is genuinely rare. Most creators skip the science. Your audience keeps showing up because you don't.
>
> We're GreenLens, an AI plant identification app — point your camera at any plant and get the species name, care profile, and toxicity data within seconds. We built it for exactly the kind of plant people who fill your comment section asking "what is this one?"
>
> We'd love to give you early access to some new AI features we haven't shown publicly yet, and see if there's a natural way to work together — no obligations, just a conversation.
>
> Open to chatting sometime this month?
>
> — The GreenLens Team
**Message 2 — Follow-up 1** *(New angle: Affiliate revenue)*
> **subject:** one more thing
>
> Hey Summer Rayne,
>
> Following up in case my last note got buried under the inbox chaos.
>
> One thing I didn't mention — we run an affiliate program, and given the intent level of your audience (people actively searching for plant names and care guides), the conversion tends to be strong. It's genuinely passive — you mention GreenLens when it's relevant, your community finds something useful, and you earn on every download.
>
> Nothing about your content would need to change. It just adds a revenue layer to what you're already doing.
>
> Worth exploring?
>
> — The GreenLens Team
**Message 3 — Follow-up 2** *(New angle: Co-created AI challenge series)*
> **subject:** test our ai
>
> Hey Summer Rayne,
>
> Last one from me.
>
> We've been thinking about something more interesting than a standard affiliate deal: a co-created series where you put GreenLens's AI up against your own expertise. You know the hard ones — the mislabeled Alocasias, the Philodendron hybrids nobody can agree on — and we'd genuinely love to see where our model holds up and where it needs work.
>
> You'd have an ambassador role, early access to every model update, and full creative control. Your audience gets genuinely useful content. We get honest feedback from someone who actually knows plants.
>
> If that sounds like it could be interesting, just say the word.
>
> — The GreenLens Team
---
### 2. CHRISTOPHER GRIFFIN (PLANT KWEEN)
**US · Plant Influencer & Content Creator · Plant Kween LLC**
**Message 1 — Initial Outreach**
> **subject:** your gurls deserve this
>
> Hey Christopher,
>
> The way you've turned plant parenthood into a full culture — not just a hobby — is something a lot of brands try to describe and none of them actually get. The community you've built isn't a following, it's genuinely a family of people who care about their plants the way you do.
>
> We're GreenLens, an AI plant identification app. Point your camera at any plant and get the species, care profile, and toxicity info instantly. It was made for exactly the kind of curious, passionate plant parents who show up in your comments and DMs every day.
>
> We'd love to give you early access before we release our next set of AI features — no pitch, just come see what we're building.
>
> Open to a conversation?
>
> — The GreenLens Team
**Message 2 — Follow-up 1** *(New angle: Audience conversion + affiliate)*
> **subject:** your community would use this daily
>
> Hey Christopher,
>
> Checking back in — I know your inbox is a lot.
>
> The honest reason we keep thinking about you: your audience isn't just browsing plant content, they're invested. They name their plants. They research species. They come back to your videos more than once. That's exactly the kind of person who downloads GreenLens and uses it every week, not just once.
>
> We have an affiliate program that works really well for creators whose audiences are already action-oriented. It's low-effort on your end — a mention when it feels right — and it generates real income over time.
>
> Happy to share the specifics if you're curious.
>
> — The GreenLens Team
**Message 3 — Follow-up 2** *(New angle: Ambassador + queer plant community spotlight)*
> **subject:** a bigger idea
>
> Hey Christopher,
>
> One last thought and then I'll leave you alone.
>
> Something we've been wanting to do is spotlight the communities doing the most interesting things in plant culture — not just horticulture institutions, but the real spaces where plant love actually lives. What you've built around Plant Kween is exactly that.
>
> Our ambassador program isn't just about downloads. It's about having a voice in what GreenLens becomes — what species we prioritize, what communities we feature, what the product actually reflects. We'd want you in that room.
>
> If any part of that sounds worth a conversation, I'm here.
>
> — The GreenLens Team
---
### 3. AMANDA SWITZER (PLANTERINA)
**US · Plant Content Creator & YouTuber · Planterina**
**Message 1 — Initial Outreach**
> **subject:** your viewers ask this
>
> Hey Amanda,
>
> There's a comment that shows up in almost every Planterina video: some version of "what plant is this?" or "is this the same as…?" Your audience is full of people actively trying to learn plant ID, and you've built exactly the right community for what we're working on.
>
> We're GreenLens, an AI plant identification app — scan any plant and get the species, care tips, and toxicity info in seconds. It works on houseplants, outdoor plants, weeds, wildflowers — anything with a leaf.
>
> We'd love to offer you early access to the app and a conversation about what a collaboration could look like. No pressure, just curious if there's a fit.
>
> Up for a chat?
>
> — The GreenLens Team
**Message 2 — Follow-up 1** *(New angle: Passive affiliate income layered into tutorials)*
> **subject:** passive income angle
>
> Hey Amanda,
>
> Just circling back in case my last message got lost.
>
> One angle I didn't bring up: GreenLens has an affiliate program that layers naturally into tutorial-style content. When you're showing viewers how to care for a specific plant, a quick "and here's how I identified it" moment becomes a genuine recommendation — and every download through your link earns commission.
>
> You're already answering the plant ID question in the comments. This just gives your audience a faster answer and gives you a revenue stream you don't have to think about.
>
> Would love to share the details if you're open to it.
>
> — The GreenLens Team
**Message 3 — Follow-up 2** *(New angle: Co-produced beginner plant ID series)*
> **subject:** tutorial series idea
>
> Hey Amanda,
>
> Last note from me — I'll keep it short.
>
> We have an idea for a co-produced series: "Scan Before You Buy" — a format where you walk through a plant shop or nursery, scan plants with GreenLens, and compare the AI result to what's on the tag (they're wrong more often than people realize). It's practical, it's your style, and it genuinely helps beginners make better decisions.
>
> You'd have creative control, ambassador status, and we'd build the content brief together. Your audience gets something genuinely useful. We get someone who actually knows how to make plant content people watch.
>
> If that sparks anything, I'd love to talk.
>
> — The GreenLens Team
---
### 4. JAMES WONG
**UK · Botanist & Science Communicator · BBC / Royal Botanic Gardens Kew**
**Message 1 — Initial Outreach**
> **subject:** ai meets ethnobotany
>
> Hey James,
>
> The way you bring ethnobotanical context to everyday plants — the medicinal history, the cultural uses, the ecological relationships most people never think about — is what's been missing from plant content for a long time. Your audience doesn't just want to grow things. They want to understand them.
>
> We're GreenLens, an AI plant identification app. Point your camera at any plant and get the species ID, care profile, and ecological data instantly. The model has been trained across 50,000+ species, and we're actively working on adding deeper botanical and ethnobotanical data layers — which is part of why we're reaching out to you.
>
> We'd genuinely value your perspective on where the science is solid and where it needs work. Early access is yours if you're open to a conversation.
>
> Worth a chat?
>
> — The GreenLens Team
**Message 2 <20><><EFBFBD> Follow-up 1** *(New angle: Scientific credibility + UK audience affiliate)*
> **subject:** accuracy is the angle
>
> Hey James,
>
> Following up from last week in case it got buried.
>
> Something that occurred to us: your audience is uniquely positioned to care about AI plant ID accuracy. They'll spot a misidentification. They'll question the data source. That's exactly the kind of critical engagement that makes an affiliate recommendation from you more meaningful than from anyone else — your community trusts your standards.
>
> We have an affiliate program, and we think the credibility your recommendation carries is worth a lot more than the average conversion rate suggests. Happy to walk through the specifics.
>
> Open to exploring?
>
> — The GreenLens Team
**Message 3 — Follow-up 2** *(New angle: Scientific advisory / expert consultant role)*
> **subject:** expert advisor role
>
> Hey James,
>
> Last one, I promise.
>
> Something beyond a partnership: we've been thinking about building a science advisory group — a small number of people with actual botanical expertise who help shape what GreenLens gets right. Not a committee, not a vanity board — a real feedback loop between the people who know plants and the team building the AI.
>
> Given your background at Kew and your work making botany accessible, you're exactly who we'd want involved. It would be a paid engagement, fully on your terms.
>
> If that's something worth a conversation, just reply here and I'll set something up.
>
> — The GreenLens Team
---
### 5. NIKI JABBOUR
**Canada · Garden Author & Content Creator · Savvy Gardening**
**Message 1 — Initial Outreach**
> **subject:** year round plant id
>
> Hey Niki,
>
> Your "year-round" philosophy — that gardening isn't seasonal, it's a commitment — is something GreenLens was kind of built for. Your readers are the kind of people who want to know what's coming up in their beds in March, what that weed is in October, and why their winter sown seedlings look the way they do.
>
> We're GreenLens, an AI plant identification app. Point your camera at any plant — vegetable, native wildflower, unknown seedling, garden weed — and get the species, care guide, and growing notes instantly. It works in the field as well as indoors, year-round.
>
> We'd love to give you early access and see if there's a natural fit with the Savvy Gardening community.
>
> Open to a quick chat?
>
> — The GreenLens Team
**Message 2 — Follow-up 1** *(New angle: Affiliate fit for practical gardening audience)*
> **subject:** affiliate fit for savvy
>
> Hey Niki,
>
> Checking back in — I know spring is your busiest season.
>
> One thing I wanted to bring up: GreenLens's affiliate program tends to perform especially well with practical, educational gardening audiences. Your readers are solution-oriented — they're actively trying to identify what's in their garden and find out how to grow it better. That's exactly the intent level where people click, download, and stick around.
>
> It's low-maintenance on your end: a mention in a post when it's relevant, your readers get a tool they'll actually use, and you earn on every download. Happy to send details whenever it's a good time.
>
> Worth exploring?
>
> — The GreenLens Team
**Message 3 — Follow-up 2** *(New angle: Canadian plant ID content + ambassador)*
> **subject:** canadian growers need this
>
> Hey Niki,
>
> Last thought before I leave your inbox alone.
>
> Something that's been on our mind: Canada is genuinely underserved when it comes to region-specific plant identification. The species mix, the hardiness zones, the native plants — a lot of plant apps were built with a US or European dataset and it shows. We've been investing in making GreenLens accurate for Canadian gardens specifically.
>
> We'd love to have you as an ambassador who shapes that — someone who can tell us where the ID falls short for a Nova Scotia garden in April versus a BC garden in September. You'd have a real voice in the product, not just a link to share.
>
> If any part of that sounds worth a conversation, I'm genuinely happy to talk.
>
> — The GreenLens Team
---
## APOLLO STATUS SUMMARY
| Action | Result |
|--------|--------|
| Label created | ✅ GreenLens-Influencer-Prospects |
| Contacts added | ✅ 10 of 10 |
| Markets covered | US (4), UK (2), AU (3), CA (1) |
| Top 5 sequenced | Summer Rayne Oakes, Christopher Griffin, Amanda Switzer, James Wong, Niki Jabbour |
| Outreach messages written | ✅ 15 (3 per influencer) |
| Apollo plan flag | Upgrade needed — People Search, Enrichment, and Bulk Match require Basic plan or above. Contacts API is fully accessible. |
---
## Next Steps
1. **Upgrade Apollo to Basic** — to unlock full prospecting for next weekly run
2. **Add emails to each contact record** — via DM or website contact forms so Apollo sequences can be activated
3. **Schedule Message 1 send** — for TuesdayThursday mornings, follow-ups spaced 5 and 10 days out

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 635 KiB

View File

@@ -0,0 +1,532 @@
# GreenLens TikTok 30-Day Slideshow Plan With Prompts
## Global Prompt Base
Use this base on every slide prompt unless the day says otherwise:
```text
Create a premium botanical editorial slide in vertical 9:16.
Use the exact GreenLens design language from "The Botanical Archive" and "The Digital Herbarium".
Overall art direction: high-end editorial archive, premium botanical encyclopedia translated into a modern digital layout, tactile paper feeling, expert lithography mood, elegant whitespace, calm premium atmosphere, intentional asymmetry balanced with centered text.
Color system: soft sand surface #fbfaf0, layered stone papers #f5f4ea and #e4e3d9, deep forest green #204e2b, richer botanical green #386641, tertiary earth accent #603d16 used sparingly for warning moments.
Composition rules: no 1px borders, no harsh dividers, no generic UI boxes, no clutter, no drop shadows from old SaaS design, use tonal layering, negative space, paper-stack depth, and soft botanical overlap instead.
Typography direction: bold editorial headline energy inspired by Plus Jakarta Sans, refined readable supporting text inspired by Manrope, tight hierarchy, high contrast, modern minimal presentation.
Texture and lighting: subtle paper grain, soft daylight, gentle botanical shadows, premium matte print feeling, polished magazine styling.
Text style: bold, modern, minimal, high contrast, polished editorial layout.
Text placement: centered, never top-heavy, always with generous safe margins and strong visual hierarchy.
Keep the visual language consistent across all slides in the slideshow.
```
## Day 1
- **Title:** Your Plant Is Not Dying Suddenly
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** Your plant is not dying suddenly.
- **CTA:** Save this before you water again.
- **Caption:** Most houseplants do not crash overnight. The early signs are usually there, but people misread them and react too fast. This slideshow reframes the problem so beginners stop guessing and start observing with more clarity.
- **Hashtags:** `#planttok #houseplants #plantcare #plantdiagnosis #urbanjungle #greenlens #planthelp`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm hero slide with elegant leaf shadows and premium paper textures. Add large clean overlay text: "Your plant is not dying suddenly." Add smaller subtext: "You are missing the early warning signs." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: stressed indoor plant with soft yellowing leaves in natural window light. Add large clean overlay text: "The signs usually start small." Add smaller subtext: "A few leaves change before the whole plant declines." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: close crop of drooping leaves and slightly wet soil in a clean editorial frame. Add large clean overlay text: "Most people react too fast." Add smaller subtext: "They treat the symptom, not the cause." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual botanical layout showing symptom cards versus root-cause cards. Add large clean overlay text: "Symptom is not the diagnosis." Add smaller subtext: "Yellow, drooping, or brown does not mean one answer." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: refined checklist composition with leaf, pot, soil, and light cues. Add large clean overlay text: "Check this first." Add smaller subtext: "Light. Water. Soil. Pests." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm, premium plant triage mood with elegant negative space. Add large clean overlay text: "Do not guess." Add smaller subtext: "Observe before you react." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: high-end closing frame with strong editorial balance and subtle GreenLens energy. Add large clean overlay text: "Save this before you water again." Add smaller subtext: "You will need it the next time a plant looks off." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 2
- **Title:** Drooping Does Not Always Mean Thirst
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** Drooping does not always mean thirst.
- **CTA:** Follow for more plant ER myths.
- **Caption:** Drooping leaves trigger panic, and panic usually leads to the wrong fix. This slideshow teaches people that overwatering, root stress, and poor drainage can look like thirst at first glance.
- **Hashtags:** `#planttok #plantmyths #houseplanthelp #wateringplants #plantcaretips #greenlens #plantrescue`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: drooping plant centered in a minimalist herbarium composition. Add large clean overlay text: "Drooping does not always mean thirst." Add smaller subtext: "That is the trap." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: sad-looking plant beside a watering can, clean editorial tension. Add large clean overlay text: "It looks dry." Add smaller subtext: "But looks can be misleading." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: rich dark soil and stressed roots suggested through elegant macro details. Add large clean overlay text: "Too much water can look the same." Add smaller subtext: "Root stress can mimic thirst." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: split concept of underwatering versus overwatering with subtle botanical imagery. Add large clean overlay text: "Same symptom. Different cause." Add smaller subtext: "That is why guessing fails." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: bright, clean checklist slide with leaf, soil, and pot drainage cues. Add large clean overlay text: "Check before you water." Add smaller subtext: "Soil moisture. Pot drainage. Root smell." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm authority slide with elegant paper textures. Add large clean overlay text: "More water is not always help." Add smaller subtext: "Sometimes it makes the problem worse." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished closing slide with subtle botanical forms. Add large clean overlay text: "Follow for more plant ER myths." Add smaller subtext: "Learn the warning signs before you react." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 3
- **Title:** I Almost Killed This Plant By Trying To Help It
- **Pillar:** Storytelling
- **Slides:** 9
- **Hook:** I almost killed this plant by trying to help it.
- **CTA:** Comment "help" for more rescue stories.
- **Caption:** This is a rescue story about reacting too fast, trusting the wrong assumption, and learning why symptoms are not enough. It humanizes the brand while still teaching the diagnostic mindset behind GreenLens.
- **Hashtags:** `#planttok #plantstory #plantrescue #houseplants #beginnerplants #greenlens #plantmistakes`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: dramatic but clean editorial opener with a struggling plant in soft natural light. Add large clean overlay text: "I almost killed this plant by trying to help it." Add smaller subtext: "And I thought I was doing the right thing." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: plant starting to droop with a few damaged leaves, high-end magazine framing. Add large clean overlay text: "It started with a small warning sign." Add smaller subtext: "Nothing looked urgent yet." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: closer view of the same plant looking more stressed. Add large clean overlay text: "I assumed it was thirsty." Add smaller subtext: "That was my first mistake." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: watering action shown in a tasteful editorial way, not busy. Add large clean overlay text: "So I watered it more." Add smaller subtext: "And the plant got worse." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: visual shift toward tension and decline with darker soil detail. Add large clean overlay text: "The symptom was real." Add smaller subtext: "The diagnosis was wrong." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual root-cause slide with botanical cards and layered paper textures. Add large clean overlay text: "It was root stress, not thirst." Add smaller subtext: "I treated the wrong problem." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm recovery mood with restored balance and elegant whitespace. Add large clean overlay text: "That changed how I look at plants." Add smaller subtext: "Now I diagnose before I react." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 8:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium educational summary slide with clean botanical cues. Add large clean overlay text: "This is the real lesson." Add smaller subtext: "Symptoms need context." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 9:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished close with strong editorial hierarchy. Add large clean overlay text: "Comment 'help' for more rescue stories." Add smaller subtext: "I will break down more real plant mistakes." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 4
- **Title:** Check This First
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** Check this first: light, water, soil, pests.
- **CTA:** Save this checklist.
- **Caption:** This is the core triage flow for people in a dying-plant moment. It turns panic into a usable order of operations and trains your audience to think in the same sequence GreenLens uses.
- **Hashtags:** `#planttok #plantchecklist #houseplantcare #planttriage #planttips #greenlens #plantclinic`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: clean hero slide with subtle leaf collage and premium paper layering. Add large clean overlay text: "Check this first." Add smaller subtext: "Light. Water. Soil. Pests." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant plant near window with soft directional light. Add large clean overlay text: "Step 1: Light." Add smaller subtext: "Has anything changed recently?" Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: moist soil and pot shown with calm, premium framing. Add large clean overlay text: "Step 2: Water." Add smaller subtext: "Do not assume. Check the soil." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: close-up of soil texture and pot drainage. Add large clean overlay text: "Step 3: Soil." Add smaller subtext: "Compaction and drainage matter." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: tasteful macro view of leaf underside and pest inspection. Add large clean overlay text: "Step 4: Pests." Add smaller subtext: "Always inspect the hidden areas." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: summary slide with four elegant specimen cards. Add large clean overlay text: "This order saves time." Add smaller subtext: "And prevents bad guesses." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium closing frame with calm call-to-action. Add large clean overlay text: "Save this checklist." Add smaller subtext: "Use it next time a plant looks wrong." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 5
- **Title:** Yellow Leaves Are Not The Diagnosis
- **Pillar:** Educational
- **Slides:** 5
- **Hook:** Yellow leaves are not the diagnosis.
- **CTA:** Save this for later.
- **Caption:** Yellow leaves can mean several different things depending on pattern, age, soil, light, and timing. This post is designed to stop the audience from treating one symptom like a full answer.
- **Hashtags:** `#yellowleaves #planttok #planthelp #houseplants #plantdiagnosis #greenlens #plantcare`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: framed yellow leaf specimen on textured cream paper. Add large clean overlay text: "Yellow leaves are not the diagnosis." Add smaller subtext: "They are just the signal." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant layout of one yellow leaf among healthy foliage. Add large clean overlay text: "One symptom can mean many things." Add smaller subtext: "Water, roots, light, age, or stress." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual comparison of different yellowing patterns. Add large clean overlay text: "Pattern matters." Add smaller subtext: "Where and how the yellowing appears changes the story." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm checklist scene with leaves, soil, and window light. Add large clean overlay text: "Look at context first." Add smaller subtext: "Do not fix color. Find the cause." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: high-end closing frame with clean typography. Add large clean overlay text: "Save this for later." Add smaller subtext: "You will need it when yellow leaves show up." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 6
- **Title:** The Most Common Plant Mistake
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** The most common plant mistake? Panic watering.
- **CTA:** Follow for mistake #2.
- **Caption:** This post turns a common beginner reflex into a memorable warning. It should feel slightly sharp, highly relatable, and useful enough that viewers follow for the next mistake in the series.
- **Hashtags:** `#planttok #plantmistake #wateringplants #houseplanttips #beginnerplants #greenlens #plantcaretips`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: clean, premium opener with watering can and stressed plant in elegant tension. Add large clean overlay text: "The most common plant mistake?" Add smaller subtext: "Panic watering." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: drooping plant that appears thirsty at first glance. Add large clean overlay text: "It feels helpful." Add smaller subtext: "That is why people do it fast." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: deep dark soil and heavy pot shown in editorial close-up. Add large clean overlay text: "But the guess is often wrong." Add smaller subtext: "And the extra water adds stress." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual mistake slide with minimal botanical iconography. Add large clean overlay text: "Care without diagnosis is risk." Add smaller subtext: "Good intentions can still harm the plant." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: simple checklist composition with soil and roots cues. Add large clean overlay text: "Pause and check first." Add smaller subtext: "Soil moisture. Drainage. Roots." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm authority slide with refined paper textures. Add large clean overlay text: "Plant care should feel calmer." Add smaller subtext: "Not more reactive." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: strong closing frame with subtle series energy. Add large clean overlay text: "Follow for mistake #2." Add smaller subtext: "There are more ways beginners make it worse." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 7
- **Title:** When Your Plant Looks Worse Overnight
- **Pillar:** Selling
- **Slides:** 7
- **Hook:** When your plant looks worse overnight:
- **CTA:** Scan your plant with GreenLens.
- **Caption:** This is the first product-oriented post, but it still starts from a real pain moment. The point is not to sell an app out of nowhere. The point is to present GreenLens as relief when guessing is no longer good enough.
- **Hashtags:** `#planttok #plantapp #plantdiagnosis #greenlens #houseplants #planthelp #urbanjungle`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: dramatic but clean plant decline moment in soft natural light. Add large clean overlay text: "When your plant looks worse overnight:" Add smaller subtext: "That is when people start guessing." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant close-up of visible stress signs on a houseplant. Add large clean overlay text: "Yellow leaves." Add smaller subtext: "Drooping stems. Soft tissue." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual confusion slide with multiple conflicting care cues. Add large clean overlay text: "The internet gives 4 different answers." Add smaller subtext: "That does not create clarity." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium diagnosis mood with clean modern framing and subtle tech undertone. Add large clean overlay text: "You need the cause first." Add smaller subtext: "Not another random tip." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm problem-solution slide with elegant negative space. Add large clean overlay text: "That is the Plant ER moment." Add smaller subtext: "Fast clarity matters most here." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium botanical app-ad atmosphere without cluttered UI. Add large clean overlay text: "Use GreenLens to check the cause." Add smaller subtext: "Before you treat the wrong problem." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: clean closing frame with strong typography and subtle brand energy. Add large clean overlay text: "Scan your plant with GreenLens." Add smaller subtext: "Get clarity before you guess again." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 8
- **Title:** Brown Tips Do Not Always Mean Dryness
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** Brown tips do not always mean dryness.
- **CTA:** Save this before trimming anything.
- **Caption:** Brown tips are easy to oversimplify. This slideshow teaches that water quality, humidity, fertilizer buildup, and root issues can all show up in similar ways.
- **Hashtags:** `#browntips #planttok #plantcare #houseplanthelp #plantproblems #greenlens #planttips`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium specimen-style leaf with brown tips framed on textured paper. Add large clean overlay text: "Brown tips do not always mean dryness." Add smaller subtext: "The usual guess is too simple." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant macro of a leaf edge with dry browning. Add large clean overlay text: "Yes, dryness can cause it." Add smaller subtext: "But it is not the only reason." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: subtle water glass, mineral hint, and plant leaf in editorial balance. Add large clean overlay text: "Water quality matters too." Add smaller subtext: "Mineral buildup can show up on the leaf." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: low-humidity mood with soft dry atmosphere around the plant. Add large clean overlay text: "Humidity can be part of it." Add smaller subtext: "Environment changes the pattern." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: soil and pot close-up with elegant composition. Add large clean overlay text: "Roots and soil matter too." Add smaller subtext: "The leaf is only where the signal appears." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm summary slide with multiple cause cards. Add large clean overlay text: "Same symptom. Multiple causes." Add smaller subtext: "That is why trimming is not the fix." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished closing frame with refined hierarchy. Add large clean overlay text: "Save this before trimming anything." Add smaller subtext: "Find the cause first." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 9
- **Title:** Why I Stopped Trusting Random Plant Tips
- **Pillar:** Storytelling
- **Slides:** 9
- **Hook:** Why I stopped trusting random plant tips.
- **CTA:** Follow for the full plant ER system.
- **Caption:** This story sharpens the brand's position. It explains why generic plant hacks break down without context and why diagnosis is the real value.
- **Hashtags:** `#planttok #plantstory #planttips #houseplantcare #plantadvice #greenlens #plantclinic`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant opener with layered paper textures and a stressed plant in soft natural light. Add large clean overlay text: "Why I stopped trusting random plant tips." Add smaller subtext: "They sounded helpful. They were not enough." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: plant phone-search mood with clean, minimal editorial composition. Add large clean overlay text: "The advice was always confident." Add smaller subtext: "But the answers never matched." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual slide with conflicting care cards floating in elegant layout. Add large clean overlay text: "Water more. Water less. Repot. Wait." Add smaller subtext: "Too many tips. No real diagnosis." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: stressed plant shown with premium documentary feel. Add large clean overlay text: "The plant still got worse." Add smaller subtext: "Because symptoms are not enough." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: root-cause concept slide with specimen cards and paper layers. Add large clean overlay text: "Context changes everything." Add smaller subtext: "Light, roots, soil, timing, pests." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm editorial transition toward clarity and order. Add large clean overlay text: "That changed the whole approach." Add smaller subtext: "I stopped collecting tips." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium system slide with botanical diagnostics mood. Add large clean overlay text: "I started looking for causes." Add smaller subtext: "That is what actually helps." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 8:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant brand-positioning slide with generous whitespace. Add large clean overlay text: "That is why GreenLens exists." Add smaller subtext: "For the Plant ER moment." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 9:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished closing slide with strong follow CTA. Add large clean overlay text: "Follow for the full plant ER system." Add smaller subtext: "I will keep breaking it down." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 10
- **Title:** The First 3 Things To Check On A Sick Plant
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** The first 3 things to check on a sick plant.
- **CTA:** Save this triage flow.
- **Caption:** Fast frameworks perform because they reduce anxiety. This one gives beginners a short triage system they can remember in a stressful moment.
- **Hashtags:** `#planttok #planttriage #sickplant #houseplants #plantcaretips #greenlens #planthelp`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant triage opener with a struggling plant centered on cream paper textures. Add large clean overlay text: "The first 3 things to check on a sick plant." Add smaller subtext: "Before you do anything else." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: window light and plant placement shown in a premium editorial frame. Add large clean overlay text: "1. Light" Add smaller subtext: "Did the environment change first?" Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: close-up of soil surface and finger moisture check. Add large clean overlay text: "2. Soil moisture" Add smaller subtext: "Do not guess from the leaves alone." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant view of pot base and drainage details. Add large clean overlay text: "3. Pot and drainage" Add smaller subtext: "Stagnant roots change everything." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: summary slide with three refined specimen cards. Add large clean overlay text: "These 3 checks catch a lot." Add smaller subtext: "Before you escalate the situation." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm authority frame with subtle leaf overlays. Add large clean overlay text: "A system beats panic." Add smaller subtext: "Especially with a stressed plant." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished save CTA slide. Add large clean overlay text: "Save this triage flow." Add smaller subtext: "You will not remember it under stress." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 11
- **Title:** More Care Is Not Always Better
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** More care is not always better.
- **CTA:** Comment if you have done this too.
- **Caption:** This post challenges a very common beginner instinct: if a plant looks stressed, do more. That belief feels caring, but it often creates even more stress for the plant.
- **Hashtags:** `#planttok #plantcare #houseplanthelp #plantmistakes #urbanjungle #greenlens #beginnerplants`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant opener with stressed plant and layered paper textures. Add large clean overlay text: "More care is not always better." Add smaller subtext: "That is the uncomfortable truth." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: multiple plant-care tools arranged in an editorial still life. Add large clean overlay text: "People react by doing more." Add smaller subtext: "More water. More movement. More changes." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: plant looking overwhelmed after multiple interventions. Add large clean overlay text: "The plant gets more stressed." Add smaller subtext: "Because the root issue stays the same." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual care-versus-diagnosis slide with calm, minimal structure. Add large clean overlay text: "Attention is not diagnosis." Add smaller subtext: "Action without clarity can backfire." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: quiet observation mood with leaf inspection and soil check. Add large clean overlay text: "Sometimes the best move is pause." Add smaller subtext: "Observe first." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: authority slide with soft green tones and botanical overlays. Add large clean overlay text: "Good plant care feels calmer." Add smaller subtext: "Not more chaotic." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: clean comment CTA close. Add large clean overlay text: "Comment if you have done this too." Add smaller subtext: "Most beginners have." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 12
- **Title:** Overwatering Often Looks Like Underwatering
- **Pillar:** Educational
- **Slides:** 5
- **Hook:** Overwatering often looks like underwatering.
- **CTA:** Save this before your next watering.
- **Caption:** This is one of the strongest fast educational ideas in the whole plan. It is surprising, practical, and tightly aligned with the GreenLens diagnosis-first positioning.
- **Hashtags:** `#overwatering #underwatering #planttok #plantcaretips #houseplants #greenlens #plantdiagnosis`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium opener with drooping plant and dark rich soil. Add large clean overlay text: "Overwatering often looks like underwatering." Add smaller subtext: "That is why people get trapped." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: drooping leaves shown in a clean editorial crop. Add large clean overlay text: "The symptom looks similar." Add smaller subtext: "So the instinct feels logical." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual root stress scene with soft macro detail. Add large clean overlay text: "But stressed roots can mimic thirst." Add smaller subtext: "And extra water makes it worse." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: checklist slide with soil, drainage, and pot cues. Add large clean overlay text: "Check the soil before you react." Add smaller subtext: "Never diagnose from drooping alone." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished closing slide with strong save CTA. Add large clean overlay text: "Save this before your next watering." Add smaller subtext: "It will save you a bad guess." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 13
- **Title:** This Plant Looked Thirsty. It Was Not.
- **Pillar:** Storytelling
- **Slides:** 7
- **Hook:** This plant looked thirsty. It was not.
- **CTA:** Comment "part 2" for the recovery.
- **Caption:** This is a compact case-study story. It keeps the emotional tension high while still teaching the audience to separate the symptom from the actual cause.
- **Hashtags:** `#planttok #plantstory #houseplants #plantrescue #plantcare #greenlens #plantcase`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: stressed plant in soft natural light with premium herbarium styling. Add large clean overlay text: "This plant looked thirsty." Add smaller subtext: "It was not." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: drooping leaf silhouette and sad posture in elegant composition. Add large clean overlay text: "Everything pointed to water." Add smaller subtext: "At least at first glance." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: tasteful watering motion with soft shadows. Add large clean overlay text: "That guess made sense." Add smaller subtext: "And it was still wrong." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual slide with symptom card and hidden cause card. Add large clean overlay text: "The symptom was real." Add smaller subtext: "The cause was different." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: root-zone cue and pot detail in editorial macro style. Add large clean overlay text: "The problem was below the surface." Add smaller subtext: "Not on the leaf." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm lesson slide with strong hierarchy. Add large clean overlay text: "This is why diagnosis matters." Add smaller subtext: "Symptoms need context." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished story CTA close. Add large clean overlay text: "Comment 'part 2' for the recovery." Add smaller subtext: "I will break down what changed." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 14
- **Title:** If Your Plant Suddenly Looks Worse
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** If your plant suddenly looks worse, check in this order.
- **CTA:** Save this order.
- **Caption:** This is another high-value save post. It gives a simple order of operations for stressful moments and helps train the audience to think with a clearer system.
- **Hashtags:** `#planttok #houseplanthelp #plantchecklist #plantcaretips #plantproblem #greenlens #plantrescue`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: dramatic clean opener with plant showing sudden decline. Add large clean overlay text: "If your plant suddenly looks worse," Add smaller subtext: "check in this order." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: plant near light source in airy editorial frame. Add large clean overlay text: "1. Environment change" Add smaller subtext: "What shifted around the plant?" Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: soil and moisture check shown elegantly. Add large clean overlay text: "2. Soil condition" Add smaller subtext: "Wet, dry, compact, or sour?" Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: leaf underside inspection with magnifying lens. Add large clean overlay text: "3. Leaf inspection" Add smaller subtext: "Look for pattern and pests." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: pot base and drainage holes in premium macro detail. Add large clean overlay text: "4. Root and pot clues" Add smaller subtext: "Drainage changes the whole diagnosis." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm summary layout with numbered botanical cards. Add large clean overlay text: "Order matters." Add smaller subtext: "It prevents bad guesses." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: clean save CTA slide with elegant whitespace. Add large clean overlay text: "Save this order." Add smaller subtext: "Use it the next time panic starts." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 15
- **Title:** Before You Water Again
- **Pillar:** Selling
- **Slides:** 7
- **Hook:** Before you water again:
- **CTA:** Use GreenLens to check the cause first.
- **Caption:** This is a direct product post built around a useful warning. The product should feel like the logical next step after uncertainty, not a random interruption.
- **Hashtags:** `#planttok #plantapp #greenlens #plantdiagnosis #houseplants #planthelp #plantcare`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: clean, high-stakes plant-care opener with watering can and stressed plant. Add large clean overlay text: "Before you water again:" Add smaller subtext: "Pause here first." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: drooping plant with moist soil implied through subtle visual cues. Add large clean overlay text: "The leaves may be misleading." Add smaller subtext: "The root cause may not be thirst." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conflicting advice concept in editorial layout. Add large clean overlay text: "Random tips create noise." Add smaller subtext: "You need clarity." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: sleek diagnostic atmosphere with botanical-modern tension. Add large clean overlay text: "Check the cause first." Add smaller subtext: "That changes the next move." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: refined problem-solution frame with generous negative space. Add large clean overlay text: "That is where GreenLens helps." Add smaller subtext: "It is built for the Plant ER moment." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium closing lead-in with subtle brand energy. Add large clean overlay text: "Do not water on instinct." Add smaller subtext: "Diagnose first." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: direct app CTA close in polished editorial style. Add large clean overlay text: "Use GreenLens to check the cause first." Add smaller subtext: "Then treat the right problem." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 16
- **Title:** 5 Mistakes That Make Plant Problems Worse
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** 5 mistakes that make plant problems worse.
- **CTA:** Follow for the fix list.
- **Caption:** Mistake-based posts are strong because they trigger self-recognition and correction at the same time. This one should feel practical, slightly sharp, and easy to share.
- **Hashtags:** `#planttok #plantmistakes #houseplantcare #plantcaretips #urbanjungle #greenlens #plantrescue`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium list-style opener with struggling plant and elegant paper texture. Add large clean overlay text: "5 mistakes that make plant problems worse." Add smaller subtext: "Most beginners do at least one." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: stressed plant with watering cue. Add large clean overlay text: "Mistake 1" Add smaller subtext: "Watering from panic." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: plant being moved or rotated in a tasteful editorial frame. Add large clean overlay text: "Mistake 2" Add smaller subtext: "Changing too much at once." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: fertilizer, repotting, or tool cue shown minimally. Add large clean overlay text: "Mistake 3" Add smaller subtext: "Treating before diagnosing." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: leaf-only focus that ignores roots in conceptual composition. Add large clean overlay text: "Mistake 4" Add smaller subtext: "Reading the leaf without context." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conflicting advice cards in refined layout. Add large clean overlay text: "Mistake 5" Add smaller subtext: "Trusting random tips over observation." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: strong closing series CTA. Add large clean overlay text: "Follow for the fix list." Add smaller subtext: "I will break down what to do instead." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 17
- **Title:** Soft Leaves Can Mean More Than One Thing
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** Soft leaves can mean more than one thing.
- **CTA:** Save this symptom guide.
- **Caption:** This post reinforces a deeper diagnostic principle: one visible symptom can map to multiple causes. That is exactly the kind of mindset shift GreenLens wants to build.
- **Hashtags:** `#softleaves #planttok #planthelp #houseplants #plantdiagnosis #greenlens #plantcaretips`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant macro of soft, stressed leaves with premium herbarium framing. Add large clean overlay text: "Soft leaves can mean more than one thing." Add smaller subtext: "That is why guessing fails." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: leaf tissue detail in soft natural light. Add large clean overlay text: "Sometimes it is water stress." Add smaller subtext: "But not always." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: warm window light and heat-stress mood with minimal composition. Add large clean overlay text: "Sometimes it is heat or light stress." Add smaller subtext: "Environment changes the meaning." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: pot and root cue in clean editorial macro. Add large clean overlay text: "Sometimes it starts at the roots." Add smaller subtext: "The leaf only shows the signal." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: specimen-card layout with multiple possible causes. Add large clean overlay text: "Same symptom. Different paths." Add smaller subtext: "Context decides the answer." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm diagnostic authority slide. Add large clean overlay text: "Read the pattern, not just the leaf." Add smaller subtext: "That is the shift." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: save CTA close with refined hierarchy. Add large clean overlay text: "Save this symptom guide." Add smaller subtext: "You will need it later." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 18
- **Title:** What A Failing Rescue Taught Me
- **Pillar:** Storytelling
- **Slides:** 9
- **Hook:** What a failing rescue taught me about guessing.
- **CTA:** Tell me your worst plant mistake.
- **Caption:** This story is less about one plant and more about the pattern behind bad rescue attempts. It should feel honest, slightly painful, and useful.
- **Hashtags:** `#planttok #plantstory #plantmistakes #houseplants #plantrescue #greenlens #learnedthehardway`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: moody editorial opener with a declining plant and textured cream paper background. Add large clean overlay text: "What a failing rescue taught me about guessing." Add smaller subtext: "It changed how I approach every sick plant." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: plant in early distress shown in soft, premium light. Add large clean overlay text: "At first it looked manageable." Add smaller subtext: "Then I reacted too fast." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: multiple care actions implied through elegant still-life tools. Add large clean overlay text: "I did what felt helpful." Add smaller subtext: "More water. More changes. More movement." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: visual decline becoming more obvious. Add large clean overlay text: "The plant did not improve." Add smaller subtext: "It got worse." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual turning-point slide with root-cause card emerging. Add large clean overlay text: "That was the real lesson." Add smaller subtext: "I was treating the wrong issue." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: root stress and environmental context suggested in a clean editorial composition. Add large clean overlay text: "Symptoms need context." Add smaller subtext: "Without that, treatment is just guessing." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm recovery framework slide with elegant numbered cards. Add large clean overlay text: "Now I use a triage flow." Add smaller subtext: "Observe. Narrow down. Then act." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 8:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: brand philosophy slide with subtle GreenLens tone. Add large clean overlay text: "That is the Plant ER mindset." Add smaller subtext: "Calm clarity beats panic." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 9:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: strong comment CTA close. Add large clean overlay text: "Tell me your worst plant mistake." Add smaller subtext: "Most people have one." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 19
- **Title:** How To Triage A Sick Plant In 5 Minutes
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** How to triage a sick plant in 5 minutes.
- **CTA:** Save this 5-minute flow.
- **Caption:** Specific promises often outperform generic advice. This one gives a short, repeatable system for plant emergencies and is one of the strongest candidates for a recurring content series.
- **Hashtags:** `#planttok #planttriage #houseplants #planthelp #plantcaretips #greenlens #plantclinic`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium triage opener with stopwatch mood and stressed plant in elegant balance. Add large clean overlay text: "How to triage a sick plant in 5 minutes." Add smaller subtext: "A calm system for a stressful moment." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: quick visual scan of the plant in clean editorial framing. Add large clean overlay text: "Minute 1" Add smaller subtext: "Look at the whole plant." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: finger checking soil moisture and pot condition. Add large clean overlay text: "Minute 2" Add smaller subtext: "Check soil and drainage." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: close inspection of leaves and undersides for pattern and pests. Add large clean overlay text: "Minute 3" Add smaller subtext: "Inspect the leaves." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: light and environment cues around the plant. Add large clean overlay text: "Minute 4" Add smaller subtext: "Check the environment." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: summary decision slide with elegant numbered cards. Add large clean overlay text: "Minute 5" Add smaller subtext: "Narrow down the most likely cause." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: clean save CTA close with strong hierarchy. Add large clean overlay text: "Save this 5-minute flow." Add smaller subtext: "Use it before you guess." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 20
- **Title:** A Watering Schedule Will Not Save A Stressed Plant
- **Pillar:** Educational
- **Slides:** 5
- **Hook:** A watering schedule will not save a stressed plant.
- **CTA:** Follow for smarter plant care.
- **Caption:** This post challenges one of the most common beginner systems. It is short, sharp, and built to provoke comments from people who have been told to stick to a schedule.
- **Hashtags:** `#planttok #plantmyths #wateringplants #houseplantcare #planttips #greenlens #planthelp`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant calendar and stressed plant composition with soft cream paper texture. Add large clean overlay text: "A watering schedule will not save a stressed plant." Add smaller subtext: "Context matters more than routine." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: neat calendar cue beside a drooping plant. Add large clean overlay text: "Schedules feel organized." Add smaller subtext: "That is why people trust them." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: visual contrast between calendar logic and plant signals. Add large clean overlay text: "But plants do not read calendars." Add smaller subtext: "They respond to conditions." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: environment and soil cues shown with calm clarity. Add large clean overlay text: "Read the plant, not the date." Add smaller subtext: "That is smarter care." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished follow CTA close. Add large clean overlay text: "Follow for smarter plant care." Add smaller subtext: "And fewer bad guesses." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 21
- **Title:** Stop Doing This When Leaves Turn Yellow
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** Stop doing this when leaves turn yellow.
- **CTA:** Save this before you act.
- **Caption:** Warning-style posts work because they create urgency without needing clickbait. This one tells people that their next move may make the plant worse.
- **Hashtags:** `#yellowleaves #planttok #houseplants #plantcaretips #plantmistakes #greenlens #plantdiagnosis`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: framed yellow-leaf hero slide with elegant paper layering. Add large clean overlay text: "Stop doing this when leaves turn yellow." Add smaller subtext: "It makes the problem worse." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: yellow leaf pattern shown in a clean editorial crop. Add large clean overlay text: "Do not assume thirst." Add smaller subtext: "That is the first trap." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: repotting or overreacting cue shown minimally. Add large clean overlay text: "Do not change everything at once." Add smaller subtext: "More action creates more stress." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual symptom-versus-cause frame with specimen cards. Add large clean overlay text: "Yellow is the signal." Add smaller subtext: "Not the diagnosis." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: checklist mood with light, soil, and root cues. Add large clean overlay text: "Check context first." Add smaller subtext: "Pattern. Soil. Light. Timing." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm authority summary slide. Add large clean overlay text: "Good diagnosis slows you down." Add smaller subtext: "That is how you avoid damage." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: save CTA close with polished hierarchy. Add large clean overlay text: "Save this before you act." Add smaller subtext: "You will need it when yellowing starts." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 22
- **Title:** I Thought This Plant Was Gone
- **Pillar:** Storytelling
- **Slides:** 9
- **Hook:** I thought this plant was gone. I was wrong.
- **CTA:** Comment if you want the recovery steps.
- **Caption:** This is a rescue story with emotional tension and a hopeful turn. It should feel grounded, not exaggerated, and it should end with a lesson that reinforces diagnosis over panic.
- **Hashtags:** `#planttok #plantrescue #houseplants #plantstory #urbanjungle #greenlens #plantrecovery`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: dramatic but elegant opener with a severely stressed plant in soft natural light. Add large clean overlay text: "I thought this plant was gone." Add smaller subtext: "I was wrong." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: close-up of drooping leaves and visible decline, premium documentary feel. Add large clean overlay text: "It looked beyond saving." Add smaller subtext: "That was the emotional moment." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: tense care-decision still life with watering can and tools. Add large clean overlay text: "The temptation was panic." Add smaller subtext: "Water, move, repot, do anything." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual pause slide with elegant negative space. Add large clean overlay text: "Instead, I slowed down." Add smaller subtext: "That changed everything." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: inspection of roots, soil, and light cues in refined layout. Add large clean overlay text: "The clues were there." Add smaller subtext: "The problem was not what it looked like." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: root-cause reveal slide with botanical cards and paper textures. Add large clean overlay text: "The diagnosis changed the plan." Add smaller subtext: "That is the turning point." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calmer recovery mood with more balanced plant posture. Add large clean overlay text: "Recovery started with clarity." Add smaller subtext: "Not with more random care." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 8:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: lesson summary slide with premium hierarchy. Add large clean overlay text: "This is why symptoms are not enough." Add smaller subtext: "Context saves plants." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 9:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: story CTA close. Add large clean overlay text: "Comment if you want the recovery steps." Add smaller subtext: "I can break them down next." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 23
- **Title:** Wilting Is A Symptom, Not A Diagnosis
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** Wilting is a symptom, not a diagnosis.
- **CTA:** Save this distinction.
- **Caption:** This is one of the clearest diagnostic-identity posts in the whole plan. It teaches the audience how to think, not just what to do in one situation.
- **Hashtags:** `#wiltingplant #planttok #plantcare #houseplanthelp #plantdiagnosis #greenlens #planttips`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: wilted plant framed like a modern herbarium specimen. Add large clean overlay text: "Wilting is a symptom, not a diagnosis." Add smaller subtext: "That distinction matters." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant close-up of wilted foliage. Add large clean overlay text: "It tells you something is wrong." Add smaller subtext: "It does not tell you what." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual multiple-cause slide with balanced editorial cards. Add large clean overlay text: "Water stress is one option." Add smaller subtext: "But not the only one." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: heat, roots, and environment cues suggested in a minimal layout. Add large clean overlay text: "Roots, heat, light, and shock matter too." Add smaller subtext: "Context changes the meaning." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm observation mood with leaf and soil inspection. Add large clean overlay text: "Read the pattern around the wilt." Add smaller subtext: "Do not react to the posture alone." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: authority slide with subtle botanical overlays and paper depth. Add large clean overlay text: "This is the Plant ER mindset." Add smaller subtext: "Find the cause first." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: clean save CTA close. Add large clean overlay text: "Save this distinction." Add smaller subtext: "It will change how you diagnose." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 24
- **Title:** Before You Repot A Stressed Plant
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** What to inspect before repotting a stressed plant.
- **CTA:** Save this repot checklist.
- **Caption:** Repotting feels like action, which is why stressed-plant owners reach for it fast. This slideshow should interrupt that reflex and add a better decision layer first.
- **Hashtags:** `#repotting #planttok #houseplants #plantcaretips #planthelp #greenlens #plantstress`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant repotting opener with plant, pot, and soil in premium still life. Add large clean overlay text: "Before you repot a stressed plant:" Add smaller subtext: "Inspect these things first." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: root-bound cue shown subtly in macro composition. Add large clean overlay text: "Check the roots." Add smaller subtext: "Are they crowded, rotten, or fine?" Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: soil structure and compaction shown in editorial close-up. Add large clean overlay text: "Check the soil." Add smaller subtext: "Compaction and drainage change everything." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: environment context around the plant with airy natural light. Add large clean overlay text: "Check the environment." Add smaller subtext: "Repotting does not fix bad conditions." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: timing cue with stressed plant and calm pause mood. Add large clean overlay text: "Check the timing." Add smaller subtext: "A stressed plant may not need more shock." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: summary slide with elegant specimen cards. Add large clean overlay text: "Repotting is not the default rescue." Add smaller subtext: "Diagnosis comes first." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: save CTA close with strong editorial hierarchy. Add large clean overlay text: "Save this repot checklist." Add smaller subtext: "Use it before you escalate stress." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 25
- **Title:** If You Are Still Guessing, Do This First
- **Pillar:** Selling
- **Slides:** 7
- **Hook:** If you are still guessing, do this first.
- **CTA:** Scan your plant with GreenLens.
- **Caption:** By this point in the month, the audience should understand the value of diagnosis enough for a clearer direct-response post. The CTA should feel earned, not abrupt.
- **Hashtags:** `#greenlens #plantapp #planttok #plantdiagnosis #houseplants #planthelp #plantcare`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium problem-state opener with stressed plant and subtle tension. Add large clean overlay text: "If you are still guessing, do this first." Add smaller subtext: "Stop reacting on instinct." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conflicting advice cards in elegant editorial layout. Add large clean overlay text: "Most people get stuck here." Add smaller subtext: "Too many symptoms. Too many tips." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: close-up of stressed plant details with clean framing. Add large clean overlay text: "The symptom is visible." Add smaller subtext: "The cause usually is not." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium diagnosis mood with calm, modern botanical atmosphere. Add large clean overlay text: "That is why cause comes first." Add smaller subtext: "Everything after that gets easier." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: brand bridge slide with elegant negative space and subtle tech undertone. Add large clean overlay text: "GreenLens is built for that moment." Add smaller subtext: "The Plant ER moment." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: high-end app-ad mood without cluttered UI. Add large clean overlay text: "Use clarity before treatment." Add smaller subtext: "That is the whole shift." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: direct brand CTA close with strong hierarchy. Add large clean overlay text: "Scan your plant with GreenLens." Add smaller subtext: "Find the cause before you guess again." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 26
- **Title:** Healthy Plants Are Not Cared For By Calendar
- **Pillar:** Educational
- **Slides:** 5
- **Hook:** Healthy plants are not cared for by calendar.
- **CTA:** Follow for more plant ER rules.
- **Caption:** This is a short, clean rule post. It is designed to feel memorable, slightly provocative, and easy to repeat as part of a GreenLens "Plant ER Rules" series.
- **Hashtags:** `#planttok #plantcaretips #houseplants #wateringplants #plantmyths #greenlens #urbanjungle`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant calendar-and-plant composition on cream paper texture. Add large clean overlay text: "Healthy plants are not cared for by calendar." Add smaller subtext: "They respond to conditions." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: tidy schedule cue beside a plant in soft light. Add large clean overlay text: "Schedules feel safe." Add smaller subtext: "That is why beginners love them." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual slide comparing schedule to real plant signals. Add large clean overlay text: "But the plant lives in context." Add smaller subtext: "Light, heat, roots, soil, season." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm observation scene with plant and environmental cues. Add large clean overlay text: "Read the plant." Add smaller subtext: "Not the date." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: follow CTA close with polished minimal style. Add large clean overlay text: "Follow for more plant ER rules." Add smaller subtext: "Smarter care starts with better diagnosis." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 27
- **Title:** Why GreenLens Focuses On Sick Plants
- **Pillar:** Storytelling
- **Slides:** 9
- **Hook:** Why GreenLens focuses on sick plants, not generic care.
- **CTA:** Follow for more plant ER content.
- **Caption:** This is a positioning post. It should explain why the content feels different from aesthetic plant accounts and why the brand is built around high-stress, high-uncertainty moments.
- **Hashtags:** `#greenlens #planttok #brandstory #houseplants #planthelp #plantdiagnosis #plantcare`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: strong brand-story opener with elegant botanical paper collage. Add large clean overlay text: "Why GreenLens focuses on sick plants." Add smaller subtext: "Not generic care." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: beautiful healthy plant imagery contrasted with subtle distance. Add large clean overlay text: "Pretty plant content is everywhere." Add smaller subtext: "That is not the real gap." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: stressed plant in soft natural light with a premium documentary feel. Add large clean overlay text: "The real pain starts here." Add smaller subtext: "When a plant suddenly looks wrong." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: confusion slide with conflicting advice cards. Add large clean overlay text: "That moment creates panic." Add smaller subtext: "And panic creates bad guesses." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: root-cause and triage concept slide with layered paper textures. Add large clean overlay text: "That is where diagnosis matters most." Add smaller subtext: "Not in calm moments. In urgent ones." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium system slide with botanical-modern clarity. Add large clean overlay text: "So GreenLens became Plant ER." Add smaller subtext: "Clarity for the dying-plant moment." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: educational bridge slide with elegant whitespace. Add large clean overlay text: "That changes the content too." Add smaller subtext: "Less aesthetic. More useful." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 8:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: brand conviction slide with calm authority and strong hierarchy. Add large clean overlay text: "The mission is simple." Add smaller subtext: "Less guessing. Faster clarity." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 9:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished follow CTA close. Add large clean overlay text: "Follow for more plant ER content." Add smaller subtext: "That is the lane." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 28
- **Title:** 3 Things Never To Do In Plant Panic Mode
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** 3 things never to do in plant panic mode.
- **CTA:** Save this for emergencies.
- **Caption:** Emergency framing fits GreenLens especially well because it matches the Plant ER angle. This post should feel urgent but still calm and premium.
- **Hashtags:** `#plantpanic #planttok #houseplants #plantmistakes #planthelp #greenlens #plantrescue`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: urgent but elegant opener with stressed plant and layered paper depth. Add large clean overlay text: "3 things never to do in plant panic mode." Add smaller subtext: "These make it worse." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: watering can and stressed plant shown in clean editorial tension. Add large clean overlay text: "Never do this #1" Add smaller subtext: "Water before checking the soil." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: multiple plant-care tools implying overreaction. Add large clean overlay text: "Never do this #2" Add smaller subtext: "Change everything at once." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: repotting or treatment cue in minimal premium layout. Add large clean overlay text: "Never do this #3" Add smaller subtext: "Treat before diagnosing." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm conceptual slide with symptom and cause cards. Add large clean overlay text: "Panic rewards bad instincts." Add smaller subtext: "Systems prevent damage." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: plant triage mood with strong editorial clarity. Add large clean overlay text: "Slow down. Narrow it down." Add smaller subtext: "That is the better move." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished emergency save CTA close. Add large clean overlay text: "Save this for emergencies." Add smaller subtext: "You will think less clearly in panic mode." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 29
- **Title:** The Moment People Realize They Treated The Wrong Issue
- **Pillar:** Storytelling
- **Slides:** 7
- **Hook:** The moment people realize they treated the wrong issue.
- **CTA:** Comment your biggest symptom confusion.
- **Caption:** This is an empathy post. It mirrors the internal shift people go through when they realize the symptom they treated was never the true cause.
- **Hashtags:** `#planttok #houseplants #plantstory #plantdiagnosis #planthelp #greenlens #plantcaretips`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: emotional but elegant opener with stressed plant and thoughtful negative space. Add large clean overlay text: "The moment people realize they treated the wrong issue." Add smaller subtext: "It is always the same feeling." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: care action shown in a refined documentary style. Add large clean overlay text: "At first, the fix feels logical." Add smaller subtext: "That is why the mistake happens." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: plant decline continuing despite intervention. Add large clean overlay text: "Then nothing improves." Add smaller subtext: "Or the plant gets worse." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual realization slide with symptom card fading and cause card appearing. Add large clean overlay text: "That is the turning point." Add smaller subtext: "The symptom was not the answer." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm diagnostic scene with soil, roots, and environment cues. Add large clean overlay text: "The real question changes." Add smaller subtext: "What is actually causing this?" Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: insight summary slide with premium editorial hierarchy. Add large clean overlay text: "That shift changes everything." Add smaller subtext: "Diagnosis becomes the first move." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: strong comment CTA close with elegant whitespace. Add large clean overlay text: "Comment your biggest symptom confusion." Add smaller subtext: "That is where most mistakes begin." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
## Day 30
- **Title:** The 5 Warning Signs Most Beginners Misread
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** The 5 warning signs most beginners misread.
- **CTA:** Follow and scan with GreenLens next time.
- **Caption:** This final post works as a recap and as a bridge into month two. It repackages the strongest diagnostic themes from the first 30 days into one strong entry-point post.
- **Hashtags:** `#planttok #houseplants #plantwarning #plantdiagnosis #greenlens #plantcare #urbanjungle`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant roundup opener with layered botanical paper textures and a stressed plant. Add large clean overlay text: "The 5 warning signs most beginners misread." Add smaller subtext: "These create most of the bad guesses." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: yellow leaf specimen framed on cream paper. Add large clean overlay text: "1. Yellow leaves" Add smaller subtext: "A signal, not a diagnosis." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: drooping plant in soft, premium window light. Add large clean overlay text: "2. Drooping" Add smaller subtext: "Not always thirst." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: brown leaf-tip macro with refined editorial detail. Add large clean overlay text: "3. Brown tips" Add smaller subtext: "Not always dryness." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: wilted leaf or soft leaf specimen card in clean layout. Add large clean overlay text: "4. Wilting or softness" Add smaller subtext: "Symptoms need context." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: summary slide with five refined specimen cards in premium hierarchy. Add large clean overlay text: "5. Sudden decline" Add smaller subtext: "It usually starts earlier than you think." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: final month-close CTA in polished GreenLens style. Add large clean overlay text: "Follow and scan with GreenLens next time." Add smaller subtext: "Month two starts with better diagnosis." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.

View File

@@ -0,0 +1,822 @@
# GreenLens TikTok 30-Day Slideshow Plan With Prompts
## Global Prompt Base
Use this base on every slide prompt unless the day says otherwise:
```text
Create a premium botanical editorial slide in vertical 9:16.
Use the exact GreenLens design language from "The Botanical Archive" and "The Digital Herbarium".
Overall art direction: high-end editorial archive, premium botanical encyclopedia translated into a modern digital layout, tactile paper feeling, expert lithography mood, elegant whitespace, calm premium atmosphere, intentional asymmetry balanced with centered text.
Color system: soft sand surface #fbfaf0, layered stone papers #f5f4ea and #e4e3d9, deep forest green #204e2b, richer botanical green #386641, tertiary earth accent #603d16 used sparingly for warning moments.
Composition rules: no 1px borders, no harsh dividers, no generic UI boxes, no clutter, no drop shadows from old SaaS design, use tonal layering, negative space, paper-stack depth, and soft botanical overlap instead.
Typography direction: bold editorial headline energy inspired by Plus Jakarta Sans, refined readable supporting text inspired by Manrope, tight hierarchy, high contrast, modern minimal presentation.
Texture and lighting: subtle paper grain, soft daylight, gentle botanical shadows, premium matte print feeling, polished magazine styling.
Text style: bold, modern, minimal, high contrast, polished editorial layout.
Text placement: centered, never top-heavy, always with generous safe margins and strong visual hierarchy.
Keep the visual language consistent across all slides in the slideshow.
Reference the provided GreenLens avatar design images in every prompt: use the unbranded avatar from "ChatGPT Image 19. Apr. 2026, 21_54_17.png" and the branded GreenLens Pro avatar from "ChatGPT Image 19. Apr. 2026, 21_53_06.png" as the exact design references for mascot style, glossy camera body, leaf detail, black-to-olive vignette glow, chunky polished cartoon rendering, and premium GreenLens brand energy.
Text rule: all overlay text must always sit exactly in the center of the image canvas, horizontally and vertically, with no top-heavy composition and no text near the edges.
Avatar rule: Slide 1 must include the unbranded avatar only, the final slide must include the branded GreenLens Pro avatar only, and middle slides must not use either avatar unless explicitly stated.
```
## Day 1
- **Title:** Your Plant Is Not Dying Suddenly
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** Your plant is not dying suddenly.
- **CTA:** Save this before you water again.
- **Caption:** Most houseplants do not crash overnight. The early signs are usually there, but people misread them and react too fast. This slideshow reframes the problem so beginners stop guessing and start observing with more clarity.
- **Hashtags:** `#planttok #houseplants #plantcare #plantdiagnosis #urbanjungle #greenlens #planthelp`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm hero slide with elegant leaf shadows and premium paper textures. Add large clean overlay text: "Your plant is not dying suddenly." Add smaller subtext: "You are missing the early warning signs." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: stressed indoor plant with soft yellowing leaves in natural window light. Add large clean overlay text: "The signs usually start small." Add smaller subtext: "A few leaves change before the whole plant declines." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: close crop of drooping leaves and slightly wet soil in a clean editorial frame. Add large clean overlay text: "Most people react too fast." Add smaller subtext: "They treat the symptom, not the cause." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual botanical layout showing symptom cards versus root-cause cards. Add large clean overlay text: "Symptom is not the diagnosis." Add smaller subtext: "Yellow, drooping, or brown does not mean one answer." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: refined checklist composition with leaf, pot, soil, and light cues. Add large clean overlay text: "Check this first." Add smaller subtext: "Light. Water. Soil. Pests." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm, premium plant triage mood with elegant negative space. Add large clean overlay text: "Do not guess." Add smaller subtext: "Observe before you react." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: high-end closing frame with strong editorial balance and subtle GreenLens energy. Add large clean overlay text: "Save this before you water again." Add smaller subtext: "You will need it the next time a plant looks off." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 2
- **Title:** Drooping Does Not Always Mean Thirst
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** Drooping does not always mean thirst.
- **CTA:** Follow for more plant ER myths.
- **Caption:** Drooping leaves trigger panic, and panic usually leads to the wrong fix. This slideshow teaches people that overwatering, root stress, and poor drainage can look like thirst at first glance.
- **Hashtags:** `#planttok #plantmyths #houseplanthelp #wateringplants #plantcaretips #greenlens #plantrescue`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: drooping plant centered in a minimalist herbarium composition. Add large clean overlay text: "Drooping does not always mean thirst." Add smaller subtext: "That is the trap." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: sad-looking plant beside a watering can, clean editorial tension. Add large clean overlay text: "It looks dry." Add smaller subtext: "But looks can be misleading." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: rich dark soil and stressed roots suggested through elegant macro details. Add large clean overlay text: "Too much water can look the same." Add smaller subtext: "Root stress can mimic thirst." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: split concept of underwatering versus overwatering with subtle botanical imagery. Add large clean overlay text: "Same symptom. Different cause." Add smaller subtext: "That is why guessing fails." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: bright, clean checklist slide with leaf, soil, and pot drainage cues. Add large clean overlay text: "Check before you water." Add smaller subtext: "Soil moisture. Pot drainage. Root smell." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm authority slide with elegant paper textures. Add large clean overlay text: "More water is not always help." Add smaller subtext: "Sometimes it makes the problem worse." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished closing slide with subtle botanical forms. Add large clean overlay text: "Follow for more plant ER myths." Add smaller subtext: "Learn the warning signs before you react." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 3
- **Title:** I Almost Killed This Plant By Trying To Help It
- **Pillar:** Storytelling
- **Slides:** 9
- **Hook:** I almost killed this plant by trying to help it.
- **CTA:** Comment "help" for more rescue stories.
- **Caption:** This is a rescue story about reacting too fast, trusting the wrong assumption, and learning why symptoms are not enough. It humanizes the brand while still teaching the diagnostic mindset behind GreenLens.
- **Hashtags:** `#planttok #plantstory #plantrescue #houseplants #beginnerplants #greenlens #plantmistakes`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: dramatic but clean editorial opener with a struggling plant in soft natural light. Add large clean overlay text: "I almost killed this plant by trying to help it." Add smaller subtext: "And I thought I was doing the right thing." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: plant starting to droop with a few damaged leaves, high-end magazine framing. Add large clean overlay text: "It started with a small warning sign." Add smaller subtext: "Nothing looked urgent yet." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: closer view of the same plant looking more stressed. Add large clean overlay text: "I assumed it was thirsty." Add smaller subtext: "That was my first mistake." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: watering action shown in a tasteful editorial way, not busy. Add large clean overlay text: "So I watered it more." Add smaller subtext: "And the plant got worse." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: visual shift toward tension and decline with darker soil detail. Add large clean overlay text: "The symptom was real." Add smaller subtext: "The diagnosis was wrong." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual root-cause slide with botanical cards and layered paper textures. Add large clean overlay text: "It was root stress, not thirst." Add smaller subtext: "I treated the wrong problem." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm recovery mood with restored balance and elegant whitespace. Add large clean overlay text: "That changed how I look at plants." Add smaller subtext: "Now I diagnose before I react." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 8:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium educational summary slide with clean botanical cues. Add large clean overlay text: "This is the real lesson." Add smaller subtext: "Symptoms need context." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 9:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished close with strong editorial hierarchy. Add large clean overlay text: "Comment 'help' for more rescue stories." Add smaller subtext: "I will break down more real plant mistakes." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 4
- **Title:** Check This First
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** Check this first: light, water, soil, pests.
- **CTA:** Save this checklist.
- **Caption:** This is the core triage flow for people in a dying-plant moment. It turns panic into a usable order of operations and trains your audience to think in the same sequence GreenLens uses.
- **Hashtags:** `#planttok #plantchecklist #houseplantcare #planttriage #planttips #greenlens #plantclinic`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: clean hero slide with subtle leaf collage and premium paper layering. Add large clean overlay text: "Check this first." Add smaller subtext: "Light. Water. Soil. Pests." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant plant near window with soft directional light. Add large clean overlay text: "Step 1: Light." Add smaller subtext: "Has anything changed recently?" Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: moist soil and pot shown with calm, premium framing. Add large clean overlay text: "Step 2: Water." Add smaller subtext: "Do not assume. Check the soil." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: close-up of soil texture and pot drainage. Add large clean overlay text: "Step 3: Soil." Add smaller subtext: "Compaction and drainage matter." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: tasteful macro view of leaf underside and pest inspection. Add large clean overlay text: "Step 4: Pests." Add smaller subtext: "Always inspect the hidden areas." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: summary slide with four elegant specimen cards. Add large clean overlay text: "This order saves time." Add smaller subtext: "And prevents bad guesses." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium closing frame with calm call-to-action. Add large clean overlay text: "Save this checklist." Add smaller subtext: "Use it next time a plant looks wrong." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 5
- **Title:** Yellow Leaves Are Not The Diagnosis
- **Pillar:** Educational
- **Slides:** 5
- **Hook:** Yellow leaves are not the diagnosis.
- **CTA:** Save this for later.
- **Caption:** Yellow leaves can mean several different things depending on pattern, age, soil, light, and timing. This post is designed to stop the audience from treating one symptom like a full answer.
- **Hashtags:** `#yellowleaves #planttok #planthelp #houseplants #plantdiagnosis #greenlens #plantcare`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: framed yellow leaf specimen on textured cream paper. Add large clean overlay text: "Yellow leaves are not the diagnosis." Add smaller subtext: "They are just the signal." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant layout of one yellow leaf among healthy foliage. Add large clean overlay text: "One symptom can mean many things." Add smaller subtext: "Water, roots, light, age, or stress." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual comparison of different yellowing patterns. Add large clean overlay text: "Pattern matters." Add smaller subtext: "Where and how the yellowing appears changes the story." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm checklist scene with leaves, soil, and window light. Add large clean overlay text: "Look at context first." Add smaller subtext: "Do not fix color. Find the cause." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: high-end closing frame with clean typography. Add large clean overlay text: "Save this for later." Add smaller subtext: "You will need it when yellow leaves show up." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 6
- **Title:** The Most Common Plant Mistake
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** The most common plant mistake? Panic watering.
- **CTA:** Follow for mistake #2.
- **Caption:** This post turns a common beginner reflex into a memorable warning. It should feel slightly sharp, highly relatable, and useful enough that viewers follow for the next mistake in the series.
- **Hashtags:** `#planttok #plantmistake #wateringplants #houseplanttips #beginnerplants #greenlens #plantcaretips`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: clean, premium opener with watering can and stressed plant in elegant tension. Add large clean overlay text: "The most common plant mistake?" Add smaller subtext: "Panic watering." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: drooping plant that appears thirsty at first glance. Add large clean overlay text: "It feels helpful." Add smaller subtext: "That is why people do it fast." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: deep dark soil and heavy pot shown in editorial close-up. Add large clean overlay text: "But the guess is often wrong." Add smaller subtext: "And the extra water adds stress." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual mistake slide with minimal botanical iconography. Add large clean overlay text: "Care without diagnosis is risk." Add smaller subtext: "Good intentions can still harm the plant." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: simple checklist composition with soil and roots cues. Add large clean overlay text: "Pause and check first." Add smaller subtext: "Soil moisture. Drainage. Roots." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm authority slide with refined paper textures. Add large clean overlay text: "Plant care should feel calmer." Add smaller subtext: "Not more reactive." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: strong closing frame with subtle series energy. Add large clean overlay text: "Follow for mistake #2." Add smaller subtext: "There are more ways beginners make it worse." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 7
- **Title:** When Your Plant Looks Worse Overnight
- **Pillar:** Selling
- **Slides:** 7
- **Hook:** When your plant looks worse overnight:
- **CTA:** Scan your plant with GreenLens.
- **Caption:** This is the first product-oriented post, but it still starts from a real pain moment. The point is not to sell an app out of nowhere. The point is to present GreenLens as relief when guessing is no longer good enough.
- **Hashtags:** `#planttok #plantapp #plantdiagnosis #greenlens #houseplants #planthelp #urbanjungle`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: dramatic but clean plant decline moment in soft natural light. Add large clean overlay text: "When your plant looks worse overnight:" Add smaller subtext: "That is when people start guessing." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant close-up of visible stress signs on a houseplant. Add large clean overlay text: "Yellow leaves." Add smaller subtext: "Drooping stems. Soft tissue." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual confusion slide with multiple conflicting care cues. Add large clean overlay text: "The internet gives 4 different answers." Add smaller subtext: "That does not create clarity." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium diagnosis mood with clean modern framing and subtle tech undertone. Add large clean overlay text: "You need the cause first." Add smaller subtext: "Not another random tip." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm problem-solution slide with elegant negative space. Add large clean overlay text: "That is the Plant ER moment." Add smaller subtext: "Fast clarity matters most here." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium botanical app-ad atmosphere without cluttered UI. Add large clean overlay text: "Use GreenLens to check the cause." Add smaller subtext: "Before you treat the wrong problem." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: clean closing frame with strong typography and subtle brand energy. Add large clean overlay text: "Scan your plant with GreenLens." Add smaller subtext: "Get clarity before you guess again." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 8
- **Title:** Brown Tips Do Not Always Mean Dryness
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** Brown tips do not always mean dryness.
- **CTA:** Save this before trimming anything.
- **Caption:** Brown tips are easy to oversimplify. This slideshow teaches that water quality, humidity, fertilizer buildup, and root issues can all show up in similar ways.
- **Hashtags:** `#browntips #planttok #plantcare #houseplanthelp #plantproblems #greenlens #planttips`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium specimen-style leaf with brown tips framed on textured paper. Add large clean overlay text: "Brown tips do not always mean dryness." Add smaller subtext: "The usual guess is too simple." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant macro of a leaf edge with dry browning. Add large clean overlay text: "Yes, dryness can cause it." Add smaller subtext: "But it is not the only reason." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: subtle water glass, mineral hint, and plant leaf in editorial balance. Add large clean overlay text: "Water quality matters too." Add smaller subtext: "Mineral buildup can show up on the leaf." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: low-humidity mood with soft dry atmosphere around the plant. Add large clean overlay text: "Humidity can be part of it." Add smaller subtext: "Environment changes the pattern." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: soil and pot close-up with elegant composition. Add large clean overlay text: "Roots and soil matter too." Add smaller subtext: "The leaf is only where the signal appears." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm summary slide with multiple cause cards. Add large clean overlay text: "Same symptom. Multiple causes." Add smaller subtext: "That is why trimming is not the fix." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished closing frame with refined hierarchy. Add large clean overlay text: "Save this before trimming anything." Add smaller subtext: "Find the cause first." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 9
- **Title:** Why I Stopped Trusting Random Plant Tips
- **Pillar:** Storytelling
- **Slides:** 9
- **Hook:** Why I stopped trusting random plant tips.
- **CTA:** Follow for the full plant ER system.
- **Caption:** This story sharpens the brand's position. It explains why generic plant hacks break down without context and why diagnosis is the real value.
- **Hashtags:** `#planttok #plantstory #planttips #houseplantcare #plantadvice #greenlens #plantclinic`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant opener with layered paper textures and a stressed plant in soft natural light. Add large clean overlay text: "Why I stopped trusting random plant tips." Add smaller subtext: "They sounded helpful. They were not enough." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: plant phone-search mood with clean, minimal editorial composition. Add large clean overlay text: "The advice was always confident." Add smaller subtext: "But the answers never matched." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual slide with conflicting care cards floating in elegant layout. Add large clean overlay text: "Water more. Water less. Repot. Wait." Add smaller subtext: "Too many tips. No real diagnosis." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: stressed plant shown with premium documentary feel. Add large clean overlay text: "The plant still got worse." Add smaller subtext: "Because symptoms are not enough." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: root-cause concept slide with specimen cards and paper layers. Add large clean overlay text: "Context changes everything." Add smaller subtext: "Light, roots, soil, timing, pests." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm editorial transition toward clarity and order. Add large clean overlay text: "That changed the whole approach." Add smaller subtext: "I stopped collecting tips." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium system slide with botanical diagnostics mood. Add large clean overlay text: "I started looking for causes." Add smaller subtext: "That is what actually helps." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 8:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant brand-positioning slide with generous whitespace. Add large clean overlay text: "That is why GreenLens exists." Add smaller subtext: "For the Plant ER moment." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 9:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished closing slide with strong follow CTA. Add large clean overlay text: "Follow for the full plant ER system." Add smaller subtext: "I will keep breaking it down." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 10
- **Title:** The First 3 Things To Check On A Sick Plant
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** The first 3 things to check on a sick plant.
- **CTA:** Save this triage flow.
- **Caption:** Fast frameworks perform because they reduce anxiety. This one gives beginners a short triage system they can remember in a stressful moment.
- **Hashtags:** `#planttok #planttriage #sickplant #houseplants #plantcaretips #greenlens #planthelp`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant triage opener with a struggling plant centered on cream paper textures. Add large clean overlay text: "The first 3 things to check on a sick plant." Add smaller subtext: "Before you do anything else." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: window light and plant placement shown in a premium editorial frame. Add large clean overlay text: "1. Light" Add smaller subtext: "Did the environment change first?" Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: close-up of soil surface and finger moisture check. Add large clean overlay text: "2. Soil moisture" Add smaller subtext: "Do not guess from the leaves alone." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant view of pot base and drainage details. Add large clean overlay text: "3. Pot and drainage" Add smaller subtext: "Stagnant roots change everything." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: summary slide with three refined specimen cards. Add large clean overlay text: "These 3 checks catch a lot." Add smaller subtext: "Before you escalate the situation." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm authority frame with subtle leaf overlays. Add large clean overlay text: "A system beats panic." Add smaller subtext: "Especially with a stressed plant." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished save CTA slide. Add large clean overlay text: "Save this triage flow." Add smaller subtext: "You will not remember it under stress." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 11
- **Title:** More Care Is Not Always Better
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** More care is not always better.
- **CTA:** Comment if you have done this too.
- **Caption:** This post challenges a very common beginner instinct: if a plant looks stressed, do more. That belief feels caring, but it often creates even more stress for the plant.
- **Hashtags:** `#planttok #plantcare #houseplanthelp #plantmistakes #urbanjungle #greenlens #beginnerplants`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant opener with stressed plant and layered paper textures. Add large clean overlay text: "More care is not always better." Add smaller subtext: "That is the uncomfortable truth." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: multiple plant-care tools arranged in an editorial still life. Add large clean overlay text: "People react by doing more." Add smaller subtext: "More water. More movement. More changes." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: plant looking overwhelmed after multiple interventions. Add large clean overlay text: "The plant gets more stressed." Add smaller subtext: "Because the root issue stays the same." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual care-versus-diagnosis slide with calm, minimal structure. Add large clean overlay text: "Attention is not diagnosis." Add smaller subtext: "Action without clarity can backfire." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: quiet observation mood with leaf inspection and soil check. Add large clean overlay text: "Sometimes the best move is pause." Add smaller subtext: "Observe first." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: authority slide with soft green tones and botanical overlays. Add large clean overlay text: "Good plant care feels calmer." Add smaller subtext: "Not more chaotic." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: clean comment CTA close. Add large clean overlay text: "Comment if you have done this too." Add smaller subtext: "Most beginners have." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 12
- **Title:** Overwatering Often Looks Like Underwatering
- **Pillar:** Educational
- **Slides:** 5
- **Hook:** Overwatering often looks like underwatering.
- **CTA:** Save this before your next watering.
- **Caption:** This is one of the strongest fast educational ideas in the whole plan. It is surprising, practical, and tightly aligned with the GreenLens diagnosis-first positioning.
- **Hashtags:** `#overwatering #underwatering #planttok #plantcaretips #houseplants #greenlens #plantdiagnosis`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium opener with drooping plant and dark rich soil. Add large clean overlay text: "Overwatering often looks like underwatering." Add smaller subtext: "That is why people get trapped." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: drooping leaves shown in a clean editorial crop. Add large clean overlay text: "The symptom looks similar." Add smaller subtext: "So the instinct feels logical." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual root stress scene with soft macro detail. Add large clean overlay text: "But stressed roots can mimic thirst." Add smaller subtext: "And extra water makes it worse." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: checklist slide with soil, drainage, and pot cues. Add large clean overlay text: "Check the soil before you react." Add smaller subtext: "Never diagnose from drooping alone." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished closing slide with strong save CTA. Add large clean overlay text: "Save this before your next watering." Add smaller subtext: "It will save you a bad guess." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 13
- **Title:** This Plant Looked Thirsty. It Was Not.
- **Pillar:** Storytelling
- **Slides:** 7
- **Hook:** This plant looked thirsty. It was not.
- **CTA:** Comment "part 2" for the recovery.
- **Caption:** This is a compact case-study story. It keeps the emotional tension high while still teaching the audience to separate the symptom from the actual cause.
- **Hashtags:** `#planttok #plantstory #houseplants #plantrescue #plantcare #greenlens #plantcase`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: stressed plant in soft natural light with premium herbarium styling. Add large clean overlay text: "This plant looked thirsty." Add smaller subtext: "It was not." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: drooping leaf silhouette and sad posture in elegant composition. Add large clean overlay text: "Everything pointed to water." Add smaller subtext: "At least at first glance." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: tasteful watering motion with soft shadows. Add large clean overlay text: "That guess made sense." Add smaller subtext: "And it was still wrong." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual slide with symptom card and hidden cause card. Add large clean overlay text: "The symptom was real." Add smaller subtext: "The cause was different." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: root-zone cue and pot detail in editorial macro style. Add large clean overlay text: "The problem was below the surface." Add smaller subtext: "Not on the leaf." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm lesson slide with strong hierarchy. Add large clean overlay text: "This is why diagnosis matters." Add smaller subtext: "Symptoms need context." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished story CTA close. Add large clean overlay text: "Comment 'part 2' for the recovery." Add smaller subtext: "I will break down what changed." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 14
- **Title:** If Your Plant Suddenly Looks Worse
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** If your plant suddenly looks worse, check in this order.
- **CTA:** Save this order.
- **Caption:** This is another high-value save post. It gives a simple order of operations for stressful moments and helps train the audience to think with a clearer system.
- **Hashtags:** `#planttok #houseplanthelp #plantchecklist #plantcaretips #plantproblem #greenlens #plantrescue`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: dramatic clean opener with plant showing sudden decline. Add large clean overlay text: "If your plant suddenly looks worse," Add smaller subtext: "check in this order." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: plant near light source in airy editorial frame. Add large clean overlay text: "1. Environment change" Add smaller subtext: "What shifted around the plant?" Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: soil and moisture check shown elegantly. Add large clean overlay text: "2. Soil condition" Add smaller subtext: "Wet, dry, compact, or sour?" Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: leaf underside inspection with magnifying lens. Add large clean overlay text: "3. Leaf inspection" Add smaller subtext: "Look for pattern and pests." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: pot base and drainage holes in premium macro detail. Add large clean overlay text: "4. Root and pot clues" Add smaller subtext: "Drainage changes the whole diagnosis." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm summary layout with numbered botanical cards. Add large clean overlay text: "Order matters." Add smaller subtext: "It prevents bad guesses." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: clean save CTA slide with elegant whitespace. Add large clean overlay text: "Save this order." Add smaller subtext: "Use it the next time panic starts." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 15
- **Title:** Before You Water Again
- **Pillar:** Selling
- **Slides:** 7
- **Hook:** Before you water again:
- **CTA:** Use GreenLens to check the cause first.
- **Caption:** This is a direct product post built around a useful warning. The product should feel like the logical next step after uncertainty, not a random interruption.
- **Hashtags:** `#planttok #plantapp #greenlens #plantdiagnosis #houseplants #planthelp #plantcare`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: clean, high-stakes plant-care opener with watering can and stressed plant. Add large clean overlay text: "Before you water again:" Add smaller subtext: "Pause here first." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: drooping plant with moist soil implied through subtle visual cues. Add large clean overlay text: "The leaves may be misleading." Add smaller subtext: "The root cause may not be thirst." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conflicting advice concept in editorial layout. Add large clean overlay text: "Random tips create noise." Add smaller subtext: "You need clarity." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: sleek diagnostic atmosphere with botanical-modern tension. Add large clean overlay text: "Check the cause first." Add smaller subtext: "That changes the next move." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: refined problem-solution frame with generous negative space. Add large clean overlay text: "That is where GreenLens helps." Add smaller subtext: "It is built for the Plant ER moment." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium closing lead-in with subtle brand energy. Add large clean overlay text: "Do not water on instinct." Add smaller subtext: "Diagnose first." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: direct app CTA close in polished editorial style. Add large clean overlay text: "Use GreenLens to check the cause first." Add smaller subtext: "Then treat the right problem." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 16
- **Title:** 5 Mistakes That Make Plant Problems Worse
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** 5 mistakes that make plant problems worse.
- **CTA:** Follow for the fix list.
- **Caption:** Mistake-based posts are strong because they trigger self-recognition and correction at the same time. This one should feel practical, slightly sharp, and easy to share.
- **Hashtags:** `#planttok #plantmistakes #houseplantcare #plantcaretips #urbanjungle #greenlens #plantrescue`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium list-style opener with struggling plant and elegant paper texture. Add large clean overlay text: "5 mistakes that make plant problems worse." Add smaller subtext: "Most beginners do at least one." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: stressed plant with watering cue. Add large clean overlay text: "Mistake 1" Add smaller subtext: "Watering from panic." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: plant being moved or rotated in a tasteful editorial frame. Add large clean overlay text: "Mistake 2" Add smaller subtext: "Changing too much at once." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: fertilizer, repotting, or tool cue shown minimally. Add large clean overlay text: "Mistake 3" Add smaller subtext: "Treating before diagnosing." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: leaf-only focus that ignores roots in conceptual composition. Add large clean overlay text: "Mistake 4" Add smaller subtext: "Reading the leaf without context." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conflicting advice cards in refined layout. Add large clean overlay text: "Mistake 5" Add smaller subtext: "Trusting random tips over observation." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: strong closing series CTA. Add large clean overlay text: "Follow for the fix list." Add smaller subtext: "I will break down what to do instead." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 17
- **Title:** Soft Leaves Can Mean More Than One Thing
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** Soft leaves can mean more than one thing.
- **CTA:** Save this symptom guide.
- **Caption:** This post reinforces a deeper diagnostic principle: one visible symptom can map to multiple causes. That is exactly the kind of mindset shift GreenLens wants to build.
- **Hashtags:** `#softleaves #planttok #planthelp #houseplants #plantdiagnosis #greenlens #plantcaretips`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant macro of soft, stressed leaves with premium herbarium framing. Add large clean overlay text: "Soft leaves can mean more than one thing." Add smaller subtext: "That is why guessing fails." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: leaf tissue detail in soft natural light. Add large clean overlay text: "Sometimes it is water stress." Add smaller subtext: "But not always." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: warm window light and heat-stress mood with minimal composition. Add large clean overlay text: "Sometimes it is heat or light stress." Add smaller subtext: "Environment changes the meaning." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: pot and root cue in clean editorial macro. Add large clean overlay text: "Sometimes it starts at the roots." Add smaller subtext: "The leaf only shows the signal." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: specimen-card layout with multiple possible causes. Add large clean overlay text: "Same symptom. Different paths." Add smaller subtext: "Context decides the answer." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm diagnostic authority slide. Add large clean overlay text: "Read the pattern, not just the leaf." Add smaller subtext: "That is the shift." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: save CTA close with refined hierarchy. Add large clean overlay text: "Save this symptom guide." Add smaller subtext: "You will need it later." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 18
- **Title:** What A Failing Rescue Taught Me
- **Pillar:** Storytelling
- **Slides:** 9
- **Hook:** What a failing rescue taught me about guessing.
- **CTA:** Tell me your worst plant mistake.
- **Caption:** This story is less about one plant and more about the pattern behind bad rescue attempts. It should feel honest, slightly painful, and useful.
- **Hashtags:** `#planttok #plantstory #plantmistakes #houseplants #plantrescue #greenlens #learnedthehardway`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: moody editorial opener with a declining plant and textured cream paper background. Add large clean overlay text: "What a failing rescue taught me about guessing." Add smaller subtext: "It changed how I approach every sick plant." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: plant in early distress shown in soft, premium light. Add large clean overlay text: "At first it looked manageable." Add smaller subtext: "Then I reacted too fast." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: multiple care actions implied through elegant still-life tools. Add large clean overlay text: "I did what felt helpful." Add smaller subtext: "More water. More changes. More movement." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: visual decline becoming more obvious. Add large clean overlay text: "The plant did not improve." Add smaller subtext: "It got worse." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual turning-point slide with root-cause card emerging. Add large clean overlay text: "That was the real lesson." Add smaller subtext: "I was treating the wrong issue." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: root stress and environmental context suggested in a clean editorial composition. Add large clean overlay text: "Symptoms need context." Add smaller subtext: "Without that, treatment is just guessing." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm recovery framework slide with elegant numbered cards. Add large clean overlay text: "Now I use a triage flow." Add smaller subtext: "Observe. Narrow down. Then act." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 8:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: brand philosophy slide with subtle GreenLens tone. Add large clean overlay text: "That is the Plant ER mindset." Add smaller subtext: "Calm clarity beats panic." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 9:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: strong comment CTA close. Add large clean overlay text: "Tell me your worst plant mistake." Add smaller subtext: "Most people have one." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 19
- **Title:** How To Triage A Sick Plant In 5 Minutes
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** How to triage a sick plant in 5 minutes.
- **CTA:** Save this 5-minute flow.
- **Caption:** Specific promises often outperform generic advice. This one gives a short, repeatable system for plant emergencies and is one of the strongest candidates for a recurring content series.
- **Hashtags:** `#planttok #planttriage #houseplants #planthelp #plantcaretips #greenlens #plantclinic`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium triage opener with stopwatch mood and stressed plant in elegant balance. Add large clean overlay text: "How to triage a sick plant in 5 minutes." Add smaller subtext: "A calm system for a stressful moment." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: quick visual scan of the plant in clean editorial framing. Add large clean overlay text: "Minute 1" Add smaller subtext: "Look at the whole plant." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: finger checking soil moisture and pot condition. Add large clean overlay text: "Minute 2" Add smaller subtext: "Check soil and drainage." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: close inspection of leaves and undersides for pattern and pests. Add large clean overlay text: "Minute 3" Add smaller subtext: "Inspect the leaves." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: light and environment cues around the plant. Add large clean overlay text: "Minute 4" Add smaller subtext: "Check the environment." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: summary decision slide with elegant numbered cards. Add large clean overlay text: "Minute 5" Add smaller subtext: "Narrow down the most likely cause." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: clean save CTA close with strong hierarchy. Add large clean overlay text: "Save this 5-minute flow." Add smaller subtext: "Use it before you guess." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 20
- **Title:** A Watering Schedule Will Not Save A Stressed Plant
- **Pillar:** Educational
- **Slides:** 5
- **Hook:** A watering schedule will not save a stressed plant.
- **CTA:** Follow for smarter plant care.
- **Caption:** This post challenges one of the most common beginner systems. It is short, sharp, and built to provoke comments from people who have been told to stick to a schedule.
- **Hashtags:** `#planttok #plantmyths #wateringplants #houseplantcare #planttips #greenlens #planthelp`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant calendar and stressed plant composition with soft cream paper texture. Add large clean overlay text: "A watering schedule will not save a stressed plant." Add smaller subtext: "Context matters more than routine." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: neat calendar cue beside a drooping plant. Add large clean overlay text: "Schedules feel organized." Add smaller subtext: "That is why people trust them." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: visual contrast between calendar logic and plant signals. Add large clean overlay text: "But plants do not read calendars." Add smaller subtext: "They respond to conditions." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: environment and soil cues shown with calm clarity. Add large clean overlay text: "Read the plant, not the date." Add smaller subtext: "That is smarter care." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished follow CTA close. Add large clean overlay text: "Follow for smarter plant care." Add smaller subtext: "And fewer bad guesses." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 21
- **Title:** Stop Doing This When Leaves Turn Yellow
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** Stop doing this when leaves turn yellow.
- **CTA:** Save this before you act.
- **Caption:** Warning-style posts work because they create urgency without needing clickbait. This one tells people that their next move may make the plant worse.
- **Hashtags:** `#yellowleaves #planttok #houseplants #plantcaretips #plantmistakes #greenlens #plantdiagnosis`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: framed yellow-leaf hero slide with elegant paper layering. Add large clean overlay text: "Stop doing this when leaves turn yellow." Add smaller subtext: "It makes the problem worse." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: yellow leaf pattern shown in a clean editorial crop. Add large clean overlay text: "Do not assume thirst." Add smaller subtext: "That is the first trap." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: repotting or overreacting cue shown minimally. Add large clean overlay text: "Do not change everything at once." Add smaller subtext: "More action creates more stress." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual symptom-versus-cause frame with specimen cards. Add large clean overlay text: "Yellow is the signal." Add smaller subtext: "Not the diagnosis." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: checklist mood with light, soil, and root cues. Add large clean overlay text: "Check context first." Add smaller subtext: "Pattern. Soil. Light. Timing." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm authority summary slide. Add large clean overlay text: "Good diagnosis slows you down." Add smaller subtext: "That is how you avoid damage." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: save CTA close with polished hierarchy. Add large clean overlay text: "Save this before you act." Add smaller subtext: "You will need it when yellowing starts." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 22
- **Title:** I Thought This Plant Was Gone
- **Pillar:** Storytelling
- **Slides:** 9
- **Hook:** I thought this plant was gone. I was wrong.
- **CTA:** Comment if you want the recovery steps.
- **Caption:** This is a rescue story with emotional tension and a hopeful turn. It should feel grounded, not exaggerated, and it should end with a lesson that reinforces diagnosis over panic.
- **Hashtags:** `#planttok #plantrescue #houseplants #plantstory #urbanjungle #greenlens #plantrecovery`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: dramatic but elegant opener with a severely stressed plant in soft natural light. Add large clean overlay text: "I thought this plant was gone." Add smaller subtext: "I was wrong." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: close-up of drooping leaves and visible decline, premium documentary feel. Add large clean overlay text: "It looked beyond saving." Add smaller subtext: "That was the emotional moment." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: tense care-decision still life with watering can and tools. Add large clean overlay text: "The temptation was panic." Add smaller subtext: "Water, move, repot, do anything." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual pause slide with elegant negative space. Add large clean overlay text: "Instead, I slowed down." Add smaller subtext: "That changed everything." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: inspection of roots, soil, and light cues in refined layout. Add large clean overlay text: "The clues were there." Add smaller subtext: "The problem was not what it looked like." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: root-cause reveal slide with botanical cards and paper textures. Add large clean overlay text: "The diagnosis changed the plan." Add smaller subtext: "That is the turning point." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calmer recovery mood with more balanced plant posture. Add large clean overlay text: "Recovery started with clarity." Add smaller subtext: "Not with more random care." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 8:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: lesson summary slide with premium hierarchy. Add large clean overlay text: "This is why symptoms are not enough." Add smaller subtext: "Context saves plants." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 9:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: story CTA close. Add large clean overlay text: "Comment if you want the recovery steps." Add smaller subtext: "I can break them down next." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 23
- **Title:** Wilting Is A Symptom, Not A Diagnosis
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** Wilting is a symptom, not a diagnosis.
- **CTA:** Save this distinction.
- **Caption:** This is one of the clearest diagnostic-identity posts in the whole plan. It teaches the audience how to think, not just what to do in one situation.
- **Hashtags:** `#wiltingplant #planttok #plantcare #houseplanthelp #plantdiagnosis #greenlens #planttips`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: wilted plant framed like a modern herbarium specimen. Add large clean overlay text: "Wilting is a symptom, not a diagnosis." Add smaller subtext: "That distinction matters." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant close-up of wilted foliage. Add large clean overlay text: "It tells you something is wrong." Add smaller subtext: "It does not tell you what." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual multiple-cause slide with balanced editorial cards. Add large clean overlay text: "Water stress is one option." Add smaller subtext: "But not the only one." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: heat, roots, and environment cues suggested in a minimal layout. Add large clean overlay text: "Roots, heat, light, and shock matter too." Add smaller subtext: "Context changes the meaning." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm observation mood with leaf and soil inspection. Add large clean overlay text: "Read the pattern around the wilt." Add smaller subtext: "Do not react to the posture alone." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: authority slide with subtle botanical overlays and paper depth. Add large clean overlay text: "This is the Plant ER mindset." Add smaller subtext: "Find the cause first." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: clean save CTA close. Add large clean overlay text: "Save this distinction." Add smaller subtext: "It will change how you diagnose." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 24
- **Title:** Before You Repot A Stressed Plant
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** What to inspect before repotting a stressed plant.
- **CTA:** Save this repot checklist.
- **Caption:** Repotting feels like action, which is why stressed-plant owners reach for it fast. This slideshow should interrupt that reflex and add a better decision layer first.
- **Hashtags:** `#repotting #planttok #houseplants #plantcaretips #planthelp #greenlens #plantstress`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant repotting opener with plant, pot, and soil in premium still life. Add large clean overlay text: "Before you repot a stressed plant:" Add smaller subtext: "Inspect these things first." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: root-bound cue shown subtly in macro composition. Add large clean overlay text: "Check the roots." Add smaller subtext: "Are they crowded, rotten, or fine?" Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: soil structure and compaction shown in editorial close-up. Add large clean overlay text: "Check the soil." Add smaller subtext: "Compaction and drainage change everything." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: environment context around the plant with airy natural light. Add large clean overlay text: "Check the environment." Add smaller subtext: "Repotting does not fix bad conditions." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: timing cue with stressed plant and calm pause mood. Add large clean overlay text: "Check the timing." Add smaller subtext: "A stressed plant may not need more shock." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: summary slide with elegant specimen cards. Add large clean overlay text: "Repotting is not the default rescue." Add smaller subtext: "Diagnosis comes first." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: save CTA close with strong editorial hierarchy. Add large clean overlay text: "Save this repot checklist." Add smaller subtext: "Use it before you escalate stress." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 25
- **Title:** If You Are Still Guessing, Do This First
- **Pillar:** Selling
- **Slides:** 7
- **Hook:** If you are still guessing, do this first.
- **CTA:** Scan your plant with GreenLens.
- **Caption:** By this point in the month, the audience should understand the value of diagnosis enough for a clearer direct-response post. The CTA should feel earned, not abrupt.
- **Hashtags:** `#greenlens #plantapp #planttok #plantdiagnosis #houseplants #planthelp #plantcare`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium problem-state opener with stressed plant and subtle tension. Add large clean overlay text: "If you are still guessing, do this first." Add smaller subtext: "Stop reacting on instinct." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conflicting advice cards in elegant editorial layout. Add large clean overlay text: "Most people get stuck here." Add smaller subtext: "Too many symptoms. Too many tips." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: close-up of stressed plant details with clean framing. Add large clean overlay text: "The symptom is visible." Add smaller subtext: "The cause usually is not." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium diagnosis mood with calm, modern botanical atmosphere. Add large clean overlay text: "That is why cause comes first." Add smaller subtext: "Everything after that gets easier." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: brand bridge slide with elegant negative space and subtle tech undertone. Add large clean overlay text: "GreenLens is built for that moment." Add smaller subtext: "The Plant ER moment." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: high-end app-ad mood without cluttered UI. Add large clean overlay text: "Use clarity before treatment." Add smaller subtext: "That is the whole shift." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: direct brand CTA close with strong hierarchy. Add large clean overlay text: "Scan your plant with GreenLens." Add smaller subtext: "Find the cause before you guess again." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 26
- **Title:** Healthy Plants Are Not Cared For By Calendar
- **Pillar:** Educational
- **Slides:** 5
- **Hook:** Healthy plants are not cared for by calendar.
- **CTA:** Follow for more plant ER rules.
- **Caption:** This is a short, clean rule post. It is designed to feel memorable, slightly provocative, and easy to repeat as part of a GreenLens "Plant ER Rules" series.
- **Hashtags:** `#planttok #plantcaretips #houseplants #wateringplants #plantmyths #greenlens #urbanjungle`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant calendar-and-plant composition on cream paper texture. Add large clean overlay text: "Healthy plants are not cared for by calendar." Add smaller subtext: "They respond to conditions." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: tidy schedule cue beside a plant in soft light. Add large clean overlay text: "Schedules feel safe." Add smaller subtext: "That is why beginners love them." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual slide comparing schedule to real plant signals. Add large clean overlay text: "But the plant lives in context." Add smaller subtext: "Light, heat, roots, soil, season." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm observation scene with plant and environmental cues. Add large clean overlay text: "Read the plant." Add smaller subtext: "Not the date." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: follow CTA close with polished minimal style. Add large clean overlay text: "Follow for more plant ER rules." Add smaller subtext: "Smarter care starts with better diagnosis." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 27
- **Title:** Why GreenLens Focuses On Sick Plants
- **Pillar:** Storytelling
- **Slides:** 9
- **Hook:** Why GreenLens focuses on sick plants, not generic care.
- **CTA:** Follow for more plant ER content.
- **Caption:** This is a positioning post. It should explain why the content feels different from aesthetic plant accounts and why the brand is built around high-stress, high-uncertainty moments.
- **Hashtags:** `#greenlens #planttok #brandstory #houseplants #planthelp #plantdiagnosis #plantcare`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: strong brand-story opener with elegant botanical paper collage. Add large clean overlay text: "Why GreenLens focuses on sick plants." Add smaller subtext: "Not generic care." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: beautiful healthy plant imagery contrasted with subtle distance. Add large clean overlay text: "Pretty plant content is everywhere." Add smaller subtext: "That is not the real gap." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: stressed plant in soft natural light with a premium documentary feel. Add large clean overlay text: "The real pain starts here." Add smaller subtext: "When a plant suddenly looks wrong." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: confusion slide with conflicting advice cards. Add large clean overlay text: "That moment creates panic." Add smaller subtext: "And panic creates bad guesses." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: root-cause and triage concept slide with layered paper textures. Add large clean overlay text: "That is where diagnosis matters most." Add smaller subtext: "Not in calm moments. In urgent ones." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium system slide with botanical-modern clarity. Add large clean overlay text: "So GreenLens became Plant ER." Add smaller subtext: "Clarity for the dying-plant moment." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: educational bridge slide with elegant whitespace. Add large clean overlay text: "That changes the content too." Add smaller subtext: "Less aesthetic. More useful." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 8:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: brand conviction slide with calm authority and strong hierarchy. Add large clean overlay text: "The mission is simple." Add smaller subtext: "Less guessing. Faster clarity." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 9:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished follow CTA close. Add large clean overlay text: "Follow for more plant ER content." Add smaller subtext: "That is the lane." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 28
- **Title:** 3 Things Never To Do In Plant Panic Mode
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** 3 things never to do in plant panic mode.
- **CTA:** Save this for emergencies.
- **Caption:** Emergency framing fits GreenLens especially well because it matches the Plant ER angle. This post should feel urgent but still calm and premium.
- **Hashtags:** `#plantpanic #planttok #houseplants #plantmistakes #planthelp #greenlens #plantrescue`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: urgent but elegant opener with stressed plant and layered paper depth. Add large clean overlay text: "3 things never to do in plant panic mode." Add smaller subtext: "These make it worse." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: watering can and stressed plant shown in clean editorial tension. Add large clean overlay text: "Never do this #1" Add smaller subtext: "Water before checking the soil." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: multiple plant-care tools implying overreaction. Add large clean overlay text: "Never do this #2" Add smaller subtext: "Change everything at once." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: repotting or treatment cue in minimal premium layout. Add large clean overlay text: "Never do this #3" Add smaller subtext: "Treat before diagnosing." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm conceptual slide with symptom and cause cards. Add large clean overlay text: "Panic rewards bad instincts." Add smaller subtext: "Systems prevent damage." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: plant triage mood with strong editorial clarity. Add large clean overlay text: "Slow down. Narrow it down." Add smaller subtext: "That is the better move." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished emergency save CTA close. Add large clean overlay text: "Save this for emergencies." Add smaller subtext: "You will think less clearly in panic mode." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 29
- **Title:** The Moment People Realize They Treated The Wrong Issue
- **Pillar:** Storytelling
- **Slides:** 7
- **Hook:** The moment people realize they treated the wrong issue.
- **CTA:** Comment your biggest symptom confusion.
- **Caption:** This is an empathy post. It mirrors the internal shift people go through when they realize the symptom they treated was never the true cause.
- **Hashtags:** `#planttok #houseplants #plantstory #plantdiagnosis #planthelp #greenlens #plantcaretips`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: emotional but elegant opener with stressed plant and thoughtful negative space. Add large clean overlay text: "The moment people realize they treated the wrong issue." Add smaller subtext: "It is always the same feeling." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: care action shown in a refined documentary style. Add large clean overlay text: "At first, the fix feels logical." Add smaller subtext: "That is why the mistake happens." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: plant decline continuing despite intervention. Add large clean overlay text: "Then nothing improves." Add smaller subtext: "Or the plant gets worse." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual realization slide with symptom card fading and cause card appearing. Add large clean overlay text: "That is the turning point." Add smaller subtext: "The symptom was not the answer." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm diagnostic scene with soil, roots, and environment cues. Add large clean overlay text: "The real question changes." Add smaller subtext: "What is actually causing this?" Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: insight summary slide with premium editorial hierarchy. Add large clean overlay text: "That shift changes everything." Add smaller subtext: "Diagnosis becomes the first move." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: strong comment CTA close with elegant whitespace. Add large clean overlay text: "Comment your biggest symptom confusion." Add smaller subtext: "That is where most mistakes begin." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
## Day 30
- **Title:** The 5 Warning Signs Most Beginners Misread
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** The 5 warning signs most beginners misread.
- **CTA:** Follow and scan with GreenLens next time.
- **Caption:** This final post works as a recap and as a bridge into month two. It repackages the strongest diagnostic themes from the first 30 days into one strong entry-point post.
- **Hashtags:** `#planttok #houseplants #plantwarning #plantdiagnosis #greenlens #plantcare #urbanjungle`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant roundup opener with layered botanical paper textures and a stressed plant. Add large clean overlay text: "The 5 warning signs most beginners misread." Add smaller subtext: "These create most of the bad guesses." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is Slide 1, so include the unbranded GreenLens avatar from the unbranded reference image as a visible supporting character; do not include the GreenLens Pro wordmark on this first slide; reserve the branded avatar for the final slide only. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: yellow leaf specimen framed on cream paper. Add large clean overlay text: "1. Yellow leaves" Add smaller subtext: "A signal, not a diagnosis." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: drooping plant in soft, premium window light. Add large clean overlay text: "2. Drooping" Add smaller subtext: "Not always thirst." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: brown leaf-tip macro with refined editorial detail. Add large clean overlay text: "3. Brown tips" Add smaller subtext: "Not always dryness." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: wilted leaf or soft leaf specimen card in clean layout. Add large clean overlay text: "4. Wilting or softness" Add smaller subtext: "Symptoms need context." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: summary slide with five refined specimen cards in premium hierarchy. Add large clean overlay text: "5. Sudden decline" Add smaller subtext: "It usually starts earlier than you think." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: do not place an avatar on this middle slide; keep the unbranded avatar only on Slide 1 and the branded GreenLens Pro avatar only on the final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Reference the provided GreenLens avatar design images in this prompt: match the glossy green camera mascot, big friendly eyes, leaf on the camera body, black-to-olive vignette glow, chunky polished cartoon rendering, premium GreenLens character style, and clean high-contrast brand energy from the two supplied references. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: final month-close CTA in polished GreenLens style. Add large clean overlay text: "Follow and scan with GreenLens next time." Add smaller subtext: "Month two starts with better diagnosis." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle. Avatar placement rule for this slideshow: this is the final slide, so include the branded GreenLens Pro avatar from the branded reference image with the GreenLens Pro wordmark clearly present; do not use the unbranded avatar on this final slide. Absolute text rule: all overlay text must be centered exactly in the middle of the image canvas, horizontally and vertically, with no top-heavy layout and no text placed near the edges.
---
# Faceless Real Video Sprint: 30 Filmable TikToks Based On Viral Research
Use this section after or alongside the 30-day slideshow plan. These are not AI slideshows. These are real, faceless TikTok videos you film yourself with hands, plants, phone screen recordings, close-ups, timers, before/after shots, and text overlays.
## Production Rules For Every Video
- **Format:** vertical 9:16, real footage, no face required.
- **Faceless rule:** show hands, phone, plants, soil, sink, window light, plant shelf, screen recordings, and over-the-shoulder shots only.
- **Core GreenLens angle:** stop guessing, scan first, understand the likely cause before reacting.
- **Safety wording:** use “possible cause”, “care suggestion”, “scan result”, or “what GreenLens suggests” instead of hard medical-style claims.
- **Best CTA rotation:** “Guess before the result”, “Comment SCAN”, “Save before you water”, “Send this to a plant parent”, “Try GreenLens from the bio”.
- **Viral patterns used:** plant parent identity, POV humor, app scan reveal, before/after recovery, myth-busting, plant rescue, comment bait, supermarket basil problem, plant care routine, plant hacks, root rot / yellow leaves / drooping confusion.
## 30 Faceless Real Video Concepts
### Video 1 — Guess Before GreenLens
- **Keyword pattern:** plant diagnosis, what is wrong with my plant
- **Hook overlay:** “Guess what is wrong before GreenLens does.”
- **Shotlist:** close-up of sick leaf, show soil, show pot, phone enters frame, scan result reveal.
- **CTA overlay:** “Comment your guess before the result.”
- **Caption:** Same symptom, different causes. This is why I scan before I react.
- **Hashtags:** `#planttok #planthelp #plantdiagnosis #greenlens #houseplants #plantcare`
- **Length:** 18-24 sec
### Video 2 — Yellow Leaf Was Not The Problem
- **Keyword pattern:** yellow leaves plant
- **Hook overlay:** “I thought yellow leaves meant one thing. I was wrong.”
- **Shotlist:** yellow leaf macro, hand reaches for watering can, stops, GreenLens scan, result shows possible cause.
- **CTA overlay:** “Save this before you water again.”
- **Caption:** Yellow is a signal, not the diagnosis.
- **Hashtags:** `#yellowleaves #planttok #plantcaretips #greenlens #houseplanthelp`
- **Length:** 15-22 sec
### Video 3 — Stop Watering Drooping Leaves
- **Keyword pattern:** plant drooping, overwatering
- **Hook overlay:** “Drooping does NOT always mean thirsty.”
- **Shotlist:** drooping plant, finger soil test, drainage hole close-up, scan with GreenLens, result reveal.
- **CTA overlay:** “Guess: thirsty or overwatered?”
- **Caption:** The most dangerous plant care trap is treating every droop with water.
- **Hashtags:** `#plantdrooping #overwatering #planttips #greenlens #planttok`
- **Length:** 18-25 sec
### Video 4 — GreenLens Vs Google
- **Keyword pattern:** plant app, plant care
- **Hook overlay:** “3 hours of Googling vs 3 seconds scanning.”
- **Shotlist:** phone with many search tabs, close tabs, open GreenLens, scan plant, show simple next step.
- **CTA overlay:** “Stop guessing. Scan first.”
- **Caption:** I used to spiral through plant forums. Now I start with the scan.
- **Hashtags:** `#plantapp #plantcare #greenlens #plantparent #houseplants`
- **Length:** 12-18 sec
### Video 5 — Saddest Plant In The Store
- **Keyword pattern:** save dying plant, plant rescue
- **Hook overlay:** “I bought the saddest plant in the store.”
- **Shotlist:** sad clearance plant, price tag, bring home, scan, first care step.
- **CTA overlay:** “Part 2 tomorrow?”
- **Caption:** Rescue series starts now. Guess if she makes it.
- **Hashtags:** `#plantrescue #dyingplant #planttok #greenlens #savemyplant`
- **Length:** 20-30 sec
### Video 6 — 3 Plants, 3 Different Problems
- **Keyword pattern:** plant scanner app, plant identification
- **Hook overlay:** “3 plants. 3 symptoms. 3 different causes.”
- **Shotlist:** quick scan montage of three plants, each result flashed for one second.
- **CTA overlay:** “Which one surprised you?”
- **Caption:** This is why one-size-fits-all plant advice fails.
- **Hashtags:** `#plantapp #plantdiagnosis #greenlens #planttok #houseplants`
- **Length:** 25-32 sec
### Video 7 — New Plant Protocol
- **Keyword pattern:** houseplant tips, plant parent
- **Hook overlay:** “What I do the second I bring a new plant home.”
- **Shotlist:** plant on table, scan, check soil, check light spot, set reminder.
- **CTA overlay:** “Save this new plant checklist.”
- **Caption:** Learned this after killing too many new plants in week one.
- **Hashtags:** `#newplant #houseplanttips #plantparent #greenlens #plantcare`
- **Length:** 18-25 sec
### Video 8 — Supermarket Basil Problem
- **Keyword pattern:** dying plant, supermarket basil
- **Hook overlay:** “Your supermarket basil keeps dying for a reason.”
- **Shotlist:** supermarket basil, tight roots/soil close-up, scan, first fix shown.
- **CTA overlay:** “Comment BASIL for part 2.”
- **Caption:** It looks healthy in the store, then crashes at home. Here is where I start.
- **Hashtags:** `#basilplant #dyingplant #planttips #greenlens #kitchenplants`
- **Length:** 18-25 sec
### Video 9 — Before You Repot
- **Keyword pattern:** plant repotting
- **Hook overlay:** “Almost repotted her. Scanned first.”
- **Shotlist:** hands grab pot, pause, scan plant, show “not yet / check first” style result, put pot back.
- **CTA overlay:** “Scan before you repot.”
- **Caption:** Repotting can help, but panic repotting can make things worse.
- **Hashtags:** `#repotting #plantcaretips #greenlens #houseplants #plantmistakes`
- **Length:** 12-18 sec
### Video 10 — Root Rot Check
- **Keyword pattern:** root rot, overwatered plant fix
- **Hook overlay:** “Root rot check without panicking.”
- **Shotlist:** wet soil, pot drainage, root glimpse if possible, GreenLens scan, one calm next step.
- **CTA overlay:** “Save for plant emergencies.”
- **Caption:** Do not do five fixes at once. Start by narrowing the possible cause.
- **Hashtags:** `#rootrot #overwateredplant #planthelp #greenlens #planttok`
- **Length:** 20-30 sec
### Video 11 — Plant ER: Do Not Do This
- **Keyword pattern:** plant watering mistakes
- **Hook overlay:** “Your plant looks bad. Do NOT do these 3 things.”
- **Shotlist:** quick fake-outs: watering can, fertilizer, repotting tools; hand pushes them away; scan first.
- **CTA overlay:** “Save this panic checklist.”
- **Caption:** Panic care is how small problems become big ones.
- **Hashtags:** `#plantmistakes #plantcaretips #greenlens #planttok #houseplanthelp`
- **Length:** 18-24 sec
### Video 12 — The 11 PM Scan
- **Keyword pattern:** plant parent, POV humor
- **Hook overlay:** “Me at 11 PM because one leaf looked weird.”
- **Shotlist:** dark room, phone flashlight, plant leaf close-up, GreenLens scan, calm thumbs-up.
- **CTA overlay:** “Plant parents, you get it.”
- **Caption:** Midnight plant anxiety is real.
- **Hashtags:** `#plantparent #plantmomlife #greenlens #planttok #houseplants`
- **Length:** 8-12 sec
### Video 13 — One Leaf, Five Possible Causes
- **Keyword pattern:** yellow leaves plant, plant diagnosis
- **Hook overlay:** “One yellow leaf can mean 5 different things.”
- **Shotlist:** yellow leaf, text list appears, scan result narrows likely issue.
- **CTA overlay:** “Do not treat color. Find cause.”
- **Caption:** The leaf is only the clue.
- **Hashtags:** `#yellowleaves #plantdiagnosis #greenlens #planttips #planttok`
- **Length:** 18-24 sec
### Video 14 — Plant Shelf Audit
- **Keyword pattern:** plant care routine, planttok
- **Hook overlay:** “Scanning my entire plant shelf.”
- **Shotlist:** shelf pan, scan 5 plants quickly, show one surprising result.
- **CTA overlay:** “How many plants do you own?”
- **Caption:** Full plant audit. One result surprised me.
- **Hashtags:** `#plantshelf #planttok #plantcollection #greenlens #houseplants`
- **Length:** 25-35 sec
### Video 15 — Brown Tips Trap
- **Keyword pattern:** houseplant tips, plant care
- **Hook overlay:** “Brown tips do not always mean more water.”
- **Shotlist:** brown tips macro, water can enters, hand blocks it, scan, possible humidity/water quality/light note.
- **CTA overlay:** “Save before you water more.”
- **Caption:** More water is often the wrong first move.
- **Hashtags:** `#browntips #planttips #greenlens #houseplanthelp #plantcare`
- **Length:** 16-22 sec
### Video 16 — The Finger Soil Test Plus Scan
- **Keyword pattern:** plant hacks, watering plants
- **Hook overlay:** “The watering test I do before every scan.”
- **Shotlist:** finger soil test, dry/wet comparison, scan, care reminder setup.
- **CTA overlay:** “Try this before watering.”
- **Caption:** Simple test first. Then scan if something still looks off.
- **Hashtags:** `#planthacks #wateringplants #plantcaretips #greenlens #planttok`
- **Length:** 15-20 sec
### Video 17 — Plant Store Scan
- **Keyword pattern:** plant identification, plant shopping
- **Hook overlay:** “Scanning plants before I buy them.”
- **Shotlist:** nursery/store shelf, scan plant tag/plant, show care difficulty, put plant in cart or back.
- **CTA overlay:** “Scan before you buy.”
- **Caption:** I do not buy mystery care problems anymore.
- **Hashtags:** `#plantshopping #plantid #greenlens #plantparent #houseplants`
- **Length:** 18-25 sec
### Video 18 — Toxic To Pets Check
- **Keyword pattern:** plant identification, houseplant tips
- **Hook overlay:** “If you have pets, scan your plants.”
- **Shotlist:** plant near floor, pet bowl/toy in frame, scan, show toxicity info if available.
- **CTA overlay:** “Send to a pet parent.”
- **Caption:** Pretty plants still need a safety check.
- **Hashtags:** `#toxicplants #petfriendlyplants #plantid #greenlens #houseplants`
- **Length:** 18-25 sec
### Video 19 — 30 Day Rescue Start
- **Keyword pattern:** plant growth timelapse, save dying plant
- **Hook overlay:** “Day 1 of letting GreenLens guide this rescue.”
- **Shotlist:** sick plant, scan, first care action, calendar day 1 marker.
- **CTA overlay:** “Follow for day 7.”
- **Caption:** No random fixes. One plant, one rescue plan, 30 days.
- **Hashtags:** `#plantrescue #plantgrowth #dyingplant #greenlens #planttok`
- **Length:** 20-30 sec
### Video 20 — The Calm Plant Routine
- **Keyword pattern:** saturday morning plant care, plant care routine
- **Hook overlay:** “Saturday morning plant care, but smarter.”
- **Shotlist:** coffee, window light, plant shelf, scan one plant, water only what needs it.
- **CTA overlay:** “Save for your weekend routine.”
- **Caption:** Aesthetic plant care is better when it is not random.
- **Hashtags:** `#plantcareroutine #planttok #houseplants #greenlens #plantparent`
- **Length:** 17-25 sec
### Video 21 — Google Said Five Things
- **Keyword pattern:** plant help, plant care tips
- **Hook overlay:** “Google gave me 5 answers. GreenLens gave me a starting point.”
- **Shotlist:** search results, confused hand gesture, scan, one suggested next step.
- **CTA overlay:** “Start with diagnosis.”
- **Caption:** The internet is loud. Your plant needs context.
- **Hashtags:** `#planthelp #plantdiagnosis #greenlens #plantcare #houseplants`
- **Length:** 16-22 sec
### Video 22 — Guess The Symptom
- **Keyword pattern:** comment bait, plant problems
- **Hook overlay:** “Would you water this plant?”
- **Shotlist:** show drooping plant only for 3 sec, pause, reveal soil, scan, result.
- **CTA overlay:** “Comment YES or NO before reveal.”
- **Caption:** Most people answer too fast.
- **Hashtags:** `#plantquiz #planttok #planthelp #greenlens #wateringplants`
- **Length:** 18-24 sec
### Video 23 — The Plant Was Not Dead
- **Keyword pattern:** save dying plant, plant revival
- **Hook overlay:** “I almost threw this away.”
- **Shotlist:** sad bare plant, scan/care step, new growth close-up from later footage.
- **CTA overlay:** “Never give up before checking.”
- **Caption:** Sometimes the roots still have a chance.
- **Hashtags:** `#plantrevival #dyingplant #greenlens #plantrescue #planttok`
- **Length:** 20-28 sec
### Video 24 — Scan Result Made Me Put The Water Down
- **Keyword pattern:** overwatering, plant watering mistakes
- **Hook overlay:** “GreenLens made me put the watering can down.”
- **Shotlist:** watering can over plant, phone scan, result suggests not watering, hand removes can.
- **CTA overlay:** “Scan before you pour.”
- **Caption:** Sometimes the best care move is doing less.
- **Hashtags:** `#overwatering #plantmistakes #greenlens #plantcaretips #houseplants`
- **Length:** 10-16 sec
### Video 25 — Mystery Plant From A Friend
- **Keyword pattern:** plant identification
- **Hook overlay:** “My friend gave me this. No label.”
- **Shotlist:** unlabeled plant, scan, identity reveal, care difficulty shown.
- **CTA overlay:** “Comment if you have a mystery plant.”
- **Caption:** Mystery plant solved in seconds.
- **Hashtags:** `#plantidentification #mysteryplant #greenlens #plantapp #planttok`
- **Length:** 15-22 sec
### Video 26 — Monstera Check
- **Keyword pattern:** monstera care
- **Hook overlay:** “My Monstera looked fine, but something was off.”
- **Shotlist:** Monstera beauty shot, close-up flaw, scan, light/soil care step.
- **CTA overlay:** “Scan your Monstera today.”
- **Caption:** Big plants hide small warning signs well.
- **Hashtags:** `#monsteracare #monstera #greenlens #plantdiagnosis #planttok`
- **Length:** 18-25 sec
### Video 27 — Pothos Rescue
- **Keyword pattern:** pothos care
- **Hook overlay:** “Pothos are easy until they are not.”
- **Shotlist:** trailing pothos, yellow/brown leaf close-up, scan, cut/remove/adjust step.
- **CTA overlay:** “Save for your Pothos.”
- **Caption:** Easy plants still need the right context.
- **Hashtags:** `#pothoscare #pothos #planttips #greenlens #houseplants`
- **Length:** 18-24 sec
### Video 28 — Plant Hack Test
- **Keyword pattern:** plant hacks
- **Hook overlay:** “Testing a viral plant hack with GreenLens.”
- **Shotlist:** show hack setup, scan plant needs, decide whether hack fits or not.
- **CTA overlay:** “Should I test another hack?”
- **Caption:** Not every hack belongs on every plant.
- **Hashtags:** `#planthacks #planttok #greenlens #plantcaretips #houseplants`
- **Length:** 20-30 sec
### Video 29 — One Minute Plant ER
- **Keyword pattern:** plant disease, plant help
- **Hook overlay:** “One minute plant ER: what I check first.”
- **Shotlist:** timer starts, leaves, soil, pot, pests, GreenLens scan, next step.
- **CTA overlay:** “Comment your plant emergency.”
- **Caption:** Fast triage beats random fixes.
- **Hashtags:** `#plantER #planthelp #plantdisease #greenlens #planttok`
- **Length:** 30-45 sec
### Video 30 — The Core Brand Video
- **Keyword pattern:** plant parent, plant app, plant care
- **Hook overlay:** “Who said you had to guess what your plant needs?”
- **Shotlist:** sick plant, hand hovering over water/fertilizer/repot tools, stop, scan with GreenLens, simple care plan, plant in better light.
- **CTA overlay:** “GreenLens Pro: scan before you guess.”
- **Caption:** Your plant is giving signals. GreenLens helps you understand where to start.
- **Hashtags:** `#greenlens #plantapp #plantparent #plantcare #planttok #houseplants`
- **Length:** 20-30 sec

View File

@@ -0,0 +1,99 @@
# GreenLens TikTok — 5-Day Execution Plan
## Day 1
- **Title:** Your Plant Is Not Dying Suddenly
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** Your plant is not dying suddenly.
- **CTA:** Save this before you water again.
- **Caption:** Most houseplants do not crash overnight. The early signs are usually there, but people misread them and react too fast. This slideshow reframes the problem so beginners stop guessing and start observing with more clarity.
- **Hashtags:** `#planttok #houseplants #plantcare #plantdiagnosis #urbanjungle #greenlens #planthelp`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm hero slide with elegant leaf shadows and premium paper textures. Include the GreenLens mascot character in the lower third of the frame — a cheerful anthropomorphized DSLR camera with a round green lens as its face, big expressive cartoon eyes and a wide smile, a fresh green leaf sprouting from the top of the camera body, short stubby arms giving a thumbs-up gesture, and small legs wearing bright green sneakers. The mascot is rendered in a clean cartoon illustration style, green and black color palette, friendly and playful. Place it at the lower edge of the composition so it does not compete with the centered text — mascot presence adds brand personality without breaking editorial hierarchy. Add large clean overlay text: "Your plant is not dying suddenly." Add smaller subtext: "You are missing the early warning signs." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: stressed indoor plant with soft yellowing leaves in natural window light. Add large clean overlay text: "The signs usually start small." Add smaller subtext: "A few leaves change before the whole plant declines." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: close crop of drooping leaves and slightly wet soil in a clean editorial frame. Add large clean overlay text: "Most people react too fast." Add smaller subtext: "They treat the symptom, not the cause." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual botanical layout showing symptom cards versus root-cause cards. Add large clean overlay text: "Symptom is not the diagnosis." Add smaller subtext: "Yellow, drooping, or brown does not mean one answer." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: refined checklist composition with leaf, pot, soil, and light cues. Add large clean overlay text: "Check this first." Add smaller subtext: "Light. Water. Soil. Pests." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm, premium plant triage mood with elegant negative space. Add large clean overlay text: "Do not guess." Add smaller subtext: "Observe before you react." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: high-end closing frame with strong editorial balance and subtle GreenLens energy. Include the GreenLens Pro mascot in the lower third of the frame — the cheerful anthropomorphized DSLR camera with round green lens face, big cartoon eyes and smile, green leaf on top, thumbs-up arm gesture, and green sneakers, WITH the full "GreenLens Pro" logo badge displayed beneath it: "GreenLens" in bold green cartoon lettering and "Pro" in a red pill-shaped badge. This is the branded closing version of the mascot. Place it at the lower edge so it anchors the slide as a brand sign-off without competing with the centered text. Add large clean overlay text: "Save this before you water again." Add smaller subtext: "You will need it the next time a plant looks off." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
---
## Day 2
- **Title:** Drooping Does Not Always Mean Thirst
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** Drooping does not always mean thirst.
- **CTA:** Follow for more plant ER myths.
- **Caption:** Drooping leaves trigger panic, and panic usually leads to the wrong fix. This slideshow teaches people that overwatering, root stress, and poor drainage can look like thirst at first glance.
- **Hashtags:** `#planttok #plantmyths #houseplanthelp #wateringplants #plantcaretips #greenlens #plantrescue`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: drooping plant centered in a minimalist herbarium composition. Include the GreenLens mascot character in the lower third of the frame — a cheerful anthropomorphized DSLR camera with a round green lens as its face, big expressive cartoon eyes and a wide smile, a fresh green leaf sprouting from the top of the camera body, short stubby arms giving a thumbs-up gesture, and small legs wearing bright green sneakers. The mascot is rendered in a clean cartoon illustration style, green and black color palette, friendly and playful. Place it at the lower edge of the composition so it does not compete with the centered text — mascot presence adds brand personality without breaking editorial hierarchy. Add large clean overlay text: "Drooping does not always mean thirst." Add smaller subtext: "That is the trap." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: sad-looking plant beside a watering can, clean editorial tension. Add large clean overlay text: "It looks dry." Add smaller subtext: "But looks can be misleading." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: rich dark soil and stressed roots suggested through elegant macro details. Add large clean overlay text: "Too much water can look the same." Add smaller subtext: "Root stress can mimic thirst." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: split concept of underwatering versus overwatering with subtle botanical imagery. Add large clean overlay text: "Same symptom. Different cause." Add smaller subtext: "That is why guessing fails." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: bright, clean checklist slide with leaf, soil, and pot drainage cues. Add large clean overlay text: "Check before you water." Add smaller subtext: "Soil moisture. Pot drainage. Root smell." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm authority slide with elegant paper textures. Add large clean overlay text: "More water is not always help." Add smaller subtext: "Sometimes it makes the problem worse." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished closing slide with subtle botanical forms. Include the GreenLens Pro mascot in the lower third of the frame — the cheerful anthropomorphized DSLR camera with round green lens face, big cartoon eyes and smile, green leaf on top, thumbs-up arm gesture, and green sneakers, WITH the full "GreenLens Pro" logo badge displayed beneath it: "GreenLens" in bold green cartoon lettering and "Pro" in a red pill-shaped badge. This is the branded closing version of the mascot. Place it at the lower edge so it anchors the slide as a brand sign-off without competing with the centered text. Add large clean overlay text: "Follow for more plant ER myths." Add smaller subtext: "Learn the warning signs before you react." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
---
## Day 3
- **Title:** I Almost Killed This Plant By Trying To Help It
- **Pillar:** Storytelling
- **Slides:** 9
- **Hook:** I almost killed this plant by trying to help it.
- **CTA:** Comment "help" for more rescue stories.
- **Caption:** This is a rescue story about reacting too fast, trusting the wrong assumption, and learning why symptoms are not enough. It humanizes the brand while still teaching the diagnostic mindset behind GreenLens.
- **Hashtags:** `#planttok #plantstory #plantrescue #houseplants #beginnerplants #greenlens #plantmistakes`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: dramatic but clean editorial opener with a struggling plant in soft natural light. Include the GreenLens mascot character in the lower third of the frame — a cheerful anthropomorphized DSLR camera with a round green lens as its face, big expressive cartoon eyes and a wide smile, a fresh green leaf sprouting from the top of the camera body, short stubby arms giving a thumbs-up gesture, and small legs wearing bright green sneakers. The mascot is rendered in a clean cartoon illustration style, green and black color palette, friendly and playful. Place it at the lower edge of the composition so it does not compete with the centered text — mascot presence adds brand personality without breaking editorial hierarchy. Add large clean overlay text: "I almost killed this plant by trying to help it." Add smaller subtext: "And I thought I was doing the right thing." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: plant starting to droop with a few damaged leaves, high-end magazine framing. Add large clean overlay text: "It started with a small warning sign." Add smaller subtext: "Nothing looked urgent yet." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: closer view of the same plant looking more stressed. Add large clean overlay text: "I assumed it was thirsty." Add smaller subtext: "That was my first mistake." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: watering action shown in a tasteful editorial way, not busy. Add large clean overlay text: "So I watered it more." Add smaller subtext: "And the plant got worse." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: visual shift toward tension and decline with darker soil detail. Add large clean overlay text: "The symptom was real." Add smaller subtext: "The diagnosis was wrong." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual root-cause slide with botanical cards and layered paper textures. Add large clean overlay text: "It was root stress, not thirst." Add smaller subtext: "I treated the wrong problem." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm recovery mood with restored balance and elegant whitespace. Add large clean overlay text: "That changed how I look at plants." Add smaller subtext: "Now I diagnose before I react." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 8:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium educational summary slide with clean botanical cues. Add large clean overlay text: "This is the real lesson." Add smaller subtext: "Symptoms need context." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 9:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: polished close with strong editorial hierarchy. Include the GreenLens Pro mascot in the lower third of the frame — the cheerful anthropomorphized DSLR camera with round green lens face, big cartoon eyes and smile, green leaf on top, thumbs-up arm gesture, and green sneakers, WITH the full "GreenLens Pro" logo badge displayed beneath it: "GreenLens" in bold green cartoon lettering and "Pro" in a red pill-shaped badge. This is the branded closing version of the mascot. Place it at the lower edge so it anchors the slide as a brand sign-off without competing with the centered text. Add large clean overlay text: "Comment 'help' for more rescue stories." Add smaller subtext: "I will break down more real plant mistakes." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
---
## Day 4
- **Title:** Check This First
- **Pillar:** Educational
- **Slides:** 7
- **Hook:** Check this first: light, water, soil, pests.
- **CTA:** Save this checklist.
- **Caption:** This is the core triage flow for people in a dying-plant moment. It turns panic into a usable order of operations and trains your audience to think in the same sequence GreenLens uses.
- **Hashtags:** `#planttok #plantchecklist #houseplantcare #planttriage #planttips #greenlens #plantclinic`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: clean hero slide with subtle leaf collage and premium paper layering. Include the GreenLens mascot character in the lower third of the frame — a cheerful anthropomorphized DSLR camera with a round green lens as its face, big expressive cartoon eyes and a wide smile, a fresh green leaf sprouting from the top of the camera body, short stubby arms giving a thumbs-up gesture, and small legs wearing bright green sneakers. The mascot is rendered in a clean cartoon illustration style, green and black color palette, friendly and playful. Place it at the lower edge of the composition so it does not compete with the centered text — mascot presence adds brand personality without breaking editorial hierarchy. Add large clean overlay text: "Check this first." Add smaller subtext: "Light. Water. Soil. Pests." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant plant near window with soft directional light. Add large clean overlay text: "Step 1: Light." Add smaller subtext: "Has anything changed recently?" Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: moist soil and pot shown with calm, premium framing. Add large clean overlay text: "Step 2: Water." Add smaller subtext: "Do not assume. Check the soil." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: close-up of soil texture and pot drainage. Add large clean overlay text: "Step 3: Soil." Add smaller subtext: "Compaction and drainage matter." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: tasteful macro view of leaf underside and pest inspection. Add large clean overlay text: "Step 4: Pests." Add smaller subtext: "Always inspect the hidden areas." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 6:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: summary slide with four elegant specimen cards. Add large clean overlay text: "This order saves time." Add smaller subtext: "And prevents bad guesses." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 7:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: premium closing frame with calm call-to-action. Include the GreenLens Pro mascot in the lower third of the frame — the cheerful anthropomorphized DSLR camera with round green lens face, big cartoon eyes and smile, green leaf on top, thumbs-up arm gesture, and green sneakers, WITH the full "GreenLens Pro" logo badge displayed beneath it: "GreenLens" in bold green cartoon lettering and "Pro" in a red pill-shaped badge. This is the branded closing version of the mascot. Place it at the lower edge so it anchors the slide as a brand sign-off without competing with the centered text. Add large clean overlay text: "Save this checklist." Add smaller subtext: "Use it next time a plant looks wrong." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
---
## Day 5
- **Title:** Yellow Leaves Are Not The Diagnosis
- **Pillar:** Educational
- **Slides:** 5
- **Hook:** Yellow leaves are not the diagnosis.
- **CTA:** Save this for later.
- **Caption:** Yellow leaves can mean several different things depending on pattern, age, soil, light, and timing. This post is designed to stop the audience from treating one symptom like a full answer.
- **Hashtags:** `#yellowleaves #planttok #planthelp #houseplants #plantdiagnosis #greenlens #plantcare`
- **Slide Prompt Sequence:**
- `Slide 1:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: framed yellow leaf specimen on textured cream paper. Include the GreenLens mascot character in the lower third of the frame — a cheerful anthropomorphized DSLR camera with a round green lens as its face, big expressive cartoon eyes and a wide smile, a fresh green leaf sprouting from the top of the camera body, short stubby arms giving a thumbs-up gesture, and small legs wearing bright green sneakers. The mascot is rendered in a clean cartoon illustration style, green and black color palette, friendly and playful. Place it at the lower edge of the composition so it does not compete with the centered text — mascot presence adds brand personality without breaking editorial hierarchy. Add large clean overlay text: "Yellow leaves are not the diagnosis." Add smaller subtext: "They are just the signal." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 2:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: elegant layout of one yellow leaf among healthy foliage. Add large clean overlay text: "One symptom can mean many things." Add smaller subtext: "Water, roots, light, age, or stress." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 3:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: conceptual comparison of different yellowing patterns. Add large clean overlay text: "Pattern matters." Add smaller subtext: "Where and how the yellowing appears changes the story." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 4:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: calm checklist scene with leaves, soil, and window light. Add large clean overlay text: "Look at context first." Add smaller subtext: "Do not fix color. Find the cause." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.
- `Slide 5:` Create a premium botanical editorial slide in vertical 9:16. Use the exact GreenLens Botanical Archive design system: digital herbarium aesthetic, high-end editorial archive mood, soft sand background #fbfaf0, layered stone-paper surfaces #f5f4ea and #e4e3d9, deep forest green accents #204e2b and #386641, tertiary earth details only when useful, tactile paper texture, subtle lithography feel, natural daylight, tonal depth instead of borders, no hard divider lines, no clutter, no generic app UI, no harsh shadows, premium magazine composition with centered text and generous whitespace. Scene: high-end closing frame with clean typography. Include the GreenLens Pro mascot in the lower third of the frame — the cheerful anthropomorphized DSLR camera with round green lens face, big cartoon eyes and smile, green leaf on top, thumbs-up arm gesture, and green sneakers, WITH the full "GreenLens Pro" logo badge displayed beneath it: "GreenLens" in bold green cartoon lettering and "Pro" in a red pill-shaped badge. This is the branded closing version of the mascot. Place it at the lower edge so it anchors the slide as a brand sign-off without competing with the centered text. Add large clean overlay text: "Save this for later." Add smaller subtext: "You will need it when yellow leaves show up." Text style: bold, modern, minimal, high contrast, polished editorial layout with strong editorial hierarchy inspired by Plus Jakarta Sans headlines and Manrope body copy. Text placement: centered, never top-heavy, with balanced spacing, generous safe margins, and a consistent premium botanical magazine feel. Final requirement: the text must stay exactly in the middle.

27127
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,79 +1,80 @@
{
"name": "greenlens",
"version": "2.1.4",
"main": "expo-router/entry",
"private": true,
"scripts": {
"start": "expo start --offline",
"android": "expo start --android --offline",
"ios": "expo start --ios --offline",
"web": "expo start --web --offline",
"build:dev": "eas build --profile development --platform android",
"build:preview": "eas build --profile preview --platform android",
"build:prod": "eas build --profile production --platform android",
"test": "jest",
"audit:semantic": "node scripts/generate_semantic_audit.js"
},
"jest": {
"preset": "jest-expo",
"transformIgnorePatterns": [
"node_modules/(?!((jest-)?react-native|@react-native(-community)?)|expo(nent)?|@expo(nent)?/.*|@expo-google-fonts/.*|react-navigation|@react-navigation/.*|@sentry/react-native|native-base|react-native-svg)"
],
"setupFiles": [
"./jest.setup.js"
]
},
"dependencies": {
"@expo/vector-icons": "^15.0.3",
"@google/genai": "^1.38.0",
"@react-native-async-storage/async-storage": "2.2.0",
"expo": "^54.0.33",
"expo-application": "~7.0.8",
"expo-asset": "~12.0.12",
"expo-av": "^16.0.8",
"expo-blur": "~15.0.8",
"expo-build-properties": "^55.0.9",
"expo-camera": "~17.0.10",
"expo-constants": "~18.0.13",
"expo-dev-client": "~6.0.20",
"expo-device": "~8.0.10",
"expo-file-system": "~19.0.21",
"expo-font": "~14.0.11",
"expo-haptics": "~15.0.8",
"expo-image-manipulator": "~14.0.8",
"expo-image-picker": "~17.0.10",
"expo-linking": "~8.0.11",
"expo-localization": "~17.0.8",
"expo-notifications": "~0.32.16",
"expo-router": "~6.0.23",
"expo-secure-store": "~15.0.8",
"expo-splash-screen": "~31.0.13",
"expo-sqlite": "~16.0.10",
"expo-status-bar": "~3.0.9",
"expo-updates": "~29.0.16",
"expo-video": "~3.0.16",
"posthog-react-native": "^4.37.1",
"react": "19.1.0",
"react-dom": "19.1.0",
"react-native": "0.81.5",
"react-native-gesture-handler": "~2.28.0",
"react-native-purchases": "^9.10.5",
"react-native-purchases-ui": "^9.10.5",
"react-native-reanimated": "~4.1.1",
"react-native-safe-area-context": "~5.6.0",
"react-native-screens": "~4.16.0",
"react-native-svg": "^15.12.1",
"react-native-web": "^0.21.2",
"react-native-worklets": "0.5.1"
},
"devDependencies": {
"@babel/core": "^7.25.0",
"@testing-library/jest-native": "^5.4.3",
"@testing-library/react-native": "^13.3.3",
"@types/jest": "^29.5.14",
"@types/react": "~19.1.0",
"jest": "^29.7.0",
"jest-expo": "^54.0.17",
"typescript": "^5.3.0"
}
}
{
"name": "greenlens",
"version": "2.2.3",
"main": "expo-router/entry",
"private": true,
"scripts": {
"start": "expo start --offline",
"android": "expo start --android --offline",
"ios": "expo start --ios --offline",
"web": "expo start --web --offline",
"build:dev": "eas build --profile development --platform android",
"build:preview": "eas build --profile preview --platform android",
"build:prod": "eas build --profile production --platform android",
"test": "jest",
"audit:semantic": "node scripts/generate_semantic_audit.js"
},
"jest": {
"preset": "jest-expo",
"transformIgnorePatterns": [
"node_modules/(?!((jest-)?react-native|@react-native(-community)?)|expo(nent)?|@expo(nent)?/.*|@expo-google-fonts/.*|react-navigation|@react-navigation/.*|@sentry/react-native|native-base|react-native-svg)"
],
"setupFiles": [
"./jest.setup.js"
]
},
"dependencies": {
"@expo/vector-icons": "^15.0.3",
"@google/genai": "^1.38.0",
"@react-native-async-storage/async-storage": "2.2.0",
"expo": "^54.0.33",
"expo-apple-authentication": "~8.0.8",
"expo-application": "~7.0.8",
"expo-asset": "~12.0.12",
"expo-av": "^16.0.8",
"expo-blur": "~15.0.8",
"expo-build-properties": "^55.0.9",
"expo-camera": "~17.0.10",
"expo-constants": "~18.0.13",
"expo-dev-client": "~6.0.20",
"expo-device": "~8.0.10",
"expo-file-system": "~19.0.21",
"expo-font": "~14.0.11",
"expo-haptics": "~15.0.8",
"expo-image-manipulator": "~14.0.8",
"expo-image-picker": "~17.0.10",
"expo-linking": "~8.0.11",
"expo-localization": "~17.0.8",
"expo-notifications": "~0.32.16",
"expo-router": "~6.0.23",
"expo-secure-store": "~15.0.8",
"expo-splash-screen": "~31.0.13",
"expo-sqlite": "~16.0.10",
"expo-status-bar": "~3.0.9",
"expo-updates": "~29.0.16",
"expo-video": "~3.0.16",
"posthog-react-native": "^4.37.1",
"react": "19.1.0",
"react-dom": "19.1.0",
"react-native": "0.81.5",
"react-native-gesture-handler": "~2.28.0",
"react-native-purchases": "^9.10.5",
"react-native-purchases-ui": "^9.10.5",
"react-native-reanimated": "~4.1.1",
"react-native-safe-area-context": "~5.6.0",
"react-native-screens": "~4.16.0",
"react-native-svg": "^15.12.1",
"react-native-web": "^0.21.2",
"react-native-worklets": "0.5.1"
},
"devDependencies": {
"@babel/core": "^7.25.0",
"@testing-library/jest-native": "^5.4.3",
"@testing-library/react-native": "^13.3.3",
"@types/jest": "^29.5.14",
"@types/react": "~19.1.0",
"jest": "^29.7.0",
"jest-expo": "^54.0.17",
"typescript": "^5.3.0"
}
}

428
plan-april.md Normal file
View File

@@ -0,0 +1,428 @@
# SEO-Plan für GreenLens Pro — April 2026
## Produkt-Positionierung
> **GreenLens Pro = AI Plant Diagnosis Hub für kranke Pflanzen**
Nicht generische Pflanzenpflege-App, sondern:
> Scan your plant, identify the problem, and learn how to save it.
Drei Suchintentionen, die GreenLens Pro bedient:
1. Ich will wissen, welche Pflanze das ist.
2. Meine Pflanze sieht krank aus.
3. Ich will wissen, was ich jetzt tun muss.
---
## Keyword-Datenquelle
Alle Keyword-Daten stammen aus dem Google Keyword Planner. Datei: `google-ads-keywords.md`
Highlights aus den Daten:
| Keyword | Suchvolumen | Trend | CPC (oberer Bereich) |
|---|---|---|---|
| plant disease identifier | 1.000 10.000 | +900% | 3,04 € |
| identify plant disease | 1.000 10.000 | +900% | 3,04 € |
| plant disease identification | 1.000 10.000 | +900% | 3,04 € |
| plant doctor app | 1.000 10.000 | 0% | 4,16 € |
| free plant id app | 10.000 100.000 | +900% | 1,25 € |
| plant health app | 1.000 10.000 | 0% | 4,72 € |
| why are my plant leaves yellow | 100 1.000 | 0% | 2,37 € |
| how to revive a dying plant | 1.000 10.000 | 0% | 2,74 € |
| pflanzen erkennen | 10.000 100.000 | 0% | 0,61 € |
| pflanze erkennen app | 1.000 10.000 | 0% | 0,73 € |
| pflanzenkrankheit erkennen | 100 1.000 | 0% | 0,89 € |
| plant pest identification | 100 1.000 | 0% | 2,68 € |
---
## Kernstrategie
**Nicht** 50 allgemeine Plant-Care-Seiten bauen.
Stattdessen:
> **20 extrem starke Diagnose-/Symptom-Seiten, intern brutal sauber verlinkt, GreenLens Pro als AI Plant Diagnosis Tool positionieren.**
Vorteil gegenüber PictureThis, Plant Parent, Plantum:
- Die haben keine "Why are my leaves yellow?"-Seiten.
- Die bieten keine Symptom-Navigator-Seiten.
- GreenLens Pro kann als "Plant ER" / "Plant Doctor" positioniert werden — nicht als Pflanzenlexikon.
---
## Differenzierung gegen Wettbewerber
| Wettbewerber | GreenLens Pro |
|---|---|
| PictureThis — breites Plant ID | GreenLens — fokus auf kranke Pflanzen |
| Plant Parent — Care-Ratgeber | GreenLens — AI-Diagnose + Handlungsanleitung |
| Plantum — zu viele Tasks für Anfänger | GreenLens — Calm UX, klare nächste Schritte |
| iNaturalist — Citizen Science | GreenLens — Eigenen Pflanzen, akute Probleme |
---
## Sprint 1 — 3 Seiten (jetzt)
### 1. `/plant-disease-identifier`
**Focus Keyword:** plant disease identifier
**Page Title:** Plant Disease Identifier App | Scan Sick Plants With AI
**Meta Description:** Scan your plant with GreenLens Pro to identify possible plant diseases, yellow leaves, brown spots, and pests. Get instant AI diagnosis and clear next steps.
**H1:** Plant Disease Identifier App
**Secondary Keywords:**
- plant disease identification
- identify plant disease
- plant problem identifier
- plant sickness identifier
- plant doctor app
- plant health app
**Content-Struktur:**
- What is a plant disease identifier?
- Common signs of a sick plant (yellow leaves, brown spots, wilting, sticky leaves, pests)
- How GreenLens Pro diagnoses plant problems
- Plant disease identifier vs plant identifier
- When should you scan your plant?
- FAQ
- CTA: Scan your plant with GreenLens Pro
**Interne Links:**
- `/why-are-my-plant-leaves-yellow`
- `/plant-doctor-app`
---
### 2. `/why-are-my-plant-leaves-yellow`
**Focus Keyword:** why are my plant leaves yellow
**Page Title:** Why Are My Plant Leaves Yellow? Causes & What To Do
**Meta Description:** Yellow leaves can mean overwatering, underwatering, pests, or nutrient issues. GreenLens Pro helps you identify the cause and know what to do next.
**H1:** Why Are My Plant Leaves Yellow?
**Secondary Keywords:**
- yellow leaves plant
- plant leaves turning yellow
- overwatering yellow leaves
- underwatering yellow leaves
- plant disease identifier
- plant doctor app
**Content-Struktur:**
- Introduction: Why this page exists
- H2: Overwatering — too much water can drown roots
- H2: Underwatering — stress from lack of moisture
- H2: Too little light — plants can't photosynthesize
- H2: Root problems — compacted or rotting roots
- H2: Nutrient deficiency — nitrogen, iron, magnesium
- H2: Pest stress — sap-sucking insects cause yellowing
- H2: Natural aging — lower leaves yellow and drop
- H2: Temperature stress — cold or heat shock
- H2: When to scan your plant with GreenLens Pro
- FAQ (Kannibalisierte Keywords als FAQ)
- CTA: Scan yellow leaves with GreenLens Pro
**Interne Links:**
- `/plant-disease-identifier`
- `/plant-doctor-app`
---
### 3. `/plant-doctor-app`
**Focus Keyword:** plant doctor app
**Page Title:** Plant Doctor App | Diagnose Sick Houseplants With AI
**Meta Description:** GreenLens Pro acts as your AI plant doctor. Scan your plant, identify symptoms, and get clear guidance on what to do next.
**H1:** Plant Doctor App for Sick Houseplants
**Secondary Keywords:**
- diagnose sick plant
- plant health check
- plant disease identifier
- plant problem identifier
- plant rescue app
**Content-Struktur:**
- What is a plant doctor app?
- How GreenLens Pro works as your plant doctor
- Common plant problems GreenLens Pro can detect
- Plant doctor app vs Google Lens
- Why scan before you guess?
- FAQ
- CTA: Use GreenLens Pro as your AI plant doctor
**Interne Links:**
- `/plant-disease-identifier`
- `/why-are-my-plant-leaves-yellow`
---
## Sprint 2 — Erst nach Volumen-Check
Diese Seiten erst validieren, bevor sie gebaut werden:
| URL | Keyword | Status |
|---|---|---|
| `/plant-pest-identification` | plant pest identification | ✅ Hat Daten im Planner |
| `/brown-spots-on-plant-leaves` | brown spots on plant leaves | ❌ Noch prüfen |
| `/plant-leaves-curling` | plant leaves curling | ❌ Noch prüfen |
| `/plant-wilting` | plant wilting | ❌ Noch prüfen |
| `/sticky-leaves-on-plants` | sticky leaves on plants | ❌ Noch prüfen |
| `/overwatered-plant` | overwatered plant | ❌ Noch prüfen |
| `/underwatered-plant` | underwatered plant | ❌ Noch prüfen |
| `/plant-root-rot` | plant root rot | ❌ Noch prüfen |
**Nächster sicherer Kandidat:** `/plant-pest-identification`
---
## Sprint 3 — Hub-Seite (nach 58 validierten Seiten)
### `/plant-problems`
**Page Title:** Plant Problems: Identify Sick Plant Symptoms With AI
**Meta Description:** Identify common plant problems like yellow leaves, brown spots, pests, wilting, and weak growth. Scan your plant with GreenLens Pro before guessing.
**H1:** Plant Problems: Identify Sick Plant Symptoms
**CTA:** Scan Your Plant Problem
**Aufbau — Diagnose-Navigator:**
```
What does your plant look like?
[ ] Yellow leaves → /why-are-my-plant-leaves-yellow
[ ] Brown spots → /brown-spots-on-plant-leaves
[ ] Drooping / Wilting → /plant-wilting
[ ] Sticky leaves → /sticky-leaves-on-plants
[ ] Curling leaves → /plant-leaves-curling
[ ] Visible pests → /plant-pest-identification
[ ] Weak growth → /plant-problems
[ ] Dying plant → /how-to-revive-a-dying-plant
```
---
## Sprint 4 — Free / Identifier Pages
Diese Seiten brauchen eine klare Free-vs-Paid-Sektion:
| URL | Focus Keyword | Hinweis |
|---|---|---|
| `/plant-identifier-app` | plant identifier app | Breiter Traffic |
| `/identify-plant-by-photo` | identify plant by photo | Sehr guter App-Fit |
| `/free-plant-id-app` | free plant id app | **Muss Free-vs-Paid-Sektion enthalten** |
| `/best-plant-identification-app` | best plant identification app | Vergleichs-/Commercial Intent |
| `/plant-scanner-app` | plant scanner app | App-Nutzung erklären |
### Pflichtsektion für `/free-plant-id-app`
**H2:** What Can You Do for Free With GreenLens Pro?
> GreenLens Pro helps plant owners identify plants and understand possible plant problems. Free features may include basic plant scanning or limited plant identification, while advanced diagnosis, detailed care guidance, or premium plant health features may require GreenLens Pro access. The goal: you know what is included before you start.
**Wichtig:** Nur schreiben, was wirklich im Free-Tier stimmt. Sonst Bounce + Vertrauensverlust.
---
## Sprint 5 — DACH Pages
**Richtung:** Diagnose-First, nicht generisches Pflanzenpflege.
| Priorität | URL | Focus Keyword | Warum |
|---|---|---|---|
| 1 | `/de/pflanzenkrankheit-erkennen` | pflanzenkrankheit erkennen | Diagnose-Differenzierung |
| 2 | `/de/pflanzendoktor-app` | pflanzendoktor app | App-Positionierung DE |
| 3 | `/de/kranke-pflanze-retten` | kranke pflanze retten | Rescue-Intent DE |
| 4 | `/de/pflanzen-erkennen` | pflanzen erkennen | Breites Volumen (10k100k) |
| 5 | `/de/pflanzen-erkennen-app-kostenlos` | pflanzen erkennen app kostenlos | Free-Intent DE |
---
## Seiten, die nach hinten verschoben werden
Diese Seiten NICHT löschen — nur später planen:
- `/pothos-care`
- `/pothos-plant-care`
- `/golden-pothos-care`
- `/monstera-care-tips`
- `/fiddle-leaf-fig-problems`
- `/orchid-care-app`
- `/succulent-care-app`
**Warum:** Die SERPs sind von Gartenblogs und Pinterest dominiert. Besser ranken mit Plant-Diagnose-Keywords, wenn die Domain Authority da ist.
---
## Interne Linkstruktur
```text
/
├── plant-disease-identifier
│ ├── why-are-my-plant-leaves-yellow
│ └── plant-doctor-app
├── why-are-my-plant-leaves-yellow
│ ├── plant-disease-identifier
│ └── plant-doctor-app
├── plant-doctor-app
│ ├── plant-disease-identifier
│ └── why-are-my-plant-leaves-yellow
└── Später: plant-problems (Hub)
├── why-are-my-plant-leaves-yellow
├── plant-pest-identification
├── plant-wilting
└── ...weitere Symptom-Seiten
```
---
## Seitenarchitektur
```text
/
├── plant-disease-identifier
├── why-are-my-plant-leaves-yellow
├── plant-doctor-app
├── plant-problems (Hub, Sprint 3)
│ ├── plant-pest-identification
│ ├── brown-spots-on-plant-leaves
│ ├── plant-leaves-curling
│ ├── plant-wilting
│ ├── sticky-leaves-on-plants
│ ├── overwatered-plant
│ ├── underwatered-plant
│ ├── plant-root-rot
│ └── how-to-revive-a-dying-plant
├── plant-identifier-app
├── identify-plant-by-photo
├── free-plant-id-app
├── best-plant-identification-app
├── plant-scanner-app
└── de
├── pflanzenkrankheit-erkennen
├── pflanzendoktor-app
├── kranke-pflanze-retten
├── pflanzen-erkennen
└── pflanzen-erkennen-app-kostenlos
```
---
## Content-Template für jede SEO-Seite
Für jede Seite dieses Muster verwenden:
1. **H1** — Focus Keyword direkt im Heading
2. **Intro** — Problem kurz lösen, dann CTA einbauen
3. **H2** — Section mit erklärendem Keyword-Content
4. **H3** — Tiefe Details (Subsections)
5. **Interne Links** — Zu relevanten anderen Seiten
6. **FAQ** — Keywords aus dem Planner als Questions verwenden
7. **CTA** — Scan your plant with GreenLens Pro
### Beispiel: `/plant-disease-identifier`
- H1: Plant Disease Identifier App
- H2: What is a plant disease identifier?
- H2: Common signs of a sick plant
- H3: Yellow leaves
- H3: Brown spots
- H3: Wilting leaves
- H3: Sticky leaves
- H3: Pests
- H3: Root stress
- H2: How GreenLens Pro helps diagnose plant problems
- H2: Plant disease identifier vs plant identifier
- H2: When should you scan your plant?
- FAQ (mit Planner-Keywords als Questions)
- CTA: Scan your plant with GreenLens Pro
---
## FAQ-Strategie
Die Suggested Keywords aus dem Planner direkt als FAQ verwenden:
### Für `/plant-disease-identifier`
- What is a plant disease identifier?
- Can I identify plant disease by photo?
- What is the best plant disease identification app?
- How do I know if my plant is sick?
- Can GreenLens Pro identify plant problems?
### Für `/why-are-my-plant-leaves-yellow`
- Why are my plant leaves yellow?
- Do yellow leaves mean overwatering?
- Should I cut yellow leaves off?
- Can yellow leaves turn green again?
- Can GreenLens Pro help with yellow leaves?
### Für `/plant-doctor-app`
- What is a plant doctor app?
- How can an app diagnose plant problems?
- Can AI diagnose plant diseases?
- Is there a free plant doctor app?
- What plant problems can GreenLens Pro detect?
---
## Launch-Reihenfolge
1. **Sprint 1:** `/plant-disease-identifier` veröffentlichen
2. **Sprint 1:** `/why-are-my-plant-leaves-yellow` veröffentlichen
3. **Sprint 1:** `/plant-doctor-app` veröffentlichen
4. **Nach Indexierung:** Search Console beobachten — welche Keywords ranken?
5. **Sprint 2:** `/plant-pest-identification` (einzige validierte Seite)
6. **Sprint 2:** Weitere Symptom-Seiten nur mit Daten-Check
7. **Sprint 3:** `/plant-problems` Hub-Seite
8. **Sprint 4:** Free / Identifier Pages
9. **Sprint 5:** DACH Pages
---
## To-Do Liste
- [ ] `/plant-disease-identifier` erstellen (Sprint 1)
- [ ] `/why-are-my-plant-leaves-yellow` erstellen (Sprint 1)
- [ ] `/plant-doctor-app` erstellen (Sprint 1)
- [ ] Alle 3 Seiten sauber intern verlinken
- [ ] Search Console nach Indexierung monitoren
- [ ] Weitere Symptom-Keywords im Planner prüfen (Sprint 2)
- [ ] `/plant-pest-identification` erstellen (Sprint 2)
- [ ] `/plant-problems` Hub-Seite planen (Sprint 3)
- [ ] Free-vs-Paid-Sektion für `/free-plant-id-app` definieren (Sprint 4)
- [ ] DACH Pages in CONTENTCAL.md eintragen (Sprint 5)

637
plan-april2.md Normal file
View File

@@ -0,0 +1,637 @@
# SEO-Execution-Plan GreenLens Pro — April 2026
> **Positionierung:** GreenLens Pro = AI Plant Diagnosis Hub für kranke Pflanzen
> "Scan your plant, identify the problem, and learn how to save it."
---
## 1. SEO Roadmap
### Phase 1 — Sprint 1: Foundation (Jetzt)
3 Seiten launchen. Keine Kannibalisierung. Schnell live, Daten sammeln.
### Phase 2 — Sprint 2: Validation (Nach Indexierung)
Validierte Symptom-Seiten. Nur Seiten mit Keyword-Planner-Daten oder Search-Console-Impulsen bauen.
### Phase 3 — Sprint 3: Hub-Building (58 validierte Seiten)
`/plant-problems` als zentraler Diagnose-Navigator.
### Phase 4 — Sprint 4: App-Funnel (Nach Ranking-Signalen)
Free/Identifier Pages mit transparenter Free-vs-Paid-Sektion.
### Phase 5 — Sprint 5: DACH Expansion
Deutsche Diagnose-Seiten. `/de/pflanzenkrankheit-erkennen` vor `/de/pflanzen-erkennen`.
---
## 2. Priorisierte Page-Backlog
### Sofort (Sprint 1)
| # | URL | Focus Keyword | Rolle | Status |
|---|---|---|---|---|
| 1 | `/plant-disease-identifier` | plant disease identifier | Money Page | ✅ Build |
| 2 | `/why-are-my-plant-leaves-yellow` | why are my plant leaves yellow | Symptom Page | ✅ Build |
| 3 | `/plant-doctor-app` | plant doctor app | App Page | ✅ Build |
### Sprint 2 — Validieren vor Bau
| # | URL | Keyword | Status |
|---|---|---|---|
| 4 | `/plant-pest-identification` | plant pest identification | ✅ Sicher (hat Planner-Daten) |
| 5 | `/brown-spots-on-plant-leaves` | brown spots on plant leaves | ❌ Noch validieren |
| 6 | `/plant-leaves-curling` | plant leaves curling | ❌ Noch validieren |
| 7 | `/plant-wilting` | plant wilting | ❌ Noch validieren |
| 8 | `/sticky-leaves-on-plants` | sticky leaves on plants | ❌ Noch validieren |
| 9 | `/overwatered-plant` | overwatered plant | ❌ Noch validieren |
| 10 | `/underwatered-plant` | underwatered plant | ❌ Noch validieren |
| 11 | `/plant-root-rot` | plant root rot | ❌ Noch validieren |
| 12 | `/how-to-revive-a-dying-plant` | how to revive a dying plant | ❌ Noch validieren (hat Daten) |
### Sprint 3
| # | URL | Status |
|---|---|---|
| 13 | `/plant-problems` (Hub) | Nach Sprint 2 |
### Sprint 4
| # | URL | Hinweis |
|---|---|---|
| 14 | `/free-plant-id-app` | **Muss Free-vs-Paid-Sektion haben** |
| 15 | `/plant-identifier-app` | Breiter Traffic |
| 16 | `/identify-plant-by-photo` | App-Fit |
| 17 | `/best-plant-identification-app` | Commercial Intent |
| 18 | `/plant-scanner-app` | App-Nutzung erklären |
### Sprint 5
| # | URL | Focus Keyword |
|---|---|---|
| 19 | `/de/pflanzenkrankheit-erkennen` | pflanzenkrankheit erkennen |
| 20 | `/de/pflanzendoktor-app` | pflanzendoktor app |
| 21 | `/de/kranke-pflanze-retten` | kranke pflanze retten |
| 22 | `/de/pflanzen-erkennen` | pflanzen erkennen |
| 23 | `/de/pflanzen-erkennen-app-kostenlos` | pflanzen erkennen app kostenlos |
### Nach hinten verschieben
| URL | Warum |
|---|---|
| `/pothos-care` | SERPs dominiert von Gartenblogs/Pinterest |
| `/pothos-plant-care` | SERPs dominiert von Gartenblogs/Pinterest |
| `/golden-pothos-care` | SERPs dominiert von Gartenblogs/Pinterest |
| `/monstera-care-tips` | SERPs dominiert von Gartenblogs/Pinterest |
| `/fiddle-leaf-fig-problems` | SERPs dominiert von Gartenblogs/Pinterest |
| `/orchid-care-app` | Niedriges Volumen |
| `/succulent-care-app` | Niedriges Volumen |
---
## 3. Seitenarchitektur
```
greenlenspro.com/
├── [Sprint 1]
│ ├── plant-disease-identifier
│ ├── why-are-my-plant-leaves-yellow
│ └── plant-doctor-app
├── [Sprint 2]
│ ├── plant-pest-identification (✅ validiert)
│ ├── brown-spots-on-plant-leaves (❌ validieren)
│ ├── plant-leaves-curling (❌ validieren)
│ ├── plant-wilting (❌ validieren)
│ ├── sticky-leaves-on-plants (❌ validieren)
│ ├── overwatered-plant (❌ validieren)
│ ├── underwatered-plant (❌ validieren)
│ ├── plant-root-rot (❌ validieren)
│ └── how-to-revive-a-dying-plant (❌ validieren)
├── [Sprint 3]
│ └── plant-problems (Hub → bündelt alle Symptom-Seiten)
├── [Sprint 4]
│ ├── plant-identifier-app
│ ├── identify-plant-by-photo
│ ├── free-plant-id-app
│ ├── best-plant-identification-app
│ └── plant-scanner-app
└── [Sprint 5]
└── de/
├── pflanzenkrankheit-erkennen
├── pflanzendoktor-app
├── kranke-pflanze-retten
├── pflanzen-erkennen
└── pflanzen-erkennen-app-kostenlos
```
---
## 4. Interne Linking-Map
### Nach Sprint 1 (Dreiecks-Verlinkung)
```
plant-disease-identifier
→ why-are-my-plant-leaves-yellow
→ plant-doctor-app
why-are-my-plant-leaves-yellow
→ plant-disease-identifier
→ plant-doctor-app
plant-doctor-app
→ plant-disease-identifier
→ why-are-my-plant-leaves-yellow
```
### Nach Sprint 2 (Diagnose-Cluster)
```
plant-disease-identifier
→ why-are-my-plant-leaves-yellow
→ plant-pest-identification
→ plant-doctor-app
plant-problems (Hub)
→ why-are-my-plant-leaves-yellow
→ plant-pest-identification
→ plant-wilting
→ sticky-leaves-on-plants
→ brown-spots-on-plant-leaves
→ how-to-revive-a-dying-plant
→ plant-disease-identifier
Symptom-Seiten
→ plant-disease-identifier
→ plant-doctor-app
→ plant-problems
```
### Sprint 4 (App-Seiten verlinken auf Diagnosis)
```
plant-identifier-app
→ plant-disease-identifier
→ free-plant-id-app
free-plant-id-app
→ plant-identifier-app
→ plant-disease-identifier
plant-doctor-app
→ plant-disease-identifier
→ plant-problems
```
---
## 5. Content Briefs
### Content Brief: `/plant-disease-identifier`
**URL:** `greenlenspro.com/plant-disease-identifier`
**Focus Keyword:** plant disease identifier
**SEO Title (≤60 Zeichen):**
Plant Disease Identifier App | Scan Sick Plants With AI
**Meta Description (≤160 Zeichen):**
Scan your plant with GreenLens Pro to identify possible plant diseases, yellow leaves, brown spots, and pests. Get instant AI diagnosis and clear next steps.
**H1:** Plant Disease Identifier App
**H2/Content Structure:**
1. **H2:** What Is a Plant Disease Identifier?
→ Definiere das Konzept kurz. Erkläre, dass es um die Identifikation von Pflanzenkrankheiten geht — nicht nur um die Identifikation der Pflanzenart selbst.
2. **H2:** Common Signs of a Sick Plant
→ Liste die Symptome auf, die GreenLens Pro erkennen kann:
- H3: Yellow leaves
- H3: Brown spots
- H3: Wilting leaves
- H3: Sticky leaves
- H3: Pests
- H3: Root stress
→ Jedes Symptom kurz erklären, dann auf die passende Detailseite verlinken.
3. **H2:** How GreenLens Pro Diagnoses Plant Problems
→ Erkläre den Scan-Prozess: Foto machen → AI-Analyse → mögliche Ursachen + nächste Schritte.
4. **H2:** Plant Disease Identifier vs Plant Identifier
→ Differenzierung. Plant Identifier = Pflanze erkennen. Plant Disease Identifier = Problem erkennen. GreenLens Pro macht beides.
5. **H2:** When Should You Scan Your Plant?
→ Praktische Entscheidungshilfe: Wann ist der richtige Zeitpunkt für einen Scan?
6. **H2:** Frequently Asked Questions
→ FAQ mit Keyword-Fragen (siehe Abschnitt 7)
7. **CTA:** Scan your plant with GreenLens Pro → App-Download / App-Store-Link
**Secondary Keywords (in Content einbetten):**
- plant disease identification
- identify plant disease
- plant problem identifier
- plant sickness identifier
- plant doctor app
- plant health app
**Image:**
`plant-disease-identifier-scan.jpg`
Alt: "Plant disease identifier app scanning a sick houseplant"
---
### Content Brief: `/why-are-my-plant-leaves-yellow`
**URL:** `greenlenspro.com/why-are-my-plant-leaves-yellow`
**Focus Keyword:** why are my plant leaves yellow
**SEO Title (≤60 Zeichen):**
Why Are My Plant Leaves Yellow? Causes & What To Do
**Meta Description (≤160 Zeichen):**
Yellow leaves can mean overwatering, underwatering, pests, or nutrient issues. GreenLens Pro helps you identify the cause and know what to do next.
**H1:** Why Are My Plant Leaves Yellow?
**H2/Content Structure:**
1. **H2:** Why Are My Plant Leaves Yellow?
→ Intro: Gelbe Blätter sind eines der häufigsten Pflanzenprobleme. Ursache finden ist der erste Schritt.
2. **H2:** Overwatering — Too Much Water Drowns the Roots
→ Erklärung: Wurzeln brauchen Luft. Zu viel Wasser verdrängt Sauerstoff. Symptome: weiche gelbe Blätter, nasse Erde.
3. **H2:** Underwatering — Stress From Lack of Moisture
→ Erklärung: Zu wenig Wasser stresst die Pflanze. Symptome: trockene Erde, welke gelbe Blätter.
4. **H2:** Too Little Light — Plants Can't Photosynthesize
→ Erklärung: Lichtmangel führt zu Vergilbung, besonders bei unteren Blättern.
5. **H2:** Root Problems — Compacted or Rotting Roots
→ Erklärung: Root Bound oder Wurzelfäule verhindert Nährstoffaufnahme.
6. **H2:** Nutrient Deficiency — Nitrogen, Iron, Magnesium
→ Erklärung: Vergilbung durch Nährstoffmangel. V.a. Stickstoffmangel zeigt sich zuerst an älteren Blättern.
7. **H2:** Pest Stress — Sap-Sucking Insects Cause Yellowing
→ Erklärung: Blattläuse, Spinnmilben etc. entziehen der Pflanze Saft.
8. **H2:** Natural Aging — Lower Leaves Yellow and Drop
→ Erklärung: Alte Blätter sterben natürlich ab. Kein Problem, wenn nur untere Blätter betroffen.
9. **H2:** Temperature Stress — Cold or Heat Shock
→ Erklärung: Zugluft, Kälte oder Überhitzung können Vergilbung auslösen.
10. **H2:** When to Scan Your Plant With GreenLens Pro
→ Praktischer Tipp: Wenn du dir unsicher bist, was die Ursache ist — scan dein Pflanzenblatt.
11. **H2:** Frequently Asked Questions
→ FAQ mit Keyword-Fragen
12. **CTA:** Scan yellow leaves with GreenLens Pro → App-Download / App-Store-Link
**Secondary Keywords:**
- yellow leaves plant
- plant leaves turning yellow
- overwatering yellow leaves
- underwatering yellow leaves
- plant disease identifier
- plant doctor app
**Image:**
`yellow-leaves-plant-causes.jpg`
Alt: "Yellow leaves on a houseplant — possible causes explained"
---
### Content Brief: `/plant-doctor-app`
**URL:** `greenlenspro.com/plant-doctor-app`
**Focus Keyword:** plant doctor app
**SEO Title (≤60 Zeichen):**
Plant Doctor App | Diagnose Sick Houseplants With AI
**Meta Description (≤160 Zeichen):**
GreenLens Pro acts as your AI plant doctor. Scan your plant, identify symptoms, and get clear guidance on what to do next.
**H1:** Plant Doctor App for Sick Houseplants
**H2/Content Structure:**
1. **H2:** What Is a Plant Doctor App?
→ Definiere: Eine App, die bei der Diagnose von Pflanzenproblemen hilft — nicht nur die Pflanzenart identifiziert, sondern auch Symptome erkennt.
2. **H2:** How GreenLens Pro Works as Your Plant Doctor
→ Step-by-Step: Foto machen → Symptome analysieren → mögliche Ursachen → Handlungsanleitung.
3. **H2:** Common Plant Problems GreenLens Pro Can Detect
→ Liste: Gelbe Blätter, braune Flecken, Schädlinge, hängende Blätter, Welke, Sticky Leaves.
→ Jedes mit kurzer Erklärung.
4. **H2:** Plant Doctor App vs Google Lens
→ Differenzierung. Google Lens erkennt die Pflanze. GreenLens Pro erkennt das Problem. Zwei verschiedene Intentionen.
5. **H2:** Why Scan Before You Guess?
→ Prävention: Warum Raten schlecht ist. Symptome korrekt deuten spart Zeit und die Pflanze.
6. **H2:** Frequently Asked Questions
→ FAQ mit Keyword-Fragen
7. **CTA:** Use GreenLens Pro as your AI plant doctor → App-Download / App-Store-Link
**Secondary Keywords:**
- diagnose sick plant
- plant health check
- plant disease identifier
- plant problem identifier
- plant rescue app
**Image:**
`plant-doctor-app-screen.jpg`
Alt: "GreenLens Pro plant doctor app diagnosing a sick houseplant"
---
## 6. SEO Title & Meta Description Empfehlungen
Alle Titles ≤60 Zeichen, alle Descriptions ≤160 Zeichen.
| URL | SEO Title | Meta Description |
|---|---|---|
| `/plant-disease-identifier` | Plant Disease Identifier App \| Scan Sick Plants With AI | Scan your plant with GreenLens Pro to identify possible plant diseases, yellow leaves, brown spots, and pests. Get instant AI diagnosis and clear next steps. |
| `/why-are-my-plant-leaves-yellow` | Why Are My Plant Leaves Yellow? Causes & What To Do | Yellow leaves can mean overwatering, underwatering, pests, or nutrient issues. GreenLens Pro helps you identify the cause and know what to do next. |
| `/plant-doctor-app` | Plant Doctor App \| Diagnose Sick Houseplants With AI | GreenLens Pro acts as your AI plant doctor. Scan your plant, identify symptoms, and get clear guidance on what to do next. |
| `/plant-pest-identification` | Plant Pest Identification App \| Detect Pests With AI | Identify plant pests quickly with GreenLens Pro. Scan affected leaves and get instant pest identification and treatment guidance. |
| `/plant-problems` | Plant Problems: Identify Sick Plant Symptoms With AI | Identify common plant problems like yellow leaves, brown spots, pests, wilting, and weak growth. Scan your plant with GreenLens Pro before guessing. |
| `/free-plant-id-app` | Free Plant ID App \| Identify Plants With GreenLens Pro | GreenLens Pro helps you identify plants by photo for free. Scan your plant, get the name, and learn basic care guidance. |
| `/plant-identifier-app` | Plant Identifier App \| Identify Plants by Photo With AI | Point your camera at any plant. GreenLens Pro identifies it in seconds and gives you care guidance for 450+ species. |
| `/de/pflanzenkrankheit-erkennen` | Pflanzenkrankheit erkennen \| KI-Pflanzendoktor App | KI-gestützte Pflanzenkrankheit erkennen per Foto. GreenLens Pro zeigt mögliche Ursachen und nächste Schritte. |
| `/de/pflanzen-erkennen` | Pflanzen erkennen per Foto App \| GreenLens Pro | Pflanzen erkennen per Foto — in Sekunden. GreenLens Pro Identifizierung für 450+ Pflanzenarten. |
| `/de/pflanzendoktor-app` | Pflanzendoktor App \| Kranke Pflanzen KI-Diagnose | GreenLens Pro als KI-Pflanzendoktor. Blatt scannen, Problem erkennen, richtige Pflege finden. |
---
## 7. FAQ-Ideen pro Seite
### `/plant-disease-identifier`
- What is a plant disease identifier?
- Can I identify plant disease by photo?
- What is the best plant disease identification app?
- How do I know if my plant is sick?
- Can GreenLens Pro identify plant problems?
- What is a plant problem identifier?
- What is a plant sickness identifier?
- How does an AI plant disease app work?
- Can I use GreenLens Pro for free to identify plant disease?
### `/why-are-my-plant-leaves-yellow`
- Why are my plant leaves yellow?
- Do yellow leaves mean overwatering?
- Should I cut yellow leaves off?
- Can yellow leaves turn green again?
- Can GreenLens Pro help with yellow leaves?
- What causes yellow leaves on houseplants?
- Is overwatering or underwatering causing yellow leaves?
- How do I fix yellow leaves on my plant?
- Should I remove yellow leaves from my plant?
- Can nutrient deficiency cause yellow leaves?
### `/plant-doctor-app`
- What is a plant doctor app?
- How can an app diagnose plant problems?
- Can AI diagnose plant diseases?
- Is there a free plant doctor app?
- What plant problems can GreenLens Pro detect?
- How accurate is an AI plant doctor?
- Plant doctor app vs Google Lens — what's the difference?
- Can I diagnose my plant without a vet?
- How does GreenLens Pro work as a plant doctor?
- When should I use a plant doctor app?
### `/plant-pest-identification`
- How do I identify plant pests?
- What are common houseplant pests?
- Can an app identify plant pests?
- How do I get rid of plant pests?
- What do spider mites look like on plants?
- How do I know if my plant has aphids?
- Can GreenLens Pro detect pests?
- Plant pest identification vs pest treatment — what's the difference?
- Why are my plant leaves sticky?
- How to prevent plant pests?
### `/plant-problems`
- What are common plant problems?
- How do I know if my plant is sick?
- Why does my plant look unhealthy?
- Can an app diagnose plant problems?
- How do I identify plant symptoms?
- What does overwatering look like?
- What does underwatering look like?
- Why is my plant dropping leaves?
- Why is my plant not growing?
- How do I save a struggling plant?
### `/free-plant-id-app`
- Is there a free plant identification app?
- What can I do for free on GreenLens Pro?
- How many plants can I identify for free?
- Is GreenLens Pro free to download?
- What is the difference between free and Pro on GreenLens Pro?
- Do I need to pay for plant identification?
- Are there any free plant diagnosis features?
- What features require GreenLens Pro?
- Can I try GreenLens Pro before buying?
- How does the free trial work?
---
## 8. Launch-Checklist
### Vor dem Launch
- [ ] SEO Title gesetzt (≤60 Zeichen)
- [ ] Meta Description gesetzt (≤160 Zeichen)
- [ ] H1 enthält Focus Keyword
- [ ] Intro-Paragraph mit Focus Keyword in den ersten 100 Wörtern
- [ ] Alle Secondary Keywords in H2/H3 und Text eingebettet
- [ ] FAQ-Sektion mit Keyword-Fragen
- [ ] Interne Links zu Sprint-1-Seiten gesetzt
- [ ] CTA gesetzt (Scan your plant with GreenLens Pro)
- [ ] Bild-Upload mit Keyword-basiertem Alt-Tag
- [ ] Canonical Tag gesetzt
- [ ] Meta Robots: index, follow
- [ ] Open Graph Tags gesetzt (og:title, og:description, og:image)
- [ ] Schema.org FAQ-Schema eingebaut (für Featured Snippets)
- [ ] URL-Slug geprüft (klein, mit Bindestrichen, Keyword im Slug)
- [ ] Breadcrumbs gesetzt
- [ ] Ladezeit geprüft (Core Web Vitals)
### Nach dem Launch
- [ ] Seite in Google Search Console eingereicht (URL-Prüfung → Indizierung anfordern)
- [ ] Seite in XML-Sitemap aktualisiert
- [ ] Interne Links von anderen Seiten zur neuen Seite gesetzt
- [ ] Externe Signale: Link in relevanten Social-Media-Kanälen teilen (wenn vorhanden)
- [ ] Monitoring in Search Console eingerichtet
---
## 9. Monitoring-Plan (Google Search Console)
### Woche 12: Indexierung prüfen
- Search Console → Coverage → Prüfen ob Seite indexiert wurde
- URL-Inspektion → "Live-URL testen" → Indexierungsstatus prüfen
### Woche 34: Erste Rankings beobachten
- Search Console → Leistung → nach neuem Keyword filtern
- Achten auf:
- Welche Keywords ranken?
- Durchschnittliche Position?
- Klicks?
- Impressions?
- CTR?
### Nach 4 Wochen: Ranking-Analyse
**Erfolgskriterien:**
| Signal | Ziel |
|---|---|
| Indexierung | ✅ Innerhalb von 7 Tagen |
| Erste Rankings (Position 2050) | ✅ Innerhalb von 14 Tagen |
| Durchschnittliche Position | Verbesserung über Wochen |
| CTR | >1% als gut, >3% als sehr gut |
| Klicks | Steigend über 4+ Wochen |
**Aktions-Schwellen:**
- Seite rankt nach 6 Wochen nicht in Top 50 → Content prüfen / Backlinks prüfen
- CTR <0.5% → Title oder Meta Description optimieren
- Seite rankt für unerwartete Keywords → Secondary-Keyword-Strategie prüfen
### Quartals-Review
- Welche Seiten ranken für mehrere Keywords?
- Welche Seiten haben die beste CTR?
- Welche Keywords fehlen noch?
- Search Console "Suchanfragen" → neue Opportunitäten finden
- "Seiten mit Verbesserungspotenzial" analysieren
### Tool-Empfehlung
- **Google Search Console** (kostenlos) — Pflicht für alle Rankings
- **Google Keyword Planner** — regelmäßig neue Keyword-Ideen validieren
- **PageSpeed Insights** — Core Web Vitals nach jedem Launch prüfen
- **Ahrefs / Semrush** (optional) — Wettbewerber-Check und Backlink-Analyse
---
## 10. Warning-List: Seiten, die NICHT gebaut werden sollen
### Nicht jetzt — Keyword-Kannibalisierung
Folgende Keywords NICHT als separate Seiten bauen (gehören in `/plant-disease-identifier` als H2/FAQ):
| Keyword (nicht als URL) | Stattdessen |
|---|---|
| identify plant disease | → als FAQ in `/plant-disease-identifier` |
| plant disease identification | → als H2 in `/plant-disease-identifier` |
| plant problem identifier | → als H2 in `/plant-disease-identifier` |
| plant sickness identifier | → als H2 in `/plant-disease-identifier` |
| plant problems (singular) | → später als Hub `/plant-problems` |
| plant symptoms | → später als Hub `/plant-symptoms` |
### Nicht jetzt — Nicht validiert
Folgende Seiten erst nach Keyword-Validierung bauen:
| URL | Validierungsquelle |
|---|---|
| `/brown-spots-on-plant-leaves` | Keyword Planner + SERP-Check |
| `/plant-leaves-curling` | Keyword Planner + SERP-Check |
| `/plant-wilting` | Keyword Planner + SERP-Check |
| `/sticky-leaves-on-plants` | Keyword Planner + SERP-Check |
| `/overwatered-plant` | Keyword Planner + SERP-Check |
| `/underwatered-plant` | Keyword Planner + SERP-Check |
| `/plant-root-rot` | Keyword Planner + SERP-Check |
| `/how-to-revive-a-dying-plant` | Keyword Planner (hat Daten, aber validieren) |
### Nicht jetzt — Falsche Intention
| URL | Warum |
|---|---|
| `/plant-diseases` | Zu breit, zu wiki-artig. Ranking-Intention ist Wikipedia/Pinterest, nicht App-Download. Erst als Hub `/plant-problems` später. |
| `/plant-diseases-list` | Gleiche Begründung |
| `/common-plant-diseases` | Gleiche Begründung |
### Nicht jetzt — Dominierte SERPs
Diese Seiten haben SERPs, die von Gartenblogs, Pinterest und großen Plant-Portalen dominiert werden. GreenLens Pro hat dort niedrige Early-Ranking-Chancen:
| URL | Wettbewerber |
|---|---|
| `/pothos-care` | Garden blogs, Pinterest |
| `/pothos-plant-care` | Garden blogs, Pinterest |
| `/golden-pothos-care` | Garden blogs, Pinterest |
| `/monstera-care-tips` | Blog posts, Pinterest |
| `/fiddle-leaf-fig-problems` | Blog posts |
| `/orchid-care-app` | Gartenblogs, Orchideen-Specialisten |
| `/succulent-care-app` | Gartenblogs, Pinterest |
| `/snake-plant-identification` | Blog posts, Pinterest |
### Nicht jetzt — Produkt noch nicht reif
| URL | Warum |
|---|---|
| `/plant-care-subscription` | Kein Hinweis auf Subscription-Modell in aktueller App-Beschreibung |
| `/greenlens-pro-premium` | Erst wenn Paid-Features klar definiert sind |
| `/plant-health-report` | Erst wenn Feature existiert |
---
## Zusammenfassung: Was zuerst tun
### Heute
1. `/plant-disease-identifier` erstellen → Launch
2. `/why-are-my-plant-leaves-yellow` erstellen → Launch
3. `/plant-doctor-app` erstellen → Launch
### Diese Woche
4. Alle 3 Seiten in Search Console einreichen
5. XML-Sitemap aktualisieren
6. Interne Links prüfen (alle 3 Seiten verlinken aufeinander)
### Nach Indexierung (12 Wochen)
7. Search Console monitoren: welche Keywords ranken?
8. CTR messen: wie performen Titles/Descriptions?
### Sprint 2 (datenbasiert)
9. `/plant-pest-identification` erstellen (einzige validierte Seite)
10. Weitere Symptom-Keywords im Planner prüfen
11. Nur Seiten mit Daten bauen
### Sprint 3+ (nach 58 validierten Seiten)
12. `/plant-problems` Hub-Seite erstellen
13. Free/Identifier Pages mit Free-vs-Paid-Sektion
14. DACH Pages (Diagnose-First)

View File

@@ -26,7 +26,14 @@ loadEnvFiles([
]);
const { closeDatabase, getDefaultDbPath, openDatabase, get } = require('./lib/postgres');
const { ensureAuthSchema, signUp: authSignUp, login: authLogin, issueToken, verifyJwt } = require('./lib/auth');
const {
ensureAuthSchema,
signUp: authSignUp,
login: authLogin,
signInWithApple: authSignInWithApple,
issueToken,
verifyJwt,
} = require('./lib/auth');
const {
PlantImportValidationError,
ensurePlantSchema,
@@ -168,13 +175,27 @@ const resolveUserId = (request) => {
return '';
};
const resolveIdempotencyKey = (request) => {
const header = request.header('idempotency-key');
if (typeof header === 'string' && header.trim()) return header.trim();
return '';
};
const toPlantResult = (entry, confidence) => {
const resolveIdempotencyKey = (request) => {
const header = request.header('idempotency-key');
if (typeof header === 'string' && header.trim()) return header.trim();
return '';
};
const createHardPaywallError = (requiredCredits) => {
const error = new Error('Active Pro or trial entitlement required.');
error.code = 'INSUFFICIENT_CREDITS';
error.status = 402;
error.metadata = { required: requiredCredits, available: 0 };
return error;
};
const ensureActiveProEntitlement = (accountSnapshot, requiredCredits) => {
if (!accountSnapshot || accountSnapshot.plan !== 'pro') {
throw createHardPaywallError(requiredCredits);
}
};
const toPlantResult = (entry, confidence) => {
return {
name: entry.name,
botanicalName: entry.botanicalName,
@@ -235,36 +256,57 @@ const toApiErrorPayload = (error) => {
};
}
if (error && typeof error === 'object' && error.code === 'UNAUTHORIZED') {
return {
status: 401,
body: { code: 'UNAUTHORIZED', message: error.message || 'Unauthorized.' },
};
}
if (isInsufficientCreditsError(error)) {
return {
status: 402,
if (error && typeof error === 'object' && error.code === 'UNAUTHORIZED') {
return {
status: 401,
body: { code: 'UNAUTHORIZED', message: error.message || 'Unauthorized.' },
};
}
if (isInsufficientCreditsError(error)) {
return {
status: 402,
body: {
code: 'INSUFFICIENT_CREDITS',
message: error.message || 'Insufficient credits.',
details: error.metadata || undefined,
},
};
}
},
};
}
if (
error
&& typeof error === 'object'
&& Number.isInteger(error.status)
&& error.status >= 400
&& error.status < 500
&& typeof error.code === 'string'
) {
return {
status: error.status,
body: { code: error.code, message: error.message || 'Request failed.' },
};
}
if (error && typeof error === 'object' && error.code === 'PROVIDER_ERROR') {
return {
status: 502,
body: { code: 'PROVIDER_ERROR', message: error.message || 'Provider request failed.' },
};
}
if (error && typeof error === 'object' && error.code === 'TIMEOUT') {
return {
status: 504,
body: { code: 'TIMEOUT', message: error.message || 'Provider timed out.' },
};
if (error && typeof error === 'object' && error.code === 'PROVIDER_ERROR') {
return {
status: 502,
body: { code: 'PROVIDER_ERROR', message: error.message || 'Provider request failed.' },
};
}
if (error && typeof error === 'object' && error.code === 'NOT_A_PLANT') {
return {
status: 422,
body: { code: 'NOT_A_PLANT', message: error.message || 'Image does not contain a plant.' },
};
}
if (error && typeof error === 'object' && error.code === 'TIMEOUT') {
return {
status: 504,
body: { code: 'TIMEOUT', message: error.message || 'Provider timed out.' },
};
}
return {
@@ -480,8 +522,9 @@ app.get('/', (_request, response) => {
'GET /health',
'GET /api/plants',
'POST /api/plants/rebuild',
'POST /auth/signup',
'POST /auth/login',
'POST /auth/signup',
'POST /auth/login',
'POST /auth/apple',
'GET /v1/billing/summary',
'POST /v1/billing/sync-revenuecat',
'POST /v1/scan',
@@ -635,14 +678,17 @@ app.post('/v1/scan', async (request, response) => {
let modelUsed = null;
let modelFallbackCount = 0;
const [creditResult, accountSnapshot, catalogEntries] = await Promise.all([
isGuest(userId)
? Promise.resolve(0)
: consumeCreditsWithIdempotency(db, userId, chargeKey('scan-primary', userId, idempotencyKey), SCAN_PRIMARY_COST),
getAccountSnapshot(db, userId),
getCachedCatalogEntries(db),
]);
creditsCharged += creditResult;
const [accountSnapshot, catalogEntries] = await Promise.all([
getAccountSnapshot(db, userId),
getCachedCatalogEntries(db),
]);
ensureActiveProEntitlement(accountSnapshot, SCAN_PRIMARY_COST);
creditsCharged += await consumeCreditsWithIdempotency(
db,
userId,
chargeKey('scan-primary', userId, idempotencyKey),
SCAN_PRIMARY_COST,
);
const scanPlan = accountSnapshot.plan === 'pro' ? 'pro' : 'free';
let result = pickCatalogFallback(catalogEntries, imageUri, false, { silent: true });
@@ -778,21 +824,24 @@ app.post('/v1/search/semantic', async (request, response) => {
return;
}
if (!query) {
const payload = {
status: 'no_results',
if (!query) {
const payload = {
status: 'no_results',
results: [],
creditsCharged: 0,
billing: await getBillingSummary(db, userId),
};
await storeEndpointResponse(db, endpointId, payload);
response.status(200).json(payload);
return;
}
const creditsCharged = await consumeCreditsWithIdempotency(
db,
userId,
return;
}
const accountSnapshot = await getAccountSnapshot(db, userId);
ensureActiveProEntitlement(accountSnapshot, SEMANTIC_SEARCH_COST);
const creditsCharged = await consumeCreditsWithIdempotency(
db,
userId,
chargeKey('semantic-search', userId, idempotencyKey),
SEMANTIC_SEARCH_COST,
);
@@ -824,11 +873,14 @@ app.post('/v1/health-check', async (request, response) => {
const cached = await getEndpointResponse(db, endpointId);
if (cached) {
response.status(200).json(cached);
return;
}
if (!isOpenAiConfigured()) {
const error = new Error('OpenAI health check is unavailable. Please configure OPENAI_API_KEY.');
return;
}
const accountSnapshot = await getAccountSnapshot(db, userId);
ensureActiveProEntitlement(accountSnapshot, HEALTH_CHECK_COST);
if (!isOpenAiConfigured()) {
const error = new Error('OpenAI health check is unavailable. Please configure OPENAI_API_KEY.');
error.code = 'PROVIDER_ERROR';
throw error;
}
@@ -991,9 +1043,9 @@ app.post('/auth/signup', async (request, response) => {
}
});
app.post('/auth/login', async (request, response) => {
try {
const { email, password } = request.body || {};
app.post('/auth/login', async (request, response) => {
try {
const { email, password } = request.body || {};
if (!email || !password) {
return response.status(400).json({ code: 'BAD_REQUEST', message: 'email and password are required.' });
}
@@ -1003,8 +1055,23 @@ app.post('/auth/login', async (request, response) => {
} catch (error) {
const status = error.status || 500;
response.status(status).json({ code: error.code || 'SERVER_ERROR', message: error.message });
}
});
}
});
app.post('/auth/apple', async (request, response) => {
try {
const { identityToken, appleUser, email, name } = request.body || {};
if (!identityToken) {
return response.status(400).json({ code: 'BAD_REQUEST', message: 'identityToken is required.' });
}
const user = await authSignInWithApple(db, identityToken, { appleUser, email, name });
const token = issueToken(user.id, user.email, user.name);
response.status(200).json({ userId: user.id, email: user.email, name: user.name, token });
} catch (error) {
const status = error.status || 500;
response.status(status).json({ code: error.code || 'SERVER_ERROR', message: error.message });
}
});
// ─── Startup ───────────────────────────────────────────────────────────────

View File

@@ -1,8 +1,18 @@
const crypto = require('crypto');
const { get, run } = require('./postgres');
const JWT_SECRET = process.env.JWT_SECRET || 'greenlens-dev-secret-change-in-prod';
const TOKEN_EXPIRY_SECONDS = 365 * 24 * 3600; // 1 year
const JWT_SECRET = process.env.JWT_SECRET || 'greenlens-dev-secret-change-in-prod';
const TOKEN_EXPIRY_SECONDS = 365 * 24 * 3600; // 1 year
const APPLE_JWKS_URL = 'https://appleid.apple.com/auth/keys';
const APPLE_ISSUER = 'https://appleid.apple.com';
const APPLE_AUDIENCE = (
process.env.APPLE_CLIENT_ID
|| process.env.APPLE_BUNDLE_ID
|| process.env.EXPO_PUBLIC_APPLE_CLIENT_ID
|| process.env.IOS_BUNDLE_ID
|| 'com.greenlens.app'
).trim();
let appleJwksCache = { keys: [], expiresAt: 0 };
// ─── Minimal JWT (HS256, no external deps) ─────────────────────────────────
@@ -47,8 +57,100 @@ const issueToken = (userId, email, name) =>
// ─── Password hashing ──────────────────────────────────────────────────────
const hashPassword = (password) =>
crypto.createHmac('sha256', JWT_SECRET).update(password).digest('hex');
const hashPassword = (password) =>
crypto.createHmac('sha256', JWT_SECRET).update(password).digest('hex');
const parseJwtPart = (value) => JSON.parse(b64urlDecode(value));
const getAppleJwks = async () => {
const now = Date.now();
if (appleJwksCache.keys.length > 0 && appleJwksCache.expiresAt > now) {
return appleJwksCache.keys;
}
const response = await fetch(APPLE_JWKS_URL);
if (!response.ok) {
const error = new Error('Could not load Apple public keys.');
error.code = 'APPLE_AUTH_UNAVAILABLE';
error.status = 503;
throw error;
}
const payload = await response.json();
appleJwksCache = {
keys: Array.isArray(payload.keys) ? payload.keys : [],
expiresAt: now + 6 * 60 * 60 * 1000,
};
return appleJwksCache.keys;
};
const verifyAppleIdentityToken = async (identityToken) => {
if (!identityToken || typeof identityToken !== 'string') {
const error = new Error('Apple identityToken is required.');
error.code = 'BAD_REQUEST';
error.status = 400;
throw error;
}
const parts = identityToken.split('.');
if (parts.length !== 3) {
const error = new Error('Apple identityToken is malformed.');
error.code = 'APPLE_AUTH_INVALID';
error.status = 401;
throw error;
}
const [encodedHeader, encodedPayload, encodedSignature] = parts;
let header;
let claims;
try {
header = parseJwtPart(encodedHeader);
claims = parseJwtPart(encodedPayload);
} catch {
const error = new Error('Apple identityToken is malformed.');
error.code = 'APPLE_AUTH_INVALID';
error.status = 401;
throw error;
}
if (header.alg !== 'RS256' || !header.kid) {
const error = new Error('Apple identityToken has an unsupported signature.');
error.code = 'APPLE_AUTH_INVALID';
error.status = 401;
throw error;
}
const keys = await getAppleJwks();
const jwk = keys.find((key) => key.kid === header.kid);
if (!jwk) {
const error = new Error('Apple public key not found.');
error.code = 'APPLE_AUTH_INVALID';
error.status = 401;
throw error;
}
const verifier = crypto.createVerify('RSA-SHA256');
verifier.update(`${encodedHeader}.${encodedPayload}`);
verifier.end();
const publicKey = crypto.createPublicKey({ key: jwk, format: 'jwk' });
const validSignature = verifier.verify(publicKey, Buffer.from(encodedSignature, 'base64url'));
const nowSeconds = Math.floor(Date.now() / 1000);
const expectedAudiences = new Set([APPLE_AUDIENCE, 'com.greenlens.app'].filter(Boolean));
if (
!validSignature
|| claims.iss !== APPLE_ISSUER
|| !expectedAudiences.has(claims.aud)
|| !claims.sub
|| (claims.exp && nowSeconds > Number(claims.exp))
) {
const error = new Error('Apple identityToken could not be verified.');
error.code = 'APPLE_AUTH_INVALID';
error.status = 401;
throw error;
}
return claims;
};
// ─── Schema ────────────────────────────────────────────────────────────────
@@ -59,10 +161,22 @@ const ensureAuthSchema = async (db) => {
id TEXT PRIMARY KEY,
email TEXT NOT NULL UNIQUE,
name TEXT NOT NULL DEFAULT '',
password_hash TEXT NOT NULL,
password_hash TEXT,
auth_provider TEXT NOT NULL DEFAULT 'email',
apple_subject TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
)`,
);
await run(db, "ALTER TABLE auth_users ADD COLUMN IF NOT EXISTS auth_provider TEXT NOT NULL DEFAULT 'email'");
await run(db, 'ALTER TABLE auth_users ADD COLUMN IF NOT EXISTS apple_subject TEXT');
await run(db, 'ALTER TABLE auth_users ALTER COLUMN password_hash DROP NOT NULL');
await run(
db,
`CREATE UNIQUE INDEX IF NOT EXISTS idx_auth_users_apple_subject
ON auth_users (apple_subject)
WHERE apple_subject IS NOT NULL`,
);
};
// ─── Operations ───────────────────────────────────────────────────────────
@@ -98,14 +212,68 @@ const login = async (db, email, password) => {
err.code = 'USER_NOT_FOUND';
err.status = 401;
throw err;
}
if (user.password_hash !== hashPassword(password)) {
}
if (!user.password_hash) {
const err = new Error('This account uses Apple Sign-In.');
err.code = 'USE_APPLE_LOGIN';
err.status = 401;
throw err;
}
if (user.password_hash !== hashPassword(password)) {
const err = new Error('Wrong password.');
err.code = 'WRONG_PASSWORD';
err.status = 401;
throw err;
}
return { id: user.id, email: user.email, name: user.name };
};
module.exports = { ensureAuthSchema, signUp, login, issueToken, verifyJwt };
return { id: user.id, email: user.email, name: user.name };
};
const signInWithApple = async (db, identityToken, profile = {}) => {
const claims = await verifyAppleIdentityToken(identityToken);
const appleSubject = String(claims.sub);
const emailFromToken = typeof claims.email === 'string' ? claims.email.trim().toLowerCase() : '';
const emailFromProfile = typeof profile.email === 'string' ? profile.email.trim().toLowerCase() : '';
const normalizedEmail = emailFromToken || emailFromProfile;
const profileName = typeof profile.name === 'string' ? profile.name.trim() : '';
const existingByApple = await get(
db,
'SELECT id, email, name FROM auth_users WHERE apple_subject = $1',
[appleSubject],
);
if (existingByApple) return existingByApple;
if (!normalizedEmail) {
const err = new Error('Apple did not return an email for this account.');
err.code = 'APPLE_EMAIL_MISSING';
err.status = 400;
throw err;
}
const existingByEmail = await get(
db,
'SELECT id, email, name FROM auth_users WHERE LOWER(email) = LOWER($1)',
[normalizedEmail],
);
if (existingByEmail) {
const nextName = existingByEmail.name || profileName || normalizedEmail.split('@')[0] || 'GreenLens User';
await run(
db,
'UPDATE auth_users SET apple_subject = $1, auth_provider = $2, name = $3 WHERE id = $4',
[appleSubject, 'apple', nextName, existingByEmail.id],
);
return { ...existingByEmail, name: nextName };
}
const id = `usr_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 10)}`;
const name = profileName || normalizedEmail.split('@')[0] || 'GreenLens User';
await run(
db,
`INSERT INTO auth_users (id, email, name, password_hash, auth_provider, apple_subject)
VALUES ($1, $2, $3, NULL, $4, $5)`,
[id, normalizedEmail, name, 'apple', appleSubject],
);
return { id, email: normalizedEmail, name };
};
module.exports = { ensureAuthSchema, signUp, login, signInWithApple, issueToken, verifyJwt, verifyAppleIdentityToken };

View File

@@ -1,17 +1,18 @@
const { get, run } = require('./postgres');
const FREE_MONTHLY_CREDITS = 15;
const PRO_MONTHLY_CREDITS = 250;
const TOPUP_DEFAULT_CREDITS = 60;
const FREE_MONTHLY_CREDITS = 0;
const TRIAL_MONTHLY_CREDITS = 30;
const PRO_MONTHLY_CREDITS = 100;
const TOPUP_DEFAULT_CREDITS = 100;
const REVENUECAT_PRO_ENTITLEMENT_ID = (process.env.REVENUECAT_PRO_ENTITLEMENT_ID || 'pro').trim() || 'pro';
const SUPPORTED_SUBSCRIPTION_PRODUCTS = new Set(['monthly_pro', 'yearly_pro']);
const TOPUP_CREDITS_BY_PRODUCT = {
monthly_pro: 0,
yearly_pro: 0,
topup_small: 25,
topup_medium: 120,
topup_large: 300,
topup_small: 30,
topup_medium: 100,
topup_large: 250,
};
const AVAILABLE_PRODUCTS = ['monthly_pro', 'yearly_pro', 'topup_small', 'topup_medium', 'topup_large'];
@@ -64,6 +65,22 @@ const getMonthlyAllowanceForPlan = (plan) => {
return plan === 'pro' ? PRO_MONTHLY_CREDITS : FREE_MONTHLY_CREDITS;
};
const getRevenueCatPeriodType = (source) => {
return String(source?.periodType || source?.period_type || '').trim().toLowerCase();
};
const isRevenueCatTrial = (source) => {
return getRevenueCatPeriodType(source) === 'trial';
};
const isAllowedMonthlyAllowance = (account) => {
if (account.plan === 'pro') {
return account.monthlyAllowance === PRO_MONTHLY_CREDITS
|| account.monthlyAllowance === TRIAL_MONTHLY_CREDITS;
}
return account.monthlyAllowance === FREE_MONTHLY_CREDITS;
};
const createInsufficientCreditsError = (required, available) => {
const error = new Error(`Insufficient credits. Required ${required}, available ${available}.`);
error.code = 'INSUFFICIENT_CREDITS';
@@ -130,7 +147,7 @@ const buildDefaultAccount = (userId, now) => {
const alignAccountToCurrentCycle = (account, now) => {
const next = { ...account };
const expectedMonthlyAllowance = getMonthlyAllowanceForPlan(next.plan);
if (next.monthlyAllowance !== expectedMonthlyAllowance) {
if (!isAllowedMonthlyAllowance(next)) {
next.monthlyAllowance = expectedMonthlyAllowance;
}
@@ -238,6 +255,7 @@ const getOrCreateAccount = async (db, userId) => {
};
const getAvailableCredits = (account) => {
if (account.plan !== 'pro') return 0;
const monthlyRemaining = Math.max(0, account.monthlyAllowance - account.usedThisCycle);
return monthlyRemaining + Math.max(0, account.topupBalance);
};
@@ -326,14 +344,22 @@ const getValidProEntitlement = (customerInfo) => {
const applyRevenueCatEntitlementState = (account, options) => {
const now = new Date();
const previousPlan = account.plan;
const previousMonthlyAllowance = account.monthlyAllowance;
const nextPlan = options.active ? 'pro' : 'free';
const planChanged = account.plan !== nextPlan;
const nextMonthlyAllowance = options.active && options.isTrial
? TRIAL_MONTHLY_CREDITS
: getMonthlyAllowanceForPlan(nextPlan);
const planChanged = previousPlan !== nextPlan;
const trialConvertedToPaid = previousPlan === 'pro'
&& previousMonthlyAllowance === TRIAL_MONTHLY_CREDITS
&& nextMonthlyAllowance === PRO_MONTHLY_CREDITS;
account.plan = nextPlan;
account.provider = 'revenuecat';
account.monthlyAllowance = getMonthlyAllowanceForPlan(account.plan);
account.monthlyAllowance = nextMonthlyAllowance;
account.renewsAt = options.active ? options.renewsAt || account.renewsAt || addDays(now, 30).toISOString() : null;
if (planChanged) {
if (planChanged || trialConvertedToPaid) {
const { cycleStartedAt, cycleEndsAt } = getCycleBounds(now);
account.cycleStartedAt = cycleStartedAt.toISOString();
account.cycleEndsAt = cycleEndsAt.toISOString();
@@ -401,6 +427,7 @@ const syncRevenueCatCustomerInfo = async (db, userId, customerInfo, options = {}
if (source !== 'topup_purchase') {
applyRevenueCatEntitlementState(account, {
active: Boolean(proEntitlement),
isTrial: isRevenueCatTrial(proEntitlement),
renewsAt: asIsoDate(proEntitlement?.expirationDate || proEntitlement?.expiresDate),
});
}
@@ -490,6 +517,7 @@ const syncRevenueCatWebhookEvent = async (db, eventPayload) => {
if (affectsProEntitlement && shouldGrantRevenueCatSubscription(eventType)) {
applyRevenueCatEntitlementState(account, {
active: true,
isTrial: isRevenueCatTrial(eventPayload),
renewsAt: asIsoDate(eventPayload?.expiration_at_ms || eventPayload?.expiration_at),
});
} else if (affectsProEntitlement && shouldRevokeRevenueCatSubscription(eventType)) {
@@ -519,6 +547,9 @@ const syncRevenueCatWebhookEvent = async (db, eventPayload) => {
const consumeCredits = (account, cost) => {
if (cost <= 0) return 0;
if (account.plan !== 'pro') {
throw createInsufficientCreditsError(cost, 0);
}
const available = getAvailableCredits(account);
if (available < cost) {
@@ -567,12 +598,12 @@ const consumeCreditsWithIdempotency = async (db, userId, key, cost) => {
const getBillingSummary = async (db, userId) => {
if (userId === 'guest') {
return {
entitlement: { plan: 'free', provider: 'mock', status: 'active', renewsAt: null },
entitlement: { plan: 'free', provider: 'mock', status: 'inactive', renewsAt: null },
credits: {
monthlyAllowance: 5,
monthlyAllowance: 0,
usedThisCycle: 0,
topupBalance: 0,
available: 5,
available: 0,
cycleStartedAt: nowIso(),
cycleEndsAt: nowIso(),
},
@@ -595,7 +626,7 @@ const getAccountSnapshot = async (db, userId) => {
provider: 'mock',
cycleStartedAt: nowIso(),
cycleEndsAt: nowIso(),
monthlyAllowance: 5,
monthlyAllowance: 0,
usedThisCycle: 0,
topupBalance: 0,
renewsAt: null,

View File

@@ -27,13 +27,18 @@ const OPENAI_SCAN_MODEL_CHAIN = parseModelChain(OPENAI_SCAN_MODEL, OPENAI_SCAN_F
const OPENAI_SCAN_MODEL_CHAIN_PRO = parseModelChain(OPENAI_SCAN_MODEL_PRO, OPENAI_SCAN_FALLBACK_MODELS_PRO);
const OPENAI_HEALTH_MODEL_CHAIN = parseModelChain(OPENAI_HEALTH_MODEL, OPENAI_HEALTH_FALLBACK_MODELS);
const getScanModelChain = (plan) => {
return plan === 'pro' ? OPENAI_SCAN_MODEL_CHAIN_PRO : OPENAI_SCAN_MODEL_CHAIN;
};
const clamp = (value, min, max) => {
return Math.min(max, Math.max(min, value));
};
const getScanModelChain = (plan) => {
return plan === 'pro' ? OPENAI_SCAN_MODEL_CHAIN_PRO : OPENAI_SCAN_MODEL_CHAIN;
};
const isReasoningModel = (model) => {
const normalized = String(model || '').toLowerCase();
return normalized.startsWith('gpt-5') || normalized.startsWith('o1') || normalized.startsWith('o3') || normalized.startsWith('o4');
};
const clamp = (value, min, max) => {
return Math.min(max, Math.max(min, value));
};
const toErrorMessage = (error) => {
if (error instanceof Error) return error.message;
@@ -215,11 +220,12 @@ const buildIdentifyPrompt = (language, mode) => {
? '- "name" must be an English common name only. Never return a German or other non-English common name. If no reliable English common name is known, use "botanicalName" as "name" instead of inventing or translating.'
: `- "name" must be strictly written in ${getLanguageLabel(language)}. If a reliable common name in that language is not known, use "botanicalName" as "name" instead of inventing a localized name.`;
return [
`${reviewInstruction}`,
'Return strict JSON only in this shape:',
'{"name":"...","botanicalName":"...","confidence":0.0,"description":"...","careInfo":{"waterIntervalDays":7,"light":"...","temp":"..."}}',
'Rules:',
return [
`${reviewInstruction}`,
'If the image does not clearly show a plant (for example a person, animal, room, furniture, or no identifiable foliage), return {"notAPlant":true} and nothing else.',
'Return strict JSON only in this shape:',
'{"name":"...","botanicalName":"...","confidence":0.0,"description":"...","careInfo":{"waterIntervalDays":7,"light":"...","temp":"..."}}',
'Rules:',
nameLanguageInstruction,
`- "description" and "careInfo.light" must be written in ${getLanguageLabel(language)}.`,
`- "careInfo.light": short light requirement in ${getLanguageLabel(language)} (e.g. "bright indirect light", "full sun", "partial shade"). Must always be a real value, never "Unknown".`,
@@ -279,14 +285,33 @@ const extractMessageContent = (payload) => {
.join('')
.trim();
}
return '';
};
const postChatCompletion = async ({ modelChain, messages, imageUri, temperature }) => {
if (!OPENAI_API_KEY) return null;
if (typeof fetch !== 'function') {
throw new Error('Global fetch is not available in this Node runtime.');
}
return '';
};
const buildRequestBody = ({ model, messages, temperature, maxCompletionTokens }) => {
const body = {
model,
response_format: { type: 'json_object' },
messages,
};
if (typeof temperature === 'number') body.temperature = temperature;
if (isReasoningModel(model)) {
body.reasoning_effort = 'minimal';
body.max_completion_tokens = maxCompletionTokens;
} else {
body.max_tokens = maxCompletionTokens;
}
return body;
};
const postChatCompletion = async ({ modelChain, messages, imageUri, temperature, maxCompletionTokens = 600 }) => {
if (!OPENAI_API_KEY) return null;
if (typeof fetch !== 'function') {
throw new Error('Global fetch is not available in this Node runtime.');
}
const attemptedModels = [];
@@ -295,18 +320,13 @@ const postChatCompletion = async ({ modelChain, messages, imageUri, temperature
const controller = new AbortController();
const timeout = setTimeout(() => controller.abort(), OPENAI_TIMEOUT_MS);
try {
const body = {
model,
response_format: { type: 'json_object' },
messages,
};
if (typeof temperature === 'number') body.temperature = temperature;
const response = await fetch(OPENAI_CHAT_COMPLETIONS_URL, {
method: 'POST',
headers: {
try {
const body = buildRequestBody({ model, messages, temperature, maxCompletionTokens });
const response = await fetch(OPENAI_CHAT_COMPLETIONS_URL, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${OPENAI_API_KEY}`,
},
@@ -362,15 +382,16 @@ const identifyPlant = async ({ imageUri, language, mode = 'primary', plan = 'fre
role: 'system',
content: 'You are a plant identification assistant. Return strict JSON only.',
},
{
role: 'user',
content: [
{ type: 'text', text: buildIdentifyPrompt(language, mode) },
{ type: 'image_url', image_url: { url: imageUri, detail: 'low' } },
],
},
],
});
{
role: 'user',
content: [
{ type: 'text', text: buildIdentifyPrompt(language, mode) },
{ type: 'image_url', image_url: { url: imageUri, detail: 'low' } },
],
},
],
maxCompletionTokens: 600,
});
if (!completion?.payload) {
return {
@@ -391,19 +412,25 @@ const identifyPlant = async ({ imageUri, language, mode = 'primary', plan = 'fre
}
const parsed = parseContentToJson(content);
if (!parsed) {
console.warn('OpenAI identify returned non-JSON content.', {
model: completion.modelUsed || modelChain[0],
mode,
preview: content.slice(0, 220),
});
return { result: null, modelUsed: completion.modelUsed, attemptedModels: completion.attemptedModels };
}
const normalized = normalizeIdentifyResult(parsed, language);
if (!normalized) {
console.warn('OpenAI identify JSON did not match schema.', {
model: completion.modelUsed || modelChain[0],
if (!parsed) {
console.warn('OpenAI identify returned non-JSON content.', {
model: completion.modelUsed || modelChain[0],
mode,
preview: content.slice(0, 220),
});
return { result: null, modelUsed: completion.modelUsed, attemptedModels: completion.attemptedModels };
}
if (parsed.notAPlant === true) {
const error = new Error('Image does not contain a plant.');
error.code = 'NOT_A_PLANT';
throw error;
}
const normalized = normalizeIdentifyResult(parsed, language);
if (!normalized) {
console.warn('OpenAI identify JSON did not match schema.', {
model: completion.modelUsed || modelChain[0],
mode,
keys: Object.keys(parsed),
});
@@ -422,15 +449,16 @@ const analyzePlantHealth = async ({ imageUri, language, plantContext }) => {
role: 'system',
content: 'You are a plant health diagnosis assistant. Return strict JSON only.',
},
{
role: 'user',
content: [
{ type: 'text', text: buildHealthPrompt(language, plantContext) },
{ type: 'image_url', image_url: { url: imageUri, detail: 'low' } },
],
},
],
});
{
role: 'user',
content: [
{ type: 'text', text: buildHealthPrompt(language, plantContext) },
{ type: 'image_url', image_url: { url: imageUri, detail: 'low' } },
],
},
],
maxCompletionTokens: 800,
});
if (!completion?.payload) {
return {

View File

@@ -36,11 +36,14 @@ const authPost = async (path: string, body: object): Promise<{ userId: string; e
}
throw new Error('NETWORK_ERROR');
}
const data = await response.json().catch(() => ({}));
if (!response.ok) {
const code = (data as any).code || 'AUTH_ERROR';
const msg = (data as any).message || '';
console.warn(`[Auth] ${path} failed:`, response.status, code, msg);
const data = await response.json().catch(() => ({}));
if (!response.ok) {
if (response.status === 404 && path === '/auth/apple') {
throw new Error('APPLE_BACKEND_UNAVAILABLE');
}
const code = (data as any).code || 'AUTH_ERROR';
const msg = (data as any).message || '';
console.warn(`[Auth] ${path} failed:`, response.status, code, msg);
throw new Error(code);
}
return data as any;
@@ -84,14 +87,26 @@ export const AuthService = {
return session;
},
async login(email: string, password: string): Promise<AuthSession> {
const data = await authPost('/auth/login', { email, password });
const session = buildSession(data);
await SecureStore.setItemAsync(SESSION_KEY, JSON.stringify(session));
return session;
},
async logout(): Promise<void> {
async login(email: string, password: string): Promise<AuthSession> {
const data = await authPost('/auth/login', { email, password });
const session = buildSession(data);
await SecureStore.setItemAsync(SESSION_KEY, JSON.stringify(session));
return session;
},
async signInWithApple(params: {
identityToken: string;
appleUser?: string | null;
email?: string | null;
name?: string | null;
}): Promise<AuthSession> {
const data = await authPost('/auth/apple', params);
const session = buildSession(data);
await SecureStore.setItemAsync(SESSION_KEY, JSON.stringify(session));
return session;
},
async logout(): Promise<void> {
await clearStoredSession();
},

View File

@@ -31,35 +31,37 @@ export interface EntitlementState {
renewsAt: string | null;
}
export interface BillingSummary {
entitlement: EntitlementState;
credits: CreditState;
availableProducts: PurchaseProductId[];
}
export interface BillingSummary {
entitlement: EntitlementState;
credits: CreditState;
availableProducts: PurchaseProductId[];
}
export interface RevenueCatEntitlementInfo {
productIdentifier?: string;
expirationDate?: string | null;
expiresDate?: string | null;
periodType?: string | null;
period_type?: string | null;
}
export interface RevenueCatNonSubscriptionTransaction {
productIdentifier?: string;
transactionIdentifier?: string;
transactionId?: string;
purchaseDate?: string | null;
}
export interface RevenueCatCustomerInfo {
appUserId?: string | null;
originalAppUserId?: string | null;
entitlements: {
active: Record<string, RevenueCatEntitlementInfo>;
};
nonSubscriptions?: Record<string, RevenueCatNonSubscriptionTransaction[]>;
allPurchasedProductIdentifiers?: string[];
latestExpirationDate?: string | null;
}
export interface RevenueCatNonSubscriptionTransaction {
productIdentifier?: string;
transactionIdentifier?: string;
transactionId?: string;
purchaseDate?: string | null;
}
export interface RevenueCatCustomerInfo {
appUserId?: string | null;
originalAppUserId?: string | null;
entitlements: {
active: Record<string, RevenueCatEntitlementInfo>;
};
nonSubscriptions?: Record<string, RevenueCatNonSubscriptionTransaction[]>;
allPurchasedProductIdentifiers?: string[];
latestExpirationDate?: string | null;
}
export interface ScanPlantRequest {
userId: string;
@@ -112,16 +114,16 @@ export interface HealthCheckResponse {
billing: BillingSummary;
}
export interface ServiceHealthResponse {
ok: boolean;
uptimeSec: number;
timestamp: string;
openAiConfigured: boolean;
dbReady?: boolean;
dbPath?: string;
scanModel?: string;
healthModel?: string;
}
export interface ServiceHealthResponse {
ok: boolean;
uptimeSec: number;
timestamp: string;
openAiConfigured: boolean;
dbReady?: boolean;
dbPath?: string;
scanModel?: string;
healthModel?: string;
}
export interface SimulatePurchaseRequest {
userId: string;
@@ -143,21 +145,21 @@ export interface SimulateWebhookRequest {
};
}
export interface SimulateWebhookResponse {
event: SimulatedWebhookEvent;
billing: BillingSummary;
}
export type RevenueCatSyncSource =
| 'app_init'
| 'subscription_purchase'
| 'topup_purchase'
| 'restore';
export interface SyncRevenueCatStateResponse {
billing: BillingSummary;
syncedAt: string;
}
export interface SimulateWebhookResponse {
event: SimulatedWebhookEvent;
billing: BillingSummary;
}
export type RevenueCatSyncSource =
| 'app_init'
| 'subscription_purchase'
| 'topup_purchase'
| 'restore';
export interface SyncRevenueCatStateResponse {
billing: BillingSummary;
syncedAt: string;
}
export type BackendErrorCode =
| 'INSUFFICIENT_CREDITS'
@@ -165,7 +167,8 @@ export type BackendErrorCode =
| 'TIMEOUT'
| 'NETWORK_ERROR'
| 'PROVIDER_ERROR'
| 'BAD_REQUEST';
| 'BAD_REQUEST'
| 'NOT_A_PLANT';
export class BackendApiError extends Error {
public readonly code: BackendErrorCode;

View File

@@ -29,9 +29,10 @@ import { IdentificationResult, PlantHealthCheck } from '../../types';
const MOCK_ACCOUNT_STORE_KEY = 'greenlens_mock_backend_accounts_v1';
const MOCK_IDEMPOTENCY_STORE_KEY = 'greenlens_mock_backend_idempotency_v1';
const FREE_MONTHLY_CREDITS = 15;
const GUEST_TRIAL_CREDITS = 5;
const PRO_MONTHLY_CREDITS = 250;
const FREE_MONTHLY_CREDITS = 0;
const GUEST_TRIAL_CREDITS = 0;
const TRIAL_MONTHLY_CREDITS = 30;
const PRO_MONTHLY_CREDITS = 100;
const SCAN_PRIMARY_COST = 1;
const SCAN_REVIEW_COST = 1;
@@ -42,14 +43,14 @@ const LOW_CONFIDENCE_REVIEW_THRESHOLD = 0.8;
const FREE_SIMULATED_DELAY_MS = 1100;
const PRO_SIMULATED_DELAY_MS = 280;
const TOPUP_DEFAULT_CREDITS = 60;
const TOPUP_DEFAULT_CREDITS = 100;
const TOPUP_CREDITS_BY_PRODUCT: Record<PurchaseProductId, number> = {
monthly_pro: 0,
yearly_pro: 0,
topup_small: 25,
topup_medium: 120,
topup_large: 300,
topup_small: 30,
topup_medium: 100,
topup_large: 250,
};
const REVENUECAT_PRO_ENTITLEMENT_ID = (process.env.EXPO_PUBLIC_REVENUECAT_PRO_ENTITLEMENT_ID || 'pro').trim() || 'pro';
@@ -100,10 +101,27 @@ const getCycleBounds = (now: Date) => {
return { cycleStartedAt, cycleEndsAt };
};
const getMonthlyAllowanceForPlan = (plan: PlanId, userId?: string): number => {
if (userId === 'guest') return GUEST_TRIAL_CREDITS;
return plan === 'pro' ? PRO_MONTHLY_CREDITS : FREE_MONTHLY_CREDITS;
};
const getMonthlyAllowanceForPlan = (plan: PlanId, userId?: string): number => {
if (userId === 'guest') return GUEST_TRIAL_CREDITS;
return plan === 'pro' ? PRO_MONTHLY_CREDITS : FREE_MONTHLY_CREDITS;
};
const getRevenueCatPeriodType = (source?: RevenueCatEntitlementInfo | null): string => {
return String(source?.periodType || source?.period_type || '').trim().toLowerCase();
};
const isRevenueCatTrial = (source?: RevenueCatEntitlementInfo | null): boolean => {
return getRevenueCatPeriodType(source) === 'trial';
};
const isAllowedMonthlyAllowance = (account: MockAccountRecord): boolean => {
if (account.userId === 'guest') return account.monthlyAllowance === GUEST_TRIAL_CREDITS;
if (account.plan === 'pro') {
return account.monthlyAllowance === PRO_MONTHLY_CREDITS
|| account.monthlyAllowance === TRIAL_MONTHLY_CREDITS;
}
return account.monthlyAllowance === FREE_MONTHLY_CREDITS;
};
const getSimulatedDelay = (plan: PlanId): number => {
return plan === 'pro' ? PRO_SIMULATED_DELAY_MS : FREE_SIMULATED_DELAY_MS;
@@ -185,11 +203,11 @@ const buildDefaultAccount = (userId: string, now: Date): MockAccountRecord => {
};
const alignAccountToCurrentCycle = (account: MockAccountRecord, now: Date): MockAccountRecord => {
const next = { ...account };
const expectedMonthlyAllowance = getMonthlyAllowanceForPlan(next.plan, next.userId);
if (next.monthlyAllowance !== expectedMonthlyAllowance) {
next.monthlyAllowance = expectedMonthlyAllowance;
}
const next = { ...account };
const expectedMonthlyAllowance = getMonthlyAllowanceForPlan(next.plan, next.userId);
if (!isAllowedMonthlyAllowance(next)) {
next.monthlyAllowance = expectedMonthlyAllowance;
}
if (!next.renewsAt && next.plan === 'pro' && next.provider === 'mock') {
next.renewsAt = addDays(now, 30).toISOString();
@@ -215,10 +233,11 @@ const getOrCreateAccount = (stores: { accounts: AccountStore }, userId: string):
return aligned;
};
const getAvailableCredits = (account: MockAccountRecord): number => {
const monthlyRemaining = Math.max(0, account.monthlyAllowance - account.usedThisCycle);
return monthlyRemaining + Math.max(0, account.topupBalance);
};
const getAvailableCredits = (account: MockAccountRecord): number => {
if (account.plan !== 'pro') return 0;
const monthlyRemaining = Math.max(0, account.monthlyAllowance - account.usedThisCycle);
return monthlyRemaining + Math.max(0, account.topupBalance);
};
const buildBillingSummary = (account: MockAccountRecord): BillingSummary => {
return {
@@ -296,10 +315,18 @@ const writeIdempotentResponse = <T,>(store: IdempotencyStore, key: string, value
};
};
const consumeCredits = (account: MockAccountRecord, cost: number): number => {
if (cost <= 0) return 0;
const available = getAvailableCredits(account);
const consumeCredits = (account: MockAccountRecord, cost: number): number => {
if (cost <= 0) return 0;
if (account.plan !== 'pro') {
throw new BackendApiError(
'INSUFFICIENT_CREDITS',
`Insufficient credits. Required ${cost}, available 0.`,
402,
{ required: cost, available: 0 },
);
}
const available = getAvailableCredits(account);
if (available < cost) {
throw new BackendApiError(
'INSUFFICIENT_CREDITS',
@@ -323,8 +350,18 @@ const consumeCredits = (account: MockAccountRecord, cost: number): number => {
remaining -= topupUsage;
}
return cost;
};
return cost;
};
const ensureActiveProEntitlement = (account: MockAccountRecord, requiredCredits: number): void => {
if (account.plan === 'pro') return;
throw new BackendApiError(
'INSUFFICIENT_CREDITS',
`Insufficient credits. Required ${requiredCredits}, available 0.`,
402,
{ required: requiredCredits, available: 0 },
);
};
const consumeCreditsWithIdempotency = (
account: MockAccountRecord,
@@ -705,10 +742,29 @@ export const mockBackendService = {
});
if (source !== 'topup_purchase') {
account.plan = proEntitlement ? 'pro' : 'free';
const now = new Date();
const previousPlan = account.plan;
const previousMonthlyAllowance = account.monthlyAllowance;
const nextPlan = proEntitlement ? 'pro' : 'free';
const nextMonthlyAllowance = proEntitlement && isRevenueCatTrial(proEntitlement)
? TRIAL_MONTHLY_CREDITS
: getMonthlyAllowanceForPlan(nextPlan, account.userId);
const planChanged = previousPlan !== nextPlan;
const trialConvertedToPaid = previousPlan === 'pro'
&& previousMonthlyAllowance === TRIAL_MONTHLY_CREDITS
&& nextMonthlyAllowance === PRO_MONTHLY_CREDITS;
account.plan = nextPlan;
account.provider = 'revenuecat';
account.monthlyAllowance = getMonthlyAllowanceForPlan(account.plan, account.userId);
account.monthlyAllowance = nextMonthlyAllowance;
account.renewsAt = proEntitlement?.expirationDate || proEntitlement?.expiresDate || null;
if (planChanged || trialConvertedToPaid) {
const { cycleStartedAt, cycleEndsAt } = getCycleBounds(now);
account.cycleStartedAt = cycleStartedAt.toISOString();
account.cycleEndsAt = cycleEndsAt.toISOString();
account.usedThisCycle = 0;
}
}
for (const transaction of normalizeRevenueCatTransactions(request.customerInfo)) {
@@ -916,12 +972,14 @@ export const mockBackendService = {
}
const normalizedImageUri = request.imageUri.trim();
if (!normalizedImageUri) {
throw new BackendApiError('BAD_REQUEST', 'Health check requires an image URI.', 400);
}
if (!openAiScanService.isConfigured()) {
throw new BackendApiError(
if (!normalizedImageUri) {
throw new BackendApiError('BAD_REQUEST', 'Health check requires an image URI.', 400);
}
ensureActiveProEntitlement(account, HEALTH_CHECK_COST);
if (!openAiScanService.isConfigured()) {
throw new BackendApiError(
'PROVIDER_ERROR',
'OpenAI health check is unavailable. Please configure EXPO_PUBLIC_OPENAI_API_KEY.',
502,

View File

@@ -1,4 +1,5 @@
import { CareInfo, IdentificationResult, Language } from '../../types';
import { BackendApiError } from './contracts';
type OpenAiScanMode = 'primary' | 'review';
@@ -164,7 +165,8 @@ const buildPrompt = (language: Language, mode: OpenAiScanMode): string => {
return [
`${reviewInstruction}`,
`Return strict JSON only in this shape:`,
`If the image does not clearly show a plant (e.g. it shows a person, animal, object, or has no identifiable plant), return {"notAPlant":true} and nothing else.`,
`Otherwise return strict JSON only in this shape:`,
`{"name":"...","botanicalName":"...","confidence":0.0,"description":"...","careInfo":{"waterIntervalDays":7,"light":"...","temp":"..."}}`,
`Rules:`,
nameLanguageInstruction,
@@ -389,10 +391,37 @@ const extractMessageContent = (payload: unknown): string => {
return '';
};
const isReasoningModel = (model: string): boolean => {
const normalized = model.toLowerCase();
return normalized.startsWith('gpt-5') || normalized.startsWith('o1') || normalized.startsWith('o3') || normalized.startsWith('o4');
};
const buildRequestBody = (
model: string,
messages: Array<Record<string, unknown>>,
maxCompletionTokens: number,
): Record<string, unknown> => {
const body: Record<string, unknown> = {
model,
response_format: { type: 'json_object' },
messages,
};
if (isReasoningModel(model)) {
body.reasoning_effort = 'minimal';
body.max_completion_tokens = maxCompletionTokens;
} else {
body.max_tokens = maxCompletionTokens;
}
return body;
};
const postChatCompletion = async (
modelChain: string[],
imageUri: string,
messages: Array<Record<string, unknown>>,
maxCompletionTokens = 600,
): Promise<{ payload: Record<string, unknown> | null; modelUsed: string | null; attemptedModels: string[] }> => {
const attemptedModels: string[] = [];
@@ -408,11 +437,7 @@ const postChatCompletion = async (
'Content-Type': 'application/json',
Authorization: `Bearer ${OPENAI_API_KEY}`,
},
body: JSON.stringify({
model,
response_format: { type: 'json_object' },
messages,
}),
body: JSON.stringify(buildRequestBody(model, messages, maxCompletionTokens)),
signal: controller.signal,
});
@@ -470,10 +495,11 @@ export const openAiScanService = {
role: 'user',
content: [
{ type: 'text', text: buildPrompt(language, mode) },
{ type: 'image_url', image_url: { url: imageUri } },
{ type: 'image_url', image_url: { url: imageUri, detail: 'low' } },
],
},
],
600,
);
if (!completion.payload) return null;
@@ -498,6 +524,10 @@ export const openAiScanService = {
return null;
}
if (parsed.notAPlant === true) {
throw new BackendApiError('NOT_A_PLANT', 'Image does not contain a plant.', 422);
}
const normalized = normalizeResult(parsed, language);
if (!normalized) {
console.warn('OpenAI plant scan JSON did not match required schema.', {
@@ -533,10 +563,11 @@ export const openAiScanService = {
role: 'user',
content: [
{ type: 'text', text: buildHealthPrompt(language, plantContext) },
{ type: 'image_url', image_url: { url: imageUri } },
{ type: 'image_url', image_url: { url: imageUri, detail: 'low' } },
],
},
],
800,
);
if (!completion.payload) return buildFallbackHealthAnalysis(language, plantContext);

View File

@@ -31,15 +31,26 @@ export const initDatabase = (): void => {
created_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE IF NOT EXISTS user_settings (
user_id INTEGER PRIMARY KEY REFERENCES users(id) ON DELETE CASCADE,
language TEXT NOT NULL DEFAULT 'de',
language_set INTEGER NOT NULL DEFAULT 0,
appearance_mode TEXT NOT NULL DEFAULT 'system',
color_palette TEXT NOT NULL DEFAULT 'forest',
profile_image TEXT,
onboarding_done INTEGER NOT NULL DEFAULT 0
);
CREATE TABLE IF NOT EXISTS user_settings (
user_id INTEGER PRIMARY KEY REFERENCES users(id) ON DELETE CASCADE,
language TEXT NOT NULL DEFAULT 'de',
language_set INTEGER NOT NULL DEFAULT 0,
appearance_mode TEXT NOT NULL DEFAULT 'system',
color_palette TEXT NOT NULL DEFAULT 'forest',
profile_image TEXT,
onboarding_done INTEGER NOT NULL DEFAULT 0
);
CREATE TABLE IF NOT EXISTS user_onboarding_profile (
user_id INTEGER PRIMARY KEY REFERENCES users(id) ON DELETE CASCADE,
acquisition_source TEXT,
primary_goal TEXT,
experience_level TEXT,
lexicon_explored INTEGER NOT NULL DEFAULT 0,
customization_done INTEGER NOT NULL DEFAULT 0,
created_at TEXT NOT NULL DEFAULT (datetime('now')),
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
);
CREATE TABLE IF NOT EXISTS plants (
id TEXT PRIMARY KEY,
@@ -193,7 +204,81 @@ export const SettingsDb = {
// ─── Plants ────────────────────────────────────────────────────────────────────
const DEFAULT_CARE_INFO: CareInfo = {
export const OnboardingProfileDb = {
get(userId: number) {
const db = getDb();
db.runSync('INSERT OR IGNORE INTO user_onboarding_profile (user_id) VALUES (?)', [userId]);
return db.getFirstSync<{
acquisition_source: string | null;
primary_goal: string | null;
experience_level: string | null;
lexicon_explored: number;
customization_done: number;
}>('SELECT * FROM user_onboarding_profile WHERE user_id = ?', [userId])!;
},
setAcquisitionSource(userId: number, source: string) {
const db = getDb();
db.runSync(
`INSERT INTO user_onboarding_profile (user_id, acquisition_source, updated_at)
VALUES (?, ?, datetime('now'))
ON CONFLICT(user_id) DO UPDATE SET
acquisition_source = excluded.acquisition_source,
updated_at = datetime('now')`,
[userId, source],
);
},
setPrimaryGoal(userId: number, goal: string) {
const db = getDb();
db.runSync(
`INSERT INTO user_onboarding_profile (user_id, primary_goal, updated_at)
VALUES (?, ?, datetime('now'))
ON CONFLICT(user_id) DO UPDATE SET
primary_goal = excluded.primary_goal,
updated_at = datetime('now')`,
[userId, goal],
);
},
setExperienceLevel(userId: number, level: string) {
const db = getDb();
db.runSync(
`INSERT INTO user_onboarding_profile (user_id, experience_level, updated_at)
VALUES (?, ?, datetime('now'))
ON CONFLICT(user_id) DO UPDATE SET
experience_level = excluded.experience_level,
updated_at = datetime('now')`,
[userId, level],
);
},
setLexiconExplored(userId: number, explored: boolean) {
const db = getDb();
db.runSync(
`INSERT INTO user_onboarding_profile (user_id, lexicon_explored, updated_at)
VALUES (?, ?, datetime('now'))
ON CONFLICT(user_id) DO UPDATE SET
lexicon_explored = excluded.lexicon_explored,
updated_at = datetime('now')`,
[userId, explored ? 1 : 0],
);
},
setCustomizationDone(userId: number, done: boolean) {
const db = getDb();
db.runSync(
`INSERT INTO user_onboarding_profile (user_id, customization_done, updated_at)
VALUES (?, ?, datetime('now'))
ON CONFLICT(user_id) DO UPDATE SET
customization_done = excluded.customization_done,
updated_at = datetime('now')`,
[userId, done ? 1 : 0],
);
},
};
const DEFAULT_CARE_INFO: CareInfo = {
waterIntervalDays: 7,
light: 'Bright indirect light',
temp: '18-25 C',

Some files were not shown because too many files have changed in this diff Show More