Skip to content

Feat/temp email checker tool - #88

Open
Al-Farhan wants to merge 2 commits into
reloop-labs:mainfrom
Al-Farhan:feat/temp-email-checker-tool
Open

Feat/temp email checker tool#88
Al-Farhan wants to merge 2 commits into
reloop-labs:mainfrom
Al-Farhan:feat/temp-email-checker-tool

Conversation

@Al-Farhan

@Al-Farhan Al-Farhan commented Aug 9, 2026

Copy link
Copy Markdown

Adds a public tool page at /tools/temp-email-checker that checks whether an
email address or domain belongs to a disposable/temporary mailbox provider.

Page layout: hero → checker panel → what the check looks at → why throwaway
signups cost you → how it works → FAQ → CTA.

Summary by CodeRabbit

  • New Features
    • Added a Temp Email Checker tool for evaluating email addresses and domains.
    • Provides results for disposable, free, role-based, risky, deliverable, and invalid inputs.
    • Includes signal explanations, usage guidance, FAQs, and signup-risk information.
    • Added the tool to the Resources → Tools navigation menu.
    • Added social preview imagery and page metadata for improved sharing and discovery.

Greptile Summary

Adds a public temporary-email checker marketing page, client-side result panel, social images, structured metadata, and navigation entry. The submitted check currently runs against a preview-only hard-coded domain sample rather than the advertised disposable-provider catalogue.

  • Adds the /tools/temp-email-checker page and supporting marketing content.
  • Adds an interactive result panel with disposable, role-address, free-provider, and syntax signals.
  • Adds Open Graph and Twitter imagery and links the tool from the Resources navigation.
  • Updates lockfile metadata.

Confidence Score: 4/5

The public tool should not be merged until its primary action uses the real checker or is clearly presented as a non-authoritative demo.

The page exposes a preview-only ten-domain sample as a functional checker, causing realistic disposable addresses outside that sample to receive authoritative-looking “Safe to accept” results.

Files Needing Attention: apps/frontend/web/src/app/tools/temp-email-checker/checker-panel.tsx, apps/frontend/web/src/app/tools/temp-email-checker/preview-check.ts

Important Files Changed

Filename Overview
apps/frontend/web/src/app/tools/temp-email-checker/checker-panel.tsx Implements the public form and result UI, but routes every submission to a preview-only checker that can produce misleading safe verdicts.
apps/frontend/web/src/app/tools/temp-email-checker/preview-check.ts Provides deterministic preview states using ten hard-coded disposable domains rather than a production-grade provider catalogue.
apps/frontend/web/src/app/tools/temp-email-checker/page.tsx Composes the tool's marketing page, metadata, structured data, FAQ, and checker panel using established page-shell components.
apps/frontend/web/src/app/tools/temp-email-checker/content.ts Defines the page's metadata and marketing copy, which describes capabilities broader than the currently connected preview implementation.
apps/frontend/web/src/components/header.tsx Adds a valid navigation link exposing the new tool under Resources.
apps/frontend/web/src/app/tools/temp-email-checker/opengraph-image.tsx Adds a static social preview image for the tool.
bun.lock Adds lockfile configVersion metadata without changing dependency versions.

Reviews (1): Last reviewed commit: "feat(web): link temp email checker in th..." | Re-trigger Greptile

Greptile also left 1 inline comment on this PR.

@coderabbitai

coderabbitai Bot commented Aug 9, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Adds a temporary email checker tool with client-side preview validation, structured result display, route content, navigation, SEO metadata, structured data, and Open Graph/Twitter images.

Changes

Temporary email checker

