Skip to content
perria080925-botPublic

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

AdSlotKit

AdSlotKit is a micro SaaS for newsletter operators who want to sell direct sponsorship slots without stitching together a Google Doc, inbox threads, and a spreadsheet.

Product

  • Public sponsorship media kit at /m/[slug]
  • Private dashboard at /dashboard
  • Supabase email/password authentication
  • Supabase Postgres database with RLS policies
  • Sponsorship package builder
  • Public sponsor inquiry form
  • Sponsor lead status tracking
  • Stripe Checkout subscription for Pro
  • Stripe webhook to unlock Pro access
  • Stripe Billing Portal for subscription management

Pricing

  • Free: one media kit, 2 active sponsorship packages, lead capture
  • Pro: $19/month, unlimited active sponsorship packages and full lead workflow

Environment Variables

The app expects these values:

NEXT_PUBLIC_APP_URL=
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=
SUPABASE_SERVICE_ROLE_KEY=
STRIPE_SECRET_KEY=
STRIPE_PUBLISHABLE_KEY=
STRIPE_WEBHOOK_SECRET=
OPENAI_API_KEY=
COMPOSIO_API_KEY=
OPENAI_AGENT_MODEL=
COMPOSIO_ALLOWED_TOOLKITS=
COMPOSIO_ALLOWED_TOOLS=

NEXT_PUBLIC_APP_URL must be set to the production Vercel URL after deploy so Stripe redirects and Supabase email links resolve correctly. OPENAI_AGENT_MODEL is optional and defaults to gpt-4.1. COMPOSIO_ALLOWED_TOOLKITS is optional and defaults to apollo,linkedin,gmail,hubspot; use a comma-separated list to allow different toolkits. COMPOSIO_ALLOWED_TOOLS is optional; use a comma-separated list to limit the exact Composio tools exposed to the agent.

Supabase Setup

Run the SQL in supabase/schema.sql in the Supabase SQL editor, or via a trusted SQL client connected to the Supabase Postgres database.

The schema creates:

  • profiles
  • media_kits
  • sponsorship_packages
  • sponsor_leads
  • indexes, triggers, and row-level security policies

Stripe Setup

The app uses Stripe Checkout with inline recurring price_data, so it does not require a pre-created Stripe Price ID.

Configure a webhook endpoint:

POST https://YOUR_DOMAIN/api/stripe/webhook

Subscribe to these events:

  • checkout.session.completed
  • customer.subscription.updated
  • customer.subscription.deleted

Copy the webhook signing secret into STRIPE_WEBHOOK_SECRET.

Development

npm install
npm run dev

Open http://localhost:3000.

Composio Agent MCP

Authenticated users can run the OpenAI Agents SDK through a Composio hosted MCP session:

POST /api/agents/composio

Example body:

{
  "prompt": "Find 5 sponsor prospects, verify LinkedIn context, create Gmail drafts, and log each lead in HubSpot.",
  "toolkits": ["apollo", "linkedin", "gmail", "hubspot"]
}

The dashboard includes a sponsor prospecting agent that uses the current media kit and packages as context. The agent is instructed to create Gmail drafts only, not send emails or activate outreach campaigns without an explicit request.

Verification

npm run typecheck
npm run lint
npm run build
npm run test:security

User Flow

  1. Visitor lands on the homepage.
  2. Visitor creates a free account.
  3. User creates a media kit with newsletter metrics and proof points.
  4. User adds up to 2 active sponsorship packages on Free.
  5. User shares /m/[slug] with sponsor prospects.
  6. Sponsor submits an inquiry.
  7. User tracks the lead in the dashboard.
  8. User upgrades to Pro through Stripe to publish more packages.
  9. Stripe webhook updates profiles.plan to pro.

Acquisition Plan

See docs/acquisition/first-customers.md for target profiles, keywords, Reddit communities, ethical outreach scripts, and conversion workflow.

Research

See docs/research/idea-selection.md for the 10-idea evaluation and why AdSlotKit was selected.


Last updated: 2026-06-04

About

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages