Skip to content
Case study · 17 / 19← All work

Noelia Viscelli

The site of a coach who sells e-books and a four-month program. She edits her own pages, and her students take the course on a platform of their own.

Role
Full build
Stack
Next.js 16, React 19, TypeScript, Prisma, Postgres, Cloudinary
Page editor
Page editorEach section is a row with a draft next to it
(01) The problem

Noelia sells e-books, booked calls and a program called Método SER with three plans. She changes prices, offers and copy often, and every change went through a developer. Her students also needed a place to watch the lessons, hand in work and book their one-on-one sessions.

My roleI turned both landing pages into data she can edit and publish herself, and built the course platform next to them.
(02) ResultsCounted in the code
26section types she can edit, reorder and publish, each checked by a schema
36API routes behind the student platform and its admin
7question types in the form builder for lessons
(03) Architecture

Three decisions that shaped it.

  1. 01

    Each section is a row with a draft next to it

    Why. Every section instance is a JSON row in Postgres with its published content and its draft. A zod schema from the catalog checks each save. The page merges what is saved over the defaults in code, so a field added later shows its default without migrating rows. Publishing first copies the old content into a revision, and a revert does the same, so it can be undone too.

    Trade-off. Postgres sees the content as text, so nothing inside it can be queried. Publishing updates the rows one by one, outside a transaction, and the section order has no history of its own.

  2. 02

    The preview is the real page

    Why. The editor shows the public page in an iframe with ?preview=1. A signed cookie that lasts 30 minutes switches that page to the drafts. There is no second renderer to keep in sync, and the desktop and phone toggle shows exactly what visitors will get.

    Trade-off. Reading the cookie makes both pages render on every request. The live site answers with cache-control: no-store, and every visit queries Postgres.

  3. 03

    Hotmart sells, Calendly books, the platform teaches

    Why. The e-books link to Hotmart checkouts, and calls are booked in an embedded Calendly. Hotmart already handles payment, receipts and delivery, so I spent the time on the platform: lessons, progress, comments, ratings, submissions and forms.

    Trade-off. Sales never reach the admin. After a payment, the student account and the enrollment are created by hand, and the limits of each plan live in code.

(04) GalleryKeep scrolling →
Page editor
Page editor · Sections on the left, the form for the selected one in the middle, and the real page with the draft on the right.
Student home
Student home · Progress, the one-on-one sessions left in her plan and the next lesson to watch. Shown with demo data.
Lesson on a phone
Lesson on a phone · Video, completion and the lesson's material. Comments, ratings, submissions and forms sit below.
Método SER plans
Método SER plans · The three plans on the live sales page. Prices and copy are edited from the panel, not in code.
(05) What I'd do next
01Listen to Hotmart's purchase webhook to create the student and the enrollment, and send the welcome email that is already written.
02Cache the public pages and revalidate them on publish, so visitors stop hitting Postgres and only the preview renders on each request.
03Publish inside one transaction, keep history for the section order too, and move the three plans from code into the database.
Next project · 18 / 19
Sitios editables →Static client sites with a schema-drawn editor that publishes to git
Case study · 17 / 19

Noelia Viscelli

The site of a coach who sells e-books and a four-month program. She edits her own pages, and her students take the course on a platform of their own.

Role
Full build
Stack
Next.js 16, React 19, TypeScript, Prisma, Postgres, Cloudinary
Noelia Viscelli
(01) The problem

Noelia sells e-books, booked calls and a program called Método SER with three plans. She changes prices, offers and copy often, and every change went through a developer. Her students also needed a place to watch the lessons, hand in work and book their one-on-one sessions.

My roleI turned both landing pages into data she can edit and publish herself, and built the course platform next to them.
(02) Results
26section types she can edit, reorder and publish, each checked by a schema
36API routes behind the student platform and its admin
7question types in the form builder for lessons
(03) Architecture

Three decisions that shaped it.

01

Each section is a row with a draft next to it

Why. Every section instance is a JSON row in Postgres with its published content and its draft. A zod schema from the catalog checks each save. The page merges what is saved over the defaults in code, so a field added later shows its default without migrating rows. Publishing first copies the old content into a revision, and a revert does the same, so it can be undone too.

Trade-off. Postgres sees the content as text, so nothing inside it can be queried. Publishing updates the rows one by one, outside a transaction, and the section order has no history of its own.

02

The preview is the real page

Why. The editor shows the public page in an iframe with ?preview=1. A signed cookie that lasts 30 minutes switches that page to the drafts. There is no second renderer to keep in sync, and the desktop and phone toggle shows exactly what visitors will get.

Trade-off. Reading the cookie makes both pages render on every request. The live site answers with cache-control: no-store, and every visit queries Postgres.

03

Hotmart sells, Calendly books, the platform teaches

Why. The e-books link to Hotmart checkouts, and calls are booked in an embedded Calendly. Hotmart already handles payment, receipts and delivery, so I spent the time on the platform: lessons, progress, comments, ratings, submissions and forms.

Trade-off. Sales never reach the admin. After a payment, the student account and the enrollment are created by hand, and the limits of each plan live in code.

(04) Gallery
Page editor
Page editor · Sections on the left, the form for the selected one in the middle, and the real page with the draft on the right.
Student home
Student home · Progress, the one-on-one sessions left in her plan and the next lesson to watch. Shown with demo data.
Lesson on a phone
Lesson on a phone · Video, completion and the lesson's material. Comments, ratings, submissions and forms sit below.
Método SER plans
Método SER plans · The three plans on the live sales page. Prices and copy are edited from the panel, not in code.
(05) What I'd do next
01Listen to Hotmart's purchase webhook to create the student and the enrollment, and send the welcome email that is already written.
02Cache the public pages and revalidate them on publish, so visitors stop hitting Postgres and only the preview renders on each request.
03Publish inside one transaction, keep history for the section order too, and move the three plans from code into the database.
Next projectSitios editables →
Nahuel SantillánEN