Skip to content
Back to all work
WebsiteClient work

Kształcenie Słuchu eBook Store

A shop that sells and delivers a music theory e-book directly, with no marketplace in between.

Year
2026
Status
Live
Role
Solo: design, front end, back end, deployment.
Kształcenie Słuchu eBook Store

Danuta Kaszuba wrote a 404-page book, Kształcenie słuchu z elementami teorii muzyki, and wanted to sell it herself instead of through a marketplace. Visitors can look inside, buy it and download the PDF. Orders are handled from a private admin panel, so the whole process stays in one place.

Stack

  • Next.js 16
  • React 19
  • TypeScript
  • Tailwind CSS 4
  • SQLite
  • Nodemailer
  • Playwright
  • Docker
  • Traefik
  • Cloudflare Tunnel
  • Proxmox

In practice

  • An interactive piano you can play with the mouse or the computer keyboard, and a reader with 20 sample pages and the full table of contents, so the book can be judged before it is bought.
  • Checkout as a guest or with an account, paying by bank transfer or BLIK to a phone number, with the payment instructions sent by email automatically.
  • A private admin panel to confirm payments and send the e-book. The send button stays locked until the legally required waiting period has passed.
  • The PDF reaches the buyer through a single-use download link valid for 7 days, and it stays available in a library in their account.
  • Customer accounts with email verification, password reset, data export and account deletion.
  • Terms of sale and a privacy policy built into the checkout. The site records which version each customer accepted and whether they agreed to early delivery.
  • The author sells directly, with no payment-provider fees and no marketplace commission. The site uses no analytics and no third-party cookies, so there is no cookie consent banner.
  • Light and dark theme, a contact form, and a layout that works on phones.

How it is built

  • Next.js 16 on the App Router with React 19 and TypeScript, styled with Tailwind 4.
  • Orders, accounts and delivery records live in SQLite (the built-in node:sqlite) on a persistent Docker volume. For one book and a modest number of orders a single file is enough, and there is no database server to look after.
  • The PDF is kept outside the public folder, so it can only be reached through a download link the app has issued. Those tokens are single-use and expire after 7 days.
  • Download tokens and passwords are stored only as hashes. A leaked database therefore contains no working links and no passwords.
  • Payment is a bank transfer or BLIK to a phone number, not a card gateway. That is what removes the provider fees, and it is also why confirmation is a manual step in the admin panel, with the email sent by Nodemailer.
  • Polish consumer law on digital content shaped the order flow. The right of withdrawal is handled in code: the send button stays locked for the waiting period, and each order stores the accepted version of the terms and whether early delivery was agreed to.
  • The app runs as a standalone Docker image on a self-hosted Proxmox server, behind Traefik and a Cloudflare Tunnel, and is deployed with Prox Hub, the deployment panel I built myself.
  • Playwright browser tests cover the account, order and delivery flows, which are the parts where a regression would mean a customer who paid and received nothing.

Hero

Subpages

Account

Order

Admin dashboard

Dark mode

Let's build something together

Got something in mind? Even half an idea is enough to start a conversation. Every message gets an answer, even when the honest answer is that someone else suits it better.

An answer within 24 hours, with a first estimate and how I would approach it.

Based in Belgium, working remotely with clients in English and Polish.