- 🚀 I build fast, accessible web & mobile experiences.
- 🧩 I focus on clean architecture, great DX, and scalable systems.
- 🌱 Exploring advanced Next.js (App Router, RSC, caching) + testing.
- 🤝 Open to freelance & collaboration on React / Next.js / Node projects.
- 💳 Stripe integration expert — subscriptions, one‑time payments, and Stripe Connect (Standard/Express/Custom) set up seamlessly.
What I use day-to-day
- Frontend: React 18, Next.js (App Router), Tailwind, Redux Toolkit
- Backend: Node.js, Express, REST (with OpenAPI), JWT
- DB & Infra: MongoDB (Mongoose), Vercel, CI/CD (GitHub Actions)
- Quality: ESLint, Prettier, Vitest/Jest, Playwright
- Subscriptions: products/prices, free trials, proration, metered billing, customer portal.
- One‑time payments: Checkout, Payment Element, promo codes, taxes, invoices.
- Stripe Connect: Standard/Express/Custom, onboarding, payouts, destination/transfer charges.
- Webhooks & Reliability: signature verification, idempotency keys, retry‑safe flows.
- Compliance: SCA-ready, PCI‑compliant flows via Elements/Checkout.
Quick demo code (Node/Next.js)
// /app/api/checkout/route.ts – one-time payment
import Stripe from 'stripe';
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, { apiVersion: '2024-06-20' });
export async function POST() {
const session = await stripe.checkout.sessions.create({
mode: 'payment',
line_items: [{ price: process.env.STRIPE_PRICE_ONE_TIME!, quantity: 1 }],
success_url: `${process.env.NEXT_PUBLIC_URL}/success?session_id={CHECKOUT_SESSION_ID}`,
cancel_url: `${process.env.NEXT_PUBLIC_URL}/cancel`,
});
return Response.json({ url: session.url });
}// /app/api/subscribe/route.ts – subscription
export async function POST() {
const session = await stripe.checkout.sessions.create({
mode: 'subscription',
line_items: [{ price: process.env.STRIPE_PRICE_SUBSCRIPTION!, quantity: 1 }],
allow_promotion_codes: true,
success_url: `${process.env.NEXT_PUBLIC_URL}/dashboard`,
cancel_url: `${process.env.NEXT_PUBLIC_URL}/pricing`,
});
return Response.json({ url: session.url });
}// /app/api/connect/onboard/route.ts – Connect Express onboarding link
export async function GET() {
const account = await stripe.accounts.create({ type: 'express' });
const link = await stripe.accountLinks.create({
account: account.id,
refresh_url: `${process.env.NEXT_PUBLIC_URL}/onboarding/refresh`,
return_url: `${process.env.NEXT_PUBLIC_URL}/onboarding/return`,
type: 'account_onboarding',
});
return Response.json({ url: link.url });
}// /app/api/webhooks/stripe/route.ts – webhook (Edge-disabled for crypto libs)
import { headers } from 'next/headers';
export async function POST(req: Request) {
const sig = headers().get('stripe-signature')!;
const raw = await req.text();
let event;
try {
event = stripe.webhooks.constructEvent(raw, sig, process.env.STRIPE_WEBHOOK_SECRET!);
} catch (err) {
return new Response('Invalid signature', { status: 400 });
}
// handle event.type ...
return new Response('ok');
}- Email: [email protected]
- LinkedIn: linkedin.com/in/shakilkhan496
- Portfolio: shakil-khan-portfolio.vercel.app
🚀 Let’s build, monetize, and scale with Stripe & Next.js!


