# Changelog

All notable user-visible changes to this Todo app are documented here.

This file is the live changelog: it is served at
[https://fmohn.uber.space/changelog.md](https://fmohn.uber.space/changelog.md)
and linked from the version number in the app footer.

## Versioning scheme

Versions are `BIG.SMALL.patch` (semver-shaped):

- **BIG** (major) — bumped for large milestones: a whole phase completed, or a
  sweeping change to how the product works.
- **SMALL** (minor) — bumped every session that ships a user-visible change
  (a new view, filter, setting, parser rule, etc.).
- **patch** — reserved for fixes/hotfixes that ship on their own.

The single source of truth for the current version is the `version` field in
`package.json`; the server exposes it at `GET /api/version` and the SPA footer
renders it. Each session that ships a user-visible change bumps the version and
adds an entry below (newest first).

---

## [1.9.0] — 2026-07-21

### Added
- **Labels, subtasks & comments on task rows in the new Vue app (`/app`)** —
  the inline **✎ edit** form now lets you attach and detach labels (a chip per
  attached label, a picker for the rest). A **＋** button adds a subtask, and a
  **💬** button (showing the comment count) opens a panel to read, add, and
  delete comments on a task. This brings the Vue task row to parity with the
  legacy list.

---

## [1.8.0] — 2026-07-21

### Added
- **Task row actions in the new Vue app (`/app`)** — task rows are now
  interactive (they were read-only). You can check a task off (recurring tasks
  roll to their next occurrence), reopen it, delete it, and one-click
  reschedule an overdue task to today. The **✎ edit** button opens an inline
  form to change the title, due date, deadline, duration, priority, and
  description. Labels, subtasks, and comments in the row are coming next.

---

## [1.7.0] — 2026-07-21

### Added
- **Monthly-on-a-date recurrence in quick-add** — you can now type
  `Pay rent every 15th` or `Invoice every month on the 1st` and the task repeats
  on that fixed calendar day every month. Days that don't exist in a shorter month
  clamp to the last day (so `every 31st` lands on Feb 28/29). Works with the
  `every!` form too (`every! 15th` drifts from your completion date).

## [1.6.0] — 2026-07-21

### Added
- **Task list & quick-add on the new Vue interface (preview at `/app`)** — the Vue
  preview now shows your actual tasks for whichever view you pick in the sidebar,
  with priority stripes, due-date badges (overdue in red), deadlines, durations,
  recurrence, project and label chips, and nested subtasks. A quick-add box at the
  top lets you type a task in natural language (e.g. `Buy milk tomorrow 5pm
  #groceries p1`) and it appears without a page reload. Task rows are read-only in
  this slice — completing/editing/deleting from the Vue interface arrives in the
  next update. The classic interface at `/` is unchanged and remains the default.

## [1.5.0] — 2026-07-21

### Added
- **Sidebar navigation on the new Vue interface (preview at `/app`)** — once you
  sign in, the Vue preview now shows the familiar two-pane layout with a sidebar:
  the standard views (Today, Upcoming, Calendar, All tasks, Inbox, Completed,
  Productivity) plus your Projects (with their sections), Labels, and saved
  Filters. Clicking any of them switches the main pane's heading. This slice is
  read-only navigation — the task lists themselves land in the next update. The
  classic interface at `/` is unchanged.

## [1.4.0] — 2026-07-21

### Added
- **Sign in on the new Vue interface (preview at `/app`)** — the Vue preview now
  has a working login / sign-up / forgot-password screen. Once you sign in it keeps
  you signed in and shows a placeholder home (the task views arrive in upcoming
  releases). The existing interface at `/` is unchanged and remains the default.

## [1.3.0] — 2026-07-21

### Added
- **New Vue-based interface (preview at `/app`)** — groundwork for a refreshed UI.
  The app's front-end is being rebuilt in Vue 3; this first slice ships the build
  toolchain and a preview shell served at `/app`. The existing interface at `/` is
  unchanged and remains the default while the new UI is built out over upcoming
  releases.

## [1.2.0] — 2026-07-21

### Added
- **Reorder cards within a board column** — in the Board (Kanban) view you can now
  drag a card up or down inside its own column to reorder it (the order persists);
  dragging a card to a different column still moves it to that section as before.

## [1.1.0] — 2026-07-21

### Added
- **Richer board cards** — cards in the Board (Kanban) view now show the same
  detail as list rows: due date (red when overdue), deadline, duration,
  recurrence, and label chips, plus comment and subtask counts.

---

## [1.0.0] — 2026-07-21

Introduced versioning and this changelog.

### Added
- **App versioning** with big/small (`BIG.SMALL.patch`) semantics, driven by
  `package.json`'s `version` field.
- **`GET /api/version`** endpoint returning the current version.
- **Version number in the app footer**, linking to this changelog at
  `/changelog.md`.
- This **changelog**, served live on the deployed site.

---

## [0.x] — Pre-versioning (sessions S1–S93)

Before the versioning scheme existed the project was tracked by session number
(see `PROGRESS.md` for the full per-session log). Highlights of what shipped:

### Core
- Projects, sections, labels, priorities (p1–p4), due dates.
- **Recurring tasks** with a rule-based recurrence engine (`every week`,
  `every 3 days`, `every monday`, monthly/yearly with day clamping).
- **Rule-based natural-language quick-add parser** (dates, times, `#labels`,
  `+project`, `p1`–`p4`, recurrence) — no LLM, per the product constraint.

### Multi-user
- Password auth (scrypt), server-side SQLite-backed sessions, signed HTTP-only
  cookies, signup/login/logout.
- Per-user scoping of every entity; onboarding seed on signup.
- Account settings, server-persisted preferences, password reset via email.
- Project sharing (data + member-management routes; read-scoping in progress).

### Views & UI
- Build-free vanilla-JS SPA: task list, Today/Upcoming/Overdue views, calendar
  month grid with drag-to-reschedule, per-project Kanban board with
  drag-to-move, search, saved filters with a rule-based filter query language,
  dark mode, productivity/karma stats, toasts and empty states.

### Platform
- Dual deploy: runs on Uberspace (shared hosting) and as a Docker container from
  one env-driven Node process + SQLite file.
- Live at **https://fmohn.uber.space**, continuous deploy via
  `scripts/deploy-uberspace.sh`.
- Security headers, per-IP auth rate limiting.
