JST --:--:--

Setsuna Films

YouTuber website

The website and merch store for Setsuna Films, a YouTube channel about travelling in Japan. Fans buy limited-edition keychains in yen or US dollars, in English or Japanese.

Still from a Setsuna Films video: an empty train carriage at night
The problem

A channel that lives only on YouTube has no place of its own to sell merch or to welcome fans from different countries.

Top highlights

Setsuna Films limited-edition round keychain printed with a night city photo
1

A shop for the channel's merch

Fans can buy limited-edition keychains straight from the channel's own site. Payments are handled securely, with no marketplace in between.

A traveller looking at Mount Fuji, from a Setsuna Films video
2

For fans in Japan and abroad

Everything, from product details to shipping and returns, is written in both English and Japanese. Prices show in yen or US dollars, and customers are always charged in the right currency.

Working at a computer late at night
3

Run the whole store alone

A private dashboard lets the owner add products, frame product photos, handle orders and see which countries visitors come from. No technical help needed.

What it changes for the channel

A home the channel owns

Viewers can learn about the channel and buy products in one place that belongs to Setsuna Films, not to a platform.

Customers always informed

An email goes out automatically when an order is confirmed, shipped with a tracking number, or cancelled.

Open to fans everywhere

Fans in Japan and abroad shop in their own language and currency, so nobody is left out.

Project overview

Client
Setsuna Films, a YouTube channel about travelling in Japan.
My role
Design and full-stack development of the website, the merch store and the admin dashboard.
Deliverables
  • Website in English and Japanese
  • Merch store with Stripe checkout in yen or US dollars
  • Order emails for confirmation, shipping with tracking, and cancellation
  • Admin dashboard for products, photo framing and orders
  • Visitor stats by country

Need a home for your channel or brand with a shop built in? I take on projects like this as a freelance web designer and developer.

Technical details for developers

Stack, architecture and how it is built.

Stack

Backend
Python 3 Flask Flask-SQLAlchemy Flask-Login Flask-Limiter Gunicorn
Frontend
JavaScript Jinja2 HTML5 CSS3
Database & Payments
PostgreSQL Supabase Stripe
Storage
AWS S3
Email
ZeptoMail
Infrastructure
Nginx SSL / HTTPS ProxyFix

Architecture

payments

Stripe × PostgreSQL Order Flow

Customers are redirected to a Stripe Checkout Session with a pre-configured shipping rate. On payment confirmation, Stripe fires a webhook that writes the order, along with line items, shipping address and payment intent, directly into PostgreSQL hosted on Supabase. The database stays in sync with every transaction automatically.

mail

Lifecycle Emails via ZeptoMail

Three automated emails cover the full order lifecycle: confirmation on payment, a shipping notification with tracking number, and a cancellation notice if the order is cancelled. All are sent through ZeptoMail's REST API with SPF/DKIM-verified domains, keeping delivery times in milliseconds and inboxes clean.

cloud_upload

AWS S3 Image Storage with Framing Controls

Product images are uploaded directly to AWS S3 via the admin dashboard. Each image stores its own zoom scale and X/Y offset so admins can frame exactly which part of a photo is visible in the card view, without cropping the original. The framing values are persisted per-image in PostgreSQL and applied client-side at render time.

analytics

Visitor Analytics with Country Tracking

Every non-bot GET request is logged asynchronously in a background thread. The visitor's IP is resolved to a country via ip-api.com without blocking the page load. Bots are filtered by user-agent and duplicate visits are deduplicated per session per day. The admin dashboard surfaces visit counts, country breakdowns, and daily trends in real time.

Under the Hood

credit_card

Stripe Checkout

Stripe Checkout Sessions handle payment with pre-configured JPY and USD shipping rates. Webhooks confirm payment server-side before any order is written to the database.

storage

PostgreSQL on Supabase

All products, images, orders, and visit logs are stored in PostgreSQL hosted on Supabase. IPv4 resolution is handled at startup for reliable connectivity on any server environment.

Want something like this?

I build websites with their own shop for creators and small brands, so fans buy from you directly.