diff --git a/quotesdb/.nbd/tickets/03bb91.md b/quotesdb/.nbd/tickets/03bb91.md new file mode 100644 index 0000000..65a7cc0 --- /dev/null +++ b/quotesdb/.nbd/tickets/03bb91.md @@ -0,0 +1,7 @@ ++++ +title = "Implement 4-word passphrase auth_code generator (must work in WASM/workers-rs)" +priority = 7 +status = "todo" +ticket_type = "task" +dependencies = ["6ed325"] ++++ diff --git a/quotesdb/.nbd/tickets/04f865.md b/quotesdb/.nbd/tickets/04f865.md new file mode 100644 index 0000000..1cff4af --- /dev/null +++ b/quotesdb/.nbd/tickets/04f865.md @@ -0,0 +1,7 @@ ++++ +title = "Implement ui/src/main.rs — Yew app shell, BrowserRouter, route definitions for all 5 pages" +priority = 8 +status = "todo" +ticket_type = "task" +dependencies = ["93515e"] ++++ diff --git a/quotesdb/.nbd/tickets/05f8ae.md b/quotesdb/.nbd/tickets/05f8ae.md new file mode 100644 index 0000000..44e9e30 --- /dev/null +++ b/quotesdb/.nbd/tickets/05f8ae.md @@ -0,0 +1,7 @@ ++++ +title = "Implement PUT /api/quotes — create quote, generate NanoID, generate auth_code if not provided, return 201 with auth_code" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["6e829e", "03bb91", "175382"] ++++ diff --git a/quotesdb/.nbd/tickets/07cafb.md b/quotesdb/.nbd/tickets/07cafb.md new file mode 100644 index 0000000..c808bd9 --- /dev/null +++ b/quotesdb/.nbd/tickets/07cafb.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] D1 binding chicken-and-egg — D1 ID not known until after apply, but Worker needs it at plan time" +priority = 8 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/07feaa.md b/quotesdb/.nbd/tickets/07feaa.md new file mode 100644 index 0000000..6104ab6 --- /dev/null +++ b/quotesdb/.nbd/tickets/07feaa.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] OpenTofu state backend — local file (gitignored) vs Terraform Cloud vs Cloudflare R2?" +priority = 9 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/08af7a.md b/quotesdb/.nbd/tickets/08af7a.md new file mode 100644 index 0000000..6b1220c --- /dev/null +++ b/quotesdb/.nbd/tickets/08af7a.md @@ -0,0 +1,7 @@ ++++ +title = "Write api/README.md, api/docs/PLANNING.md, api/docs/ARCHITECTURE.md" +priority = 3 +status = "todo" +ticket_type = "task" +dependencies = ["a6bce1"] ++++ diff --git a/quotesdb/.nbd/tickets/0bc655.md b/quotesdb/.nbd/tickets/0bc655.md new file mode 100644 index 0000000..bcee0c7 --- /dev/null +++ b/quotesdb/.nbd/tickets/0bc655.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] Auth code storage strategy — localStorage persistence vs component-only state?" +priority = 7 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/0d84fa.md b/quotesdb/.nbd/tickets/0d84fa.md new file mode 100644 index 0000000..f132b9d --- /dev/null +++ b/quotesdb/.nbd/tickets/0d84fa.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] HTTP client selection for integration tests — reqwest vs hyper vs ureq (tokio vs blocking)" +priority = 7 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/0d987f.md b/quotesdb/.nbd/tickets/0d987f.md new file mode 100644 index 0000000..379a8e5 --- /dev/null +++ b/quotesdb/.nbd/tickets/0d987f.md @@ -0,0 +1,7 @@ ++++ +title = "Implement shared QuoteCard component — displays text, author, source, date, tags" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["04f865"] ++++ diff --git a/quotesdb/.nbd/tickets/166996.md b/quotesdb/.nbd/tickets/166996.md new file mode 100644 index 0000000..1e8a340 --- /dev/null +++ b/quotesdb/.nbd/tickets/166996.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] Yew version selection and yew-router compatibility (0.21+?)" +priority = 9 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/175382.md b/quotesdb/.nbd/tickets/175382.md new file mode 100644 index 0000000..4e8daea --- /dev/null +++ b/quotesdb/.nbd/tickets/175382.md @@ -0,0 +1,7 @@ ++++ +title = "Implement tag join logic — fetch tags per quote, insert/replace tags on create/update" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["a5049d"] ++++ diff --git a/quotesdb/.nbd/tickets/182210.md b/quotesdb/.nbd/tickets/182210.md new file mode 100644 index 0000000..a3f7e90 --- /dev/null +++ b/quotesdb/.nbd/tickets/182210.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] Cloudflare Workers WASM size limit — free tier 1MB limit may require paid plan for Rust binary" +priority = 9 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/1a274d.md b/quotesdb/.nbd/tickets/1a274d.md new file mode 100644 index 0000000..a6fc8fa --- /dev/null +++ b/quotesdb/.nbd/tickets/1a274d.md @@ -0,0 +1,7 @@ ++++ +title = "Implement Home page (/) — fetch and display random quote, 'Browse all' link" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["1e6a09", "0d987f"] ++++ diff --git a/quotesdb/.nbd/tickets/1ba523.md b/quotesdb/.nbd/tickets/1ba523.md new file mode 100644 index 0000000..3e1e667 --- /dev/null +++ b/quotesdb/.nbd/tickets/1ba523.md @@ -0,0 +1,7 @@ ++++ +title = "Implement Submit page (/submit) — quote creation form, display returned auth_code on success" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["1e6a09"] ++++ diff --git a/quotesdb/.nbd/tickets/1e6a09.md b/quotesdb/.nbd/tickets/1e6a09.md new file mode 100644 index 0000000..af8497f --- /dev/null +++ b/quotesdb/.nbd/tickets/1e6a09.md @@ -0,0 +1,7 @@ ++++ +title = "Implement API client module — typed fetch wrappers for all quotesdb-api endpoints" +priority = 7 +status = "todo" +ticket_type = "task" +dependencies = ["04f865"] ++++ diff --git a/quotesdb/.nbd/tickets/1f5bb5.md b/quotesdb/.nbd/tickets/1f5bb5.md new file mode 100644 index 0000000..3fac609 --- /dev/null +++ b/quotesdb/.nbd/tickets/1f5bb5.md @@ -0,0 +1,7 @@ ++++ +title = "Set up api/Cargo.toml with all crate dependencies (axum, tokio, workers-rs, sqlx, serde, nanoid, etc.)" +priority = 8 +status = "todo" +ticket_type = "task" +dependencies = ["6f2e18", "6ed325", "e8a330"] ++++ diff --git a/quotesdb/.nbd/tickets/25c413.md b/quotesdb/.nbd/tickets/25c413.md new file mode 100644 index 0000000..051831b --- /dev/null +++ b/quotesdb/.nbd/tickets/25c413.md @@ -0,0 +1,7 @@ ++++ +title = "quotesdb/infra" +priority = 7 +status = "todo" +ticket_type = "project" +dependencies = ["2d1371", "d0da0b", "a23489", "ae6a82", "ae886f", "657836", "75489a", "71b1d4", "af56a7", "d5839a"] ++++ diff --git a/quotesdb/.nbd/tickets/28e7d9.md b/quotesdb/.nbd/tickets/28e7d9.md new file mode 100644 index 0000000..c324815 --- /dev/null +++ b/quotesdb/.nbd/tickets/28e7d9.md @@ -0,0 +1,7 @@ ++++ +title = "Implement GET /api/ — serve OpenAPI spec as JSON" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["6e829e", "2ec8b1"] ++++ diff --git a/quotesdb/.nbd/tickets/2ab7a8.md b/quotesdb/.nbd/tickets/2ab7a8.md new file mode 100644 index 0000000..b93a666 --- /dev/null +++ b/quotesdb/.nbd/tickets/2ab7a8.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] Test harness: how to import and start quotesdb-api in tests (workers-rs vs native build target)" +priority = 9 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/2c5a57.md b/quotesdb/.nbd/tickets/2c5a57.md new file mode 100644 index 0000000..25f27d3 --- /dev/null +++ b/quotesdb/.nbd/tickets/2c5a57.md @@ -0,0 +1,7 @@ ++++ +title = "Implement pagination component — prev/next buttons, current page indicator, total pages" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["04f865"] ++++ diff --git a/quotesdb/.nbd/tickets/2ce22e.md b/quotesdb/.nbd/tickets/2ce22e.md new file mode 100644 index 0000000..3d67d0d --- /dev/null +++ b/quotesdb/.nbd/tickets/2ce22e.md @@ -0,0 +1,7 @@ ++++ +title = "Implement GET /api/quotes/random — random row query (must be registered before /:id route)" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["6e829e"] ++++ diff --git a/quotesdb/.nbd/tickets/2d1371.md b/quotesdb/.nbd/tickets/2d1371.md new file mode 100644 index 0000000..1704069 --- /dev/null +++ b/quotesdb/.nbd/tickets/2d1371.md @@ -0,0 +1,7 @@ ++++ +title = "Set up infra/ OpenTofu project — providers.tf, terraform.tf, .gitignore for state" +priority = 8 +status = "todo" +ticket_type = "task" +dependencies = ["07feaa"] ++++ diff --git a/quotesdb/.nbd/tickets/2ec8b1.md b/quotesdb/.nbd/tickets/2ec8b1.md new file mode 100644 index 0000000..230649b --- /dev/null +++ b/quotesdb/.nbd/tickets/2ec8b1.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] OpenAPI spec serving strategy — embed YAML at compile time vs load at runtime" +priority = 7 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/33ed29.md b/quotesdb/.nbd/tickets/33ed29.md new file mode 100644 index 0000000..ad9370c --- /dev/null +++ b/quotesdb/.nbd/tickets/33ed29.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] Local dev config: Turso (file SQLite) vs D1 binding selection strategy" +priority = 8 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/372790.md b/quotesdb/.nbd/tickets/372790.md new file mode 100644 index 0000000..aa930ef --- /dev/null +++ b/quotesdb/.nbd/tickets/372790.md @@ -0,0 +1,7 @@ ++++ +title = "Write ui/README.md, ui/docs/PLANNING.md, ui/docs/ARCHITECTURE.md" +priority = 3 +status = "todo" +ticket_type = "task" +dependencies = ["1a274d", "5cdbd9", "5f1112", "b3ef98", "1ba523"] ++++ diff --git a/quotesdb/.nbd/tickets/4a4c26.md b/quotesdb/.nbd/tickets/4a4c26.md new file mode 100644 index 0000000..7ddc22a --- /dev/null +++ b/quotesdb/.nbd/tickets/4a4c26.md @@ -0,0 +1,7 @@ ++++ +title = "Test suite: PUT /api/quotes — create (auto auth_code, custom auth_code, missing fields 422)" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["9b581f"] ++++ diff --git a/quotesdb/.nbd/tickets/580e66.md b/quotesdb/.nbd/tickets/580e66.md new file mode 100644 index 0000000..8b604ef --- /dev/null +++ b/quotesdb/.nbd/tickets/580e66.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] Database migration strategy for Cloudflare Workers (startup vs wrangler d1 execute)" +priority = 8 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/5c0c64.md b/quotesdb/.nbd/tickets/5c0c64.md new file mode 100644 index 0000000..5e3e162 --- /dev/null +++ b/quotesdb/.nbd/tickets/5c0c64.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] D1 migrations in OpenTofu — null_resource local-exec vs separate wrangler step vs manual" +priority = 9 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/5cdbd9.md b/quotesdb/.nbd/tickets/5cdbd9.md new file mode 100644 index 0000000..9ef1400 --- /dev/null +++ b/quotesdb/.nbd/tickets/5cdbd9.md @@ -0,0 +1,7 @@ ++++ +title = "Implement Browse page (/browse) — paginated quote list with author/tag filter controls" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["1e6a09", "0d987f", "2c5a57", "d3d502"] ++++ diff --git a/quotesdb/.nbd/tickets/5d9f5a.md b/quotesdb/.nbd/tickets/5d9f5a.md new file mode 100644 index 0000000..1da1358 --- /dev/null +++ b/quotesdb/.nbd/tickets/5d9f5a.md @@ -0,0 +1,7 @@ ++++ +title = "Implement POST /api/quotes/:id — partial update, verify X-Auth-Code header, update updated_at" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["6e829e", "175382"] ++++ diff --git a/quotesdb/.nbd/tickets/5dbb7d.md b/quotesdb/.nbd/tickets/5dbb7d.md new file mode 100644 index 0000000..5270a13 --- /dev/null +++ b/quotesdb/.nbd/tickets/5dbb7d.md @@ -0,0 +1,7 @@ ++++ +title = "Implement GET /api/quotes/:id — fetch by NanoID, return 404 if not found" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["6e829e", "175382"] ++++ diff --git a/quotesdb/.nbd/tickets/5e3e37.md b/quotesdb/.nbd/tickets/5e3e37.md new file mode 100644 index 0000000..efc6ab9 --- /dev/null +++ b/quotesdb/.nbd/tickets/5e3e37.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] CSS/styling approach for Wasm — plain CSS, CDN Tailwind, or Wasm-compatible crate?" +priority = 8 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/5f1112.md b/quotesdb/.nbd/tickets/5f1112.md new file mode 100644 index 0000000..d8b5797 --- /dev/null +++ b/quotesdb/.nbd/tickets/5f1112.md @@ -0,0 +1,7 @@ ++++ +title = "Implement Quote detail page (/quotes/:id) — view, edit form with auth prompt, delete with auth prompt" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["1e6a09", "0d987f", "f850c6"] ++++ diff --git a/quotesdb/.nbd/tickets/5f5ba0.md b/quotesdb/.nbd/tickets/5f5ba0.md new file mode 100644 index 0000000..2ec61ce --- /dev/null +++ b/quotesdb/.nbd/tickets/5f5ba0.md @@ -0,0 +1,7 @@ ++++ +title = "Set up tests/Cargo.toml with integration test dependencies (reqwest/hyper, tokio, serde_json)" +priority = 8 +status = "todo" +ticket_type = "task" +dependencies = ["2ab7a8", "a91260", "0d84fa"] ++++ diff --git a/quotesdb/.nbd/tickets/657836.md b/quotesdb/.nbd/tickets/657836.md new file mode 100644 index 0000000..ca7e375 --- /dev/null +++ b/quotesdb/.nbd/tickets/657836.md @@ -0,0 +1,7 @@ ++++ +title = "Configure custom domain quotes.elijah.run → Cloudflare Pages (DNS record + Pages domain binding)" +priority = 6 +status = "todo" +ticket_type = "task" +dependencies = ["ae886f"] ++++ diff --git a/quotesdb/.nbd/tickets/6e829e.md b/quotesdb/.nbd/tickets/6e829e.md new file mode 100644 index 0000000..4cd1ca1 --- /dev/null +++ b/quotesdb/.nbd/tickets/6e829e.md @@ -0,0 +1,7 @@ ++++ +title = "Set up api/src/main.rs — Cloudflare Workers entry point and Axum router wiring" +priority = 8 +status = "todo" +ticket_type = "task" +dependencies = ["1f5bb5", "a5049d"] ++++ diff --git a/quotesdb/.nbd/tickets/6ed325.md b/quotesdb/.nbd/tickets/6ed325.md new file mode 100644 index 0000000..e735771 --- /dev/null +++ b/quotesdb/.nbd/tickets/6ed325.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] 4-word passphrase crate selection for WASM target (no_std/wasm32 constraints)" +priority = 9 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/6f2e18.md b/quotesdb/.nbd/tickets/6f2e18.md new file mode 100644 index 0000000..32de2cb --- /dev/null +++ b/quotesdb/.nbd/tickets/6f2e18.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] NanoID crate WASM compatibility with workers-rs target" +priority = 9 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/71b1d4.md b/quotesdb/.nbd/tickets/71b1d4.md new file mode 100644 index 0000000..20c5729 --- /dev/null +++ b/quotesdb/.nbd/tickets/71b1d4.md @@ -0,0 +1,7 @@ ++++ +title = "Document secrets management — Cloudflare API token, account ID, how to supply to OpenTofu and local dev" +priority = 6 +status = "todo" +ticket_type = "task" +dependencies = ["2d1371"] ++++ diff --git a/quotesdb/.nbd/tickets/75489a.md b/quotesdb/.nbd/tickets/75489a.md new file mode 100644 index 0000000..81f9e21 --- /dev/null +++ b/quotesdb/.nbd/tickets/75489a.md @@ -0,0 +1,7 @@ ++++ +title = "Document D1 schema migration workflow — how to apply SQL schema changes to D1 in CI/CD" +priority = 7 +status = "todo" +ticket_type = "task" +dependencies = ["d0da0b", "5c0c64"] ++++ diff --git a/quotesdb/.nbd/tickets/75e3f0.md b/quotesdb/.nbd/tickets/75e3f0.md new file mode 100644 index 0000000..e8f5af3 --- /dev/null +++ b/quotesdb/.nbd/tickets/75e3f0.md @@ -0,0 +1,7 @@ ++++ +title = "Write tests/README.md" +priority = 3 +status = "todo" +ticket_type = "task" +dependencies = ["789d0f", "4a4c26", "f9f448", "aa0eab", "93f1b6", "fae330", "8c87db", "e8f5cf", "893eba"] ++++ diff --git a/quotesdb/.nbd/tickets/789d0f.md b/quotesdb/.nbd/tickets/789d0f.md new file mode 100644 index 0000000..e190e16 --- /dev/null +++ b/quotesdb/.nbd/tickets/789d0f.md @@ -0,0 +1,7 @@ ++++ +title = "Test suite: GET /api/ — OpenAPI spec returned as valid JSON with expected structure" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["9b581f"] ++++ diff --git a/quotesdb/.nbd/tickets/886bfd.md b/quotesdb/.nbd/tickets/886bfd.md new file mode 100644 index 0000000..7d4817b --- /dev/null +++ b/quotesdb/.nbd/tickets/886bfd.md @@ -0,0 +1,7 @@ ++++ +title = "Implement GET /api/quotes — paginated list with author filter (case-insensitive) and tag filter" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["6e829e", "175382"] ++++ diff --git a/quotesdb/.nbd/tickets/893eba.md b/quotesdb/.nbd/tickets/893eba.md new file mode 100644 index 0000000..892cf54 --- /dev/null +++ b/quotesdb/.nbd/tickets/893eba.md @@ -0,0 +1,7 @@ ++++ +title = "Test suite: tag operations — create with tags, list by tag filter, update replaces all tags" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["9b581f"] ++++ diff --git a/quotesdb/.nbd/tickets/8c87db.md b/quotesdb/.nbd/tickets/8c87db.md new file mode 100644 index 0000000..1bd8398 --- /dev/null +++ b/quotesdb/.nbd/tickets/8c87db.md @@ -0,0 +1,7 @@ ++++ +title = "Test suite: DELETE /api/quotes/:id — valid auth 204 no body, wrong auth 403, not found 404, cascade deletes tags" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["9b581f"] ++++ diff --git a/quotesdb/.nbd/tickets/93515e.md b/quotesdb/.nbd/tickets/93515e.md new file mode 100644 index 0000000..50c98a9 --- /dev/null +++ b/quotesdb/.nbd/tickets/93515e.md @@ -0,0 +1,7 @@ ++++ +title = "Set up ui/Cargo.toml with Yew/Wasm dependencies (yew, yew-router, gloo, wasm-bindgen, serde, etc.)" +priority = 8 +status = "todo" +ticket_type = "task" +dependencies = ["166996", "5e3e37"] ++++ diff --git a/quotesdb/.nbd/tickets/93f1b6.md b/quotesdb/.nbd/tickets/93f1b6.md new file mode 100644 index 0000000..6468a64 --- /dev/null +++ b/quotesdb/.nbd/tickets/93f1b6.md @@ -0,0 +1,7 @@ ++++ +title = "Test suite: GET /api/quotes — pagination (page=1, page=N, out-of-range), author filter, tag filter, no results" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["9b581f"] ++++ diff --git a/quotesdb/.nbd/tickets/9b581f.md b/quotesdb/.nbd/tickets/9b581f.md new file mode 100644 index 0000000..16e0d00 --- /dev/null +++ b/quotesdb/.nbd/tickets/9b581f.md @@ -0,0 +1,7 @@ ++++ +title = "Implement test server harness — spawn quotesdb-api with temp SQLite DB, return base URL" +priority = 8 +status = "todo" +ticket_type = "task" +dependencies = ["5f5ba0", "fba598", "f3dc74"] ++++ diff --git a/quotesdb/.nbd/tickets/a23489.md b/quotesdb/.nbd/tickets/a23489.md new file mode 100644 index 0000000..d4e4617 --- /dev/null +++ b/quotesdb/.nbd/tickets/a23489.md @@ -0,0 +1,7 @@ ++++ +title = "Define Cloudflare Workers script resource — WASM artifact, D1 binding, environment variables" +priority = 7 +status = "todo" +ticket_type = "task" +dependencies = ["2d1371", "d0da0b", "07cafb", "efee79"] ++++ diff --git a/quotesdb/.nbd/tickets/a5049d.md b/quotesdb/.nbd/tickets/a5049d.md new file mode 100644 index 0000000..abae173 --- /dev/null +++ b/quotesdb/.nbd/tickets/a5049d.md @@ -0,0 +1,7 @@ ++++ +title = "Implement database connection module and SQLx migrations (quotes + quote_tags schema)" +priority = 8 +status = "todo" +ticket_type = "task" +dependencies = ["1f5bb5", "580e66", "33ed29"] ++++ diff --git a/quotesdb/.nbd/tickets/a6bce1.md b/quotesdb/.nbd/tickets/a6bce1.md new file mode 100644 index 0000000..4999008 --- /dev/null +++ b/quotesdb/.nbd/tickets/a6bce1.md @@ -0,0 +1,7 @@ ++++ +title = "Write unit tests in api/src/tests.rs covering all handlers, auth logic, and pagination" +priority = 6 +status = "todo" +ticket_type = "task" +dependencies = ["28e7d9", "886bfd", "2ce22e", "5dbb7d", "05f8ae", "5d9f5a", "b20b5a", "d792e2"] ++++ diff --git a/quotesdb/.nbd/tickets/a91260.md b/quotesdb/.nbd/tickets/a91260.md new file mode 100644 index 0000000..eee9d28 --- /dev/null +++ b/quotesdb/.nbd/tickets/a91260.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] workers-rs compatibility with native Rust test binaries (may need separate native feature flag)" +priority = 9 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/a9534d.md b/quotesdb/.nbd/tickets/a9534d.md new file mode 100644 index 0000000..b14f6d7 --- /dev/null +++ b/quotesdb/.nbd/tickets/a9534d.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] Local dev CORS and Trunk API proxy config (trunk serve proxying to api on different port)" +priority = 8 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/aa0eab.md b/quotesdb/.nbd/tickets/aa0eab.md new file mode 100644 index 0000000..bc95f05 --- /dev/null +++ b/quotesdb/.nbd/tickets/aa0eab.md @@ -0,0 +1,7 @@ ++++ +title = "Test suite: GET /api/quotes/random — 200 with quote, 404 when database is empty" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["9b581f"] ++++ diff --git a/quotesdb/.nbd/tickets/ae6a82.md b/quotesdb/.nbd/tickets/ae6a82.md new file mode 100644 index 0000000..e5cb1ec --- /dev/null +++ b/quotesdb/.nbd/tickets/ae6a82.md @@ -0,0 +1,7 @@ ++++ +title = "Define Cloudflare Worker route/domain — worker.dev subdomain or custom route for API" +priority = 6 +status = "todo" +ticket_type = "task" +dependencies = ["a23489"] ++++ diff --git a/quotesdb/.nbd/tickets/ae886f.md b/quotesdb/.nbd/tickets/ae886f.md new file mode 100644 index 0000000..8dccf45 --- /dev/null +++ b/quotesdb/.nbd/tickets/ae886f.md @@ -0,0 +1,7 @@ ++++ +title = "Define Cloudflare Pages project resource — build config, output dir, git repo connection or artifact upload" +priority = 7 +status = "todo" +ticket_type = "task" +dependencies = ["2d1371", "fc9bfd", "182210"] ++++ diff --git a/quotesdb/.nbd/tickets/af56a7.md b/quotesdb/.nbd/tickets/af56a7.md new file mode 100644 index 0000000..21dda52 --- /dev/null +++ b/quotesdb/.nbd/tickets/af56a7.md @@ -0,0 +1,7 @@ ++++ +title = "Document local dev environment — Turso/SQLite instead of D1, any wrangler.toml config required" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["2d1371"] ++++ diff --git a/quotesdb/.nbd/tickets/b20b5a.md b/quotesdb/.nbd/tickets/b20b5a.md new file mode 100644 index 0000000..5e5a731 --- /dev/null +++ b/quotesdb/.nbd/tickets/b20b5a.md @@ -0,0 +1,7 @@ ++++ +title = "Implement DELETE /api/quotes/:id — verify X-Auth-Code, cascade delete quote and tags, return 204" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["6e829e"] ++++ diff --git a/quotesdb/.nbd/tickets/b3ef98.md b/quotesdb/.nbd/tickets/b3ef98.md new file mode 100644 index 0000000..eef7f03 --- /dev/null +++ b/quotesdb/.nbd/tickets/b3ef98.md @@ -0,0 +1,7 @@ ++++ +title = "Implement Author page (/author/:name) — paginated list of quotes by a single author" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["1e6a09", "0d987f", "2c5a57"] ++++ diff --git a/quotesdb/.nbd/tickets/c3503b.md b/quotesdb/.nbd/tickets/c3503b.md new file mode 100644 index 0000000..9475d33 --- /dev/null +++ b/quotesdb/.nbd/tickets/c3503b.md @@ -0,0 +1,7 @@ ++++ +title = "quotesdb/ui" +priority = 7 +status = "todo" +ticket_type = "project" +dependencies = ["93515e", "dc3d2b", "04f865", "1e6a09", "1a274d", "5cdbd9", "5f1112", "b3ef98", "1ba523", "0d987f", "f850c6", "2c5a57", "d3d502", "fc2f51", "372790"] ++++ diff --git a/quotesdb/.nbd/tickets/ce1e4f.md b/quotesdb/.nbd/tickets/ce1e4f.md new file mode 100644 index 0000000..2d3f363 --- /dev/null +++ b/quotesdb/.nbd/tickets/ce1e4f.md @@ -0,0 +1,7 @@ ++++ +title = "quotesdb/qa" +priority = 7 +status = "todo" +ticket_type = "project" +dependencies = ["5f5ba0", "9b581f", "789d0f", "4a4c26", "f9f448", "aa0eab", "93f1b6", "fae330", "8c87db", "e8f5cf", "893eba", "75e3f0"] ++++ diff --git a/quotesdb/.nbd/tickets/d0da0b.md b/quotesdb/.nbd/tickets/d0da0b.md new file mode 100644 index 0000000..4eabdd7 --- /dev/null +++ b/quotesdb/.nbd/tickets/d0da0b.md @@ -0,0 +1,7 @@ ++++ +title = "Define Cloudflare D1 database resource and document binding name for the Worker" +priority = 7 +status = "todo" +ticket_type = "task" +dependencies = ["2d1371"] ++++ diff --git a/quotesdb/.nbd/tickets/d3d502.md b/quotesdb/.nbd/tickets/d3d502.md new file mode 100644 index 0000000..7a69e8c --- /dev/null +++ b/quotesdb/.nbd/tickets/d3d502.md @@ -0,0 +1,7 @@ ++++ +title = "Implement tag filter component — tag input/select for browse and author pages" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["04f865"] ++++ diff --git a/quotesdb/.nbd/tickets/d5839a.md b/quotesdb/.nbd/tickets/d5839a.md new file mode 100644 index 0000000..b14a0f0 --- /dev/null +++ b/quotesdb/.nbd/tickets/d5839a.md @@ -0,0 +1,7 @@ ++++ +title = "Write infra/README.md — setup, apply, destroy instructions and required credentials" +priority = 3 +status = "todo" +ticket_type = "task" +dependencies = ["ae6a82", "657836", "75489a", "71b1d4", "af56a7"] ++++ diff --git a/quotesdb/.nbd/tickets/d792e2.md b/quotesdb/.nbd/tickets/d792e2.md new file mode 100644 index 0000000..6733792 --- /dev/null +++ b/quotesdb/.nbd/tickets/d792e2.md @@ -0,0 +1,7 @@ ++++ +title = 'Implement error handling — consistent {"error": "..."} envelope for 400/403/404/422/500' +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["6e829e"] ++++ diff --git a/quotesdb/.nbd/tickets/dc3d2b.md b/quotesdb/.nbd/tickets/dc3d2b.md new file mode 100644 index 0000000..2492578 --- /dev/null +++ b/quotesdb/.nbd/tickets/dc3d2b.md @@ -0,0 +1,7 @@ ++++ +title = "Set up ui/Trunk.toml and ui/index.html — build configuration and Wasm entry point" +priority = 8 +status = "todo" +ticket_type = "task" +dependencies = ["93515e", "a9534d"] ++++ diff --git a/quotesdb/.nbd/tickets/e2bd9b.md b/quotesdb/.nbd/tickets/e2bd9b.md new file mode 100644 index 0000000..1e3d8bc --- /dev/null +++ b/quotesdb/.nbd/tickets/e2bd9b.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] Cloudflare Pages SPA routing — 404 fallback config for client-side Yew router" +priority = 8 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/e8a330.md b/quotesdb/.nbd/tickets/e8a330.md new file mode 100644 index 0000000..8279603 --- /dev/null +++ b/quotesdb/.nbd/tickets/e8a330.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] SQLx + workers-rs + Cloudflare D1 compatibility (known issues?)" +priority = 9 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/e8f5cf.md b/quotesdb/.nbd/tickets/e8f5cf.md new file mode 100644 index 0000000..ca9fef0 --- /dev/null +++ b/quotesdb/.nbd/tickets/e8f5cf.md @@ -0,0 +1,7 @@ ++++ +title = "Test suite: router ordering — verify /api/quotes/random is not matched as :id parameter" +priority = 6 +status = "todo" +ticket_type = "task" +dependencies = ["9b581f"] ++++ diff --git a/quotesdb/.nbd/tickets/ec118c.md b/quotesdb/.nbd/tickets/ec118c.md index 28e69dd..0f45244 100644 --- a/quotesdb/.nbd/tickets/ec118c.md +++ b/quotesdb/.nbd/tickets/ec118c.md @@ -3,7 +3,7 @@ title = "quotesdb" priority = 8 status = "todo" ticket_type = "project" -dependencies = [] +dependencies = ["f3dc74", "c3503b", "ce1e4f", "25c413"] +++ # QuotesDB Implementation Plan diff --git a/quotesdb/.nbd/tickets/efee79.md b/quotesdb/.nbd/tickets/efee79.md new file mode 100644 index 0000000..bdbfbf5 --- /dev/null +++ b/quotesdb/.nbd/tickets/efee79.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] Correct cloudflare_workers_script resource name in current Cloudflare provider version" +priority = 7 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/f3dc74.md b/quotesdb/.nbd/tickets/f3dc74.md new file mode 100644 index 0000000..d702944 --- /dev/null +++ b/quotesdb/.nbd/tickets/f3dc74.md @@ -0,0 +1,7 @@ ++++ +title = "quotesdb/api" +priority = 7 +status = "todo" +ticket_type = "project" +dependencies = ["1f5bb5", "6e829e", "a5049d", "28e7d9", "886bfd", "2ce22e", "5dbb7d", "05f8ae", "5d9f5a", "b20b5a", "03bb91", "175382", "d792e2", "a6bce1", "08af7a"] ++++ diff --git a/quotesdb/.nbd/tickets/f850c6.md b/quotesdb/.nbd/tickets/f850c6.md new file mode 100644 index 0000000..4c687a1 --- /dev/null +++ b/quotesdb/.nbd/tickets/f850c6.md @@ -0,0 +1,7 @@ ++++ +title = "Implement auth code modal/prompt component — dialog requesting X-Auth-Code before edit or delete" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["04f865", "0bc655"] ++++ diff --git a/quotesdb/.nbd/tickets/f9f448.md b/quotesdb/.nbd/tickets/f9f448.md new file mode 100644 index 0000000..1b29175 --- /dev/null +++ b/quotesdb/.nbd/tickets/f9f448.md @@ -0,0 +1,7 @@ ++++ +title = "Test suite: GET /api/quotes/:id — 200 with quote, 404 not found, schema validation" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["9b581f"] ++++ diff --git a/quotesdb/.nbd/tickets/fae330.md b/quotesdb/.nbd/tickets/fae330.md new file mode 100644 index 0000000..6eaeba8 --- /dev/null +++ b/quotesdb/.nbd/tickets/fae330.md @@ -0,0 +1,7 @@ ++++ +title = "Test suite: POST /api/quotes/:id — valid auth 200, wrong auth 403, not found 404, partial update, null to clear optional fields" +priority = 5 +status = "todo" +ticket_type = "task" +dependencies = ["9b581f"] ++++ diff --git a/quotesdb/.nbd/tickets/fba598.md b/quotesdb/.nbd/tickets/fba598.md new file mode 100644 index 0000000..d1759e5 --- /dev/null +++ b/quotesdb/.nbd/tickets/fba598.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] Integration test isolation strategy — per-test temp DB vs shared DB with transaction rollback?" +priority = 8 +status = "todo" +ticket_type = "task" +dependencies = [] ++++ diff --git a/quotesdb/.nbd/tickets/fc2f51.md b/quotesdb/.nbd/tickets/fc2f51.md new file mode 100644 index 0000000..06ebb0c --- /dev/null +++ b/quotesdb/.nbd/tickets/fc2f51.md @@ -0,0 +1,7 @@ ++++ +title = "Implement error display component — consistent error state UI across all pages" +priority = 4 +status = "todo" +ticket_type = "task" +dependencies = ["04f865"] ++++ diff --git a/quotesdb/.nbd/tickets/fc9bfd.md b/quotesdb/.nbd/tickets/fc9bfd.md new file mode 100644 index 0000000..75e2f9d --- /dev/null +++ b/quotesdb/.nbd/tickets/fc9bfd.md @@ -0,0 +1,7 @@ ++++ +title = "[TRIAGE] Cloudflare Pages build strategy — Pages CI build vs pre-built trunk artifact upload" +priority = 8 +status = "todo" +ticket_type = "task" +dependencies = [] ++++