fix: proxy subscribe through Next.js API route to avoid network permission prompt

Browser was requesting local network access for the Tailscale URL.
Now both forms POST to /api/subscribe which proxies server-side
to the leads-api container.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Alejandro Gutiérrez
2026-02-24 23:30:35 +00:00
parent 24a1284def
commit 4283250eac
3 changed files with 20 additions and 6 deletions

View File

@@ -0,0 +1,18 @@
import { NextRequest, NextResponse } from "next/server";
const API_URL = process.env.LEADS_API_URL || "http://leads-api:3400";
export async function POST(req: NextRequest) {
try {
const body = await req.json();
const res = await fetch(`${API_URL}/subscribe`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(body),
});
const data = await res.json();
return NextResponse.json(data, { status: res.status });
} catch {
return NextResponse.json({ error: "upstream error" }, { status: 502 });
}
}

View File

@@ -2,8 +2,6 @@
import { useState } from "react";
const API_URL = "https://alezmad-nuc.tail58f5ad.ts.net";
export function NewsletterForm({ project = "cladm" }: { project?: string }) {
const [email, setEmail] = useState("");
const [status, setStatus] = useState<"idle" | "loading" | "ok" | "error">("idle");
@@ -14,7 +12,7 @@ export function NewsletterForm({ project = "cladm" }: { project?: string }) {
if (!email.trim()) return;
setStatus("loading");
try {
const res = await fetch(`${API_URL}/subscribe`, {
const res = await fetch("/api/subscribe", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ email: email.trim(), project }),

View File

@@ -2,8 +2,6 @@
import { useState, useEffect, useRef, useCallback } from "react";
const API_URL = "https://alezmad-nuc.tail58f5ad.ts.net";
type Phase = "boot" | "prompt" | "sending" | "done";
const BOOT_LINES = [
@@ -86,7 +84,7 @@ export function SubscribeModal() {
setPhase("sending");
setError("");
try {
const res = await fetch(`${API_URL}/subscribe`, {
const res = await fetch("/api/subscribe", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ email: email.trim(), project: "cladm" }),