Initial commit: Custom Start Page application with authentication and DynamoDB storage
This commit is contained in:
1
.kiro/specs/custom-start-page/.config.kiro
Normal file
1
.kiro/specs/custom-start-page/.config.kiro
Normal file
@@ -0,0 +1 @@
|
||||
{"generationMode": "requirements-first"}
|
||||
2014
.kiro/specs/custom-start-page/design.md
Normal file
2014
.kiro/specs/custom-start-page/design.md
Normal file
File diff suppressed because it is too large
Load Diff
205
.kiro/specs/custom-start-page/requirements.md
Normal file
205
.kiro/specs/custom-start-page/requirements.md
Normal file
@@ -0,0 +1,205 @@
|
||||
# Requirements Document: Custom Start Page Application
|
||||
|
||||
## Introduction
|
||||
|
||||
The Custom Start Page Application is a personalized dashboard web application that allows users to create and manage custom start pages with configurable widgets, multiple pages, and customizable search functionality. The application is modeled after start.me and provides users with a centralized hub for their frequently accessed links, notes, weather information, and other useful widgets.
|
||||
|
||||
## Glossary
|
||||
|
||||
- **User**: An authenticated individual who creates and manages their custom start pages
|
||||
- **Dashboard**: The main application interface containing pages and widgets
|
||||
- **Page**: A tab-based container that holds multiple widgets (similar to browser tabs)
|
||||
- **Widget**: A modular component that displays specific content (bookmarks, notes, weather, etc.)
|
||||
- **Bookmark_Widget**: A widget type that displays and organizes collections of links
|
||||
- **Notes_Widget**: A widget type that allows users to create and edit text notes
|
||||
- **Weather_Widget**: A widget type that displays weather information for specified locations
|
||||
- **Search_Provider**: A configurable search engine (Google, DuckDuckGo, Bing, etc.)
|
||||
- **OAuth_Provider**: An external authentication service (Google, GitHub, Microsoft, etc.)
|
||||
- **Authentication_System**: The system component responsible for user login and session management
|
||||
- **Widget_Manager**: The system component responsible for creating, updating, and deleting widgets
|
||||
- **Page_Manager**: The system component responsible for managing pages and their ordering
|
||||
- **Storage_Service**: The system component responsible for persisting user data
|
||||
- **Tag**: A label that can be applied to bookmarks or notes for categorization and filtering
|
||||
- **Group**: A named collection of bookmarks within a widget for organizational purposes
|
||||
|
||||
## Requirements
|
||||
|
||||
### Requirement 1: User Authentication
|
||||
|
||||
**User Story:** As a user, I want to log in using OAuth providers, so that I can securely access my personalized start page without creating another password.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. WHEN a user visits the application without authentication, THE Authentication_System SHALL display a login page with OAuth provider options
|
||||
2. WHEN a user selects an OAuth provider, THE Authentication_System SHALL redirect to the provider's authorization page
|
||||
3. WHEN OAuth authorization succeeds, THE Authentication_System SHALL create or retrieve the user account and establish an authenticated session
|
||||
4. WHEN OAuth authorization fails, THE Authentication_System SHALL display an error message and return to the login page
|
||||
5. THE Authentication_System SHALL support Google OAuth as a provider
|
||||
6. WHERE additional OAuth providers are configured, THE Authentication_System SHALL display them as login options
|
||||
7. WHEN a user is authenticated, THE Authentication_System SHALL maintain the session across browser refreshes
|
||||
8. WHEN a user logs out, THE Authentication_System SHALL terminate the session and redirect to the login page
|
||||
|
||||
### Requirement 2: Page Management
|
||||
|
||||
**User Story:** As a user, I want to create and manage multiple pages, so that I can organize my widgets into different categories or contexts.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. WHEN a user first logs in, THE Page_Manager SHALL create a default page named "Home"
|
||||
2. WHEN a user clicks the add page button, THE Page_Manager SHALL create a new page and add it to the page list
|
||||
3. WHEN a user creates a new page, THE Page_Manager SHALL prompt for a page name
|
||||
4. WHEN a user clicks on a page tab, THE Dashboard SHALL display that page's widgets
|
||||
5. WHEN a user deletes a page, THE Page_Manager SHALL remove the page and all its widgets
|
||||
6. IF a user attempts to delete the last remaining page, THEN THE Page_Manager SHALL prevent the deletion and display a message
|
||||
7. WHEN a user reorders pages, THE Page_Manager SHALL update the page order and persist the change
|
||||
8. THE Page_Manager SHALL persist all page changes to the Storage_Service immediately
|
||||
|
||||
### Requirement 3: Search Functionality
|
||||
|
||||
**User Story:** As a user, I want to search the web from my start page with a customizable search provider, so that I can quickly find information without navigating to a search engine first.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. THE Dashboard SHALL display a search bar in the top toolbar
|
||||
2. WHEN a user types a query and presses Enter, THE Dashboard SHALL open a new tab with search results from the configured Search_Provider
|
||||
3. WHEN a user opens search settings, THE Dashboard SHALL display available Search_Provider options
|
||||
4. WHEN a user selects a Search_Provider, THE Dashboard SHALL update the search configuration and persist the change
|
||||
5. THE Dashboard SHALL support Google, DuckDuckGo, and Bing as Search_Provider options
|
||||
6. WHEN no Search_Provider is configured, THE Dashboard SHALL default to Google
|
||||
7. WHEN a user submits an empty search query, THE Dashboard SHALL not perform a search
|
||||
|
||||
### Requirement 4: Bookmark Widget
|
||||
|
||||
**User Story:** As a user, I want to create bookmark widgets to organize my frequently visited links with tags and groups, so that I can manage thousands of bookmarks efficiently and quickly access websites from my start page.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. WHEN a user adds a Bookmark_Widget, THE Widget_Manager SHALL create the widget and add it to the current page
|
||||
2. WHEN a user adds a bookmark to a Bookmark_Widget, THE Widget_Manager SHALL store the bookmark with its title, URL, and optional tags
|
||||
3. WHEN a user clicks a bookmark, THE Dashboard SHALL open the URL in a new tab
|
||||
4. WHEN a user edits a bookmark, THE Widget_Manager SHALL update the bookmark's title, URL, or tags
|
||||
5. WHEN a user deletes a bookmark, THE Widget_Manager SHALL remove it from the Bookmark_Widget
|
||||
6. WHEN a user reorders bookmarks within a Bookmark_Widget, THE Widget_Manager SHALL update the bookmark order
|
||||
7. THE Bookmark_Widget SHALL display bookmarks as a list with titles and optional icons
|
||||
8. WHEN a user sets a custom title for a Bookmark_Widget, THE Widget_Manager SHALL update and display the custom title
|
||||
9. WHEN a user adds tags to a bookmark, THE Storage_Service SHALL support one-to-many tag relationships (multiple tags per bookmark)
|
||||
10. WHEN a user filters bookmarks by tag, THE Bookmark_Widget SHALL display only bookmarks matching the selected tag(s)
|
||||
11. WHEN a user creates a group within a Bookmark_Widget, THE Widget_Manager SHALL allow organizing bookmarks into named groups
|
||||
12. WHEN a user moves a bookmark between groups, THE Widget_Manager SHALL update the bookmark's group assignment
|
||||
13. THE Storage_Service SHALL efficiently support storing and retrieving 10,000+ bookmarks per user
|
||||
14. WHEN a user quickly changes tags on multiple bookmarks, THE Storage_Service SHALL handle rapid updates without data loss
|
||||
15. WHEN a user deletes a tag, THE Widget_Manager SHALL remove the tag from all associated bookmarks
|
||||
16. WHEN a user shares a bookmark, THE Dashboard SHALL generate a shareable link or export option
|
||||
|
||||
### Requirement 5: Notes Widget
|
||||
|
||||
**User Story:** As a user, I want to create notes widgets to store rich text information with tags and multiple content formats, so that I can keep organized reminders, code snippets, and formatted notes on my start page and easily find them later.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. WHEN a user adds a Notes_Widget, THE Widget_Manager SHALL create the widget and add it to the current page
|
||||
2. WHEN a user types in a Notes_Widget, THE Widget_Manager SHALL save the content
|
||||
3. THE Notes_Widget SHALL support multiple content format modes: plain text, rich text (RTF), code blocks, YAML, and Markdown
|
||||
4. WHEN a user selects a content format mode, THE Notes_Widget SHALL render the content appropriately for that format
|
||||
5. THE Notes_Widget SHALL support full Unicode character sets for international text and emoji
|
||||
6. WHEN a user enters code blocks, THE Notes_Widget SHALL provide syntax highlighting for common programming languages
|
||||
7. WHEN a user enters YAML content, THE Notes_Widget SHALL preserve indentation and structure
|
||||
8. WHEN a user uses rich text mode, THE Notes_Widget SHALL support basic formatting (bold, italic, lists, headings)
|
||||
9. WHEN a user edits note content, THE Widget_Manager SHALL persist changes to the Storage_Service
|
||||
10. WHEN a user sets a custom title for a Notes_Widget, THE Widget_Manager SHALL update and display the custom title
|
||||
11. THE Notes_Widget SHALL preserve line breaks, indentation, and formatting in all content modes
|
||||
12. WHEN a user adds tags to a note, THE Storage_Service SHALL support one-to-many tag relationships (multiple tags per note)
|
||||
13. WHEN a user filters notes by tag, THE Notes_Widget SHALL display only notes matching the selected tag(s)
|
||||
14. THE Storage_Service SHALL efficiently support storing and retrieving thousands of notes per user with various content formats
|
||||
15. WHEN a user quickly changes tags on multiple notes, THE Storage_Service SHALL handle rapid updates without data loss
|
||||
16. WHEN a user deletes a tag, THE Widget_Manager SHALL remove the tag from all associated notes
|
||||
17. WHEN a user shares a note, THE Dashboard SHALL generate a shareable link or export option that preserves formatting
|
||||
18. WHEN a user switches between content format modes, THE Notes_Widget SHALL preserve the raw content without data loss
|
||||
|
||||
### Requirement 6: Weather Widget
|
||||
|
||||
**User Story:** As a user, I want to add weather widgets to see current weather conditions, so that I can quickly check the weather without visiting a weather website.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. WHEN a user adds a Weather_Widget, THE Widget_Manager SHALL create the widget and prompt for a location
|
||||
2. WHEN a user specifies a location, THE Weather_Widget SHALL fetch and display current weather conditions
|
||||
3. THE Weather_Widget SHALL display temperature, weather condition description, and an appropriate weather icon
|
||||
4. WHEN a user changes the location, THE Weather_Widget SHALL update to show weather for the new location
|
||||
5. WHEN weather data cannot be retrieved, THE Weather_Widget SHALL display an error message
|
||||
6. THE Weather_Widget SHALL refresh weather data periodically
|
||||
7. WHEN a user sets a custom title for a Weather_Widget, THE Widget_Manager SHALL update and display the custom title
|
||||
|
||||
### Requirement 7: Widget Management
|
||||
|
||||
**User Story:** As a user, I want to add, remove, resize, and reposition widgets on my pages, so that I can customize my start page layout to my preferences.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. WHEN a user clicks an add widget button, THE Dashboard SHALL display a widget type selection menu
|
||||
2. WHEN a user selects a widget type, THE Widget_Manager SHALL create the widget and add it to the current page
|
||||
3. WHEN a user deletes a widget, THE Widget_Manager SHALL remove it from the page
|
||||
4. WHEN a user drags a widget, THE Dashboard SHALL allow repositioning within the page
|
||||
5. WHEN a user drops a widget in a new position, THE Widget_Manager SHALL update the widget position and persist the change
|
||||
6. WHERE the application supports widget resizing, THE Dashboard SHALL allow users to resize widgets
|
||||
7. THE Widget_Manager SHALL persist all widget changes to the Storage_Service immediately
|
||||
8. WHEN a widget is created, THE Widget_Manager SHALL assign it a unique identifier
|
||||
|
||||
### Requirement 8: Data Persistence
|
||||
|
||||
**User Story:** As a user, I want my pages, widgets, and settings to be saved automatically, so that my customizations are preserved across sessions.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. WHEN a user makes any change to pages, widgets, or settings, THE Storage_Service SHALL persist the change immediately
|
||||
2. WHEN a user logs in, THE Storage_Service SHALL retrieve all user data and restore the previous state
|
||||
3. THE Storage_Service SHALL store page configurations including page names and order
|
||||
4. THE Storage_Service SHALL store widget configurations including type, position, size, and content
|
||||
5. THE Storage_Service SHALL store user preferences including selected Search_Provider
|
||||
6. WHEN storage operations fail, THE Dashboard SHALL display an error message to the user
|
||||
7. THE Storage_Service SHALL associate all data with the authenticated user account
|
||||
8. THE Storage_Service SHALL be designed to scale efficiently for users with 10,000+ bookmarks and notes
|
||||
9. THE Storage_Service SHALL support efficient querying by tags for both bookmarks and notes
|
||||
10. THE Storage_Service SHALL handle concurrent updates to tags and content without data corruption
|
||||
|
||||
### Requirement 9: Responsive Design
|
||||
|
||||
**User Story:** As a user, I want the application to work well on different screen sizes, so that I can access my start page from various devices.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. WHEN the application is viewed on a desktop screen, THE Dashboard SHALL display widgets in a multi-column grid layout
|
||||
2. WHEN the application is viewed on a tablet screen, THE Dashboard SHALL adjust the layout to fit the available width
|
||||
3. WHEN the application is viewed on a mobile screen, THE Dashboard SHALL display widgets in a single-column layout
|
||||
4. THE Dashboard SHALL ensure all interactive elements are appropriately sized for touch input on mobile devices
|
||||
5. WHEN the screen size changes, THE Dashboard SHALL reflow the layout without requiring a page refresh
|
||||
|
||||
### Requirement 10: User Interface and Navigation
|
||||
|
||||
**User Story:** As a user, I want an intuitive interface with clear navigation, so that I can easily manage my pages and widgets.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. THE Dashboard SHALL display a top toolbar containing the search bar, page tabs, and user menu
|
||||
2. THE Dashboard SHALL display page tabs horizontally in the top toolbar
|
||||
3. WHEN a user clicks the user menu, THE Dashboard SHALL display options for settings and logout
|
||||
4. THE Dashboard SHALL provide visual feedback for interactive elements on hover and click
|
||||
5. WHEN a user performs an action, THE Dashboard SHALL provide immediate visual confirmation
|
||||
6. THE Dashboard SHALL use consistent styling and spacing throughout the interface
|
||||
7. WHEN loading data, THE Dashboard SHALL display loading indicators to inform the user
|
||||
|
||||
### Requirement 11: Database Technology Evaluation
|
||||
|
||||
**User Story:** As a system architect, I want to evaluate DynamoDB as the storage solution, so that I can ensure the application scales efficiently for users with thousands of bookmarks and notes.
|
||||
|
||||
#### Acceptance Criteria
|
||||
|
||||
1. THE design document SHALL evaluate DynamoDB's suitability for storing user data, pages, widgets, bookmarks, and notes
|
||||
2. THE design document SHALL analyze DynamoDB's ability to handle 10,000+ bookmarks per user with efficient retrieval
|
||||
3. THE design document SHALL evaluate access patterns for tag-based queries and filtering
|
||||
4. THE design document SHALL assess DynamoDB's performance for rapid tag updates and deletions across multiple items
|
||||
5. THE design document SHALL consider alternative database solutions if DynamoDB limitations are identified
|
||||
6. THE design document SHALL define the data model and indexing strategy for tags (one-to-many relationships)
|
||||
7. THE design document SHALL address how to efficiently query bookmarks/notes by multiple tags
|
||||
8. THE design document SHALL evaluate the cost implications of the chosen storage solution at scale
|
||||
9. THE design document SHALL consider data consistency requirements for concurrent updates
|
||||
634
.kiro/specs/custom-start-page/tasks.md
Normal file
634
.kiro/specs/custom-start-page/tasks.md
Normal file
@@ -0,0 +1,634 @@
|
||||
# Implementation Plan: Custom Start Page Application
|
||||
|
||||
## Overview
|
||||
|
||||
This implementation plan breaks down the Custom Start Page Application into discrete, actionable coding tasks. The application uses a hypermedia-driven architecture with HTMX for dynamic interactions, Go for the backend, and DynamoDB for data storage. The implementation follows an incremental approach, building core infrastructure first, then adding features layer by layer, with testing integrated throughout.
|
||||
|
||||
The plan is organized into major phases:
|
||||
1. Project setup and infrastructure
|
||||
2. Authentication system
|
||||
3. Core data models and DynamoDB integration
|
||||
4. Page and widget management
|
||||
5. Bookmark widget with tags and groups
|
||||
6. Notes widget with rich content support
|
||||
7. Weather widget
|
||||
8. Sharing functionality
|
||||
9. UI polish and responsive design
|
||||
10. Performance optimization and scale testing
|
||||
|
||||
Each task references specific requirements from the requirements document and includes sub-tasks for implementation and testing.
|
||||
|
||||
## Tasks
|
||||
|
||||
- [x] 1. Project setup and infrastructure
|
||||
- Initialize Go project with module structure
|
||||
- Set up directory structure (cmd, internal, pkg, templates, static)
|
||||
- Configure DynamoDB local for development
|
||||
- Set up testing framework (testing package + gopter for property tests)
|
||||
- Create base HTML templates with HTMX integration
|
||||
- Set up Tailwind CSS or basic CSS framework
|
||||
- Configure environment variables and configuration management
|
||||
- _Requirements: All (foundational)_
|
||||
|
||||
- [ ] 2. Implement authentication system
|
||||
- [x] 2.1 Create User data model and DynamoDB Users table
|
||||
- Define User struct with all fields (id, email, oauth_provider, oauth_id, timestamps)
|
||||
- Implement DynamoDB table creation script
|
||||
- Implement user CRUD operations in storage layer
|
||||
- _Requirements: 1.1, 1.3_
|
||||
|
||||
|
||||
- [x] 2.2 Implement OAuth service with Google provider
|
||||
- Set up golang.org/x/oauth2 configuration
|
||||
- Implement InitiateOAuth method (generate redirect URL)
|
||||
- Implement HandleOAuthCallback method (exchange code for token, create/retrieve user)
|
||||
- Create OAuth endpoints (GET /auth/oauth/:provider, GET /auth/callback/:provider)
|
||||
- _Requirements: 1.2, 1.3, 1.5, 1.6_
|
||||
|
||||
- [x] 2.3 Implement session management
|
||||
- Set up gorilla/sessions or similar for session handling
|
||||
- Implement ValidateSession method
|
||||
- Implement Logout method
|
||||
- Create session middleware for protected routes
|
||||
- Store session tokens in secure, httponly cookies
|
||||
- _Requirements: 1.7, 1.8_
|
||||
|
||||
- [x] 2.4 Create login and dashboard templates
|
||||
- Create login.html template with OAuth provider buttons
|
||||
- Create base dashboard layout template
|
||||
- Implement redirect logic (unauthenticated → login, authenticated → dashboard)
|
||||
- _Requirements: 1.1_
|
||||
|
||||
- [ ]* 2.5 Write property tests for authentication
|
||||
- **Property 1: Unauthenticated users see login page**
|
||||
- **Property 3: Successful OAuth creates or retrieves user**
|
||||
- **Property 5: Session persistence across refresh**
|
||||
- **Property 6: Logout terminates session**
|
||||
- **Validates: Requirements 1.1, 1.3, 1.7, 1.8**
|
||||
|
||||
- [ ]* 2.6 Write unit tests for authentication edge cases
|
||||
- Test OAuth failure scenarios (invalid code, network errors)
|
||||
- Test session expiration handling
|
||||
- Test concurrent session conflicts
|
||||
- _Requirements: 1.4_
|
||||
|
||||
- [ ] 3. Implement core data models and DynamoDB integration
|
||||
- [x] 3.1 Create DynamoDB storage service wrapper
|
||||
- Implement StorageService interface with DynamoDB operations
|
||||
- Set up aws-sdk-go-v2 client with connection pooling
|
||||
- Implement retry logic with exponential backoff
|
||||
- Implement transaction support (TransactWrite)
|
||||
- Implement batch operations (BatchGet, BatchWrite)
|
||||
- _Requirements: 8.1, 8.8_
|
||||
|
||||
- [~] 3.2 Define all data models
|
||||
- Create Page model struct
|
||||
- Create Widget model struct with type enum
|
||||
- Create Bookmark model struct with version field
|
||||
- Create Note model struct with format and language fields
|
||||
- Create TagAssociation model struct
|
||||
- Create Group model struct
|
||||
- Create Share model struct
|
||||
- Create Preferences model struct
|
||||
- _Requirements: 2.1, 4.2, 5.2, 8.3, 8.4, 8.5_
|
||||
|
||||
- [~] 3.3 Create DynamoDB table schemas
|
||||
- Implement Pages table creation with composite key
|
||||
- Implement Widgets table creation
|
||||
- Implement Bookmarks table creation with UserBookmarksIndex GSI
|
||||
- Implement Notes table creation with UserNotesIndex GSI
|
||||
- Implement TagAssociations table creation with TagItemsIndex GSI
|
||||
- Implement Groups table creation
|
||||
- Implement SharedItems table creation with UserSharesIndex GSI
|
||||
- Implement Preferences table creation
|
||||
- _Requirements: 8.3, 8.4, 8.5, 11.6_
|
||||
|
||||
- [ ]* 3.4 Write property tests for data model round-trip
|
||||
- **Property 44: Data round-trip consistency**
|
||||
- Test serialization/deserialization for all models
|
||||
- Test DynamoDB storage and retrieval preserves all fields
|
||||
- **Validates: Requirements 8.2, 8.3, 8.4, 8.5**
|
||||
|
||||
- [ ] 4. Implement page management
|
||||
- [~] 4.1 Create PageService with all CRUD operations
|
||||
- Implement GetPages method (query by user_id, sort by order)
|
||||
- Implement CreatePage method with default "Home" page for new users
|
||||
- Implement UpdatePage method (name and order updates)
|
||||
- Implement DeletePage method with cascade delete of widgets
|
||||
- Implement ReorderPages method
|
||||
- Add validation: prevent deletion of last page
|
||||
- _Requirements: 2.1, 2.2, 2.3, 2.5, 2.6, 2.7, 2.8_
|
||||
|
||||
- [~] 4.2 Create page HTTP endpoints
|
||||
- Implement GET /dashboard (full page with page tabs)
|
||||
- Implement GET /pages/:id (returns widget grid HTML fragment)
|
||||
- Implement POST /pages (create page, returns updated tabs HTML)
|
||||
- Implement PUT /pages/:id (update page, returns updated tab HTML)
|
||||
- Implement DELETE /pages/:id (delete page, returns updated tabs HTML)
|
||||
- Implement POST /pages/reorder (reorder pages, returns updated tabs HTML)
|
||||
- _Requirements: 2.2, 2.3, 2.4, 2.5, 2.7_
|
||||
|
||||
- [~] 4.3 Create page templates
|
||||
- Create page tabs partial template
|
||||
- Create page creation form template
|
||||
- Create page edit form template
|
||||
- Add HTMX attributes for dynamic updates
|
||||
- _Requirements: 2.2, 2.3, 2.4, 10.2_
|
||||
|
||||
- [ ]* 4.4 Write property tests for page management
|
||||
- **Property 7: New users get default page**
|
||||
- **Property 8: Adding page increases count**
|
||||
- **Property 9: Page switching displays correct widgets**
|
||||
- **Property 10: Page deletion removes page and widgets**
|
||||
- **Property 11: Page reordering persists**
|
||||
- **Validates: Requirements 2.1, 2.2, 2.4, 2.5, 2.7**
|
||||
|
||||
- [ ]* 4.5 Write unit tests for page edge cases
|
||||
- Test last page deletion prevention
|
||||
- Test page name validation (length, special characters)
|
||||
- Test concurrent page operations
|
||||
- _Requirements: 2.6_
|
||||
|
||||
- [~] 5. Checkpoint - Ensure all tests pass
|
||||
- Ensure all tests pass, ask the user if questions arise.
|
||||
|
||||
- [ ] 6. Implement widget management foundation
|
||||
- [~] 6.1 Create WidgetService with CRUD operations
|
||||
- Implement GetWidgets method (query by page_id)
|
||||
- Implement CreateWidget method with unique ID generation
|
||||
- Implement UpdateWidget method (position, size, config, title)
|
||||
- Implement DeleteWidget method with cascade delete of widget data
|
||||
- _Requirements: 7.1, 7.2, 7.3, 7.5, 7.7, 7.8_
|
||||
|
||||
- [~] 6.2 Create widget HTTP endpoints
|
||||
- Implement GET /widgets/:id (returns widget HTML)
|
||||
- Implement POST /pages/:pageId/widgets (create widget, returns widget HTML)
|
||||
- Implement PUT /widgets/:id (update widget, returns updated HTML)
|
||||
- Implement DELETE /widgets/:id (delete widget, returns empty)
|
||||
- Implement POST /widgets/:id/position (update position, returns success)
|
||||
- _Requirements: 7.2, 7.3, 7.4, 7.5_
|
||||
|
||||
- [~] 6.3 Create base widget templates
|
||||
- Create widget container template with drag handles
|
||||
- Create widget type selection menu template
|
||||
- Create widget header template with title and delete button
|
||||
- Add Sortable.js initialization for drag-and-drop
|
||||
- _Requirements: 7.1, 7.4, 7.5_
|
||||
|
||||
- [ ]* 6.4 Write property tests for widget management
|
||||
- **Property 15: Widget creation increases count**
|
||||
- **Property 16: Widget deletion decreases count**
|
||||
- **Property 17: Widget position updates persist**
|
||||
- **Property 18: Widget IDs are unique**
|
||||
- **Property 19: Widget title customization**
|
||||
- **Validates: Requirements 7.2, 7.3, 7.5, 7.8, 4.8, 5.10, 6.7**
|
||||
|
||||
- [ ] 7. Implement tag system
|
||||
- [~] 7.1 Create TagService with all operations
|
||||
- Implement GetTags method (query user's tags with counts)
|
||||
- Implement AddTagToItem method with transaction (increment version, create association)
|
||||
- Implement RemoveTagFromItem method
|
||||
- Implement DeleteTag method (batch delete all associations)
|
||||
- Implement RenameTag method (batch update all associations)
|
||||
- Implement GetTagSuggestions method (prefix search with autocomplete)
|
||||
- Add tag normalization (lowercase, trim)
|
||||
- _Requirements: 4.9, 4.14, 4.15, 5.12, 5.15, 5.16, 8.9, 8.10_
|
||||
|
||||
- [~] 7.2 Create tag HTTP endpoints
|
||||
- Implement GET /tags (returns tag list HTML)
|
||||
- Implement POST /items/:itemId/tags (add tag, returns updated tag list HTML)
|
||||
- Implement DELETE /items/:itemId/tags/:tagName (remove tag, returns updated HTML)
|
||||
- Implement DELETE /tags/:tagName (delete tag from all items, returns success)
|
||||
- Implement PUT /tags/:oldName/rename (rename tag, returns success)
|
||||
- Implement GET /tags/suggest?prefix=:prefix (returns datalist HTML)
|
||||
- _Requirements: 4.9, 4.15, 5.12, 5.16_
|
||||
|
||||
- [~] 7.3 Create tag UI components
|
||||
- Create tag input component with autocomplete
|
||||
- Create tag list display component
|
||||
- Create tag filter component (multi-select with AND/OR logic)
|
||||
- Add HTMX attributes for dynamic tag operations
|
||||
- _Requirements: 4.9, 4.10, 5.12, 5.13_
|
||||
|
||||
- [ ]* 7.4 Write property tests for tag system
|
||||
- **Property 34: Tag association supports one-to-many**
|
||||
- **Property 35: Tag filtering returns matching items**
|
||||
- **Property 36: Tag deletion removes from all items**
|
||||
- **Property 37: Concurrent tag updates preserve data**
|
||||
- **Validates: Requirements 4.9, 4.10, 4.14, 4.15, 5.12, 5.13, 5.15, 5.16, 8.9, 8.10**
|
||||
|
||||
- [ ]* 7.5 Write unit tests for tag edge cases
|
||||
- Test tag normalization (uppercase, whitespace)
|
||||
- Test duplicate tag addition (idempotent)
|
||||
- Test tag name conflicts during rename
|
||||
- Test empty tag filter behavior
|
||||
- Test non-existent tag in filter
|
||||
- _Requirements: 4.9, 4.10, 4.15, 5.12, 5.13, 5.16_
|
||||
|
||||
- [ ] 8. Implement bookmark widget
|
||||
- [~] 8.1 Create BookmarkService with all operations
|
||||
- Implement GetBookmarks method (query by widget_id, sort by order)
|
||||
- Implement CreateBookmark method with validation (title, URL required)
|
||||
- Implement UpdateBookmark method with optimistic locking (version check)
|
||||
- Implement DeleteBookmark method with cascade delete of tag associations
|
||||
- Implement ReorderBookmarks method
|
||||
- Implement GetBookmarksByTags method (query TagItemsIndex, compute intersection for AND logic)
|
||||
- Add URL validation
|
||||
- _Requirements: 4.2, 4.3, 4.4, 4.5, 4.6, 4.10, 4.13, 4.14_
|
||||
|
||||
- [~] 8.2 Create bookmark HTTP endpoints
|
||||
- Implement GET /widgets/:widgetId/bookmarks (returns bookmarks HTML)
|
||||
- Implement POST /widgets/:widgetId/bookmarks (create bookmark, returns bookmark HTML)
|
||||
- Implement PUT /bookmarks/:id (update bookmark, returns updated HTML)
|
||||
- Implement DELETE /bookmarks/:id (delete bookmark, returns empty)
|
||||
- Implement POST /bookmarks/reorder (reorder bookmarks, returns success)
|
||||
- Implement GET /bookmarks/filter?tags=tag1,tag2&logic=and (returns filtered HTML)
|
||||
- _Requirements: 4.2, 4.3, 4.4, 4.5, 4.6, 4.10_
|
||||
|
||||
- [~] 8.3 Create bookmark widget templates
|
||||
- Create bookmark widget container template
|
||||
- Create bookmark list template with titles and URLs
|
||||
- Create bookmark item template with click handler (open in new tab)
|
||||
- Create bookmark add form template
|
||||
- Create bookmark edit form template with tag input
|
||||
- Add favicon display (optional)
|
||||
- _Requirements: 4.1, 4.2, 4.3, 4.7, 4.8_
|
||||
|
||||
- [ ]* 8.4 Write property tests for bookmark widget
|
||||
- **Property 20: Bookmark addition persists**
|
||||
- **Property 21: Bookmark editing updates values**
|
||||
- **Property 22: Bookmark deletion removes from list**
|
||||
- **Property 23: Bookmark reordering persists**
|
||||
- **Property 24: Bookmark rendering includes all titles**
|
||||
- **Validates: Requirements 4.2, 4.4, 4.5, 4.6, 4.7**
|
||||
|
||||
- [ ]* 8.5 Write unit tests for bookmark edge cases
|
||||
- Test invalid URL rejection
|
||||
- Test empty title handling
|
||||
- Test bookmark with 10+ tags
|
||||
- Test version conflict handling
|
||||
- _Requirements: 4.2, 4.4, 4.14_
|
||||
|
||||
- [ ] 9. Implement group system for bookmarks
|
||||
- [~] 9.1 Create GroupService with all operations
|
||||
- Implement GetGroups method (query by widget_id, sort by order)
|
||||
- Implement CreateGroup method
|
||||
- Implement UpdateGroup method (name and order updates)
|
||||
- Implement DeleteGroup method (move bookmarks to specified destination)
|
||||
- Implement MoveBookmarkToGroup method
|
||||
- Implement ReorderGroups method
|
||||
- _Requirements: 4.11, 4.12_
|
||||
|
||||
- [~] 9.2 Create group HTTP endpoints
|
||||
- Implement GET /widgets/:widgetId/groups (returns groups HTML)
|
||||
- Implement POST /widgets/:widgetId/groups (create group, returns group HTML)
|
||||
- Implement PUT /groups/:id (update group, returns updated HTML)
|
||||
- Implement DELETE /groups/:id (delete group, returns success)
|
||||
- Implement POST /bookmarks/:id/move (move bookmark to group, returns updated HTML)
|
||||
- _Requirements: 4.11, 4.12_
|
||||
|
||||
- [~] 9.3 Create group UI components
|
||||
- Create group container template
|
||||
- Create group header with name and collapse/expand
|
||||
- Update bookmark list template to support grouping
|
||||
- Create group creation form
|
||||
- Add drag-and-drop between groups
|
||||
- _Requirements: 4.11, 4.12_
|
||||
|
||||
- [ ]* 9.4 Write property tests for group system
|
||||
- **Property 25: Group creation and assignment**
|
||||
- **Property 26: Bookmark group reassignment**
|
||||
- **Validates: Requirements 4.11, 4.12**
|
||||
|
||||
- [ ]* 9.5 Write unit tests for group edge cases
|
||||
- Test deleting group with bookmarks (move to ungrouped)
|
||||
- Test deleting group with bookmarks (move to another group)
|
||||
- Test moving bookmark to non-existent group
|
||||
- Test duplicate group names within widget
|
||||
- _Requirements: 4.11, 4.12_
|
||||
|
||||
- [~] 10. Checkpoint - Ensure all tests pass
|
||||
- Ensure all tests pass, ask the user if questions arise.
|
||||
|
||||
- [ ] 11. Implement notes widget with rich content support
|
||||
- [~] 11.1 Create NotesService with all operations
|
||||
- Implement GetNote method (query by widget_id)
|
||||
- Implement UpdateNote method with optimistic locking (version check)
|
||||
- Implement GetNotesByTags method (query TagItemsIndex)
|
||||
- Add content size validation (warn at 50KB, reject at 400KB)
|
||||
- Add format validation (enum: plain, rtf, code, yaml, markdown)
|
||||
- _Requirements: 5.1, 5.2, 5.3, 5.4, 5.9, 5.13, 5.14, 5.15_
|
||||
|
||||
- [~] 11.2 Create notes HTTP endpoints
|
||||
- Implement GET /widgets/:widgetId/note (returns note HTML)
|
||||
- Implement POST /widgets/:widgetId/note (update note, returns save status HTML)
|
||||
- Implement GET /notes/filter?tags=tag1,tag2&logic=and (returns filtered HTML)
|
||||
- Add debounced auto-save (500ms delay)
|
||||
- _Requirements: 5.2, 5.9, 5.13_
|
||||
|
||||
- [~] 11.3 Create notes widget templates for plain text mode
|
||||
- Create notes widget container template
|
||||
- Create plain text editor template (textarea with auto-save)
|
||||
- Create format selector dropdown
|
||||
- Add Unicode support (UTF-8 throughout)
|
||||
- _Requirements: 5.1, 5.2, 5.3, 5.5, 5.10_
|
||||
|
||||
- [~] 11.4 Add rich text (RTF) mode support
|
||||
- Integrate TinyMCE or Quill.js for rich text editing
|
||||
- Implement RTF rendering with HTML sanitization (DOMPurify)
|
||||
- Support basic formatting (bold, italic, lists, headings)
|
||||
- Store content as sanitized HTML
|
||||
- _Requirements: 5.3, 5.4, 5.8_
|
||||
|
||||
- [~] 11.5 Add code mode support with syntax highlighting
|
||||
- Integrate CodeMirror or Monaco Editor for code editing
|
||||
- Add language selector dropdown (JavaScript, Python, Go, Java, etc.)
|
||||
- Integrate Prism.js or Highlight.js for syntax highlighting
|
||||
- Add line numbers and copy button
|
||||
- Store language metadata in Note model
|
||||
- _Requirements: 5.3, 5.4, 5.6_
|
||||
|
||||
- [~] 11.6 Add YAML mode support
|
||||
- Create YAML editor template (textarea with monospace font)
|
||||
- Add tab support for indentation
|
||||
- Render YAML in <pre> tag with indentation preservation
|
||||
- Store content as-is (no validation)
|
||||
- _Requirements: 5.3, 5.4, 5.7_
|
||||
|
||||
- [~] 11.7 Add Markdown mode support
|
||||
- Create Markdown editor template (split view or live preview)
|
||||
- Integrate marked.js for Markdown parsing
|
||||
- Render Markdown as sanitized HTML
|
||||
- Store content as raw Markdown
|
||||
- _Requirements: 5.3, 5.4_
|
||||
|
||||
- [ ]* 11.8 Write property tests for notes widget
|
||||
- **Property 27: Notes content persists**
|
||||
- **Property 28: Content format preservation**
|
||||
- **Property 29: Unicode content preservation**
|
||||
- **Property 30: Format switching preserves content**
|
||||
- **Property 31: Code syntax highlighting**
|
||||
- **Property 32: YAML indentation preservation**
|
||||
- **Property 33: RTF formatting preservation**
|
||||
- **Validates: Requirements 5.2, 5.4, 5.5, 5.6, 5.7, 5.8, 5.9, 5.11, 5.18**
|
||||
|
||||
- [ ]* 11.9 Write unit tests for notes edge cases
|
||||
- Test content size limits (50KB warning, 400KB rejection)
|
||||
- Test format switching without data loss
|
||||
- Test Unicode characters (emoji, international text)
|
||||
- Test malformed YAML (stored as-is)
|
||||
- Test malformed Markdown (rendered gracefully)
|
||||
- Test XSS prevention in RTF mode
|
||||
- Test version conflict handling
|
||||
- _Requirements: 5.3, 5.4, 5.5, 5.14, 5.15, 5.18_
|
||||
|
||||
- [ ] 12. Implement weather widget
|
||||
- [~] 12.1 Create WeatherService
|
||||
- Implement GetWeather method (fetch from external API)
|
||||
- Implement ValidateLocation method
|
||||
- Add caching for weather data (TTL-based)
|
||||
- Add error handling for API failures
|
||||
- Choose weather API (OpenWeatherMap or similar)
|
||||
- _Requirements: 6.2, 6.4, 6.5_
|
||||
|
||||
- [~] 12.2 Create weather HTTP endpoints
|
||||
- Implement GET /weather?location=:location (returns weather HTML)
|
||||
- Add periodic refresh logic (client-side polling or server-sent events)
|
||||
- _Requirements: 6.2, 6.6_
|
||||
|
||||
- [~] 12.3 Create weather widget templates
|
||||
- Create weather widget container template
|
||||
- Create weather display template (temperature, condition, icon)
|
||||
- Create location input form
|
||||
- Add error message template for API failures
|
||||
- _Requirements: 6.1, 6.2, 6.3, 6.4, 6.5, 6.7_
|
||||
|
||||
- [ ]* 12.4 Write property tests for weather widget
|
||||
- **Property 40: Weather data fetching**
|
||||
- **Property 41: Weather location updates**
|
||||
- **Property 42: Weather error handling**
|
||||
- **Validates: Requirements 6.2, 6.3, 6.4, 6.5**
|
||||
|
||||
- [ ]* 12.5 Write unit tests for weather edge cases
|
||||
- Test invalid location handling
|
||||
- Test API timeout handling
|
||||
- Test rate limiting
|
||||
- Test cached data retrieval
|
||||
- _Requirements: 6.4, 6.5_
|
||||
|
||||
- [ ] 13. Implement search functionality
|
||||
- [~] 13.1 Create search provider configuration
|
||||
- Define search provider enum (google, duckduckgo, bing)
|
||||
- Implement search URL generation for each provider
|
||||
- Store search provider preference in Preferences table
|
||||
- Default to Google if not configured
|
||||
- _Requirements: 3.2, 3.4, 3.5, 3.6_
|
||||
|
||||
- [~] 13.2 Create search UI components
|
||||
- Create search bar template in top toolbar
|
||||
- Add search form with HTMX attributes
|
||||
- Add search provider selector in preferences
|
||||
- Add empty query validation (client-side and server-side)
|
||||
- _Requirements: 3.1, 3.2, 3.3, 3.7_
|
||||
|
||||
- [ ]* 13.3 Write property tests for search functionality
|
||||
- **Property 12: Search generates correct URL**
|
||||
- **Property 13: Search provider selection persists**
|
||||
- **Property 14: Empty search is rejected**
|
||||
- **Validates: Requirements 3.2, 3.4, 3.7**
|
||||
|
||||
- [ ] 14. Implement sharing functionality
|
||||
- [~] 14.1 Create SharingService with all operations
|
||||
- Implement CreateShare method (generate unique share ID)
|
||||
- Implement GetSharedItem method (increment access count atomically)
|
||||
- Implement RevokeShare method
|
||||
- Implement GetUserShares method
|
||||
- Add share ID generation (cryptographically random)
|
||||
- Add expiration handling
|
||||
- _Requirements: 4.16, 5.17_
|
||||
|
||||
- [~] 14.2 Create sharing HTTP endpoints
|
||||
- Implement POST /share (create share, returns share dialog HTML with link)
|
||||
- Implement GET /share/:shareId (public endpoint, returns shared item HTML)
|
||||
- Implement DELETE /share/:shareId (revoke share, returns success)
|
||||
- Implement GET /shares (returns user's shares list HTML)
|
||||
- Add rate limiting on share access
|
||||
- _Requirements: 4.16, 5.17_
|
||||
|
||||
- [~] 14.3 Create sharing UI components
|
||||
- Create share button for bookmarks and notes
|
||||
- Create share dialog template with copy link button
|
||||
- Create shared item view template (read-only)
|
||||
- Create shares list template
|
||||
- Add expiration date selector (optional)
|
||||
- _Requirements: 4.16, 5.17_
|
||||
|
||||
- [ ]* 14.4 Write property tests for sharing
|
||||
- **Property 38: Share link generation**
|
||||
- **Property 39: Shared note preserves formatting**
|
||||
- **Validates: Requirements 4.16, 5.17**
|
||||
|
||||
- [ ]* 14.5 Write unit tests for sharing edge cases
|
||||
- Test expired share access
|
||||
- Test revoked share access
|
||||
- Test share ID uniqueness
|
||||
- Test access count increment
|
||||
- Test XSS prevention in shared content
|
||||
- _Requirements: 4.16, 5.17_
|
||||
|
||||
- [~] 15. Checkpoint - Ensure all tests pass
|
||||
- Ensure all tests pass, ask the user if questions arise.
|
||||
|
||||
- [ ] 16. Implement preferences management
|
||||
- [~] 16.1 Create preferences HTTP endpoints
|
||||
- Implement GET /preferences (returns preferences form HTML)
|
||||
- Implement POST /preferences (update preferences, returns success)
|
||||
- _Requirements: 3.4, 8.5_
|
||||
|
||||
- [~] 16.2 Create preferences UI
|
||||
- Create preferences page template
|
||||
- Add search provider selector
|
||||
- Add theme selector (optional)
|
||||
- _Requirements: 3.3, 3.4_
|
||||
|
||||
- [ ]* 16.3 Write property tests for preferences
|
||||
- Test preference persistence across sessions
|
||||
- Test default values for new users
|
||||
- **Validates: Requirements 3.4, 8.5**
|
||||
|
||||
- [ ] 17. Implement responsive design
|
||||
- [~] 17.1 Create responsive layouts
|
||||
- Implement multi-column grid layout for desktop
|
||||
- Implement adaptive layout for tablet
|
||||
- Implement single-column layout for mobile
|
||||
- Add CSS media queries for breakpoints
|
||||
- _Requirements: 9.1, 9.2, 9.3_
|
||||
|
||||
- [~] 17.2 Optimize for touch devices
|
||||
- Ensure interactive elements are appropriately sized for touch
|
||||
- Add touch-friendly drag-and-drop
|
||||
- Test on mobile devices
|
||||
- _Requirements: 9.4_
|
||||
|
||||
- [ ]* 17.3 Write property tests for responsive design
|
||||
- **Property 50: Responsive layout reflow**
|
||||
- Test layout at various viewport sizes
|
||||
- **Validates: Requirements 9.5**
|
||||
|
||||
- [ ] 18. Implement UI polish and visual feedback
|
||||
- [~] 18.1 Add visual feedback for interactions
|
||||
- Add hover states for all interactive elements
|
||||
- Add click/active states for buttons
|
||||
- Add focus states for inputs
|
||||
- Add loading indicators for async operations
|
||||
- Add success/error toast notifications
|
||||
- _Requirements: 10.4, 10.5, 10.7_
|
||||
|
||||
- [~] 18.2 Implement consistent styling
|
||||
- Apply consistent spacing and typography
|
||||
- Add consistent color scheme
|
||||
- Add consistent border radius and shadows
|
||||
- Ensure WCAG accessibility compliance
|
||||
- _Requirements: 10.6_
|
||||
|
||||
- [~] 18.3 Create top toolbar
|
||||
- Implement toolbar layout with search bar, page tabs, and user menu
|
||||
- Add user menu dropdown (settings, logout)
|
||||
- Style page tabs horizontally
|
||||
- _Requirements: 10.1, 10.2, 10.3_
|
||||
|
||||
- [ ]* 18.4 Write property tests for UI feedback
|
||||
- **Property 47: Interactive element feedback**
|
||||
- **Property 48: Action confirmation feedback**
|
||||
- **Property 49: Loading indicators**
|
||||
- **Validates: Requirements 10.4, 10.5, 10.7**
|
||||
|
||||
- [ ] 19. Implement data persistence guarantees
|
||||
- [ ]* 19.1 Write property tests for data persistence
|
||||
- **Property 43: Immediate persistence**
|
||||
- **Property 44: Data round-trip consistency**
|
||||
- **Property 45: Data isolation**
|
||||
- **Property 46: Storage error handling**
|
||||
- Test all CRUD operations persist immediately
|
||||
- Test logout/login restores state
|
||||
- Test user data isolation
|
||||
- **Validates: Requirements 2.8, 7.7, 8.1, 8.2, 8.6, 8.7**
|
||||
|
||||
- [ ]* 19.2 Write unit tests for error handling
|
||||
- Test DynamoDB connection failures
|
||||
- Test conditional write failures (version conflicts)
|
||||
- Test transaction rollback
|
||||
- Test batch operation partial failures
|
||||
- _Requirements: 8.6, 8.10_
|
||||
|
||||
- [ ] 20. Performance optimization and scale testing
|
||||
- [~] 20.1 Implement caching strategy
|
||||
- Add Redis cache for frequently accessed data (user preferences, tag lists)
|
||||
- Implement cache invalidation on updates
|
||||
- Add ETags for static assets
|
||||
- _Requirements: 4.13, 5.14, 8.8_
|
||||
|
||||
- [~] 20.2 Optimize DynamoDB queries
|
||||
- Implement pagination for large bookmark/note lists
|
||||
- Optimize batch operations
|
||||
- Add connection pooling
|
||||
- _Requirements: 4.13, 5.14, 8.8_
|
||||
|
||||
- [~] 20.3 Add performance monitoring
|
||||
- Add CloudWatch metrics for DynamoDB operations
|
||||
- Add latency tracking for all endpoints
|
||||
- Add error rate monitoring
|
||||
- _Requirements: 8.8_
|
||||
|
||||
- [ ]* 20.4 Write scale tests
|
||||
- Test with 10,000+ bookmarks per user
|
||||
- Test with 1,000+ notes per user
|
||||
- Test with 100+ tags per user
|
||||
- Test concurrent tag updates from multiple sessions
|
||||
- Test tag deletion from 1,000+ items
|
||||
- Measure query latency (target: <100ms p95)
|
||||
- **Validates: Requirements 4.13, 4.14, 5.14, 5.15, 8.8, 11.2, 11.4**
|
||||
|
||||
- [ ]* 20.5 Write load tests
|
||||
- Test 1,000 concurrent users
|
||||
- Test 100 requests/second per server instance
|
||||
- Measure p95 latency (target: <200ms)
|
||||
- _Requirements: 8.8_
|
||||
|
||||
- [ ] 21. Final integration and end-to-end testing
|
||||
- [ ]* 21.1 Write end-to-end tests for critical user journeys
|
||||
- Test: Login → create page → add widgets → add bookmarks with tags
|
||||
- Test: Create notes with different formats
|
||||
- Test: Filter bookmarks/notes by tags
|
||||
- Test: Create groups and organize bookmarks
|
||||
- Test: Share bookmarks and notes
|
||||
- Test: Concurrent tag updates from multiple sessions
|
||||
- Test: Session persistence across browser refresh
|
||||
- _Requirements: All_
|
||||
|
||||
- [ ]* 21.2 Write cross-browser compatibility tests
|
||||
- Test on Chrome, Firefox, Safari, Edge
|
||||
- Test HTMX functionality across browsers
|
||||
- Test drag-and-drop across browsers
|
||||
- _Requirements: 9.1, 9.2, 9.3, 9.4, 9.5_
|
||||
|
||||
- [ ]* 21.3 Write accessibility tests
|
||||
- Test keyboard navigation
|
||||
- Test screen reader compatibility
|
||||
- Test WCAG compliance
|
||||
- _Requirements: 10.1, 10.2, 10.3, 10.4, 10.5, 10.6, 10.7_
|
||||
|
||||
- [~] 22. Final checkpoint - Ensure all tests pass
|
||||
- Ensure all tests pass, ask the user if questions arise.
|
||||
|
||||
## Notes
|
||||
|
||||
- Tasks marked with `*` are optional testing tasks and can be skipped for faster MVP
|
||||
- Each task references specific requirements for traceability
|
||||
- Checkpoints ensure incremental validation at major milestones
|
||||
- Property tests validate universal correctness properties with minimum 100 iterations
|
||||
- Unit tests validate specific examples, edge cases, and error conditions
|
||||
- The implementation follows an incremental approach: infrastructure → auth → core features → advanced features → polish → optimization
|
||||
- All property tests should be tagged with: `Feature: custom-start-page, Property {number}: {property_text}`
|
||||
- DynamoDB local should be used for development and testing
|
||||
- Mock external services (OAuth providers, Weather API) in tests
|
||||
Reference in New Issue
Block a user