Skip to content
Framework: Vite + React + TypeScriptDifficulty: beginner

Todo, kanban and notes

A productivity app with a todo list, a drag-and-drop kanban board, and a notes editor sharing one local dataset.

Three views over persisted local state: a classic todo list with completion and filtering, a three-column board with HTML5 drag-and-drop plus keyboard-friendly move buttons, and a two-pane notes editor. Everything is typed and saved to localStorage through a tiny hook, which makes it a good base for learning state management before adding a database.

  • react
  • todo
  • kanban
  • notes
  • productivity
  • tailwind

This preview is the template's actual file tree and source code — exactly what is copied into a new project. Codexa does not publish screenshots or mock-ups of templates; run the project to see it rendered.

Files14 files

src/App.tsx38 lines
import { useState } from "react";
import { useLocalStorage } from "./useLocalStorage";
import { TodoList } from "./views/TodoList";
import { Board } from "./views/Board";
import { Notes } from "./views/Notes";
import { newId, type Note, type Task } from "./types";

const VIEWS = ["list", "board", "notes"] as const;
type View = (typeof VIEWS)[number];

export default function App() {
  const [view, setView] = useState<View>("list");
  const [tasks, setTasks] = useLocalStorage<Task[]>("tasks", [
    { id: newId(), title: "Try the board view", column: "todo", createdAt: Date.now() },
    { id: newId(), title: "Ask Codexa to add due dates", column: "doing", createdAt: Date.now() },
  ]);
  const [notes, setNotes] = useLocalStorage<Note[]>("notes", []);

  return (
    <div className="min-h-screen bg-slate-50 text-slate-900">
      <header className="border-b border-slate-200 bg-white">
        <div className="mx-auto flex max-w-5xl flex-wrap items-center justify-between gap-3 px-4 py-3 sm:px-6">
          <h1 className="font-semibold tracking-tight">Tasks</h1>
          <div className="flex rounded-md border border-slate-300 p-0.5 text-sm" role="tablist" aria-label="View">
            {VIEWS.map((v) => (
              <button key={v} type="button" role="tab" aria-selected={view === v} onClick={() => setView(v)} className={"rounded px-3 py-1 capitalize " + (view === v ? "bg-slate-900 text-white" : "hover:bg-slate-100")}>
                {v}
              </button>
            ))}
          </div>
        </div>
      </header>
      <main className="mx-auto max-w-5xl px-4 py-6 sm:px-6" role="tabpanel">
        {view === "list" ? <TodoList tasks={tasks} setTasks={setTasks} /> : view === "board" ? <Board tasks={tasks} setTasks={setTasks} /> : <Notes notes={notes} setNotes={setNotes} />}
      </main>
    </div>
  );
}

Dependencies

Documented from the template's package.json. The runtime has a prebuilt dependency set for Vite + React + TypeScript, so installs are fast.

PackageVersion
react^19.1.0
react-dom^19.1.0
vite^6.3.0
@vitejs/plugin-react^4.4.0
tailwindcss^4.1.0
@tailwindcss/vite^4.1.0
typescript^5.8.0

How it runs

Framework
Vite + React + TypeScript
Dev command
npm run dev
Build command
npm run build
Output directory
dist
Port
5173
Opens at
/
Difficulty
beginner

Projects run in an isolated sandbox with a live preview. Read the projects documentation for details on settings, snapshots and deployment.

View all
  • Framework: Vite + React + TypeScriptDifficulty: beginner
    Featured

    React starter

    A clean React + TypeScript + Tailwind single-page app. The default target for AI generation.

    • react
    • typescript
    • tailwind
    • vite
    • spa

    9 files

  • Framework: Node.js + ExpressDifficulty: intermediate

    Express REST API

    A TypeScript Express API with routing, validation, and an in-memory store you can swap for PostgreSQL.

    • node
    • express
    • api
    • typescript
    • backend

    5 files

  • Framework: Node.js + ExpressDifficulty: intermediate

    Structured Express API

    A notes REST API split into router, middleware, and store modules, with logging, error handling, and search.

    • node
    • express
    • api
    • rest
    • typescript

    8 files

Need the raw data? GET /api/v1/templates/vite-react-tasks returns this template with its files.

Build on Todo, kanban and notes

Create a free account, start from this template, and ask the AI agent to turn it into your app.