Setup
Every variable the console runs on, what each one does, and where the platform lives.
Everything in the first section is a real variable — change it and the console behaves differently on the next screen you open. It is stored in this browser alongside your leads, so it follows the machine, not the account. Passwords are not here: they sit in environment variables on the server, further down the page.
Who you are
Used in the console header and in anything it sends. Changing your email here does not change the mailbox it sends from — that is the SMTP_USER environment variable further down.
Scraper defaults
What the Scrape screen starts with every time you open it. You can still change any of it for a single run without touching this.
What the Scrape screen has already ticked when you open it. 4 selected.
OpenStreetMap is the map itself. MerchantCircle is a business directory. Yelp, YellowPages, Manta and Hotfrog refuse server-side requests, which is why they are not options.
Pipeline
How leads behave once they are in the Leads tab.
Reply tracking
How the Inbox reads your mailbox and ties answers back to leads.
Everything this platform runs on
Every account and dashboard behind the console, the website and the mailbox — so you never have to hunt for a URL again. Edit any of them; they are yours.
Shared database
Configured, but signed out — so this console is working on its own copy. Sign in with the Supabase account you created under Authentication and the pipeline becomes shared. The rules grant an anonymous caller nothing, which is why the public API key is safe to ship.
AI email writer
Status: checking…
Open a lead that has an email address and press Write. It reads that business’s own website, takes everything on the lead, and drafts from what we actually sell. Nothing is sent — you copy it and send it from your own mailbox, which is what keeps a first contact reading like a person rather than a campaign.
GEMINI_API_KEY=... # server-side only, never in the browser GEMINI_MODEL=gemini-3.5-flash # optional — this is already the default
- · Four models are tried in order. If the first is retired or overloaded the next takes over, and a rolling
-latestalias sits in the chain so a retirement cannot strand it. - · The draft tells you when a fallback wrote it, since the writing can read differently.
- · The free tier is rate-limited per minute. A rejection is usually that, not the key.
- · The website read happens on the server: a browser cannot fetch another site.
- · The draft is checked for leftover [placeholders] before you see it.
Bank details for invoices
Sign in to the shared database to see them. They are stored there, behind the allowlist — not in this app’s code, because anything in the code is in the JavaScript every visitor downloads.
These do not go on the website. A routing number and account number together are enough for someone to attempt an ACH debit against the account, and a publicly listed one invites the invoice scam where your customer is sent altered details and pays a stranger. Send them to a named customer on an invoice instead. If you want a payment route on the public site, use a processor’s hosted checkout — Stripe or Wise — where the account number stays private and every payment is traceable to an invoice.
Mailbox — server side
- Sending (SMTP)
- checking…
- Reply tracking (IMAP)
- checking…
These five are set on the server, not here — a browser cannot hold a password safely. Put them in .env.local for local work and in Vercel → Settings → Environment Variables for the live console. I never see the value.
SMTP_HOST=smtpout.secureserver.net SMTP_PORT=587 SMTP_USER=gieeksoftware@gieek.store SMTP_PASS=your-mailbox-password SMTP_FROM="Gieek Software Solutions <gieeksoftware@gieek.store>"
- · Reply tracking reuses
SMTP_USERandSMTP_PASSand works out the matching IMAP host on its own. - · It is the Titan mailbox password, not a Google App Password.
- · Titan allows roughly 300 recipients a day.
- · Reply tracking only reads — nothing is deleted, moved or marked as read.
- · Restart the dev server after editing .env.local.
“Authentication failed” with a password you know is right? Check the value in Vercel actually got updated, then confirm IMAP/SMTP access is switched on for the mailbox in its own control panel. Some hosts ship it disabled and the only symptom is this error.
Website enquiries — server side
Status: connected — sign in on the Inbox tab
The public site writes every enquiry into the shared database and this console reads it. Both apps use the same two public values. Free, no daily limit, about five minutes:
- 01Create a free project at supabase.com (no card).
- 02SQL Editor -> run supabase-schema.sql from the repo.
- 03Authentication -> Add user -> that is your login.
- 04Add yourself to the members table with the SQL in the repo README.
- 05Project Settings -> API: copy the URL and the anon public key.
- 06Add NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_ANON_KEY to both Vercel projects, then redeploy.
NEXT_PUBLIC_SUPABASE_URL=https://xxxx.supabase.co NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...
Both values are public by design; Row Level Security on the database is what protects the data. A website visitor may create an enquiry and nothing else, and everything the console shares needs a signed-in account on the members allowlist. The full schema and policies are in supabase-schema.sql.
Your data
0 leads, 0 saved scrape runs and every setting on this page are stored in this browser only. No database, no monthly bill, nothing to leak — and clearing site data wipes all of it. Export before you switch machines or browsers.
Start over
Deletes the leads, the scrape history, and the record of every business ever scraped — so the next run treats the whole map as new ground. This browser only. The shared database is not connected, so any other machine keeps its own copy until you connect it. Website enquiries and your settings are left alone. There is no undo — export first if you might want any of it back.