# Lunatecz Client Website

> A cinematic Next.js platform for an artist and company running shows, events, services, shop flows, and wearable lighting products.

- URL: https://mandalsuraj.com/blog/lunatecz
- Author: Suraj Mandal (https://mandalsuraj.com)
- Published: 2025-12-19
- Project date: 2025-08-19
- Tags: nextjs, commerce, events, stripe, webdev, fullstack
- Live site: https://lunatecz.com
- Instagram: https://www.instagram.com/lunaivanaa
- YouTube: https://youtube.com/c/LUNAflyttefrem

![Lunatecz Client Website cover](https://mandalsuraj.com/images/blog/lunatecz/cover.png)

Lunatecz is the public site and operating platform for Luna Ivana. It joins an artist portfolio with events, services, products, inquiries, and admin tools.

## Visual Proof

![Lunatecz home viewport screenshot](https://mandalsuraj.com/images/blog/lunatecz/home_screen.png)

![Lunatecz shop viewport screenshot](https://mandalsuraj.com/images/blog/lunatecz/shop_screen.png)

![Lunatecz full home page screenshot](https://mandalsuraj.com/images/blog/lunatecz/home_full.png)

![Lunatecz full shop page screenshot](https://mandalsuraj.com/images/blog/lunatecz/shop_full.png)

## Product Scope

The public site uses full-width performance images, dark surfaces, bright LED color, and editorial type. Business actions stay clear within that visual style.

- Events support several date formats.
- The shop supports stock, carts, checkout, and orders.
- Contact forms create a clear inquiry path.
- Admin pages manage events, media, products, posts, customers, and orders.

![Lunatecz full about page screenshot](https://mandalsuraj.com/images/blog/lunatecz/about_full.png)

![Lunatecz full blog page screenshot](https://mandalsuraj.com/images/blog/lunatecz/blog_full.png)

## Architecture

The stack uses Next.js 16, React 19, TypeScript, Tailwind CSS 4, Drizzle, PostgreSQL, Clerk, Stripe, Redis, and Sentry.

The App Router separates public pages, admin pages, and API routes. Controllers own business rules. The Drizzle schema models contacts, posts, events, products, customers, carts, and orders.

## Safe Checkout

The checkout route validates its input and allowed redirect hosts. It reads product prices from PostgreSQL instead of trusting prices from the browser.

The Stripe webhook verifies its signature and handles repeat events by session ID. It then saves the customer and order snapshot, creates order items, and reduces stock.

Clerk and role checks protect admin routes. Redis caching has a local fallback, while Sentry reports production errors.
