- Problem: Element ID collisions between similar elements (logo h1 vs hero h1) causing content to be injected into wrong elements - Root cause: Enhancer used naive tag+class matching instead of parser's sophisticated semantic analysis for element identification Systematic solution: - Enhanced parser architecture with exported utilities (GetClasses, ContainsClass) - Added FindElementInDocument() with content-based semantic matching - Replaced naive findAndInjectNodes() with parser-based element matching - Removed code duplication between parser and enhancer packages Backend improvements: - Moved ID generation to backend for single source of truth - Added ElementContext struct for frontend-backend communication - Updated API handlers to support context-based content ID generation Frontend improvements: - Enhanced getElementMetadata() to extract semantic context - Updated save flow to handle both enhanced and non-enhanced elements - Improved API client to use backend-generated content IDs Result: - Unique content IDs: navbar-logo-200530 vs hero-title-a1de7b - Precise element matching using content validation - Single source of truth for DOM utilities in parser package - Eliminated 40+ lines of duplicate code while fixing core bug
Insertr Demo Site
This is a prototype demonstration of the Insertr edit-in-place CMS system.
What is Insertr?
Insertr allows developers to make any website content editable by simply adding a CSS class. Clients can then log in and edit content directly on their website without needing to learn a complex admin interface.
Three User Types
1. The Customer (End User)
- Sees a clean, professional website
- No editing interface visible
- Fast loading with minimal overhead
2. The Client (Content Manager)
- Logs in to see the same website with subtle edit buttons
- Clicks edit buttons to modify content inline
- Can edit both simple text and rich markdown content
- Changes are saved immediately
3. The Developer (You)
- Simple integration: just add
class="insertr"anddata-content-id="unique-id" - No complex setup or framework dependencies
- Works with any existing website
Demo Instructions
- Open
index.htmlin your browser - You'll see the customer view - Click "Login as Client" - This simulates authentication
- Click "Edit Mode: Off" to turn on editing - Now you'll see edit buttons (✏️) appear
- Click any edit button to modify content
- Try both simple text and rich content (marked with 📝)
- Navigate to
about.htmlto see how it works across pages
Technical Details
For Developers
To make content editable, just add the insertr class and data attribute:
<!-- Simple text content -->
<div class="insertr" data-content-id="hero-title">
<h1>Your Website Title</h1>
</div>
<!-- Rich content with markdown -->
<div class="insertr" data-content-id="about-text" data-content-type="rich">
<h2>About Us</h2>
<p>We help businesses succeed...</p>
</div>
Integration
Include the Insertr library in your HTML:
<link rel="stylesheet" href="insertr/insertr.css">
<script src="insertr/insertr.js"></script>
That's it! The library will automatically scan for editable elements and set up the editing interface.
Current Features
- ✅ Edit-in-place for simple text content
- ✅ Markdown editing for rich content
- ✅ Mock authentication (login/logout)
- ✅ Edit mode toggle
- ✅ Local storage persistence
- ✅ Visual feedback for saving
- ✅ Multi-page support
- ✅ Responsive design
Planned Features
- Real backend API integration
- Authentik OAuth integration
- File upload and image management
- Content versioning and rollback
- Multi-user permissions
- Admin dashboard
- Git-based deployment
Architecture
This prototype demonstrates the frontend experience. The full system will include:
- Go backend with REST API
- File-based content storage with Git versioning
- Authentik OAuth for secure authentication
- Multi-tenant support for hosting multiple client sites
- Developer tools for easy integration
Files Structure
demo-site/
├── index.html # Homepage demo
├── about.html # Additional page demo
├── assets/
│ └── style.css # Demo site styling
├── insertr/
│ ├── insertr.js # Core library
│ ├── insertr.css # Edit interface styling
│ └── components/ # Future: edit components
└── mock-api/
└── content.json # Mock backend data structure
Try It Now!
Open index.html in your browser and experience the three different user views by using the authentication controls in the top right corner.