Commit Graph

15 Commits

Author SHA1 Message Date
Brian Fertig eb32aee653 Add scheduled (recurring) to-dos, AI to-do generation, and in-place building upgrades
- Scheduled to-dos: new ScheduledTodo + ScheduledTodoCompletion models
  (owner-XOR-project ownership like Category, per-occurrence completion
  so a recurring to-do tracks done state per calendar date), recurrence
  built server-side from validated parts via rrule-utils, CRUD +
  occurrence-toggle server actions, add/edit dialog, and a collapsible
  Scheduled side panel (overdue / today / upcoming) with UTC-safe
  date-key formatting.
- AI to-dos: group-level AI dialog (lib/actions/todo-ai.ts) that chats
  then proposes a finalize list of to-dos; editable proposals and bulk
  add via BoardProvider.addTodos; speech recognition gains better error
  handling (network/firewall message, error logging).
- Building upgrades: new `upgradesFrom` rule — Nuclear Power Plant can
  replace a friendly Energy Generator and Advanced Metal Generator a
  Mass Generator (same tile + footprint, per TALogic.findUpgradeTarget),
  crediting a 50% refund of the replaced building's OWN cost;
  compileRules validates the references, topperFrame gets a generic
  spinning-glyph fallback in TAArt.
- Movement rework: pushOutOfObstacles replaces the hard tile-snap with a
  damped circle-vs-tile overlap push, and pathfinding routes at exact-fit
  clearance instead of +1 padding (fixes corner grinding/stalling).
- New map m06 "Annihilation" (medium, snowfields, Klaxon skill 5, seed
  90123 — pre-vetted for early-economy balance).
- Tests: upgrade placement (ownership, type match, exact footprint,
  refund, army-less fallback), obstacle routing/settling, corridor
  moves; sprites.md updated for upgradesFrom and toppers.
2026-08-17 15:03:13 -06:00
Brian Fertig 088da63de2 feat: add "Ask AI" dialog for groups with voice input
Introduce GroupAiDialog component allowing users to chat with an AI assistant to generate or refine group notes.
Add useSpeechRecognition hook wrapping the Web Speech API for microphone support.
Implement converseAboutGroup server action to handle the AI conversation loop, supporting iterative questioning and final note generation.
Extract joinApiUrl helper in lib/ai-settings.ts for consistent endpoint URL construction.
2026-08-12 15:48:05 -06:00
Brian Fertig aa6a2e1cfd feat: add AI provider config and todo completion timestamps
- Add `AiSettingsCard` component and server actions for configuring an
  OpenAI-compatible AI endpoint (e.g. OpenWebUI) from the admin panel
- Introduce `AiSettings` Prisma model with masked API key display and
  connection testing UI
- Track `completedAt` on todos with a migration and backfill for existing
  completed items
- Surface `createdAt`, `updatedAt`, and `completedAt` in the todo edit
  dialog via a new `formatDateTime` utility
- Update `TodoDTO`, `getBoard`, `createTodo`, `toggleTodo`, and the board
  context to carry and optimistically update timestamp fields
- Add `Select` UI component built on `@base-ui/react`
2026-08-12 15:01:54 -06:00
Brian Fertig 42f9785624 fix: ensure LF line endings for docker-entrypoint.sh on Windows checkouts
Add .gitattributes to enforce LF line endings for shell scripts and
Dockerfile. Update Dockerfile to strip CRLF before making
docker-entrypoint.sh executable, preventing "no such file or directory"
errors at container startup caused by CRLF shebang lines on Windows.
2026-08-12 13:27:23 -06:00
Brian Fertig a1cdb31e49 feat: make host port configurable via APP_PORT env var
Allow users to customize the host-side port mapping while keeping the
container's internal port fixed at 3000. The default remains 3000 when
APP_PORT is unset.

- Add APP_PORT to .env.example with documentation
- Update docker-compose.yml to use ${APP_PORT:-3000}:3000
- Update README with new env var and usage notes
2026-08-12 13:15:41 -06:00
Brian Fertig a5190199d7 Update to gitignore on env example file 2026-08-12 13:07:22 -06:00
Brian Fertig 4708e00a04 feat(board): introduce Projects as isolated boards
- Add Project model with owner-based access and cascade delete
- Restructure Category to belong to either Home (userId) or a Project (projectId), enforced by DB constraints and access filters
- Scope all board operations (create, update, delete, reorder) to the correct board context using `categoryAccessFilter` and `projectAccessFilter`
- Replace hardcoded `revalidatePath("/")` with dynamic `boardPath()` for proper cache invalidation
- Add `ProjectsProvider` and `ProjectsNavSection` for project sidebar navigation
- Make KanbanBoard accept `projectId` and `title` props to render Home or Project boards
- Extract `getBoard()` utility to centralize board data fetching
- Refactor group/todo/notes actions to derive board context from category membership rather than trusting caller input
2026-08-12 12:57:41 -06:00
Brian Fertig 0381363d4e Updates to README 2026-08-12 12:05:56 -06:00
Brian Fertig ce1d540444 Adjustment to Drag and Drop hitbox on Group Cards 2026-08-12 11:36:07 -06:00
Brian Fertig 37631df620 Completion Pie Charts 2026-08-12 11:24:43 -06:00
Brian Fertig 5a681bd444 Created different Authorization types 2026-08-12 11:02:40 -06:00
Brian Fertig 8639f9986c V1 Changes 2026-08-11 16:37:01 -06:00
Brian Fertig 0d7336858c Adjustments to Drag and Drop features, as well as theme features 2026-08-11 13:26:10 -06:00
Brian Fertig 9a1aad6ed0 first commit 2026-08-11 13:10:00 -06:00
Brian Fertig 86884fd23e Initial commit from Create Next App 2026-08-11 11:56:15 -06:00