Open-Source Cold Email & Warmup Platform
Warmbly is the open-source platform for cold email: warm your mailboxes, send campaigns, and triage every reply. Run it on our cloud or self-host the whole thing.
Two scores, rule-derived in code. Retrievable out of 100, Citable as a band. Evidence under every finding, and no score at all when the evidence is thin.
MarketingTypeScript · HTMLGitHub @michaeljacobosborne-pngOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗An AI-powered SEO content tool that combines persistent brand memory, Google Ads keyword data, and LLM-generated article drafts into a single workflow.
| Layer | Choice |
|---|---|
| Framework | Next.js 15 (App Router, TypeScript) |
| Styling | Tailwind CSS |
| Database / Auth | Supabase (Postgres + RLS + Auth) |
| AI | OpenAI API |
| Keyword Data | Google Ads Keyword Planner API (Phase 2) |
| Forms | react-hook-form + zod |
| Icons | lucide-react |
npm install
Follow the instructions in supabase/README.md:
supabase/schema.sql in the SQL editorcp .env.local.example .env.local
# Fill in your Supabase URL, anon key, and OpenAI API key
npm run dev
Open http://localhost:3000 — you'll be redirected to /login.
seo-saas/
├── supabase/
│ ├── schema.sql # All tables + RLS policies
│ └── README.md # Supabase setup guide
├── src/
│ ├── app/
│ │ ├── (auth)/ # Login, signup, OAuth callback
│ │ ├── (dashboard)/ # Protected app shell
│ │ │ ├── layout.tsx # Sidebar navigation
│ │ │ ├── dashboard/ # Overview page
│ │ │ ├── brand/ # Brand profile form (WORKING)
│ │ │ ├── keywords/ # Keyword research (Phase 2)
│ │ │ └── articles/ # Article generation (Phase 3)
│ │ ├── api/
│ │ │ ├── keywords/research/ # Stub → Phase 2
│ │ │ └── articles/
│ │ │ ├── generate-brief/ # Stub → Phase 3
│ │ │ └── generate-draft/ # Stub → Phase 3
│ │ └── auth/signout/ # POST handler for sign out
│ ├── lib/supabase/
│ │ ├── client.ts # Browser Supabase client
│ │ ├── server.ts # Server Supabase client (RSC / Route Handlers)
│ │ └── types.ts # TypeScript types for all DB tables
│ └── middleware.ts # Route protection (redirects to /login)
└── .env.local.example
/dashboard, /brand, /keywords, /articles routesPOST /api/keywords/research — Google Ads Keyword Planner integrationPOST /api/articles/generate-brief — AI content brief generationPOST /api/articles/generate-draft — AI article draft generationPhase 2 — Keyword Research
Phase 3 — Article Generation