Index: pages/index/+Page.tsx
===================================================================
--- pages/index/+Page.tsx	(revision 8ee45534cd667e6cced2ed96968c95d8de3b1029)
+++ 	(revision )
@@ -1,16 +1,0 @@
-import { Counter } from "./Counter.js";
-
-export default function Page() {
-  return (
-    <>
-      <h1>My Vike app</h1>
-      <p>This page is:</p>
-      <ul>
-        <li>Rendered to HTML.</li>
-        <li>
-          Interactive. <Counter />
-        </li>
-      </ul>
-    </>
-  );
-}
Index: pages/star-wars/@id/+Page.tsx
===================================================================
--- pages/star-wars/@id/+Page.tsx	(revision 8ee45534cd667e6cced2ed96968c95d8de3b1029)
+++ 	(revision )
@@ -1,16 +1,0 @@
-import { useData } from "vike-react/useData";
-import type { Data } from "./+data.js";
-
-export default function Page() {
-  const { movie } = useData<Data>();
-  return (
-    <>
-      <h1>{movie.title}</h1>
-      Release Date: {movie.release_date}
-      <br />
-      Director: {movie.director}
-      <br />
-      Producer: {movie.producer}
-    </>
-  );
-}
Index: pages/star-wars/@id/+data.ts
===================================================================
--- pages/star-wars/@id/+data.ts	(revision 8ee45534cd667e6cced2ed96968c95d8de3b1029)
+++ 	(revision )
@@ -1,31 +1,0 @@
-// https://vike.dev/data
-
-import type { PageContextServer } from "vike/types";
-import { useConfig } from "vike-react/useConfig";
-import type { MovieDetails } from "../types.js";
-
-export type Data = Awaited<ReturnType<typeof data>>;
-
-export async function data(pageContext: PageContextServer) {
-  // https://vike.dev/useConfig
-  const config = useConfig();
-
-  const response = await fetch(`https://brillout.github.io/star-wars/api/films/${pageContext.routeParams.id}.json`);
-  let movie = (await response.json()) as MovieDetails;
-
-  config({
-    // Set <title>
-    title: movie.title,
-  });
-
-  // We remove data we don't need because the data is passed to
-  // the client; we should minimize what is sent over the network.
-  movie = minimize(movie);
-
-  return { movie };
-}
-
-function minimize(movie: MovieDetails): MovieDetails {
-  const { id, title, release_date, director, producer } = movie;
-  return { id, title, release_date, director, producer };
-}
Index: pages/star-wars/index/+Page.tsx
===================================================================
--- pages/star-wars/index/+Page.tsx	(revision 8ee45534cd667e6cced2ed96968c95d8de3b1029)
+++ 	(revision )
@@ -1,21 +1,0 @@
-import { useData } from "vike-react/useData";
-import type { Data } from "./+data.js";
-
-export default function Page() {
-  const { movies } = useData<Data>();
-  return (
-    <>
-      <h1>Star Wars Movies</h1>
-      <ol>
-        {movies.map(({ id, title, release_date }) => (
-          <li key={id}>
-            <a href={`/star-wars/${id}`}>{title}</a> ({release_date})
-          </li>
-        ))}
-      </ol>
-      <p>
-        Source: <a href="https://brillout.github.io/star-wars">brillout.github.io/star-wars</a>.
-      </p>
-    </>
-  );
-}
Index: pages/star-wars/index/+data.ts
===================================================================
--- pages/star-wars/index/+data.ts	(revision 8ee45534cd667e6cced2ed96968c95d8de3b1029)
+++ 	(revision )
@@ -1,32 +1,0 @@
-// https://vike.dev/data
-
-import { useConfig } from "vike-react/useConfig";
-import type { Movie, MovieDetails } from "../types.js";
-
-export type Data = Awaited<ReturnType<typeof data>>;
-
-export async function data() {
-  // https://vike.dev/useConfig
-  const config = useConfig();
-
-  const response = await fetch("https://brillout.github.io/star-wars/api/films.json");
-  const moviesData = (await response.json()) as MovieDetails[];
-
-  config({
-    // Set <title>
-    title: `${moviesData.length} Star Wars Movies`,
-  });
-
-  // We remove data we don't need because the data is passed to the client; we should
-  // minimize what is sent over the network.
-  const movies = minimize(moviesData);
-
-  return { movies };
-}
-
-function minimize(movies: MovieDetails[]): Movie[] {
-  return movies.map((movie) => {
-    const { title, release_date, id } = movie;
-    return { title, release_date, id };
-  });
-}
Index: pages/star-wars/types.ts
===================================================================
--- pages/star-wars/types.ts	(revision 8ee45534cd667e6cced2ed96968c95d8de3b1029)
+++ 	(revision )
@@ -1,10 +1,0 @@
-export type Movie = {
-  id: string;
-  title: string;
-  release_date: string;
-};
-
-export type MovieDetails = Movie & {
-  director: string;
-  producer: string;
-};
Index: pages/todo/+Page.tsx
===================================================================
--- pages/todo/+Page.tsx	(revision 8ee45534cd667e6cced2ed96968c95d8de3b1029)
+++ 	(revision )
@@ -1,10 +1,0 @@
-import { TodoList } from "./TodoList.js";
-
-export default function Page() {
-  return (
-    <>
-      <h1>To-do List</h1>
-      <TodoList />
-    </>
-  );
-}
Index: pages/todo/+config.ts
===================================================================
--- pages/todo/+config.ts	(revision 8ee45534cd667e6cced2ed96968c95d8de3b1029)
+++ 	(revision )
@@ -1,3 +1,0 @@
-export const config = {
-  prerender: false,
-};
Index: pages/todo/+data.ts
===================================================================
--- pages/todo/+data.ts	(revision 8ee45534cd667e6cced2ed96968c95d8de3b1029)
+++ 	(revision )
@@ -1,12 +1,0 @@
-// https://vike.dev/data
-
-import * as drizzleQueries from "../../database/drizzle/queries/todos";
-import type { PageContextServer } from "vike/types";
-
-export type Data = Awaited<ReturnType<typeof data>>;
-
-export async function data(_pageContext: PageContextServer) {
-  const todoItemsInitial = await drizzleQueries.getAllTodos(_pageContext.db);
-
-  return { todoItemsInitial };
-}
Index: pages/todo/TodoList.telefunc.ts
===================================================================
--- pages/todo/TodoList.telefunc.ts	(revision 8ee45534cd667e6cced2ed96968c95d8de3b1029)
+++ 	(revision )
@@ -1,9 +1,0 @@
-// We use Telefunc (https://telefunc.com) for data mutations.
-
-import * as drizzleQueries from "../../database/drizzle/queries/todos";
-import { getContext } from "telefunc";
-
-export async function onNewTodo({ text }: { text: string }) {
-  const context = getContext();
-  await drizzleQueries.insertTodo(context.db, text);
-}
Index: pages/todo/TodoList.tsx
===================================================================
--- pages/todo/TodoList.tsx	(revision 8ee45534cd667e6cced2ed96968c95d8de3b1029)
+++ 	(revision )
@@ -1,36 +1,0 @@
-import type { Data } from "./+data";
-import { onNewTodo } from "./TodoList.telefunc";
-import { useState } from "react";
-import { useData } from "vike-react/useData";
-
-export function TodoList() {
-  const { todoItemsInitial } = useData<Data>();
-  const [todoItems, setTodoItems] = useState<{ text: string }[]>(todoItemsInitial);
-  const [newTodo, setNewTodo] = useState("");
-  return (
-    <>
-      <ul>
-        {todoItems.map((todoItem, index) => (
-          // biome-ignore lint: example
-          <li key={index}>{todoItem.text}</li>
-        ))}
-      </ul>
-      <div>
-        <form
-          onSubmit={async (ev) => {
-            ev.preventDefault();
-
-            const text = newTodo;
-            setTodoItems((prev) => [...prev, { text }]);
-            setNewTodo("");
-
-            await onNewTodo({ text });
-          }}
-        >
-          <input type="text" onChange={(ev) => setNewTodo(ev.target.value)} value={newTodo} />
-          <button type="submit">Add to-do</button>
-        </form>
-      </div>
-    </>
-  );
-}
