A minimal Manifest V3 browser extension for Microsoft Edge and Google Chrome, powered by callforpaper.org. The extension lets researchers check whether the currently open conference or CFP page is legitimate, unverified, or flagged as predatory, and allows searching the verified CFP database from the browser popup.
- Checks the active tab URL once, only when the popup opens.
- Calls
lookupfor current page trust and predatory checks. - Lets the user search CFPs from the popup with a debounced
searchrequest. - Shows matched CFP details, trust & predatory badge tiers (
trusted,verified,listed,predatory), empty states, and error states. - Stores no browsing history, search history, analytics identifiers, or telemetry.
- No passive browsing or background scanning.
- No background service worker.
- No analytics, tracking SDKs, or third-party scripts.
- No
tabspermission and no<all_urls>host permission. - No API keys or secrets in the extension bundle.
- No automatic submission of unmatched pages.
chrome-extension/
manifest.json # Manifest V3 metadata, permissions, CSP, icons
popup.html # Popup structure and privacy footer
popup.css # Popup layout, badges, skeletons, light/dark themes
popup.js # Active-tab lookup, search, safe DOM rendering
icons/ # PNG icon assets (16, 32, 48, 128, 300)
EDGE_STORE.md # Microsoft Edge Add-ons store copy and submission guide
CHROME_STORE.md # Chrome Web Store listing copy and submission checklist
PRIVACY.md # Privacy disclosure for review and users
- Open Microsoft Edge and navigate to
edge://extensions. - Turn ON Developer mode in the left sidebar toggle.
- Click Load unpacked.
- Select the repository's
chrome-extension/directory. - Click the puzzle/extensions icon in the Edge toolbar and pin Predatory Conference Checker.
- Navigate to any conference website and click the extension icon to test.
- Open Chrome and go to
chrome://extensions. - Enable Developer mode.
- Click Load unpacked.
- Select the repository's
chrome-extension/directory. - Pin Predatory Conference Checker from the extensions menu.
- Open a public CFP or conference website and click the extension icon.
These unauthenticated read-only endpoints must exist before live testing or store submission:
Expected behavior:
- Accepts a URL from the current active tab.
- Normalizes the incoming URL server-side.
- Matches against stored CFP source/website URLs.
- Returns
404when no CFP match exists. - Returns a CFP payload with trust fields when a match exists.
Suggested response shape:
{
"data": {
"title": "International Conference on Example Research",
"short_title": "ICER 2026",
"badge_tier": "trusted",
"indexing_status": "Scopus indexed",
"society_affiliation": "Example Society",
"core_rank": "A",
"ccf_rank": "B",
"listing_url": "https://callforpaper.org/cfp/icer-2026"
}
}Expected behavior:
- Public, unauthenticated, read-only, and server-rate-limited.
- Reuses the same Algolia-backed search data as the main site.
- Returns an array or an object with one of
data,results, orhits.
Suggested result fields:
{
"data": [
{
"title": "International Conference on Example Research",
"short_title": "ICER 2026",
"start_date": "2026-09-14",
"end_date": "2026-09-17",
"location": "Paris, France",
"badge_tier": "verified",
"listing_url": "https://callforpaper.org/cfp/icer-2026"
}
]
}The no-match state currently links to https://callforpaper.org/cfp/create. Confirm that this is the intended public suggestion/submission flow before publishing. If the production flow is different, update SUGGEST_URL in popup.js.
- Add the manually downloaded icon PNG files listed in
manifest.jsonbefore loading unpacked or packaging. - Load unpacked in Chrome with no popup console errors.
- Confirm Chrome reports only the
activeTabpermission. - Confirm host permission is scoped to
https://callforpaper.org/*only. - Confirm no background service worker is registered.
- Confirm lookup fires once on popup open.
- Confirm search requests fire only after typing, with debounce.
- Confirm invalid pages such as
chrome://extensionsshow the neutral state. - Confirm matched trusted, matched unverified, no-match, search empty, and API error states.
- Confirm dark mode through OS-level
prefers-color-scheme. - Confirm
tests/Feature/ChromeExtensionTest.phppasses in a fully installed Laravel environment.