Layer / File(s) Summary
Preview validation and classification
apps/frontend/web/src/app/tools/temp-email-checker/preview-check.ts
Defines checker result types and classifies malformed inputs, disposable domains, role addresses, free providers, and deliverable results.
Checker panel interface
apps/frontend/web/src/app/tools/temp-email-checker/checker-panel.tsx
Adds controlled email/domain input, example values, empty-input handling, preview result rendering, signal rows, and accessible live updates.
Route and content integration
apps/frontend/web/src/app/tools/temp-email-checker/content.ts, apps/frontend/web/src/app/tools/temp-email-checker/page.tsx, apps/frontend/web/src/components/header.tsx
Adds route content, detection explanations, workflow steps, FAQs, structured data, CTA links, page rendering, and navigation access.
Social image metadata
apps/frontend/web/src/app/tools/temp-email-checker/opengraph-image.tsx, apps/frontend/web/src/app/tools/temp-email-checker/twitter-image.tsx
Adds branded 1200×630 Open Graph image rendering and re-exports its metadata for Twitter images.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
  participant Visitor
  participant CheckerPanel
  participant previewCheck
  participant ResultCard
  Visitor->>CheckerPanel: Enter email or domain
  CheckerPanel->>previewCheck: Submit normalized input
  previewCheck-->>CheckerPanel: Return CheckResult
  CheckerPanel->>ResultCard: Render verdict and signals
  ResultCard-->>Visitor: Display checker result
Loading
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies the main change: adding a temporary email checker tool.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

return;
}
// TODO: swap for the route handler once the check is built.
setResult(previewCheck(raw));

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Preview checker returns false negatives

When a visitor checks a disposable provider outside the ten hard-coded preview domains, previewCheck returns “No disposable signals” and “Safe to accept,” causing the public tool to present a false-negative verdict instead of performing the advertised catalogue lookup.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@apps/frontend/web/src/app/tools/temp-email-checker/checker-panel.tsx`:
- Around line 153-160: Production claims are exposed while the checker still
uses preview-only detection. In checker-panel.tsx:153-160, update run to call
the route handler instead of previewCheck before release. In content.ts:22-104,
remove unsupported capability claims; in page.tsx:113-186, stop rendering
production detection claims while preview behavior remains; in
opengraph-image.tsx:476-517, align social-image messaging with the implemented
checker.
- Around line 193-194: Update the input onChange handler in the checker panel to
clear the existing result whenever the value changes, while preserving the
current value update behavior so stale verdict cards cannot remain visible for a
different email.

In `@apps/frontend/web/src/app/tools/temp-email-checker/preview-check.ts`:
- Around line 75-76: Update DOMAIN_SHAPE in the email preview classification
logic to allow only valid DNS label characters, excluding URL delimiters such as
':' and '/'. Add coverage for URL-like and path-containing inputs, ensuring
previewCheck does not classify them as deliverable domains.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 154c81bc-3a4b-407f-ad31-f149bbcac137

📥 Commits

Reviewing files that changed from the base of the PR and between f9fe246 and f920d9b.

⛔ Files ignored due to path filters (1)
  • bun.lock is excluded by !**/*.lock
📒 Files selected for processing (7)
  • apps/frontend/web/src/app/tools/temp-email-checker/checker-panel.tsx
  • apps/frontend/web/src/app/tools/temp-email-checker/content.ts
  • apps/frontend/web/src/app/tools/temp-email-checker/opengraph-image.tsx
  • apps/frontend/web/src/app/tools/temp-email-checker/page.tsx
  • apps/frontend/web/src/app/tools/temp-email-checker/preview-check.ts
  • apps/frontend/web/src/app/tools/temp-email-checker/twitter-image.tsx
  • apps/frontend/web/src/components/header.tsx

Comment on lines +153 to +160
const run = (raw: string) => {
if (!raw.trim()) {
setResult(null);
return;
}
// TODO: swap for the route handler once the check is built.
setResult(previewCheck(raw));
};

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

Implement the checker before publishing production verdicts.

The public route calls previewCheck, which is explicitly preview-only and uses exact matches against a small hard-coded set. It does not implement the refreshed catalogue, wildcard matching, or exception list that the page and social image promise. Unknown disposable domains can receive a “Looks fine” verdict.

  • apps/frontend/web/src/app/tools/temp-email-checker/checker-panel.tsx#L153-L160: replace previewCheck with the route-handler request before release.
  • apps/frontend/web/src/app/tools/temp-email-checker/content.ts#L22-L104: remove unsupported capability claims until the handler implements them.
  • apps/frontend/web/src/app/tools/temp-email-checker/page.tsx#L113-L186: do not render production detection claims while the checker remains a preview.
  • apps/frontend/web/src/app/tools/temp-email-checker/opengraph-image.tsx#L476-L517: align social-image claims with the implemented checker.
📍 Affects 4 files
  • apps/frontend/web/src/app/tools/temp-email-checker/checker-panel.tsx#L153-L160 (this comment)
  • apps/frontend/web/src/app/tools/temp-email-checker/content.ts#L22-L104
  • apps/frontend/web/src/app/tools/temp-email-checker/page.tsx#L113-L186
  • apps/frontend/web/src/app/tools/temp-email-checker/opengraph-image.tsx#L476-L517
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/frontend/web/src/app/tools/temp-email-checker/checker-panel.tsx` around
lines 153 - 160, Production claims are exposed while the checker still uses
preview-only detection. In checker-panel.tsx:153-160, update run to call the
route handler instead of previewCheck before release. In content.ts:22-104,
remove unsupported capability claims; in page.tsx:113-186, stop rendering
production detection claims while preview behavior remains; in
opengraph-image.tsx:476-517, align social-image messaging with the implemented
checker.

