KB: todo-app
← All workspaces3775 results — page 69 of 76
| Title | Domain | Type | Severity | Source | Freshness | Updated |
|---|---|---|---|---|---|---|
| [Workflow] agent-meta-base: Step 2: Discover Current State | claude/agents/agent-meta-base | pattern | medium | agent-meta-base.md | 88 | 2026-03-22 02:00:03 |
|
Body:
```bash
python3 ~/.claude/scripts/usage-stats.py summary --days=30
python3 ~/.claude/scripts/usage-stats.py unused --days=60
ls ~/.claude/agents/*.md | wc -l
ls ~/.claude/hooks/*.sh 2>/dev/null
```
|
||||||
| [Workflow] agent-meta-base: Modular Agent Build System | claude/agents/agent-meta-base | pattern | medium | agent-meta-base.md | 88 | 2026-03-22 02:00:03 |
|
Body:
Some agent files are auto-generated from `~/.claude/agents/parts/`. A hook blocks direct edits.
Currently generated: `orchestrator.md`. To modify: edit parts, then `~/.claude/agents/build-agent.sh orchestrator [profile]`.
See `orchestrator-ops.md` for full details.
|
||||||
| [Tool usage] agent-meta-base: Step 1: Load Context | claude/agents/agent-meta-base | api_note | medium | agent-meta-base.md | 88 | 2026-03-22 02:00:03 |
|
Body:
Read: `~/.claude/agents/agent-meta/context-{WORKSPACE}.md`
If it doesn't exist, discover the workspace:
```bash
ls .claude/agents/*.md 2>/dev/null # Local agents
ls .claude/commands/*.md 2>/dev/null # Local commands
cat .mcp.json 2>/dev/null | python3 -c "import json,sys; print(list(json.load(sys.stdin).get('mcpServers',{}).keys()))" 2>/dev/null
ls coordination/experts/ 2>/dev/null # Expert structure
cat CLAUDE.md 2>/dev/null | head -30 # Workspace...
|
||||||
| [Workflow] agent-meta-base: Agent-Ops — Generic Fallback | claude/agents/agent-meta-base | pattern | medium | agent-meta-base.md | 88 | 2026-03-22 02:00:03 |
|
Body:
You are **agent-meta** in a workspace that doesn't have a specialized variant yet.
Read the context file for data, then apply these generic procedures.
**Shared principles are in the router:** `~/.claude/agents/agent-meta.md` — you inherit all of them.
|
||||||
| Need Help? | general/getting-started-with-services | pattern | info | getting-started-with-services.md | 75 | 2026-03-22 02:00:03 |
|
Body:
- Check the detailed migration guides in `docs/llm/`
- Look at the example files in `public/js/examples/`
- Review the modernization plan for the big picture
---
**Remember:** The goal is to write less code that does more, with better UX!
|
||||||
| Next Steps | general/getting-started-with-services | pattern | info | getting-started-with-services.md | 75 | 2026-03-22 02:00:03 |
|
Body:
Once you're comfortable with the basics:
1. Explore batch operations (update/delete multiple items at once)
2. Use advanced filtering
3. Implement file uploads with `taskAPI.attachDocument()`
4. Customize notification appearance
5. Migrate more complex files
|
||||||
| Troubleshooting | general/getting-started-with-services | pattern | info | getting-started-with-services.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Services not found error
**Error:** `ReferenceError: taskAPI is not defined`
**Solution:** Make sure the service scripts are included in your HTML **before** your application code.
### Notifications not showing
**Problem:** Notifications don't appear
**Solution:**
1. Check that `notification.js` is included
2. Check browser console for JavaScript errors
3. Make sure you're calling the notification functions correctly
### CSRF token errors
**Error:** 419 CSRF token mismatch
**Solution...
|
||||||
| Tips | general/getting-started-with-services | pattern | info | getting-started-with-services.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### 1. Start Small
Don't try to migrate everything at once. Start with one file or one feature.
### 2. Test Frequently
Test each change after migrating to catch any issues early.
### 3. Keep Old Code Commented
When migrating, keep the old code commented out until you're sure the new code works:
```javascript
/*
// Old way
const response = await fetch('/tasks', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRF-TOKEN': document.querySelector('meta[...
|
||||||
| Example Files | general/getting-started-with-services | pattern | info | getting-started-with-services.md | 75 | 2026-03-22 02:00:03 |
|
Body:
Check out these example files:
- `public/js/examples/modernized-task-crud.js` - Complete CRUD example
|
||||||
| API Reference Quick Links | general/getting-started-with-services | api_note | info | getting-started-with-services.md | 75 | 2026-03-22 02:00:03 |
|
Body:
For complete API documentation, see:
- [API Service Migration Guide](./api-service-migration-guide.md)
- [Notification Migration Guide](./notification-migration-guide.md)
- [Modernization Plan](./modernisering-plan.md)
|
||||||
| Common Patterns | general/getting-started-with-services | pattern | info | getting-started-with-services.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Loading Data
```javascript
// Load all tasks
const tasks = await taskAPI.getAll();
// Load with filters
const completedTasks = await taskAPI.getCompleted();
const favoriteTasks = await taskAPI.getFavorites();
const projectTasks = await taskAPI.getByProject(projectId);
// Load all projects
const projects = await projectAPI.getAll();
const activeProjects = await projectAPI.getActive();
```
### Creating/Updating
```javascript
// Create
const newTask = await taskAPI.create(taskData);
const ...
|
||||||
| Complete Example | general/getting-started-with-services | pattern | info | getting-started-with-services.md | 75 | 2026-03-22 02:00:03 |
|
Body:
Here's a complete before/after example:
### Before (Old Way)
```javascript
async function createTask(formData) {
try {
const response = await fetch('/tasks', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content
},
body: JSON.stringify(formData)
});
if (!response.ok) {
throw new Error('Failed...
|
||||||
| Step 4: Replace confirm() Calls | general/getting-started-with-services | pattern | info | getting-started-with-services.md | 75 | 2026-03-22 02:00:03 |
|
Body:
**Before:**
```javascript
if (confirm('Are you sure?')) {
deleteTask(taskId);
}
```
**After:**
```javascript
if (await notificationService.confirm('Are you sure?')) {
deleteTask(taskId);
}
```
**Note:** The new `confirm()` is **async**, so you must use `await`.
|
||||||
| Step 3: Replace fetch() Calls | general/getting-started-with-services | pattern | info | getting-started-with-services.md | 75 | 2026-03-22 02:00:03 |
|
Body:
Find any `fetch()` calls and use the API services instead:
**Before:**
```javascript
const response = await fetch('/tasks', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content
},
body: JSON.stringify(taskData)
});
const newTask = await response.json();
```
**After:**
```javascript
const newTask = await taskAPI.create(taskData);
```
|
||||||
| Step 2: Replace alert() Calls | general/getting-started-with-services | pattern | info | getting-started-with-services.md | 75 | 2026-03-22 02:00:03 |
|
Body:
Find any `alert()` calls in your code and replace them:
**Before:**
```javascript
alert('Task created successfully!');
```
**After:**
```javascript
showSuccess('Task created successfully!');
```
### Quick Reference
| Old | New |
|-----|-----|
| `alert('Success message')` | `showSuccess('Success message')` |
| `alert('Error message')` | `showError('Error message')` |
| `alert('Warning message')` | `showWarning('Warning message')` |
| `alert('Info message')` | `showInfo('Info message')` |
|
||||||
| Step 1: Include the Services | general/getting-started-with-services | pattern | info | getting-started-with-services.md | 75 | 2026-03-22 02:00:03 |
|
Body:
Add these script tags to your main layout file (e.g., `resources/views/layouts/app.blade.php`) **before** your other JavaScript files:
```html
<!-- Modern Services -->
<script src="{{ asset('js/services/api.js') }}"></script>
<script src="{{ asset('js/services/task-api.js') }}"></script>
<script src="{{ asset('js/services/project-api.js') }}"></script>
<script src="{{ asset('js/services/reference-api.js') }}"></script>
<script src="{{ asset('js/services/notification.js') }}"></script>
<!-- You...
|
||||||
| Quick Start Guide | general/getting-started-with-services | pattern | info | getting-started-with-services.md | 75 | 2026-03-22 02:00:03 |
|
Body:
This guide shows you how to start using the new API Service Layer and Notification System in your Laravel Todo app.
|
||||||
| Common Patterns Summary | general/code-patterns | pattern | info | 07-code-patterns.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### 1. Relationship Syncing
Always use `sync()` for many-to-many relationships with array of IDs
### 2. Eager Loading
Always eager load relationships in controllers to prevent N+1 queries
### 3. Service Injection
Inject services via constructor for reusable business logic
### 4. Zone Filtering
Check session for `active_zone_id` and apply `whereHas` filter
### 5. Validation
Use `$request->validate()` for inline validation or Form Requests for complex cases
### 6. Response Types
Check `$reque...
|
||||||
| JavaScript Patterns | general/code-patterns | pattern | info | 07-code-patterns.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### AJAX Request
```javascript
async function updateTask(taskId, data) {
try {
const response = await axios.patch(`/tasks/${taskId}`, data);
if (response.data.success) {
showNotification('Task updated!', 'success');
updateTaskInUI(response.data.task);
}
} catch (error) {
if (error.response?.status === 422) {
// Validation errors
displayErrors(error.response.data.errors);
} else {
showNot...
|
||||||
| Database Query Patterns | general/code-patterns | pattern | info | 07-code-patterns.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Eager Loading (Prevent N+1)
```php
// BAD - N+1 queries
$tasks = Task::all();
foreach ($tasks as $task) {
echo $task->projects->count(); // Queries for each task
}
// GOOD - Single query
$tasks = Task::with('projects')->get();
foreach ($tasks as $task) {
echo $task->projects->count(); // No additional queries
}
// Multiple relationships
$tasks = Task::with(['projects', 'areas', 'contexts', 'zones'])->get();
```
### Conditional Eager Loading
```php
$tasks = Task::with([
'proj...
|
||||||
| View Patterns (Blade) | general/code-patterns | pattern | info | 07-code-patterns.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Form with Validation
```blade
<form method="POST" action="{{ route('tasks.store') }}">
@csrf
{{-- Text input with validation --}}
<div class="mb-3">
<label for="title" class="form-label">Title</label>
<input type="text"
class="form-control @error('title') is-invalid @enderror"
id="title"
name="title"
value="{{ old('title', $task->title ?? '') }}"
required>
@error('title')
...
|
||||||
| Service Patterns | general/code-patterns | pattern | info | 07-code-patterns.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Lookup Data Service
```php
class LookupDataService
{
public function getAllLookupData($zoneId = null)
{
// Build base queries
$allAreasQuery = Area::query();
$allProjectsQuery = Project::query();
// Apply zone filtering if provided
if ($zoneId) {
$allAreasQuery->whereHas('zones', fn($q) =>
$q->where('zones.id', $zoneId)
);
$allProjectsQuery->whereHas('zones', fn($q) =>
$q->wh...
|
||||||
| Model Patterns | general/code-patterns | pattern | info | 07-code-patterns.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Standard Model
```php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Task extends Model
{
// Table name (if non-standard)
protected $table = 'tasks';
// Mass assignable attributes
protected $fillable = [
'title',
'notes',
'due_date',
'tag',
'energy',
'time',
'action_state',
'task_type',
'is_completed',
'favorite',
'inactive',
];
// Attributes to cast
p...
|
||||||
| Controller Patterns | general/code-patterns | pattern | info | 07-code-patterns.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Standard CRUD Controller
```php
class TaskController extends Controller
{
// List resources
public function index(Request $request)
{
$tasks = Task::with(['projects', 'contexts', 'areas'])
->paginate(20);
return view('tasks.index', compact('tasks'));
}
// Show create form
public function create()
{
$lookup = $this->lookupService->getAllLookupData();
return view('tasks.create', $lookup);
}
// Store new resourc...
|
||||||
| Naming Conventions | general/code-patterns | pattern | info | 07-code-patterns.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Files and Directories
```
Controllers: PascalCase + "Controller" suffix (TaskController.php)
Models: PascalCase, singular (Task.php, Project.php)
Services: PascalCase + "Service" suffix (TimeCapacityService.php)
Views: snake_case (task_index.blade.php, project_edit.blade.php)
Routes: kebab-case (/tasks, /time-capacity, /area-aliases)
Migrations: timestamp + snake_case (2025_01_21_055011_create_tasks_table.php)
```
### Variables and Methods
```ph...
|
||||||
| Summary | general/refactoring-summary | pattern | info | 09-refactoring-summary.md | 75 | 2026-03-22 02:00:03 |
|
Body:
This refactoring transformed a **monolithic codebase** into a **modular, testable, type-safe architecture** following SOLID principles and modern PHP best practices.
**Key Achievements**:
- ✅ 42 focused controllers (from 19 fat controllers)
- ✅ 6 Enums with rich behavior
- ✅ 2 DTOs for type safety
- ✅ 4 Form Requests for validation
- ✅ 6 Services for business logic
- ✅ 7 comprehensive test suites
- ✅ CI/CD pipeline with GitHub Actions
- ✅ PSR-12 code style enforcement
- ✅ 11 refactoring phases ...
|
||||||
| Refactoring Lessons Learned | general/refactoring-summary | lesson | info | 09-refactoring-summary.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### What Worked Well
1. **Phased Approach**: 11 phases made it manageable
2. **Testing First**: Tests caught issues early
3. **Type Safety**: Enums and DTOs prevented bugs
4. **CI/CD**: Automated checks ensured quality
5. **Documentation**: Inline comments helped
6. **Iterative Refinement**: Second pass on controllers (Phase 10) showed value of revisiting earlier work
### Challenges Overcome
1. **Large Controllers**: Extracted responsibility carefully
2. **Enum Migration**: Handled backward c...
|
||||||
| Documentation Updates Required | general/refactoring-summary | pattern | info | 09-refactoring-summary.md | 75 | 2026-03-22 02:00:03 |
|
Body:
This refactoring requires updates to:
- ✅ Architecture documentation (patterns, layers)
- ✅ Backend documentation (controllers, services, DTOs, Enums)
- 🔄 API routes documentation (new controllers)
- 🔄 Code patterns documentation (new patterns)
- 🔄 Development guide (how to use new patterns)
|
||||||
| Future Improvements | general/refactoring-summary | pattern | info | 09-refactoring-summary.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Recommended Next Steps
1. **Repository Pattern**: Abstract database queries further
2. **Event Sourcing**: For audit trail and undo/redo
3. **Command Pattern**: For complex task operations
4. **Queue Jobs**: For async task processing
5. **API Layer**: RESTful API with API Resources
6. **GraphQL**: For flexible client queries
7. **WebSockets**: For real-time updates
8. **Multi-tenancy**: Support multiple users/workspaces
|
||||||
| Performance Impact | general/refactoring-summary | pattern | info | 09-refactoring-summary.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Neutral to Positive
**No Performance Regression**:
- Same number of database queries
- Eager loading still used
- Caching strategies unchanged
**Performance Improvements**:
- DTOs reduce array manipulation overhead
- Explicit scopes more predictable
- Service layer caching opportunities
|
||||||
| Migration Path | general/refactoring-summary | pattern | info | 09-refactoring-summary.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Backward Compatibility
✅ **Maintained**: All existing routes work
✅ **Database**: No schema changes required
✅ **Views**: No breaking changes
✅ **APIs**: Response formats unchanged
### Breaking Changes
⚠️ **Enum Values**: String comparisons must use `->value`
```php
// Before
if ($task->action_state === 'next') { ... }
// After
if ($task->action_state === ActionState::NEXT) { ... }
// OR
if ($task->action_state->value === 'next') { ... }
```
⚠️ **LookupDataService**: Returns DTO instead...
|
||||||
| Route Organization | general/refactoring-summary | api_note | info | 09-refactoring-summary.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Before Refactoring
~100 routes, mixed organization
### After Refactoring
**215 routes**, organized by domain:
```php
// Tasks (40+ routes)
Route::prefix('tasks')->group(function () {
// CRUD, filtering, conversions, documents, chunks, dependencies, batch
});
// Projects (30+ routes)
Route::prefix('projects')->group(function () {
// CRUD, filtering, conversions, documents, batch
});
// References (20+ routes)
Route::prefix('references')->group(function () {
// CRUD, filtering,...
|
||||||
| Database & Model Improvements | general/refactoring-summary | pattern | info | 09-refactoring-summary.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Enum Casts
**Before**:
```php
protected $casts = [
'action_state' => 'string',
'task_type' => 'string',
];
```
**After**:
```php
use App\Enums\ActionState;
use App\Enums\TaskType;
protected $casts = [
'action_state' => ActionState::class,
'task_type' => TaskType::class,
];
```
**Benefits**:
- Type-safe values
- IDE autocomplete
- Compile-time checking
### Query Scopes
**Global Scopes Removed** (problematic, request-coupled)
**Explicit Scopes Added**:
```php
// Task mod...
|
||||||
| SOLID Principles Adherence | general/refactoring-summary | pattern | info | 09-refactoring-summary.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### S - Single Responsibility
✅ Each controller has one clear purpose
✅ Each service encapsulates one domain
✅ Form Requests focus solely on validation
### O - Open/Closed
✅ Easy to add new Enums (extend, don't modify)
✅ New filters can be added without changing existing code
✅ New controllers follow established patterns
### L - Liskov Substitution
✅ Controllers implement consistent interfaces
✅ Services are interchangeable
✅ DTOs can be extended (LookupDataWithHierarchyDTO extends LookupDataD...
|
||||||
| Design Patterns Applied | general/refactoring-summary | pattern | info | 09-refactoring-summary.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### 1. Service Layer Pattern
Business logic extracted to services (TaskFilterService, ZoneFilterService, etc.)
### 2. Data Transfer Object Pattern
Type-safe data containers (LookupDataDTO, LookupDataWithHierarchyDTO)
### 3. Rich Enum Pattern
Enums with behavior, not just values (ActionState, TaskType, etc.)
### 4. Form Request Pattern
Validation separated from controllers
### 5. Single Responsibility Principle
42 focused controllers (from 19 fat controllers)
### 6. Orchestrator Pattern
Agen...
|
||||||
| Code Quality Improvements | general/refactoring-summary | pattern | info | 09-refactoring-summary.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Laravel Pint
**Applied**: PSR-12 code style to entire codebase
**Benefits**:
- Consistent formatting
- Enforced in CI/CD
- Automatic fixes via `./vendor/bin/pint`
### PHP 8.1+ Features
**Used**:
- Backed Enums with methods
- Readonly properties (DTOs)
- Constructor property promotion
- Match expressions
- Named arguments
|
||||||
| Testing Infrastructure | general/refactoring-summary | pattern | info | 09-refactoring-summary.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Before Refactoring
- No meaningful tests (only example test)
- No test factories
- No CI/CD
### After Refactoring
**Pest PHP** (modern, expressive testing framework)
**Test Files**:
1. `FormRequestValidationTest.php` - Validates all form requests (265 lines)
2. `ModelScopesTest.php` - Tests query scopes (310 lines)
3. `TaskCrudTest.php` - Task CRUD operations (221 lines)
4. `ProjectCrudTest.php` - Project CRUD operations (259 lines)
5. `TaskFilterServiceTest.php` - Filtering logic (259 li...
|
||||||
| Architecture Improvements | general/refactoring-summary | pattern | info | 09-refactoring-summary.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Before Refactoring
```
Controllers (19, avg 800+ lines)
↓
Models (24)
↓
Database
```
**Problems**:
- Fat controllers with multiple responsibilities
- String constants for states/types (error-prone)
- Validation mixed with business logic
- Difficult to test individual features
- Hard to understand large controller files
### After Refactoring
```
Controllers (42, avg 200 lines) ← Form Requests (validation)
↓
Services (6) ← DTOs (type-safe data)
↓
Models (24) ← Enums (type-s...
|
||||||
| Refactoring Phases | general/refactoring-summary | pattern | info | 09-refactoring-summary.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Phase 1: Foundation (Enums & DTOs)
**Implemented**:
- 6 Rich Enums with behavior (ActionState, TaskType, ProjectState, ProjectType, EnergyLevel, TimeLength)
- 2 DTOs for type safety (LookupDataDTO, LookupDataWithHierarchyDTO)
**Benefits**:
- Type safety at compile time
- Eliminated magic strings
- Centralized UI metadata (labels, colors, icons)
- Self-documenting code
### Phase 2: Validation & Service Layer
**Implemented**:
- 4 Form Request classes (StoreTaskRequest, UpdateTaskRequest, S...
|
||||||
| Overview | general/refactoring-summary | pattern | info | 09-refactoring-summary.md | 75 | 2026-03-22 02:00:03 |
|
Body:
This document summarizes the comprehensive refactoring completed in the branch `claude/continue-codebase-refactoring-01X8BTyypJ2hgBFcaeZjZ2K7`.
**Refactoring Stats**:
- **25 commits** across 11 phases
- **149 files changed**
- **13,107+ lines added** (new patterns, tests, documentation)
- **7,414 lines removed** (simplified, extracted logic)
- **Net improvement**: +5,693 lines of better-structured code
|
||||||
| Estimated Impact | general/notification-migration-guide | pattern | info | notification-migration-guide.md | 75 | 2026-03-22 02:00:03 |
|
Body:
- **Alert calls replaced**: 213+
- **Code quality**: Much better UX
- **User satisfaction**: Higher (non-blocking notifications)
- **Accessibility**: Improved
- **Time to migrate**: ~16 hours (all files)
**Per file average**: 15 minutes to migrate all alerts
|
||||||
| Next Steps | general/notification-migration-guide | pattern | info | notification-migration-guide.md | 75 | 2026-03-22 02:00:03 |
|
Body:
After Notification System migration is complete, move to:
1. **XSS Security Fixes** - Audit and fix innerHTML usage
2. **jQuery Removal** - Replace with modern alternatives
3. **Drag & Drop Migration** - Migrate to SortableJS
See `docs/llm/modernisering-plan.md` for full roadmap.
---
|
||||||
| Comparison with alert() | general/notification-migration-guide | pattern | info | notification-migration-guide.md | 75 | 2026-03-22 02:00:03 |
|
Body:
| Feature | alert() | Notification System |
|---------|---------|---------------------|
| Blocks UI | ✅ Yes | ❌ No (toast) |
| Styling | ❌ Browser default | ✅ Custom, consistent |
| Auto-dismiss | ❌ No | ✅ Yes |
| Multiple at once | ❌ No | ✅ Yes (stacked) |
| Types (success/error) | ❌ No | ✅ Yes |
| Accessible | ⚠️ Basic | ✅ Full ARIA |
| Mobile friendly | ⚠️ Blocks | ✅ Non-blocking |
---
|
||||||
| Troubleshooting | general/notification-migration-guide | pattern | info | notification-migration-guide.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Notifications not showing
**Check:**
1. Is the script included in your HTML?
2. Are there JavaScript errors in console?
3. Is the notification container created? (Check DOM)
### Notifications showing but no styles
**Check:**
1. Are the styles injected? Look for `<style id="notification-styles">` in `<head>`
2. Are there CSS conflicts?
3. Try force-reloading the page (Ctrl+F5)
### Confirm dialog not working
**Remember:**
- `notificationService.confirm()` is **async** - you must use `awai...
|
||||||
| Testing | general/notification-migration-guide | pattern | info | notification-migration-guide.md | 75 | 2026-03-22 02:00:03 |
|
Body:
After migration, test:
- ✅ Success notifications appear and auto-dismiss
- ✅ Error notifications appear and stay visible (or longer duration)
- ✅ Multiple notifications stack correctly
- ✅ Notifications are readable and styled correctly
- ✅ Confirm dialogs work and return correct boolean
- ✅ Notifications don't block interaction with the page
- ✅ Notifications are accessible (test with screen reader if possible)
---
|
||||||
| Files to Migrate (Priority Order) | general/notification-migration-guide | pattern | info | notification-migration-guide.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### High Priority (Most alert() calls):
1. `public/js/tasks.js` (~15 alert calls)
2. `public/js/projects.js` (~12 alert calls)
3. `public/js/references.js` (~10 alert calls)
4. `public/js/batch_update.js` (~8 alert calls)
### Medium Priority:
5. `public/js/common.js`
6. `public/js/agenda.js`
7. `public/js/settings.js`
8. `public/js/areas.js`
9. `public/js/zones.js`
### Lower Priority:
- All other JavaScript files
|
||||||
| Migration Checklist | general/notification-migration-guide | pattern | info | notification-migration-guide.md | 75 | 2026-03-22 02:00:03 |
|
Body:
- [ ] Include notification service in layout
- [ ] Migrate one file at a time
- [ ] Replace `alert()` with appropriate `showSuccess/Error/Warning/Info()`
- [ ] Replace `confirm()` with `notificationService.confirm()` (note: async!)
- [ ] Test all notifications
- [ ] Remove all `alert()` and `confirm()` calls
- [ ] Update any documentation
|
||||||
| Find and Replace Patterns | general/notification-migration-guide | pattern | info | notification-migration-guide.md | 75 | 2026-03-22 02:00:03 |
|
Body:
To speed up migration, you can use these find/replace patterns:
### Pattern 1: Simple alerts
**Find**: `alert\('([^']*)'\);`
**Replace**: `showSuccess('$1');`
**Note**: Review each replacement to use the correct type (success, error, warning, info)
### Pattern 2: Confirm dialogs
**Find**: `if\s*\(\s*confirm\('([^']*)'\)\s*\)`
**Replace**: `if (await notificationService.confirm('$1'))`
### Pattern 3: Alert in catch block
**Find**: `alert\('Failed`
**Replace**: `showError('Failed`
### Pattern...
|
||||||
| Advanced Usage | general/notification-migration-guide | pattern | info | notification-migration-guide.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Using the Service Directly
For more control, use the `notificationService` object directly:
```javascript
// Show notification with all options
const id = notificationService.show('Custom message', 'warning', {
title: 'Custom Title',
duration: 5000
});
// Manually dismiss a notification
notificationService.dismiss(id);
// Dismiss all notifications
notificationService.dismissAll();
// Different types
notificationService.success('Success message');
notificationService.error('Error...
|
||||||
| Real File Migration Examples | general/notification-migration-guide | pattern | info | notification-migration-guide.md | 75 | 2026-03-22 02:00:03 |
|
Body:
### Example: tasks.js (partial migration)
**Before:**
```javascript
// Create task
async function createNewTask(formData) {
try {
const response = await fetch('/tasks', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').content
},
body: JSON.stringify(formData)
});
if (!response.ok) {
const errorD...
|
||||||
Ingestion History
Loading…