Index: db-scripts/ddl.sql
===================================================================
--- db-scripts/ddl.sql	(revision 447c39f7111f1415e8f44660911d00bb61568780)
+++ db-scripts/ddl.sql	(revision 52fee067a36418ab0681c2c75998b221e425dfeb)
@@ -96,5 +96,8 @@
     task_id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
     name TEXT NOT NULL,
-    is_finished BOOLEAN NOT NULL DEFAULT FALSE,
+    status VARCHAR(20) NOT NULL DEFAULT 'NOT_STARTED',
+    description TEXT,
+    due_date DATE,
+    priority VARCHAR(10),
 
     discipline_user_id BIGINT
Index: db-scripts/dml.sql
===================================================================
--- db-scripts/dml.sql	(revision 447c39f7111f1415e8f44660911d00bb61568780)
+++ db-scripts/dml.sql	(revision 52fee067a36418ab0681c2c75998b221e425dfeb)
@@ -262,65 +262,65 @@
 );
 
-INSERT INTO TASKS (task_id, name, is_finished, discipline_user_id, custom_tracking_id) VALUES
-(1, 'Morning Run', FALSE, 1, NULL),
-(2, 'Read Book', FALSE, 1, NULL),
-(3, 'Meditation', FALSE, 2, NULL),
-(4, 'Code Review', FALSE, NULL, 1),
-(5, 'Push Updates', FALSE, NULL, 1),
-(6, 'Plan Day', FALSE, 3, NULL),
-(7, 'No Sugar', FALSE, 3, NULL),
-(8, 'Stretch', FALSE, 3, NULL),
-(9, 'Drink Water', FALSE, 4, NULL),
-(10, 'Walk 8k Steps', FALSE, 4, NULL),
-(11, 'Journal', FALSE, 5, NULL),
-(12, 'Gym', FALSE, 5, NULL),
-(13, 'Duolingo', FALSE, NULL, 2),
-(14, 'Watch Lesson', FALSE, NULL, 2),
-(15, 'Practice Problems', FALSE, NULL, 5),
-(16, 'Stretch 10m', FALSE, 7, NULL),
-(17, 'No Soda', FALSE, 7, NULL),
-(18, 'Walk 30m', FALSE, 8, NULL),
-(19, 'Sleep 7h', FALSE, 8, NULL),
-(20, 'Read 20p', FALSE, 9, NULL),
-(21, 'Meditate', FALSE, 9, NULL),
-(22, 'No Sugar', FALSE, 9, NULL),
-(23, 'Drink Water', FALSE, 10, NULL),
-(24, 'Morning Run', FALSE, 11, NULL),
-(25, 'Plan Day', FALSE, 11, NULL),
-(26, 'Study 1h', FALSE, 11, NULL),
-(27, 'Yoga', FALSE, 12, NULL),
-(28, 'Cook Healthy', FALSE, 12, NULL),
-(29, 'Gym', FALSE, 13, NULL),
-(30, 'Protein Target', FALSE, 13, NULL),
-(31, 'Journal', FALSE, 14, NULL),
-(32, 'Early Bed', FALSE, 14, NULL),
-(33, 'Duolingo', FALSE, 15, NULL),
-(34, 'No Alcohol', FALSE, 15, NULL),
-(35, 'Walk 8k Steps', FALSE, 15, NULL),
-(36, 'Attend Lecture', FALSE, NULL, 6),
-(37, 'Solve Tasks', FALSE, NULL, 6),
-(38, 'Review', FALSE, NULL, 6),
-(39, 'Steps', FALSE, NULL, 7),
-(40, 'Water', FALSE, NULL, 7),
-(41, 'Pitch', FALSE, NULL, 8),
-(42, 'Build', FALSE, NULL, 8),
-(43, 'Ship', FALSE, NULL, 8),
-(44, 'Meal Prep', FALSE, NULL, 9),
-(45, 'Groceries', FALSE, NULL, 9),
-(46, 'Read Fiction', FALSE, NULL, 10),
-(47, 'Read Nonfiction', FALSE, NULL, 10),
-(48, 'Standup', FALSE, NULL, 11),
-(49, 'Tickets', FALSE, NULL, 11),
-(50, 'PR Review', FALSE, NULL, 11),
-(51, 'Track Expenses', FALSE, NULL, 12),
-(52, 'Invest', FALSE, NULL, 12),
-(53, 'Duolingo Session', FALSE, NULL, 13),
-(54, 'Podcast', FALSE, NULL, 13),
-(55, 'Squat', FALSE, NULL, 14),
-(56, 'Bench', FALSE, NULL, 14),
-(57, 'Deadlift', FALSE, NULL, 14),
-(58, 'Practice', FALSE, NULL, 15),
-(59, 'Mock', FALSE, NULL, 15),
-(60, 'Review Exam', FALSE, NULL, 15);
+INSERT INTO TASKS (task_id, name, status, discipline_user_id, custom_tracking_id) VALUES
+(1, 'Morning Run', 'NOT_STARTED', 1, NULL),
+(2, 'Read Book', 'NOT_STARTED', 1, NULL),
+(3, 'Meditation', 'NOT_STARTED', 2, NULL),
+(4, 'Code Review', 'NOT_STARTED', NULL, 1),
+(5, 'Push Updates', 'NOT_STARTED', NULL, 1),
+(6, 'Plan Day', 'NOT_STARTED', 3, NULL),
+(7, 'No Sugar', 'NOT_STARTED', 3, NULL),
+(8, 'Stretch', 'NOT_STARTED', 3, NULL),
+(9, 'Drink Water', 'NOT_STARTED', 4, NULL),
+(10, 'Walk 8k Steps', 'NOT_STARTED', 4, NULL),
+(11, 'Journal', 'NOT_STARTED', 5, NULL),
+(12, 'Gym', 'NOT_STARTED', 5, NULL),
+(13, 'Duolingo', 'NOT_STARTED', NULL, 2),
+(14, 'Watch Lesson', 'NOT_STARTED', NULL, 2),
+(15, 'Practice Problems', 'NOT_STARTED', NULL, 5),
+(16, 'Stretch 10m', 'NOT_STARTED', 7, NULL),
+(17, 'No Soda', 'NOT_STARTED', 7, NULL),
+(18, 'Walk 30m', 'NOT_STARTED', 8, NULL),
+(19, 'Sleep 7h', 'NOT_STARTED', 8, NULL),
+(20, 'Read 20p', 'NOT_STARTED', 9, NULL),
+(21, 'Meditate', 'NOT_STARTED', 9, NULL),
+(22, 'No Sugar', 'NOT_STARTED', 9, NULL),
+(23, 'Drink Water', 'NOT_STARTED', 10, NULL),
+(24, 'Morning Run', 'NOT_STARTED', 11, NULL),
+(25, 'Plan Day', 'NOT_STARTED', 11, NULL),
+(26, 'Study 1h', 'NOT_STARTED', 11, NULL),
+(27, 'Yoga', 'NOT_STARTED', 12, NULL),
+(28, 'Cook Healthy', 'NOT_STARTED', 12, NULL),
+(29, 'Gym', 'NOT_STARTED', 13, NULL),
+(30, 'Protein Target', 'NOT_STARTED', 13, NULL),
+(31, 'Journal', 'NOT_STARTED', 14, NULL),
+(32, 'Early Bed', 'NOT_STARTED', 14, NULL),
+(33, 'Duolingo', 'NOT_STARTED', 15, NULL),
+(34, 'No Alcohol', 'NOT_STARTED', 15, NULL),
+(35, 'Walk 8k Steps', 'NOT_STARTED', 15, NULL),
+(36, 'Attend Lecture', 'NOT_STARTED', NULL, 6),
+(37, 'Solve Tasks', 'NOT_STARTED', NULL, 6),
+(38, 'Review', 'NOT_STARTED', NULL, 6),
+(39, 'Steps', 'NOT_STARTED', NULL, 7),
+(40, 'Water', 'NOT_STARTED', NULL, 7),
+(41, 'Pitch', 'NOT_STARTED', NULL, 8),
+(42, 'Build', 'NOT_STARTED', NULL, 8),
+(43, 'Ship', 'NOT_STARTED', NULL, 8),
+(44, 'Meal Prep', 'NOT_STARTED', NULL, 9),
+(45, 'Groceries', 'NOT_STARTED', NULL, 9),
+(46, 'Read Fiction', 'NOT_STARTED', NULL, 10),
+(47, 'Read Nonfiction', 'NOT_STARTED', NULL, 10),
+(48, 'Standup', 'NOT_STARTED', NULL, 11),
+(49, 'Tickets', 'NOT_STARTED', NULL, 11),
+(50, 'PR Review', 'NOT_STARTED', NULL, 11),
+(51, 'Track Expenses', 'NOT_STARTED', NULL, 12),
+(52, 'Invest', 'NOT_STARTED', NULL, 12),
+(53, 'Duolingo Session', 'NOT_STARTED', NULL, 13),
+(54, 'Podcast', 'NOT_STARTED', NULL, 13),
+(55, 'Squat', 'NOT_STARTED', NULL, 14),
+(56, 'Bench', 'NOT_STARTED', NULL, 14),
+(57, 'Deadlift', 'NOT_STARTED', NULL, 14),
+(58, 'Practice', 'NOT_STARTED', NULL, 15),
+(59, 'Mock', 'NOT_STARTED', NULL, 15),
+(60, 'Review Exam', 'NOT_STARTED', NULL, 15);
 
 SELECT setval(
Index: db-scripts/docker-init/01-init.sql
===================================================================
--- db-scripts/docker-init/01-init.sql	(revision 52fee067a36418ab0681c2c75998b221e425dfeb)
+++ db-scripts/docker-init/01-init.sql	(revision 52fee067a36418ab0681c2c75998b221e425dfeb)
@@ -0,0 +1,5 @@
+-- Combined init: schema (DDL) then seed data (DML)
+-- Postgres runs all *.sql files in /docker-entrypoint-initdb.d on first start.
+
+\i /docker-entrypoint-initdb.d/ddl.sql
+\i /docker-entrypoint-initdb.d/dml.sql
Index: db-scripts/migrations/002_task_enhancements.sql
===================================================================
--- db-scripts/migrations/002_task_enhancements.sql	(revision 52fee067a36418ab0681c2c75998b221e425dfeb)
+++ db-scripts/migrations/002_task_enhancements.sql	(revision 52fee067a36418ab0681c2c75998b221e425dfeb)
@@ -0,0 +1,17 @@
+-- Migration 002: Add description, due_date, priority, status to tasks
+-- Replace is_finished boolean with status enum string
+
+SET search_path TO trekr;
+
+ALTER TABLE tasks ADD COLUMN IF NOT EXISTS description TEXT;
+ALTER TABLE tasks ADD COLUMN IF NOT EXISTS due_date DATE;
+ALTER TABLE tasks ADD COLUMN IF NOT EXISTS priority VARCHAR(10);
+ALTER TABLE tasks ADD COLUMN IF NOT EXISTS status VARCHAR(20);
+
+-- Migrate existing data from is_finished to status
+UPDATE tasks SET status = CASE WHEN is_finished THEN 'FINISHED' ELSE 'NOT_STARTED' END WHERE status IS NULL;
+
+ALTER TABLE tasks ALTER COLUMN status SET NOT NULL;
+ALTER TABLE tasks ALTER COLUMN status SET DEFAULT 'NOT_STARTED';
+
+ALTER TABLE tasks DROP COLUMN IF EXISTS is_finished;
