issues/completed/3-001b-implement-url-structure-design.md
Issue 001b: Implement URL Structure Design
Current Behavior
- No defined URL structure for poem pages
- No hierarchical organization for generated static files
- No clean, predictable URL patterns for navigation
Intended Behavior
- Clean, hierarchical URL structure for easy navigation
- Predictable file organization for neocities deployment
- SEO-friendly URLs that reflect poem organization
- Category-based organization with individual poem pages
Suggested Implementation Steps
- URL Schema Design: Define clean URL patterns for all content types
- Directory Structure: Create organized file hierarchy
- Path Generation: Implement functions to generate consistent URLs
- Navigation Links: Update all internal links to use new structure
- Index Pages: Create category and main index pages
Technical Requirements
URL Structure Schema
Domain Root: ritzmenardi.com
Poetry Section: /words-pdf-sorted/
Generated Structure:
words-pdf-sorted/
├── index.html # Main poetry landing page
├── poems/
│ ├── fediverse/
│ │ ├── index.html # Fediverse category index
│ │ ├── poem-001.html # Individual fediverse poems
│ │ ├── poem-002.html
│ │ └── ...
│ ├── messages/
│ │ ├── index.html # Messages category index
│ │ ├── poem-002.html # Individual message poems
│ │ ├── poem-025.html
│ │ └── ...
│ └── golden/
│ ├── index.html # Golden poems collection
│ ├── poem-042.html # Perfect 1024-char poems
│ └── ...
└── browse/
├── by-similarity.html # Similarity browsing interface
├── recent.html # Recently viewed/generated
└── random.html # Random poem discovery
URL Generation Functions
-- {{{ function generate_poem_url
function generate_poem_url(poem_id, category)
category = category or "poems"
return string.format("poems/%s/poem-%03d.html", category, poem_id)
end
-- }}}
-- {{{ function generate_category_index_url
function generate_category_index_url(category)
return string.format("poems/%s/index.html", category)
end
-- }}}
-- {{{ function generate_absolute_path
function generate_absolute_path(relative_url, base_dir)
base_dir = base_dir or "/mnt/mtwo/programming/ai-stuff/neocities-modernization/generated-site"
return string.format("%s/%s", base_dir, relative_url)
end
-- }}}
Directory Creation System
-- {{{ function create_url_structure
function create_url_structure(base_output_dir)
local directories = {
base_output_dir,
base_output_dir .. "/poems",
base_output_dir .. "/poems/fediverse",
base_output_dir .. "/poems/messages",
base_output_dir .. "/poems/golden",
base_output_dir .. "/browse"
}
for _, dir in ipairs(directories) do
local success = os.execute("mkdir -p \"" .. dir .. "\"")
if success ~= 0 then
error("Failed to create directory: " .. dir)
end
utils.log_info("Created directory: " .. dir)
end
return true
end
-- }}}
Navigation Breadcrumb Generation
-- {{{ function generate_breadcrumb
function generate_breadcrumb(current_poem, category)
local breadcrumb_parts = {
{url = "../../index.html", title = "Poetry Collection"},
{url = "../index.html", title = string.format("%s Poems", capitalize(category))},
{url = "", title = current_poem.title or "Current Poem"}
}
local html = '<nav class="breadcrumb">'
for i, part in ipairs(breadcrumb_parts) do
if i < #breadcrumb_parts then
html = html .. string.format('<a href="%s">%s</a> > ', part.url, part.title)
else
html = html .. '<span>' .. part.title .. '</span>'
end
end
html = html .. '</nav>'
return html
end
-- }}}
URL Examples
Individual Poem URLs
/words-pdf-sorted/poems/fediverse/poem-001.html
/words-pdf-sorted/poems/fediverse/poem-042.html
/words-pdf-sorted/poems/messages/poem-025.html
/words-pdf-sorted/poems/golden/poem-156.html
Index and Browse URLs
/words-pdf-sorted/index.html
/words-pdf-sorted/poems/fediverse/index.html
/words-pdf-sorted/poems/messages/index.html
/words-pdf-sorted/poems/golden/index.html
/words-pdf-sorted/browse/by-similarity.html
Quality Assurance Criteria
- All URLs follow consistent naming convention
- Directory structure matches URL hierarchy exactly
- No broken internal links between pages
- URLs are human-readable and SEO-friendly
- File paths work on both local filesystem and web hosting
Success Metrics
- Consistency: 100% of generated URLs follow defined schema
- Accessibility: All internal navigation links work correctly
- Organization: Clear logical hierarchy for content discovery
- Deployment: Structure compatible with neocities hosting requirements
- Maintenance: Easy to modify URL patterns for future changes
Dependencies
- Issue 001a: HTML Template System (templates need URL placeholders)
- Poem categorization data from validation system
- Understanding of neocities deployment requirements
Related Issues
- Issue 001c: Similarity Navigation (uses generated URLs)
- Issue 001d: Responsive Design (navigation components)
ISSUE STATUS: COMPLETED ✅
Implementation Summary
Completed on: December 4, 2025
✅ Deliverables Completed:
- URL Manager System (
src/html-generator/url-manager.lua):
- Clean URL generation for all poem types and categories
- Hierarchical file organization system
- Automatic directory structure creation
- Golden poem categorization support
- Relative navigation path calculation
- Directory Structure Creation:
- Automated directory creation for all categories
- Support for main categories: fediverse, messages, notes
- Special category support: golden poems
- Browse section structure: by-similarity, recent, random
- Complete file path generation and validation
- Integration with Template System:
- Updated template engine to use URL manager
- Proper breadcrumb generation using URL structure
- Fixed gsub escaping issues for special characters
- Complete integration testing framework
✅ Key Features Implemented:
- URL Generation: All URL patterns working correctly
poems/fediverse/poem-001.htmlpoems/messages/poem-018.htmlpoems/notes/poem-002.htmlpoems/golden/poem-XXX.html- Directory Management: Automated creation and validation
- Navigation: Proper relative paths and breadcrumbs
- Testing: Comprehensive test suite with 100% pass rate
✅ Quality Assurance Results:
- URL Consistency: All URL generation functions tested and validated
- Directory Creation: Successfully creates complete site structure
- Integration Testing: Generated 3 sample poem pages across all categories
- File Validation: All generated HTML files properly structured
- Escaping: Special characters (%) properly handled in content
📁 Files Created:
/src/html-generator/url-manager.lua- Complete URL management system/src/html-generator/test-integration.lua- Integration testing framework/generated-site/- Complete directory structure with sample pages
🔗 Ready for Integration:
This URL structure system is now ready to be used by:
- Issue 001c: Similarity Navigation (will use URL generation for links)
- Issue 001d: Responsive Design (templates already integrated)
- Future HTML generation: Complete static site generation
📈 Generated Structure:
generated-site/
├── browse/ # Future: similarity browsing interfaces
└── poems/
├── fediverse/ # 5,730 poems (generated: sample poem-001.html)
├── messages/ # 865 poems (generated: sample poem-018.html)
├── notes/ # 263 poems (generated: sample poem-002.html)
└── golden/ # Perfect 1024-char poems (directory ready)
IMPLEMENTATION COMPLETE 🎉