{"id":50762451,"url":"https://github.com/devlinduldulao/ecwid-theme-performance-pulse","last_synced_at":"2026-06-11T11:02:10.350Z","repository":{"id":349579841,"uuid":"1185250471","full_name":"devlinduldulao/ecwid-theme-performance-pulse","owner":"devlinduldulao","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-13T10:11:22.000Z","size":964,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-01T19:07:25.932Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://devlinduldulao.github.io/ecwid-theme-performance-pulse/","language":"JavaScript","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/devlinduldulao.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":"docs/SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-03-18T11:46:09.000Z","updated_at":"2026-04-13T10:11:28.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/devlinduldulao/ecwid-theme-performance-pulse","commit_stats":null,"previous_names":["devlinduldulao/ecwid-theme-performance-pulse"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/devlinduldulao/ecwid-theme-performance-pulse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlinduldulao%2Fecwid-theme-performance-pulse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlinduldulao%2Fecwid-theme-performance-pulse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlinduldulao%2Fecwid-theme-performance-pulse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlinduldulao%2Fecwid-theme-performance-pulse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devlinduldulao","download_url":"https://codeload.github.com/devlinduldulao/ecwid-theme-performance-pulse/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devlinduldulao%2Fecwid-theme-performance-pulse/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34195117,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":"2026-06-11T11:02:10.253Z","updated_at":"2026-06-11T11:02:10.345Z","avatar_url":"https://github.com/devlinduldulao.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Theme Performance Pulse for Ecwid\n\nStatic Ecwid admin app for business owners who want a performance dashboard in their store admin without paying for a database, Redis, or a hosted Node.js server.\n\n## What changed\n\nThe Ecwid repo is no longer positioned as a hosted integration starter. It now targets the cheapest workable owner dashboard:\n\n- business owners save audit targets from the Ecwid admin page\n- the dashboard runs on-demand PageSpeed audits against storefront URLs\n- merchants can toggle a preview demo mode with fake sample results to review the UI before running live audits\n- store settings are saved in Ecwid app storage under the reserved `public` key when available\n- any optional PageSpeed API key stays only in the merchant browser\n- no database, queue, Redis, or always-on API server is required\n\n## Constraint to understand up front\n\nEcwid supports a static admin app and store-scoped app configuration, but it does not give this project a free, safe, centralized analytics backend.\n\nThat means this repo supports:\n\n- store-scoped owner settings\n- on-demand URL audits from the admin dashboard\n- static hosting for the app page and optional storefront assets\n\nIt does not support, without extra infrastructure:\n\n- cross-visitor live monitoring\n- long-term audit history shared across devices\n- webhook-driven automations\n- private REST proxying\n\n## Project structure\n\n```text\ntheme-performance-pulse/\n├── public/\n│   ├── index.html                 # Owner dashboard for Ecwid admin\n│   └── storefront-test.html       # Optional storefront harness retained for local testing\n├── src/\n│   ├── admin/\n│   │   └── app.js                 # Owner dashboard logic + PageSpeed audit runner\n│   ├── shared/\n│   │   ├── dashboard-core.js      # Shared audit config and PageSpeed result summarization\n│   │   └── pulse-core.js          # Legacy storefront event logic retained as optional reference\n│   ├── storefront/\n│   │   ├── custom-storefront.css  # Optional storefront helper styling\n│   │   └── custom-storefront.js   # Optional storefront helper script\n│   └── server/                    # Legacy hosted-app reference, not required for deployment\n├── scripts/\n│   ├── build.js                   # Static build output into dist/\n│   └── smoke-test.js              # Static smoke checks\n├── tests/\n│   ├── dashboard-core.test.js     # Unit coverage for audit config and summaries\n│   └── pulse-core.test.js         # Unit coverage for the shared monitoring core\n└── docs/\n```\n\n## Quick start\n\n```bash\nnpm install\nnpm run build\nnpm run publish:bundle\nnpm run preview\n```\n\nThen open:\n\n- `http://localhost:4173/public/index.html`\n- `http://localhost:4173/public/storefront-test.html`\n\nThe storefront test page is optional now. The main product is the admin dashboard in `public/index.html`.\n\n## Scripts\n\n| Command | Purpose |\n|---------|---------|\n| `npm run build` | Copy the static app into `dist/` for deployment |\n| `npm run publish:bundle` | Build `dist/`, copy marketplace screenshots, render icon/banner PNG assets, and assemble a release-ready bundle in `publish/` |\n| `npm run preview` | Serve the project root as a static site on port 4173 |\n| `npm run storefront` | Serve the same static assets on port 5000 |\n| `npm run lint` | Lint source, scripts, and tests |\n| `npm test` | Run unit tests and static smoke checks |\n\n## How the owner dashboard works\n\n### 1. Owner settings\n\nThe merchant configures:\n\n- storefront base URL\n- audit target URLs such as homepage, category, product, and cart\n- device strategy: mobile or desktop\n- optional PageSpeed API key kept only in the current browser\n\n### 2. Audit runner\n\n`src/admin/app.js` calls the public PageSpeed Insights API directly from the browser and summarizes:\n\n- performance score\n- accessibility score\n- best-practices score\n- SEO score\n- LCP, CLS, INP, and TBT\n- highest-signal optimization opportunities\n\n### 3. Preview mode\n\nThe owner can toggle `Preview Demo` to load browser-local sample data that simulates a healthy homepage, watch-list category/cart pages, and a weaker product page. This helps the merchant review the dashboard layout before running a live audit.\n\n### 4. Store-scoped persistence\n\nWhen the page is loaded inside Ecwid admin, non-sensitive owner settings are stored in Ecwid app storage. Outside Ecwid, the page falls back to browser-local storage for development and preview.\n\n### 5. Static deployment\n\nEverything ships as static files. `npm run build` copies the deployable app into `dist/`.\n\n## Recommended deployment\n\nHost the repository as static files on a free host such as GitHub Pages, Netlify, or Cloudflare Pages, then configure your Ecwid app to use:\n\n- app page URL: `https://your-host/public/index.html`\n\nFor this GitHub repository, the default GitHub Pages URL is:\n\n- `https://devlinduldulao.github.io/ecwid-theme-performance-pulse/public/index.html`\n\nThe repository root URL also redirects to the admin dashboard after build and deployment:\n\n- `https://devlinduldulao.github.io/ecwid-theme-performance-pulse/`\n\nOptional storefront helper URLs can still point at:\n\n- `https://your-host/src/storefront/custom-storefront.js`\n- `https://your-host/src/storefront/custom-storefront.css`\n\nIf you are not using a custom app yet, you can still host the dashboard as a standalone page for testing before wiring it into Ecwid.\n\n## Credentials and secrets\n\nThis repo's current build, test, packaging, GitHub Pages deploy, and GitHub Release workflows do not require Ecwid secrets.\n\nSafe to use in app registration docs or marketplace setup:\n\n- Ecwid client ID\n- requested access scopes\n- hosted app page URL\n- hosted privacy policy URL\n- hosted support URL\n\nDo not commit or expose in browser code:\n\n- Ecwid client secret\n- secret token\n- any private single-store token\n\nThe optional public token is also not required by the current static owner-dashboard flow. Only introduce it if you later add a storefront API feature that genuinely needs it.\n\nIf you later add server-side OAuth or private Ecwid API automation, store those secrets in GitHub Actions Secrets or your deployment platform's secret store rather than tracked files.\n\n## When you would still need a backend\n\nAdd a real backend only if you need one of these:\n\n- centralized history across users and devices\n- scheduled background audits\n- private API access beyond app storage\n- webhooks or order/product automations\n\n## Docs\n\n- [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md)\n- [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md)\n- [docs/DEPLOYMENT.md](docs/DEPLOYMENT.md)\n- [docs/API.md](docs/API.md)\n- [docs/PUBLISHING.md](docs/PUBLISHING.md)\n- [docs/PRIVACY.md](docs/PRIVACY.md)\n- [docs/RELEASING.md](docs/RELEASING.md)\n- [docs/SUPPORT.md](docs/SUPPORT.md)\n\nSee [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for a deep dive into the architecture.\n\n## Development\n\nSee [docs/DEVELOPMENT.md](docs/DEVELOPMENT.md) for the full development guide.\n\n## Deployment\n\nSee [docs/DEPLOYMENT.md](docs/DEPLOYMENT.md) for deployment instructions.\n\n---\n\n## Ecwid Resources\n\n### Getting Started\n\n| Resource | Link |\n|----------|------|\n| Ecwid Developer Portal (register apps) | https://developers.ecwid.com/ |\n| App Development Guide | https://api-docs.ecwid.com/docs/get-started |\n| Ecwid App Market (see published apps) | https://www.ecwid.com/apps |\n| Sign Up for Free Ecwid Account | https://www.ecwid.com/ |\n| Ecwid Control Panel (store admin) | https://my.ecwid.com/ |\n\n### REST API v3\n\n| Resource | Link |\n|----------|------|\n| API Overview \u0026 Reference | https://api-docs.ecwid.com/reference/overview |\n| Products API | https://api-docs.ecwid.com/reference/products |\n| Orders API | https://api-docs.ecwid.com/reference/orders |\n| Customers API | https://api-docs.ecwid.com/reference/customers |\n| Categories API | https://api-docs.ecwid.com/reference/categories |\n| Discount Coupons API | https://api-docs.ecwid.com/reference/discount-coupons |\n| Store Profile API | https://api-docs.ecwid.com/reference/store-profile |\n| Product Variations API | https://api-docs.ecwid.com/reference/product-variations |\n| Abandoned Carts API | https://api-docs.ecwid.com/reference/abandoned-carts |\n| Shipping Options API | https://api-docs.ecwid.com/reference/shipping-options |\n| Tax Settings API | https://api-docs.ecwid.com/reference/taxes |\n| Application Storage API | https://api-docs.ecwid.com/reference/storage |\n| Starter Site API | https://api-docs.ecwid.com/reference/starter-site |\n\n### Authentication \u0026 Security\n\n| Resource | Link |\n|----------|------|\n| OAuth 2.0 Authentication | https://api-docs.ecwid.com/docs/authentication |\n| Access Scopes Reference | https://api-docs.ecwid.com/docs/access-scopes |\n| API Tokens \u0026 Keys | https://api-docs.ecwid.com/docs/api-tokens |\n\n### Storefront Customisation\n\n| Resource | Link |\n|----------|------|\n| JavaScript Storefront API | https://api-docs.ecwid.com/docs/customize-storefront |\n| Storefront JS API Reference | https://api-docs.ecwid.com/docs/storefront-js-api-reference |\n| Custom CSS for Storefront | https://api-docs.ecwid.com/docs/customize-appearance |\n| Page Events (OnPageLoaded, etc.) | https://api-docs.ecwid.com/docs/page-events |\n| Cart Methods (add, remove, get) | https://api-docs.ecwid.com/docs/cart-methods |\n| Public App Config (storefront injection) | https://api-docs.ecwid.com/docs/public-app-config |\n| SEO for Ecwid Stores | https://api-docs.ecwid.com/docs/seo |\n\n### App Development\n\n| Resource | Link |\n|----------|------|\n| Native Apps (admin iframe) | https://api-docs.ecwid.com/docs/native-apps |\n| Ecwid App UI CSS Framework | https://api-docs.ecwid.com/docs/ecwid-css-framework |\n| EcwidApp JS SDK Reference | https://api-docs.ecwid.com/docs/ecwidapp-js-sdk |\n| App Storage (key-value per store) | https://api-docs.ecwid.com/docs/app-storage |\n| Webhooks | https://api-docs.ecwid.com/docs/webhooks |\n| Webhook Events Reference | https://api-docs.ecwid.com/docs/webhook-events |\n| Custom Shipping Methods | https://api-docs.ecwid.com/docs/add-shipping-method |\n| Custom Payment Methods | https://api-docs.ecwid.com/docs/add-payment-method |\n| Custom Discount Logic | https://api-docs.ecwid.com/docs/add-custom-discount |\n| App Listing Requirements | https://api-docs.ecwid.com/docs/app-listing-requirements |\n\n### Embedding \u0026 Widgets\n\n| Resource | Link |\n|----------|------|\n| Add Ecwid to Any Website | https://api-docs.ecwid.com/docs/add-ecwid-to-a-site |\n| Product Browser Widget Config | https://api-docs.ecwid.com/docs/product-browser |\n| Buy Now Buttons | https://api-docs.ecwid.com/docs/buy-now-buttons |\n| Single Sign-On (SSO) | https://api-docs.ecwid.com/docs/single-sign-on |\n\n### Guides \u0026 Tutorials\n\n| Resource | Link |\n|----------|------|\n| API Rate Limits | https://api-docs.ecwid.com/docs/rate-limits |\n| Error Codes Reference | https://api-docs.ecwid.com/docs/errors |\n| Testing Your App | https://api-docs.ecwid.com/docs/testing |\n| Publishing to App Market | https://api-docs.ecwid.com/docs/publishing |\n| Ecwid Community Forum | https://community.ecwid.com/ |\n| Ecwid Help Center | https://support.ecwid.com/ |\n| Ecwid Status Page | https://status.ecwid.com/ |\n| Ecwid Blog | https://www.ecwid.com/blog |\n\n---\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevlinduldulao%2Fecwid-theme-performance-pulse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevlinduldulao%2Fecwid-theme-performance-pulse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevlinduldulao%2Fecwid-theme-performance-pulse/lists"}