Skip to content

Commit de388a0

Browse files
pwt-cdclaude
andcommitted
ADD: Create dynamic schema directory index page
- Generate beautiful schema directory index.html with all 33 entities - Display schema cards in responsive grid layout - Auto-detect available files: JSON Schema, Dictionary, Examples - Convert entity names from underscore to title case for display - Include navigation back to main documentation - Resolves 404 error when users click "JSON Schemas" from landing page Now users get a proper browseable directory instead of 404 when visiting /schema/ 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent e22f3f5 commit de388a0

File tree

1 file changed

+137
-0
lines changed

1 file changed

+137
-0
lines changed

.github/workflows/build-deploy.yml

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,143 @@ jobs:
365365
if [ -d "build-output/drafts/current/schema" ]; then
366366
cp -r build-output/drafts/current/schema ./pages-content/
367367
echo "✅ Copied schema directory"
368+
369+
# Create schema directory index.html
370+
cat > ./pages-content/schema/index.html << 'SCHEMA_EOF'
371+
<!DOCTYPE html>
372+
<html>
373+
<head>
374+
<meta charset="utf-8">
375+
<title>BOOST JSON Schema Directory</title>
376+
<style>
377+
body {
378+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
379+
max-width: 1000px;
380+
margin: 50px auto;
381+
padding: 20px;
382+
line-height: 1.6;
383+
}
384+
.header {
385+
text-align: center;
386+
margin-bottom: 40px;
387+
padding: 30px;
388+
background: #f8f9fa;
389+
border-radius: 10px;
390+
}
391+
.schema-grid {
392+
display: grid;
393+
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
394+
gap: 20px;
395+
margin: 30px 0;
396+
}
397+
.schema-card {
398+
border: 1px solid #ddd;
399+
border-radius: 8px;
400+
padding: 15px;
401+
background: #fff;
402+
transition: box-shadow 0.2s;
403+
}
404+
.schema-card:hover { box-shadow: 0 4px 12px rgba(0,0,0,0.1); }
405+
.schema-name {
406+
font-weight: 600;
407+
font-size: 16px;
408+
margin-bottom: 8px;
409+
color: #333;
410+
}
411+
.schema-links a {
412+
display: inline-block;
413+
margin: 4px 8px 4px 0;
414+
padding: 6px 12px;
415+
background: #0066cc;
416+
color: white;
417+
text-decoration: none;
418+
border-radius: 4px;
419+
font-size: 14px;
420+
}
421+
.schema-links a:hover { background: #0052a3; }
422+
.back-link {
423+
display: inline-block;
424+
margin-bottom: 20px;
425+
padding: 10px 20px;
426+
background: #28a745;
427+
color: white;
428+
text-decoration: none;
429+
border-radius: 5px;
430+
}
431+
.back-link:hover { background: #218838; }
432+
.stats { text-align: center; color: #666; margin: 20px 0; }
433+
</style>
434+
</head>
435+
<body>
436+
<a href="../" class="back-link">← Back to BOOST Documentation</a>
437+
438+
<div class="header">
439+
<h1>📋 BOOST JSON Schema Directory</h1>
440+
<p>Complete collection of JSON Schema validation files for all BOOST entities</p>
441+
</div>
442+
443+
<div class="stats">
444+
<strong>33 Entity Schemas</strong> across 7 thematic areas
445+
</div>
446+
447+
<div class="schema-grid">
448+
SCHEMA_EOF
449+
450+
# Generate schema entries dynamically
451+
for schema_dir in ./pages-content/schema/*/; do
452+
if [ -d "$schema_dir" ]; then
453+
entity_name=$(basename "$schema_dir")
454+
# Convert underscore to title case
455+
display_name=$(echo "$entity_name" | sed 's/_/ /g' | sed 's/\b\w/\U&/g')
456+
457+
cat >> ./pages-content/schema/index.html << SCHEMA_EOF
458+
<div class="schema-card">
459+
<div class="schema-name">$display_name</div>
460+
<div class="schema-links">
461+
SCHEMA_EOF
462+
463+
# Add links to available files in each schema directory
464+
if [ -f "$schema_dir/validation_schema.json" ]; then
465+
cat >> ./pages-content/schema/index.html << SCHEMA_EOF
466+
<a href="./$entity_name/validation_schema.json">JSON Schema</a>
467+
SCHEMA_EOF
468+
fi
469+
470+
if [ -f "$schema_dir/${entity_name}_dictionary.md" ]; then
471+
cat >> ./pages-content/schema/index.html << SCHEMA_EOF
472+
<a href="./$entity_name/${entity_name}_dictionary.md">Dictionary</a>
473+
SCHEMA_EOF
474+
fi
475+
476+
if [ -f "$schema_dir/${entity_name}_example.json" ]; then
477+
cat >> ./pages-content/schema/index.html << SCHEMA_EOF
478+
<a href="./$entity_name/${entity_name}_example.json">Example</a>
479+
SCHEMA_EOF
480+
fi
481+
482+
cat >> ./pages-content/schema/index.html << SCHEMA_EOF
483+
</div>
484+
</div>
485+
SCHEMA_EOF
486+
fi
487+
done
488+
489+
# Close the HTML
490+
cat >> ./pages-content/schema/index.html << 'SCHEMA_EOF'
491+
</div>
492+
493+
<div style="text-align: center; margin-top: 40px; color: #666;">
494+
<p><strong>Usage:</strong> Each entity includes JSON Schema for validation,
495+
dictionary documentation, and example data files where available.</p>
496+
<p><a href="../boost-spec.html">📖 View Full Documentation</a> |
497+
<a href="../erd-navigator/">🔍 ERD Navigator</a></p>
498+
</div>
499+
</body>
500+
</html>
501+
SCHEMA_EOF
502+
503+
echo "✅ Created schema directory index.html"
504+
368505
else
369506
echo "❌ Schema directory not found at build-output/drafts/current/schema"
370507
# Debug: show what's actually in the build output

0 commit comments

Comments
 (0)