Central headquarters for developers with resources (hyperlinks), quick-access apps, and posts (future).
Purpose: Simple quick-access links like Chrome new tab
Characteristics:
- ❌ No categories
- ❌ No tags
- ✅ Sortable (position field)
- ✅ UUID-based IDs
Fields:
id(UUID)titleurltarget(default:_self)position(for ordering)created_by(nullable FK to users)timestamps
Relationships:
creator()→ belongsTo User
Purpose: Developer resources with categorization and tagging
Characteristics:
- ✅ Categories (direct relationship)
- ✅ Tags (polymorphic)
- ✅ Status (draft/published)
- ✅ Author tracking
Fields:
idtitleurldescription(nullable)category_id(nullable FK)status(draft/published)created_by(nullable FK to users)timestamps
Relationships:
category()→ belongsTo Categoryauthor()→ belongsTo Usertags()→ morphToMany Tag
Scopes:
published()- Only show published hyperlinks
Purpose: Blog posts, tutorials, documentation
Characteristics:
- ✅ Categories (direct relationship)
- ✅ Tags (polymorphic)
- ✅ Status (draft/published)
- ✅ Author tracking
Planned Structure:
- Categories via
category_id - Tags via polymorphic
taggablestable - Same status system as Hyperlinks
Purpose: Organize hyperlinks and posts
Fields:
idnameslugtimestamps
Relationships:
hyperlinks()→ hasMany Hyperlinkposts()→ hasMany Post (future)
Note: Apps do NOT use categories
Purpose: Polymorphic tagging for hyperlinks and posts
Fields:
idnameslugtimestamps
Relationships:
hyperlinks()→ morphedByMany Hyperlinkposts()→ morphedByMany Post (future)
Pivot Table: taggables
idtag_idtaggable_idtaggable_type
Note: Apps do NOT use tags
- Simpler queries for most use cases
- Each resource belongs to ONE category
- Better performance than polymorphic
- Resources can have MULTIPLE tags
- Shared tag vocabulary across content types
- Flexible querying
- Different use case (quick access vs resources)
- No need for organization (sorted by position)
- Cleaner mental model
users
├── apps (via created_by)
├── hyperlinks (via created_by)
└── posts (via created_by, future)
categories
├── hyperlinks (via category_id)
└── posts (via category_id, future)
tags
├── hyperlinks (via taggables polymorphic)
└── posts (via taggables polymorphic, future)
apps (standalone, position-sorted)
- ✅ Removed unused
categorizablespolymorphic table - ✅ Added
created_byto hyperlinks - ✅ Completed Tag model with relationships
- ✅ Added future Posts relationships to Category and Tag models
- ✅ Verified App model has no category/tag references
- Run migration:
php artisan migrate - Test hyperlink creation with author tracking
- Create Post model (similar to Hyperlink)
- Build category management UI
- Build tag management UI
- Add search/filtering by category and tags
enum Status: string {
case Draft = 'draft';
case Published = 'published';
}Used by: Hyperlinks, Posts (future)
Not used by: Apps