6.0 KiB
6.0 KiB
Dashy Project Refactor: Progress Report
Objective: Transition Dashy from a browser-based SQLite (local storage) application to a Client-Server architecture using a Python FastAPI backend with a persistent database.
✅ Completed Tasks
1. Backend Infrastructure Setup
- Created
backend/directory structure. - Configured
requirements.txtwith essential libraries (fastapi,sqlalchemy,pydantic,jose, etc.). - Fix: Pinned
bcrypt==4.0.1to resolve compatibility issues withpasslib.
2. Database Modeling
- Schema Design: Translated the original
db.jsschema into SQLAlchemy models inmodels.py. - Relationships: Established Many-to-Many relationships for Task Tags and One-to-Many for User Tasks and Notes.
- Audit Logging: Implemented a robust Audit Log system to track all user actions.
3. API Development
- Main App (
main.py): Set up FastAPI with CORS middleware enabled for frontend communication. - Authentication: Built JWT-based login flow in
auth.py. - Endpoints: Created initial endpoints for:
- User retrieval
- Task CRUD (Create, Read, Update)
- Audit log retrieval/creation
4. Data Migration & Environment Handling
- Seeding: Created
seed.pyto migrate initial prototype data into the new database. - CIFS/NAS Fix:
- Implemented
DASHY_DB_PATHenvironment variable support to allow the database file to reside on a local disk while code stays on the NAS. - Added a 30-second connection timeout to mitigate network latency.
- Implemented
🚧 Current Status
- Backend: Feature-complete for the first phase.
- Database: Schema is stabilized, seeding logic is verified, and database is active.
- Frontend: Integrated with FastAPI backend via
api.js. Legacy WASM SQLite files archived.
⏭️ Upcoming Steps
Phase 2: Frontend Refactor & Workflow Polish (✅ Completed)
- API Integration: Created
api.jsto handle network requests, swappedDashyDBfor async API calls inapp.jsx, and updated Login to use JWT tokens. - Legacy Cleanup: Archived
db.jsanddata.jsxtoDashy-v1/scraps/and removedsql.jsWASM dependency fromDashy.html. - API Base URL Fix: Updated
api.jsto dynamically use the browser's hostname to resolve "Connection Refused" errors. - Audit Rendering Crash Fix: Resolved the
TASK_AUDITReferenceError by passing live API audit logs into theTaskDetailmodal. - UI State Refresh Fix: Modified the
useApiDatahook to fetch subsequent updates silently without unmounting the app (fixing the drag-and-drop refresh bug). - Task Completion: Added a "Mark as completed" button, removed closed tasks from the main Overview board, and set up audit logging.
- User Views Update: Updated
UserScreento accurately display open task counts and render a dedicated, faded "Completed" section for closed tasks. - Task Reopening: Added a "Reopen task" button to restore accidentally closed tasks back to the queue.
- User Management (Settings): Built backend API endpoints (
POST,PATCH,DELETEfor/users) and wired up theWorkspaceTaballowing Admins to manage the team from the UI. - Task Editing: Implemented inline editing for task descriptions using an active text box state with "Save/Cancel" actions.
- UI Cleanup: Removed hardcoded, prototype placeholder notes from the
TaskDetailmodal to prepare for future dynamic notes integration. - Soft Deletion & Recovery: Replaced hard-deletion with "Soft Deletion" by adding a
deleted_atfield to the Task model. Created a new Admin-only "Deleted" tab that allows restoring tasks from the trash via a new/restoreendpoint. - Permanent Deletion Wiring Fix: Resolved a three-layer bug where the delete button was non-functional by adding the missing props and handlers across three files.
- Password Management: Made the "Change password" flow real with backend password hashing and current-password verification.
- Real Login Authentication: Fixed a security bug where the login screen accepted any password. implemented proper 401 handling.
- Network Hardening: Configured the frontend to use a relative
/apipath via an Nginx SSL reverse proxy. - API Authentication Enforcement: Applied JWT Bearer token validation to all sensitive routes.
- Persistent Workspace Settings: Added a
Workspacedatabase model to persist global dashboard settings like Name and Timezone. - Dynamic UI Integration: Completely refactored the navigation and boards to build columns and tabs dynamically from the live database user list.
- Functional Search: Implemented a real-time task search feature. Clicking the search icon now reveals an inline search bar that filters tasks by title, description, or tags across all views.
- Advanced Audit Filtering: Upgraded the Audit Log for Admins with a search bar and a granular event type filter. Admins can now filter the history by specific actions (e.g., "deleted tasks", "moved tasks", "user management") and search through summaries in real-time.
- Persistent Task Reordering: Implemented drag-and-drop reordering within and between columns.
- Backend: Added a
position(Float) column to thetaskstable and updated API endpoints to support position updates and sorted fetching. - UI: Enhanced the Kanban board with a "drop-between-cards" detection logic and a visual blue drop indicator. Positions are persisted to the database instantly on drop.
- Backend: Added a
- Keyboard Shortcuts: Added global support for keyboard navigation:
Escape: Instantly close any open modal (Task Detail, Add Task, Settings, or Audit Logs).n: Open the "Add Task" modal from the main dashboard (disabled while typing in inputs).
Phase 3: Advanced Features
- Real-time Notifications: Explore WebSockets for task assignments.
- iMessage Integration: Develop the "Molty" bridge for phone-to-task creation.
- File Uploads: Support for attaching photos/documents to tasks.
Last Updated: Wednesday, May 13, 2026 Status: Phase 2 Complete / Ready for Phase 3