A collection of Norwegian handcrafts on an oak shelf

About this app

NorskHandverk

A full-stack demo web shop for handmade Norwegian crafts. It covers the whole path of an order: browsing, cart, Stripe payment, order history and cancellation with refund.

Try the payment flow

Payments run in Stripe test mode, so no real money is charged and no orders are shipped. Create an account, add something to your cart and pay with the test card 4242 4242 4242 4242, any future expiry date and any CVC.

Highlights

Secure payment flow

Order totals are calculated on the server. Stripe webhooks are verified with their signature before an order is marked as paid.

Safe checkout retries

Refreshing or retrying checkout reuses the existing payment intent instead of creating duplicate orders or charges.

Cancellations and refunds

Unpaid orders cancel their payment intent, paid orders are refunded through Stripe, and reserved stock is returned.

Role-based access

Customers only reach their own profile, cart and orders. The customer id always comes from the token, never from the request.

Order history that stays correct

Product name, price and VAT are copied into each order line, so later price changes do not rewrite past orders.

Light and dark theme

Colors are defined as design tokens, so the whole interface switches theme from one place.

Tech stack

Backend
ASP.NET Core 9 Web API, Entity Framework Core, AutoMapper
Database
PostgreSQL
Frontend
Next.js 16, React 19, TypeScript, Tailwind CSS 4
Payments
Stripe Payment Intents, webhooks, refunds
Auth
JWT bearer tokens with customer and admin roles