Comment on lines +193 to +194
value={value}
onChange={(e) => setValue(e.target.value)}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Clear the result when the input changes.

After a check, editing the input leaves the prior result card visible. The form then shows one value while the verdict identifies another value.

Clear result in onChange, or re-run the check for the new value.

Proposed fix
-							onChange={(e) => setValue(e.target.value)}
+							onChange={(e) => {
+								setValue(e.target.value);
+								setResult(null);
+							}}
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
value={value}
onChange={(e) => setValue(e.target.value)}
value={value}
onChange={(e) => {
setValue(e.target.value);
setResult(null);
}}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/frontend/web/src/app/tools/temp-email-checker/checker-panel.tsx` around
lines 193 - 194, Update the input onChange handler in the checker panel to clear
the existing result whenever the value changes, while preserving the current
value update behavior so stale verdict cards cannot remain visible for a
different email.

Comment on lines +75 to +76
const EMAIL_SHAPE = /^[^\s@]+@[^\s@.]+(?:\.[^\s@.]+)+$/;
const DOMAIN_SHAPE = /^[^\s@.]+(?:\.[^\s@.]+)+$/;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Reject URL-like input before classification.

DOMAIN_SHAPE permits : and /. For example, https://mailinator.com matches as a bare domain. It is not in the exact domain set, so previewCheck returns a deliverable verdict.

Restrict domain labels to valid DNS characters before classification. Add tests for URLs and path-containing input.

Proposed fix
-const DOMAIN_SHAPE = /^[^\s@.]+(?:\.[^\s@.]+)+$/;
+const DOMAIN_SHAPE =
+	/^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const EMAIL_SHAPE = /^[^\s@]+@[^\s@.]+(?:\.[^\s@.]+)+$/;
const DOMAIN_SHAPE = /^[^\s@.]+(?:\.[^\s@.]+)+$/;
const EMAIL_SHAPE = /^[^\s@]+@[^\s@.]+(?:\.[^\s@.]+)+$/;
const DOMAIN_SHAPE =
/^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/;
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@apps/frontend/web/src/app/tools/temp-email-checker/preview-check.ts` around
lines 75 - 76, Update DOMAIN_SHAPE in the email preview classification logic to
allow only valid DNS label characters, excluding URL delimiters such as ':' and
'/'. Add coverage for URL-like and path-containing inputs, ensuring previewCheck
does not classify them as deliverable domains.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant