Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

## Unreleased

### Templates: Vercel added to Next.js / SaaS starters

- **`nextjs-supabase-posthog`** now provisions Vercel alongside Supabase + PostHog. The site catalog already advertised Vercel under this template — the underlying `stack.toml` was missing the service, so `stack init --template nextjs-supabase-posthog` left users without a deploy target. Site copy and `stack.toml` now agree.
- **`supabase-posthog-sentry-resend`** (the maximal SaaS starter) gains Vercel as a deploy target. Anyone running this stack ships to Vercel or Cloudflare in practice; Cloudflare has its own template, so Vercel is the right default here.
- Other templates unchanged: `nextjs-neon-vercel-sentry` already had Vercel; `cloudflare-turso-clerk` and `claude-agent-openai-anthropic` legitimately don't deploy to Vercel.
- Updated surfaces: `templates/*/stack.toml`, `packages/site/src/lib/templates-ref.ts`, `packages/site/src/components/Templates.astro`, `packages/site/public/llms.txt`, `packages/site/public/llms-full.txt`.

### SEO + GEO content surface (major)

- **29 programmatic provider pages** — new dynamic route at `/providers/[slug]` driven by `packages/core/src/catalog.ts`. Adding a provider to catalog auto-mints a page at build time. Each page: hero with brand logo, auth-flow explainer, secret-slot breakdown, MCP wiring status, `stack add` snippet, `stack recommend` trigger, related providers, templates that include it, FAQ, outbound dashboard + docs links. JSON-LD: TechArticle + BreadcrumbList + FAQPage.
Expand Down
4 changes: 2 additions & 2 deletions packages/site/public/llms-full.txt
Original file line number Diff line number Diff line change
Expand Up @@ -390,10 +390,10 @@ For providers needing an OAuth app, Ashlr registers a single "Ashlr Stack" app p

Templates are TOML + shell recipes under `templates/` in the source repo. Run `stack templates` for the live list.

- **nextjs-supabase-posthog** — Next.js 15 + Supabase + PostHog + PostHog feature flags. App-router, server components, Tailwind.
- **nextjs-supabase-posthog** — Next.js 15 + Supabase + Vercel deploy + PostHog + PostHog feature flags. App-router, server components, Tailwind.
- **nextjs-neon-vercel-sentry** — Next.js + Neon Postgres + Vercel deploy + Sentry error tracking + Drizzle ORM.
- **cloudflare-turso-clerk** — Cloudflare Workers + Turso (libSQL) + Clerk auth. Edge-native, zero cold starts.
- **supabase-posthog-sentry-resend** — Full SaaS baseline: Supabase + PostHog + Sentry + Resend transactional email.
- **supabase-posthog-sentry-resend** — Full SaaS baseline: Supabase + Vercel deploy + PostHog + Sentry + Resend transactional email + Stripe billing.
- **claude-agent-openai-anthropic** — Agent starter with both OpenAI + Anthropic SDKs wired, MCP-ready, Phantom-gated.

Each template wires:
Expand Down
4 changes: 2 additions & 2 deletions packages/site/public/llms.txt
Original file line number Diff line number Diff line change
Expand Up @@ -123,10 +123,10 @@ Full CLI reference: https://stack.ashlr.ai/llms-full.txt

## Templates

- `nextjs-supabase-posthog` — Next.js + Supabase + PostHog
- `nextjs-supabase-posthog` — Next.js + Supabase + Vercel + PostHog
- `nextjs-neon-vercel-sentry` — Next.js + Neon + Vercel + Sentry
- `cloudflare-turso-clerk` — Cloudflare Workers + Turso + Clerk
- `supabase-posthog-sentry-resend` — Supabase + PostHog + Sentry + Resend
- `supabase-posthog-sentry-resend` — Supabase + Vercel + PostHog + Sentry + Resend + Stripe
- `claude-agent-openai-anthropic` — Agent starter with OpenAI + Anthropic

Templates are TOML + shell recipes in `templates/` of the source repo.
Expand Down
12 changes: 6 additions & 6 deletions packages/site/src/components/Templates.astro
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ interface TemplateEntry {
const TEMPLATES: TemplateEntry[] = [
{
id: "nextjs-supabase-posthog",
title: "Next.js + Supabase + PostHog",
blurb: "App Router, Supabase Auth + Postgres, PostHog events from server actions.",
title: "Next.js + Supabase + Vercel + PostHog",
blurb: "App Router, Supabase Auth + Postgres, deployed to Vercel, PostHog events from server actions.",
stack: ["Vercel", "Supabase", "PostHog"],
refNames: ["vercel", "supabase", "posthog"],
accent: "3ECF8E",
Expand All @@ -41,10 +41,10 @@ const TEMPLATES: TemplateEntry[] = [
},
{
id: "supabase-posthog-sentry-resend",
title: "SaaS starter — Supabase · PostHog · Sentry · Resend",
blurb: "Auth, analytics, errors, and transactional email — wired from day one.",
stack: ["Supabase", "PostHog", "Sentry", "Resend"],
refNames: ["supabase", "posthog", "sentry", "resend"],
title: "SaaS starter — Supabase · Vercel · PostHog · Sentry · Resend",
blurb: "Auth, deploy, analytics, errors, and transactional email — wired from day one.",
stack: ["Supabase", "Vercel", "PostHog", "Sentry", "Resend"],
refNames: ["supabase", "vercel", "posthog", "sentry", "resend"],
accent: "F54E00",
},
{
Expand Down
22 changes: 16 additions & 6 deletions packages/site/src/lib/templates-ref.ts
Original file line number Diff line number Diff line change
Expand Up @@ -32,17 +32,22 @@ export interface TemplateRef {
export const TEMPLATES_REF: TemplateRef[] = [
{
name: "nextjs-supabase-posthog",
displayName: "Next.js · Supabase · PostHog",
tagline: "Postgres + auth + product analytics.",
displayName: "Next.js · Supabase · Vercel · PostHog",
tagline: "Postgres + auth + deploy + product analytics.",
blurb:
"The classic Next.js SaaS starting point. Supabase for data + auth, PostHog for analytics and feature flags. Two MCP servers wired (Supabase scoped to your project, PostHog SSE).",
"The classic Next.js SaaS starting point. Supabase for data + auth, Vercel as the deploy target, PostHog for analytics and feature flags. Two MCP servers wired (Supabase scoped to your project, PostHog SSE).",
services: [
{
name: "supabase",
provider: "supabase",
secrets: ["SUPABASE_URL", "SUPABASE_ANON_KEY", "SUPABASE_SERVICE_ROLE_KEY"],
mcp: "supabase",
},
{
name: "vercel",
provider: "vercel",
secrets: ["VERCEL_TOKEN"],
},
{
name: "posthog",
provider: "posthog",
Expand All @@ -51,7 +56,7 @@ export const TEMPLATES_REF: TemplateRef[] = [
},
],
environments: ["dev", "prod"],
goodFor: "Teams that want a full SaaS stack (DB + auth + analytics) in one command.",
goodFor: "Teams that want a full Next.js SaaS stack (DB + auth + deploy + analytics) in one command.",
},
{
name: "nextjs-neon-vercel-sentry",
Expand Down Expand Up @@ -82,17 +87,22 @@ export const TEMPLATES_REF: TemplateRef[] = [
},
{
name: "supabase-posthog-sentry-resend",
displayName: "Supabase · PostHog · Sentry · Resend · Stripe",
displayName: "Supabase · Vercel · PostHog · Sentry · Resend · Stripe",
tagline: 'The "SaaS in a box" template.',
blurb:
"The maximal SaaS starter — DB/auth, analytics, errors, transactional email, and billing all wired in one command. Three MCP servers (Supabase, PostHog, Sentry) come online alongside.",
"The maximal SaaS starter — DB/auth, deploy, analytics, errors, transactional email, and billing all wired in one command. Three MCP servers (Supabase, PostHog, Sentry) come online alongside.",
services: [
{
name: "supabase",
provider: "supabase",
secrets: ["SUPABASE_URL", "SUPABASE_ANON_KEY", "SUPABASE_SERVICE_ROLE_KEY"],
mcp: "supabase",
},
{
name: "vercel",
provider: "vercel",
secrets: ["VERCEL_TOKEN"],
},
{
name: "posthog",
provider: "posthog",
Expand Down
8 changes: 7 additions & 1 deletion templates/nextjs-supabase-posthog/stack.toml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Next.js + Supabase + PostHog starter.
# Next.js + Supabase + Vercel + PostHog starter.
#
# `stack init --template nextjs-supabase-posthog` copies this as .stack.toml.
# Services are stubs (no resource_id yet); `stack add <name>` will provision
Expand All @@ -16,6 +16,12 @@ mcp = "supabase"
created_at = "1970-01-01T00:00:00Z"
created_by = "template"

[services.vercel]
provider = "vercel"
secrets = ["VERCEL_TOKEN"]
created_at = "1970-01-01T00:00:00Z"
created_by = "template"

[services.posthog]
provider = "posthog"
secrets = ["POSTHOG_PROJECT_API_KEY", "POSTHOG_PERSONAL_API_KEY"]
Expand Down
10 changes: 8 additions & 2 deletions templates/supabase-posthog-sentry-resend/stack.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# SaaS starter — Supabase (DB + auth), PostHog (analytics), Sentry (errors),
# Resend (transactional email), Stripe (payments), Clerk (auth, optional).
# SaaS starter — Supabase (DB + auth), Vercel (deploy), PostHog (analytics),
# Sentry (errors), Resend (transactional email), Stripe (payments).

[stack]
version = "1"
Expand All @@ -13,6 +13,12 @@ mcp = "supabase"
created_at = "1970-01-01T00:00:00Z"
created_by = "template"

[services.vercel]
provider = "vercel"
secrets = ["VERCEL_TOKEN"]
created_at = "1970-01-01T00:00:00Z"
created_by = "template"

[services.posthog]
provider = "posthog"
secrets = ["POSTHOG_PERSONAL_API_KEY"]
Expand Down
Loading