{"id":34914424,"url":"https://github.com/prosdevlab/experience-sdk","last_synced_at":"2026-01-13T20:59:45.665Z","repository":{"id":330687502,"uuid":"1122488383","full_name":"prosdevlab/experience-sdk","owner":"prosdevlab","description":"A modular, observable client-side runtime for decision-driven UI experiences and orchestration.","archived":false,"fork":false,"pushed_at":"2025-12-28T00:08:47.000Z","size":325,"stargazers_count":0,"open_issues_count":6,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-28T23:54:08.092Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://prosdevlab.github.io/experience-sdk/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/prosdevlab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-24T21:03:13.000Z","updated_at":"2025-12-28T00:08:51.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/prosdevlab/experience-sdk","commit_stats":null,"previous_names":["prosdevlab/experience-sdk"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/prosdevlab/experience-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prosdevlab%2Fexperience-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prosdevlab%2Fexperience-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prosdevlab%2Fexperience-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prosdevlab%2Fexperience-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/prosdevlab","download_url":"https://codeload.github.com/prosdevlab/experience-sdk/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/prosdevlab%2Fexperience-sdk/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28400349,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-13T14:36:09.778Z","status":"ssl_error","status_checked_at":"2026-01-13T14:35:19.697Z","response_time":56,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-12-26T12:01:48.711Z","updated_at":"2026-01-13T20:59:45.659Z","avatar_url":"https://github.com/prosdevlab.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Experience SDK\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\n**A lightweight, explainable client-side experience runtime built on [@lytics/sdk-kit](https://github.com/lytics/sdk-kit)**\n\nExperience SDK enables marketers and developers to create personalized experiences (modals, banners, inline content) with powerful targeting and explainability. Every decision comes with structured reasons, making debugging and testing effortless.\n\n## Features\n\n- 🔍 **Explainability-First** - Every decision includes structured reasons\n- 🧩 **Plugin-Based** - Built on @lytics/sdk-kit's powerful plugin system\n- 🎨 **Presentation Plugins** - Modal, banner, and inline content rendering\n- 📝 **Built-in Forms** - Email capture, surveys, feedback with validation\n- 🎯 **Smart Triggers** - Exit intent, scroll depth, time delay, page visits\n- 📦 **Script Tag Ready** - Works without build tools (marketers love it!)\n- 💅 **CSS Variables** - Easy theming with CSS custom properties\n- 🎯 **Type-Safe** - Full TypeScript support\n- 🪶 **Lightweight** - ~26KB gzipped with all plugins (13.4KB core)\n- 🔧 **Developer-Friendly** - Built for inspection and debugging\n\n## Quick Start\n\n### Script Tag (For Marketers)\n\n```html\n\u003cscript src=\"https://cdn.jsdelivr.net/npm/@prosdevlab/experience-sdk@latest/dist/experience-sdk.global.js\"\u003e\u003c/script\u003e\n\u003cscript\u003e\n  // Initialize\n  experiences.init({ debug: true });\n  \n  // Exit intent modal with email capture\n  experiences.register('exit-intent-modal', {\n    type: 'modal',\n    content: {\n      title: '🚀 Wait! Before You Go...',\n      message: 'Join 10,000+ subscribers for exclusive content',\n      form: {\n        fields: [\n          { name: 'email', type: 'email', label: 'Email', required: true }\n        ],\n        submitButton: { text: 'Subscribe', variant: 'primary' }\n      }\n    },\n    targeting: {\n      url: { contains: '/pricing' }\n    },\n    display: {\n      trigger: 'exitIntent',\n      frequency: { max: 1, per: 'session' }\n    }\n  });\n  \n  // Listen for form submissions\n  experiences.on('experiences:modal:form:submit', (event) =\u003e {\n    console.log('Email submitted:', event.formData.email);\n    // Send to your API, analytics, etc.\n  });\n\u003c/script\u003e\n```\n\n### npm (For Developers)\n\n```bash\nnpm install @prosdevlab/experience-sdk @prosdevlab/experience-sdk-plugins\n```\n\n```typescript\nimport { createInstance } from '@prosdevlab/experience-sdk';\nimport { modalPlugin, inlinePlugin, bannerPlugin } from '@prosdevlab/experience-sdk-plugins';\n\nconst sdk = createInstance({ debug: true });\n\n// Use plugins\nsdk.use(modalPlugin);\nsdk.use(inlinePlugin);\nsdk.use(bannerPlugin);\n\n// Register experiences\nsdk.register('feature-tip', {\n  type: 'inline',\n  content: {\n    selector: '#feature-section',\n    position: 'after',\n    message: '\u003cdiv\u003e💡 New: Check out our analytics dashboard!\u003c/div\u003e'\n  },\n  display: {\n    trigger: 'scrollDepth',\n    triggerData: { threshold: 50 }\n  }\n});\n\n// Listen to events\nsdk.on('experiences:shown', (event) =\u003e {\n  analytics.track('Experience Shown', { id: event.experienceId });\n});\n```\n\n### Event-Driven Architecture\n\nListen to events to integrate with analytics, tracking, and custom business logic:\n\n```typescript\n// Track impressions\nexperiences.on('experiences:evaluated', ({ decision, experience }) =\u003e {\n  if (decision.show \u0026\u0026 experience) {\n    analytics.track('Experience Shown', { id: experience.id });\n  }\n});\n\n// Track button clicks\nexperiences.on('experiences:action', ({ experienceId, action, url }) =\u003e {\n  analytics.track('Experience Action', { experienceId, action });\n});\n\n// Track dismissals\nexperiences.on('experiences:dismissed', ({ experienceId }) =\u003e {\n  analytics.track('Experience Dismissed', { experienceId });\n});\n```\n\n**Multiple listeners can react to the same event** (jstag3, GA, Segment, custom code).\n\nSee the [Events Reference](https://your-docs-url/api/events) for comprehensive documentation.\n\n## Documentation\n\n- **[Plugin Reference](https://prosdevlab.github.io/experience-sdk/reference/plugins)** - Modal, Banner, Inline plugins\n- **[Theming Guide](https://prosdevlab.github.io/experience-sdk/guides/theming)** - CSS variables customization\n- **[Playground](https://experience-sdk-playground.vercel.app)** - Live demos and use cases\n\n## Project Status\n\n✅ **v0.2.0** - Presentation Layer Complete\n\n**Core Runtime:**\n- ✅ Explainability-first evaluation engine\n- ✅ Plugin system (sdk-kit)\n- ✅ Event-driven architecture\n- ✅ Hybrid API (singleton + instance)\n\n**Display Condition Plugins:**\n- ✅ Exit Intent - Detect users about to leave\n- ✅ Scroll Depth - Trigger at scroll thresholds\n- ✅ Time Delay - Time-based triggers\n- ✅ Page Visits - Session/total visit tracking\n- ✅ Frequency Capping - Impression limits\n\n**Presentation Plugins:**\n- ✅ Modal - Announcements, promotions, forms\n- ✅ Banner - Top/bottom dismissible messages\n- ✅ Inline - Embed content in page DOM\n\n**Features:**\n- ✅ Built-in form support (validation, submission)\n- ✅ CSS variable theming\n- ✅ TypeScript support\n- ✅ 432 tests passing\n- ✅ ~26KB gzipped (all plugins)\n\n## Development\n\n### Prerequisites\n\n- Node.js 24+ LTS\n- pnpm 10+\n\n### Setup\n\n```bash\n# Install dependencies\npnpm install\n\n# Build all packages\npnpm build\n\n# Run tests\npnpm test\n\n# Watch mode\npnpm dev\n```\n\n### Project Structure\n\n```\nexperience-sdk/\n├── packages/\n│   ├── core/          # Main runtime (@prosdevlab/experience-sdk)\n│   └── plugins/       # Official plugins\n├── demo/              # Demo site\n└── notes/             # Documentation \u0026 planning\n```\n\n## Architecture\n\nBuilt on [@lytics/sdk-kit](https://github.com/lytics/sdk-kit), Experience SDK showcases modern patterns for building explainable, plugin-based client-side runtimes.\n\n**Core Concepts:**\n- **Explainability** - Every decision returns structured reasons\n- **Plugin System** - Extensible via sdk-kit plugins\n- **Hybrid API** - Singleton for simplicity, instances for advanced use\n- **Event-Driven** - Observable evaluation pipeline\n\n## Roadmap\n\n- ✅ **Phase 0 (v0.1.0)**: Foundation - Core runtime, display condition plugins, banner plugin\n- ✅ **Phase 1 (v0.2.0)**: Presentation Layer - Modal \u0026 inline plugins with forms\n- 🚧 **Phase 2 (v0.3.0)**: Developer Experience - Chrome DevTools extension\n- 🚧 **Phase 3 (v0.4.0)**: Advanced Features - Tooltip plugin, multi-instance support\n- 🚧 **Phase 4 (v1.0.0)**: Production Ready - Performance optimizations, advanced targeting\n\nSee the [full roadmap](notes/vision-and-roadmap.md) for details.\n\n## License\n\n[MIT](LICENSE)\n\n---\n\n**Built by [@prosdevlab](https://github.com/prosdevlab)** | Powered by [@lytics/sdk-kit](https://github.com/lytics/sdk-kit)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprosdevlab%2Fexperience-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fprosdevlab%2Fexperience-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fprosdevlab%2Fexperience-sdk/lists"}