From a429657b1ccfa8d7aa90c5f4a5ca0c61011c6069 Mon Sep 17 00:00:00 2001
From: lean <1337lean@users.noreply.github.com>
Date: Sat, 18 Jul 2026 21:36:20 -0400
Subject: [PATCH] Add IP Lens product landing page
---
app/globals.css | 314 +++++++++++++++++++++
app/ip-lens/page.tsx | 235 +++++++++++++++
app/ip-lens/privacy/page.tsx | 67 +++++
app/ip-lens/support/page.tsx | 58 ++++
app/layout.tsx | 2 +-
app/page.tsx | 3 +
app/sitemap.ts | 6 +-
components/ip-lens/AppScreenshotFrame.tsx | 38 +++
components/ip-lens/AppStoreCTA.tsx | 30 ++
components/ip-lens/IPLensFeatureCard.tsx | 16 ++
components/ip-lens/IPLensPromo.tsx | 17 ++
components/landing/SiteChrome.tsx | 6 +-
data/ip-lens.ts | 173 ++++++++++++
public/ip-lens/app-icon.png | Bin 0 -> 1164981 bytes
public/ip-lens/screenshots/README.md | 14 +
public/ip-lens/screenshots/batchlookup.png | Bin 0 -> 324819 bytes
public/ip-lens/screenshots/dnsrecords.png | Bin 0 -> 273337 bytes
public/ip-lens/screenshots/iplookup.png | Bin 0 -> 1644532 bytes
public/ip-lens/screenshots/subnetcalc.png | Bin 0 -> 270676 bytes
19 files changed, 973 insertions(+), 6 deletions(-)
create mode 100644 app/ip-lens/page.tsx
create mode 100644 app/ip-lens/privacy/page.tsx
create mode 100644 app/ip-lens/support/page.tsx
create mode 100644 components/ip-lens/AppScreenshotFrame.tsx
create mode 100644 components/ip-lens/AppStoreCTA.tsx
create mode 100644 components/ip-lens/IPLensFeatureCard.tsx
create mode 100644 components/ip-lens/IPLensPromo.tsx
create mode 100644 data/ip-lens.ts
create mode 100644 public/ip-lens/app-icon.png
create mode 100644 public/ip-lens/screenshots/README.md
create mode 100644 public/ip-lens/screenshots/batchlookup.png
create mode 100644 public/ip-lens/screenshots/dnsrecords.png
create mode 100644 public/ip-lens/screenshots/iplookup.png
create mode 100644 public/ip-lens/screenshots/subnetcalc.png
diff --git a/app/globals.css b/app/globals.css
index 2f5f444..61abe73 100644
--- a/app/globals.css
+++ b/app/globals.css
@@ -610,3 +610,317 @@ main,
html { scroll-behavior: auto; }
*, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; }
}
+
+/* IP Lens */
+.ip-lens-promo {
+ display: grid;
+ grid-template-columns: auto minmax(0, 1fr) auto;
+ align-items: center;
+ gap: 1.2rem;
+ margin-top: 1rem;
+ padding: 1rem 1.1rem;
+ border: 1px solid var(--line);
+ border-radius: 12px;
+ background: linear-gradient(115deg, rgba(105, 227, 176, 0.045), rgba(155, 135, 245, 0.055));
+}
+
+.ip-lens-promo-icon {
+ width: 46px;
+ height: 46px;
+ border-radius: 10px;
+ box-shadow: 0 8px 24px rgba(25, 66, 230, 0.28);
+}
+
+.ip-lens-promo .section-kicker { margin: 0 0 0.2rem; color: var(--green); font-size: 0.54rem; }
+.ip-lens-promo h2 { font-size: 1rem; }
+.ip-lens-promo p { margin-top: 0.15rem; color: var(--muted); font-size: 0.75rem; }
+.ip-lens-promo > a { color: var(--purple-bright); font-family: var(--font-mono); font-size: 0.67rem; }
+.ip-lens-promo > a span { margin-left: 0.5rem; }
+
+.ip-lens-page { --product-line: rgba(255, 255, 255, 0.105); }
+
+.product-hero {
+ display: grid;
+ grid-template-columns: minmax(0, 1fr) minmax(330px, 0.72fr);
+ align-items: center;
+ gap: clamp(3rem, 8vw, 7rem);
+ min-height: 720px;
+ padding: clamp(4.5rem, 8vw, 7rem) 0;
+}
+
+.product-hero-copy { max-width: 650px; }
+.product-hero .eyebrow { color: var(--green); }
+.product-hero .live-dot { background: var(--green); box-shadow: 0 0 12px rgba(105, 227, 176, 0.62); }
+
+.product-identity {
+ display: flex;
+ align-items: center;
+ gap: 0.9rem;
+ margin-bottom: 1.15rem;
+}
+
+.product-app-icon {
+ width: 58px;
+ height: 58px;
+ border: 1px solid rgba(255, 255, 255, 0.17);
+ border-radius: 13px;
+ box-shadow: 0 12px 34px rgba(25, 66, 230, 0.28);
+}
+
+.product-name {
+ color: var(--purple-bright);
+ font-family: var(--font-mono);
+ font-size: 0.92rem;
+ font-weight: 700;
+ letter-spacing: -0.03em;
+}
+
+.product-name span { display: block; margin-top: 0.2rem; color: var(--faint); font-size: 0.5rem; font-weight: 500; letter-spacing: 0.05em; text-transform: uppercase; }
+
+.product-hero h1 {
+ max-width: 690px;
+ font-size: clamp(3.4rem, 6.7vw, 5.75rem);
+ line-height: 0.98;
+ letter-spacing: -0.072em;
+}
+
+.product-hero-description {
+ max-width: 620px;
+ margin-top: 1.5rem;
+ color: var(--muted);
+ font-size: 1rem;
+ line-height: 1.75;
+}
+
+.app-store-cta { gap: 0.85rem; }
+.app-store-cta small { font-family: var(--font-mono); font-size: 0.52rem; font-weight: 700; text-transform: uppercase; }
+.app-store-cta.is-disabled,
+.app-store-cta.is-disabled:disabled { cursor: not-allowed; opacity: 0.72; }
+
+.product-badges {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.5rem;
+ padding: 0;
+ margin: 1.35rem 0 0;
+ list-style: none;
+}
+
+.product-badges li {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.45rem;
+ min-height: 30px;
+ padding: 0 0.62rem;
+ border: 1px solid var(--line);
+ border-radius: 999px;
+ color: var(--faint);
+ background: rgba(255, 255, 255, 0.022);
+ font-family: var(--font-mono);
+ font-size: 0.56rem;
+}
+
+.product-badges i,
+.placeholder-status i,
+.privacy-signal i {
+ width: 5px;
+ height: 5px;
+ border-radius: 50%;
+ background: var(--green);
+ box-shadow: 0 0 8px rgba(105, 227, 176, 0.48);
+}
+
+.hero-app-preview { position: relative; display: grid; place-items: center; min-width: 0; }
+.preview-orbit { position: absolute; width: min(46vw, 500px); aspect-ratio: 1; border: 1px solid rgba(155, 135, 245, 0.12); border-radius: 50%; background: radial-gradient(circle, rgba(155, 135, 245, 0.11), transparent 62%); }
+.preview-orbit::before,
+.preview-orbit::after { position: absolute; inset: 14%; border: 1px solid rgba(255, 255, 255, 0.045); border-radius: inherit; content: ""; }
+.preview-orbit::after { inset: 31%; border-color: rgba(105, 227, 176, 0.08); }
+
+.app-screenshot-frame { position: relative; z-index: 1; width: min(100%, 250px); margin: 0; }
+.app-screenshot-frame.is-featured { width: min(100%, 348px); transform: rotate(1.25deg); }
+
+.app-device-shell {
+ position: relative;
+ overflow: hidden;
+ aspect-ratio: 1290 / 2796;
+ padding: 10px;
+ border: 1px solid rgba(255, 255, 255, 0.24);
+ border-radius: 38px;
+ background: #07070b;
+ box-shadow: 0 34px 85px rgba(0, 0, 0, 0.55), 0 0 55px rgba(116, 87, 231, 0.12), inset 0 0 0 2px rgba(255, 255, 255, 0.025);
+}
+
+.app-device-shell img { display: block; width: 100%; height: 100%; border-radius: 29px; object-fit: cover; }
+.app-device-speaker { position: absolute; top: 17px; left: 50%; z-index: 3; width: 30%; height: 20px; border-radius: 999px; background: #060609; transform: translateX(-50%); }
+
+.app-screenshot-placeholder {
+ display: flex;
+ flex-direction: column;
+ justify-content: space-between;
+ height: 100%;
+ padding: 3.2rem 1.15rem 1.2rem;
+ border: 1px solid rgba(255, 255, 255, 0.07);
+ border-radius: 29px;
+ background:
+ linear-gradient(rgba(255, 255, 255, 0.025) 1px, transparent 1px),
+ linear-gradient(90deg, rgba(255, 255, 255, 0.025) 1px, transparent 1px),
+ linear-gradient(155deg, #12121a, #0b0b11);
+ background-size: 28px 28px, 28px 28px, auto;
+}
+
+.placeholder-command {
+ align-self: flex-start;
+ padding: 0.4rem 0.55rem;
+ border: 1px solid rgba(155, 135, 245, 0.3);
+ border-radius: 6px;
+ color: var(--purple-bright);
+ background: rgba(155, 135, 245, 0.08);
+ font-family: var(--font-mono);
+ font-size: 0.58rem;
+}
+
+.app-screenshot-placeholder small { display: block; margin-bottom: 0.65rem; color: var(--faint); font-family: var(--font-mono); font-size: 0.52rem; letter-spacing: 0.1em; text-transform: uppercase; }
+.app-screenshot-placeholder strong { display: block; font-size: clamp(1.1rem, 2vw, 1.4rem); line-height: 1.15; }
+.app-screenshot-placeholder p { margin-top: 0.7rem; color: var(--faint); font-size: 0.65rem; line-height: 1.55; }
+.app-screenshot-placeholder code { color: var(--muted); font-family: var(--font-mono); overflow-wrap: anywhere; }
+.placeholder-status { display: flex; align-items: center; gap: 0.45rem; color: var(--faint); font-family: var(--font-mono); font-size: 0.5rem; text-transform: uppercase; }
+.app-screenshot-frame figcaption { display: flex; justify-content: space-between; gap: 0.75rem; margin-top: 0.75rem; color: var(--muted); font-size: 0.68rem; }
+.app-screenshot-frame figcaption span { color: var(--purple-bright); font-family: var(--font-mono); font-size: 0.58rem; }
+
+.product-section { padding: 7rem 0; border-top: 1px solid var(--product-line); }
+.product-section-header { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(280px, 0.75fr); align-items: end; gap: 4rem; margin-bottom: 3rem; }
+.product-section-header > div { display: grid; grid-template-columns: auto 1fr; align-items: center; gap: 0 0.75rem; }
+.product-section-header .section-kicker { margin: 0; }
+.product-section-header h2 { grid-column: 1 / -1; margin-top: 0.9rem; font-size: clamp(2.3rem, 4.7vw, 3.9rem); line-height: 1.07; letter-spacing: -0.055em; }
+.product-section-header > p { max-width: 500px; color: var(--muted); font-size: 0.9rem; line-height: 1.75; }
+
+.screenshot-section { overflow: hidden; }
+.screenshot-gallery { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); align-items: start; justify-items: center; gap: clamp(1rem, 4vw, 3rem); padding: 1.5rem clamp(0rem, 3vw, 2rem) 0; }
+.screenshot-gallery > :nth-child(2) { margin-top: 3rem; }
+
+.ip-lens-feature-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.75rem; }
+.ip-lens-feature-card { min-height: 230px; }
+.ip-lens-feature-card h3 { font-size: 1.05rem; }
+.ip-lens-feature-card p { font-size: 0.8rem; line-height: 1.65; }
+
+.sample-workflow { overflow: hidden; border: 1px solid var(--line-strong); border-radius: var(--radius); background: rgba(13, 13, 19, 0.92); box-shadow: 0 30px 90px rgba(0, 0, 0, 0.35); }
+.sample-workflow-bar { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; min-height: 46px; padding: 0 1rem; border-bottom: 1px solid var(--line); color: var(--faint); font-family: var(--font-mono); font-size: 0.6rem; }
+.sample-workflow-bar .terminal-dots { justify-self: start; }
+.sample-workflow-bar strong { color: var(--muted); font-weight: 500; text-transform: uppercase; }
+.sample-workflow-bar > :last-child { justify-self: end; }
+.sample-workflow-body { display: grid; grid-template-columns: 0.72fr 1.28fr; min-height: 370px; }
+.sample-address { display: flex; flex-direction: column; justify-content: center; padding: clamp(1.5rem, 4vw, 3.5rem); border-right: 1px solid var(--line); background: radial-gradient(circle at 10% 15%, rgba(155, 135, 245, 0.12), transparent 65%); }
+.sample-address > span { color: var(--green); font-family: var(--font-mono); font-size: 0.63rem; }
+.sample-address strong { margin-top: 0.8rem; font-family: var(--font-mono); font-size: clamp(1.5rem, 3.5vw, 2.8rem); letter-spacing: -0.06em; overflow-wrap: anywhere; }
+.sample-address p { max-width: 340px; margin-top: 1.2rem; color: var(--faint); font-size: 0.72rem; line-height: 1.65; }
+.sample-workflow dl { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); align-content: center; padding: clamp(1rem, 3vw, 2rem); }
+.sample-workflow dl div { min-width: 0; padding: 1rem; border-bottom: 1px solid var(--line); }
+.sample-workflow dt { color: var(--faint); font-family: var(--font-mono); font-size: 0.55rem; letter-spacing: 0.06em; text-transform: uppercase; }
+.sample-workflow dd { margin-top: 0.35rem; color: #d8d4e2; font-family: var(--font-mono); font-size: 0.72rem; overflow-wrap: anywhere; }
+
+.privacy-callout { display: grid; grid-template-columns: 1.25fr 0.75fr; overflow: hidden; border: 1px solid rgba(105, 227, 176, 0.2); border-radius: var(--radius); background: linear-gradient(125deg, rgba(105, 227, 176, 0.055), rgba(155, 135, 245, 0.035)); }
+.privacy-copy { padding: clamp(1.5rem, 5vw, 4rem); }
+.privacy-signal { display: inline-flex; align-items: center; gap: 0.5rem; color: var(--green); font-family: var(--font-mono); font-size: 0.57rem; text-transform: uppercase; }
+.privacy-copy h3 { max-width: 570px; margin-top: 1.2rem; font-size: clamp(1.65rem, 3.5vw, 2.75rem); letter-spacing: -0.045em; }
+.privacy-copy > p { max-width: 650px; margin-top: 1rem; color: var(--muted); font-size: 0.87rem; line-height: 1.75; }
+.privacy-links { display: flex; flex-wrap: wrap; gap: 1rem 1.5rem; margin-top: 1.75rem; }
+.privacy-links a { color: var(--purple-bright); font-family: var(--font-mono); font-size: 0.63rem; }
+.privacy-facts { display: grid; align-content: center; padding: 1rem clamp(1rem, 3vw, 2rem); margin: 0; border-left: 1px solid rgba(105, 227, 176, 0.15); list-style: none; }
+.privacy-facts li { display: grid; grid-template-columns: auto 1fr; align-items: center; gap: 0.9rem; min-height: 62px; border-bottom: 1px solid var(--line); }
+.privacy-facts li:last-child { border-bottom: 0; }
+.privacy-facts span { color: var(--green); font-family: var(--font-mono); font-size: 0.55rem; }
+.privacy-facts strong { font-size: 0.78rem; font-weight: 500; }
+
+.audience-list { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); padding: 0; margin: 0; border-top: 1px solid var(--line); border-left: 1px solid var(--line); list-style: none; }
+.audience-list li { display: flex; align-items: center; gap: 1rem; min-height: 76px; padding: 1rem; border-right: 1px solid var(--line); border-bottom: 1px solid var(--line); color: #d8d4e2; font-size: 0.82rem; }
+.audience-list span { color: var(--purple); font-family: var(--font-mono); font-size: 0.56rem; }
+
+.pricing-panel { display: grid; grid-template-columns: 1fr 1fr; border: 1px solid var(--line-strong); border-radius: var(--radius); background: rgba(13, 13, 19, 0.9); }
+.pricing-panel > div { padding: clamp(1.5rem, 5vw, 4rem); }
+.pricing-status { color: var(--green); font-family: var(--font-mono); font-size: 0.6rem; letter-spacing: 0.08em; text-transform: uppercase; }
+.pricing-panel h3 { margin-top: 1rem; font-size: clamp(1.7rem, 3.3vw, 2.6rem); letter-spacing: -0.045em; }
+.pricing-panel p { margin: 0.6rem 0 1.6rem; color: var(--muted); font-size: 0.78rem; }
+.pricing-panel > ul { display: grid; align-content: center; gap: 0; padding: 2rem clamp(1.5rem, 5vw, 4rem); margin: 0; border-left: 1px solid var(--line); list-style: none; }
+.pricing-panel li { display: flex; align-items: center; gap: 0.8rem; min-height: 48px; border-bottom: 1px solid var(--line); color: var(--muted); font-size: 0.78rem; }
+.pricing-panel li:last-child { border-bottom: 0; }
+.pricing-panel li span { color: var(--green); font-family: var(--font-mono); }
+
+.faq-list { border-top: 1px solid var(--line-strong); }
+.faq-list details { border-bottom: 1px solid var(--line); }
+.faq-list summary { display: grid; grid-template-columns: 2rem 1fr auto; align-items: center; gap: 1rem; min-height: 72px; padding: 0.8rem 0.25rem; cursor: pointer; color: #dcd8e5; font-size: 0.9rem; list-style: none; }
+.faq-list summary::-webkit-details-marker { display: none; }
+.faq-list summary::after { color: var(--purple-bright); content: "+"; font-family: var(--font-mono); font-size: 1rem; }
+.faq-list details[open] summary::after { content: "−"; }
+.faq-list summary span { color: var(--faint); font-family: var(--font-mono); font-size: 0.55rem; }
+.faq-list details > div { max-width: 800px; padding: 0 1rem 1.4rem 3.25rem; }
+.faq-list details p { color: var(--muted); font-size: 0.8rem; line-height: 1.7; }
+.faq-list details a { display: inline-block; margin-top: 0.8rem; color: var(--purple-bright); font-family: var(--font-mono); font-size: 0.62rem; }
+
+.product-final-cta { display: grid; grid-template-columns: 1fr auto; align-items: end; gap: 3rem; margin: 1rem 0 8rem; padding: clamp(1.5rem, 4vw, 3rem); border: 1px solid var(--line-strong); border-radius: var(--radius); background: linear-gradient(120deg, rgba(155, 135, 245, 0.08), rgba(105, 227, 176, 0.035)); }
+.product-final-cta .section-kicker { color: var(--green); }
+.product-final-cta h2 { font-size: clamp(2rem, 4.5vw, 3.5rem); line-height: 1.08; letter-spacing: -0.055em; }
+.product-final-cta p { margin-top: 0.8rem; color: var(--muted); font-size: 0.86rem; }
+.product-final-cta .hero-actions { justify-content: flex-end; margin: 0; }
+
+.product-legal-page .breadcrumbs { margin-bottom: 3rem; }
+.product-legal-page .section-kicker { color: var(--green); }
+.product-legal-page > p + p { margin-top: 1rem; }
+.support-warning { display: grid; grid-template-columns: auto 1fr; gap: 1rem; margin: 2rem 0; padding: 1rem; border: 1px solid rgba(243, 187, 107, 0.25); border-radius: 10px; background: rgba(243, 187, 107, 0.055); }
+.support-warning > span { display: grid; place-items: center; width: 28px; height: 28px; border: 1px solid rgba(243, 187, 107, 0.35); border-radius: 7px; color: var(--amber); font-family: var(--font-mono); }
+.support-warning p { font-size: 0.78rem; }
+.support-warning strong { color: #e2d5bd; }
+.inline-support-button { width: max-content; margin: 0.5rem 0; color: #d6d2df !important; }
+
+@media (max-width: 960px) {
+ .product-hero { grid-template-columns: 1fr; gap: 4rem; }
+ .hero-app-preview { width: min(100%, 600px); }
+ .preview-orbit { width: min(90vw, 520px); }
+ .product-section-header { grid-template-columns: 1fr; gap: 1.2rem; }
+ .product-section-header > p { max-width: 650px; }
+ .ip-lens-feature-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
+ .product-final-cta { grid-template-columns: 1fr; align-items: start; }
+ .product-final-cta .hero-actions { justify-content: flex-start; }
+}
+
+@media (max-width: 700px) {
+ .ip-lens-promo { grid-template-columns: auto 1fr; margin-top: 0.75rem; padding: 0.85rem; }
+ .ip-lens-promo > a { grid-column: 1 / -1; display: flex; align-items: center; justify-content: space-between; min-height: 44px; padding: 0 0.75rem; border: 1px solid var(--line); border-radius: 8px; }
+ .product-hero { gap: 3rem; min-height: 0; padding: 3.5rem 0 4.5rem; }
+ .product-hero h1 { font-size: clamp(3rem, 15vw, 4.45rem); }
+ .product-hero-description { margin-top: 1.1rem; font-size: 0.9rem; line-height: 1.65; }
+ .product-hero .hero-actions > * { flex: 1 1 150px; }
+ .product-badges { gap: 0.4rem; }
+ .product-badges li { font-size: 0.52rem; }
+ .hero-app-preview { width: 100%; }
+ .app-screenshot-frame.is-featured { width: min(84vw, 330px); transform: none; }
+ .product-section { padding: 4.25rem 0; }
+ .product-section-header { margin-bottom: 2rem; }
+ .product-section-header h2 { font-size: clamp(2rem, 11.5vw, 3rem); }
+ .product-section-header > p { font-size: 0.84rem; line-height: 1.65; }
+ .screenshot-gallery { display: flex; justify-content: start; gap: 1rem; width: calc(100% + 14px); padding: 0 14px 1rem 0; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: thin; }
+ .screenshot-gallery .app-screenshot-frame { flex: 0 0 min(75vw, 260px); scroll-snap-align: start; }
+ .screenshot-gallery > :nth-child(2) { margin-top: 0; }
+ .ip-lens-feature-grid { grid-template-columns: 1fr; gap: 0.55rem; }
+ .ip-lens-feature-card { display: flex; min-height: 190px; }
+ .sample-workflow-bar { grid-template-columns: 1fr auto; }
+ .sample-workflow-bar strong { display: none; }
+ .sample-workflow-body { grid-template-columns: 1fr; }
+ .sample-address { min-height: 250px; border-right: 0; border-bottom: 1px solid var(--line); }
+ .sample-workflow dl { grid-template-columns: 1fr; padding: 0.75rem; }
+ .sample-workflow dl div { padding: 0.85rem 0.5rem; }
+ .privacy-callout { grid-template-columns: 1fr; }
+ .privacy-facts { border-top: 1px solid rgba(105, 227, 176, 0.15); border-left: 0; }
+ .privacy-links { flex-direction: column; }
+ .privacy-links a { display: flex; align-items: center; justify-content: space-between; min-height: 44px; padding: 0 0.75rem; border: 1px solid var(--line); border-radius: 8px; }
+ .audience-list { grid-template-columns: 1fr; }
+ .audience-list li { min-height: 62px; }
+ .pricing-panel { grid-template-columns: 1fr; }
+ .pricing-panel > ul { border-top: 1px solid var(--line); border-left: 0; }
+ .pricing-panel .app-store-cta { width: 100%; }
+ .faq-list summary { min-height: 64px; font-size: 0.82rem; }
+ .faq-list details > div { padding-left: 3.25rem; }
+ .product-final-cta { margin-bottom: 5rem; }
+ .product-final-cta .hero-actions { width: 100%; }
+ .product-final-cta .hero-actions > * { flex: 1 1 150px; }
+ .product-legal-page .breadcrumbs { margin-bottom: 2rem; }
+}
diff --git a/app/ip-lens/page.tsx b/app/ip-lens/page.tsx
new file mode 100644
index 0000000..ec37958
--- /dev/null
+++ b/app/ip-lens/page.tsx
@@ -0,0 +1,235 @@
+import type { Metadata } from "next";
+import Image from "next/image";
+import Link from "next/link";
+import { AppScreenshotFrame } from "@/components/ip-lens/AppScreenshotFrame";
+import { AppStoreCTA } from "@/components/ip-lens/AppStoreCTA";
+import { IPLensFeatureCard } from "@/components/ip-lens/IPLensFeatureCard";
+import { SiteChrome } from "@/components/landing/SiteChrome";
+import { ipLensConfig } from "@/data/ip-lens";
+
+const description =
+ "IP Lens is a focused iPhone networking toolkit for IP lookup, DNS records, registration data, subnet calculations, batch analysis, and more—with no ads or subscription.";
+
+export const metadata: Metadata = {
+ title: { absolute: "IP Lens — Networking Tools for iPhone | buffer.lol" },
+ description,
+ alternates: { canonical: "/ip-lens" },
+ robots: { index: true, follow: true },
+ openGraph: {
+ title: "IP Lens — Networking Tools for iPhone",
+ description,
+ type: "website",
+ url: "/ip-lens",
+ siteName: "buffer.lol"
+ },
+ twitter: {
+ card: "summary",
+ title: "IP Lens — Networking Tools for iPhone",
+ description
+ }
+};
+
+const sampleFields = [
+ ["Address", "203.0.113.42"],
+ ["IP version", "IPv4"],
+ ["ASN", "AS64500 · sample"],
+ ["Provider", "Example Network"],
+ ["Reverse DNS", "host-42.example.test"],
+ ["Network range", "203.0.113.0/24"],
+ ["Approximate region", "Example region"]
+] as const;
+
+function SectionHeader({ id, number, label, title, text }: { id: string; number: string; label: string; title: string; text: string }) {
+ return (
+
+ );
+}
+
+export default function IPLensPage() {
+ const [heroScreenshot, ...galleryScreenshots] = ipLensConfig.screenshots;
+
+ return (
+
+
+
+
+
native://ios
+
+
+
{ipLensConfig.appName}IP lookup and network tools
+
+
See the network more clearly.
+
IP lookup, DNS inspection, registration data, subnet calculations, and more—built into one focused networking toolkit for iPhone.
+
+
+ {ipLensConfig.badges.map((badge) => {badge} )}
+
+
+
+
+
+
+
+
+ {galleryScreenshots.map((screenshot) =>
)}
+
+
+
+
+
+
+ {ipLensConfig.features.map((feature) => )}
+
+
+
+
+
+
+
+
+ Illustrative sample
+ reserved address
+
+
+
+
lookup://sample
+
203.0.113.42
+
Reserved documentation address. The values below are fictional and demonstrate layout only.
+
+
+ {sampleFields.map(([term, value]) =>
{term} {value} )}
+
+
+
+
+
+
+
+
+
+
device → provider
+
Requests go directly from your device.
+
Free IP lookups go to {ipLensConfig.providers.freeIPData}; personal-key lookups go to {ipLensConfig.providers.personalIPData}. DNS queries go only to the selected {ipLensConfig.providers.dns} resolver, while registration queries go directly to the {ipLensConfig.providers.registration}.
+
+ Read the IP Lens privacy notice →
+ Contact support →
+
+
+
+ 01 No account required
+ 02 No advertisements
+ 03 No analytics or tracking
+ 04 No IP Lens lookup proxy
+ 05 Saved data stays on-device
+ 06 No GPS permission
+
+
+
+
+
+
+
+ {ipLensConfig.audiences.map((audience, index) => 0{index + 1} {audience} )}
+
+
+
+
+
+
+
+
{ipLensConfig.releaseStatus}
+
{ipLensConfig.priceText}
+
{ipLensConfig.priceStatus}
+
+
+
+ {ipLensConfig.purchaseIncludes.map((item) => ✓ {item} )}
+
+
+
+
+
+
+
+ {ipLensConfig.faq.map((item, index) => (
+
+ {String(index + 1).padStart(2, "0")} {item.question}
+
+
{item.answer}
+ {index === ipLensConfig.faq.length - 1 &&
Open support
→ }
+
+
+ ))}
+
+
+
+
+
+
native://ios
+
A clearer view of the network.
+
Focused tools, native performance, and no recurring subscription.
+
+
+
+
+
+ );
+}
diff --git a/app/ip-lens/privacy/page.tsx b/app/ip-lens/privacy/page.tsx
new file mode 100644
index 0000000..db0d25f
--- /dev/null
+++ b/app/ip-lens/privacy/page.tsx
@@ -0,0 +1,67 @@
+import type { Metadata } from "next";
+import Link from "next/link";
+import { SiteChrome } from "@/components/landing/SiteChrome";
+import { ipLensConfig } from "@/data/ip-lens";
+
+export const metadata: Metadata = {
+ title: "IP Lens Privacy",
+ description: "Privacy notice for the IP Lens iPhone app.",
+ alternates: { canonical: "/ip-lens/privacy" },
+ openGraph: {
+ title: "IP Lens Privacy | buffer.lol",
+ description: "How IP Lens sends lookup requests and uses third-party data providers.",
+ url: "/ip-lens/privacy",
+ type: "website"
+ }
+};
+
+export default function IPLensPrivacyPage() {
+ return (
+
+
+
+ Home/ IP Lens/ Privacy
+ IP Lens / Privacy
+ Your lookups are yours.
+ IP Lens is a native iPhone networking utility. It has no accounts, advertising, analytics, tracking, attribution SDK, developer-operated backend, or recurring subscription.
+
+ How Lookups Work
+ IP Lens does not operate its own lookup backend. Automatic current-IP lookups and addresses you enter are sent directly from your device to the selected IP data provider. Other network utilities disclose their destination before sending a request.
+
+ Third-Party Providers
+
+ Free IP lookups use {ipLensConfig.providers.freeIPData}. Personal-key mode uses {ipLensConfig.providers.personalIPData}.
+ DNS queries go only to the resolver selected in the app: {ipLensConfig.providers.dns}.
+ Domain, IP, and ASN registration queries use {ipLensConfig.providers.bootstrap} and go directly to the {ipLensConfig.providers.registration}.
+
+ These services receive the submitted query and ordinary connection metadata, including your public source IP, needed to respond. Their handling of that information is governed by their own terms and privacy policies.
+
+ Data Stored on Your iPhone
+ Successful IP lookups enter a history of up to 100 recent unique addresses. Favorites and explicitly saved DNS, RDAP, and batch captures remain in the app's on-device SwiftData store until you delete them. Resolver, API mode, appearance, and onboarding preferences use on-device settings. IP Lens does not use iCloud sync.
+
+ Personal Provider Keys and Exports
+ An optional personal ipwhois.pro API key is stored in Apple Keychain. It is not included in preferences, lookup snapshots, exports, or logs. CSV and JSON exports are prepared locally; IP Lens sends them only to the destination you choose through the iOS share sheet.
+
+ Offline and Location Behavior
+ The IPv4/IPv6 subnet calculator runs entirely on-device. Saved results remain available offline. IP Lens does not request GPS or Core Location permission; map positions come from approximate provider-supplied coordinates.
+
+ Accounts, Ads, and Purchases
+ IP Lens does not require an account and does not include advertisements, subscriptions, or in-app StoreKit purchases. It is planned as a one-time paid App Store download.
+
+ Location Accuracy
+ IP geolocation is approximate. It describes an estimated network location and should not be treated as the exact physical location of a device or person.
+
+ Deletion
+ You can delete individual favorites and saved captures or use Settings → Clear History and Saved Utilities. Removing the app deletes its app-container data. Remove a personal provider key in Settings before uninstalling if you want it explicitly removed from Keychain.
+
+ Contact
+ For privacy questions, email {ipLensConfig.supportEmail} or visit IP Lens support.
+
+ Last Updated
+ July 18, 2026
+ Back to IP Lens
+
+
+
+ );
+}
diff --git a/app/ip-lens/support/page.tsx b/app/ip-lens/support/page.tsx
new file mode 100644
index 0000000..f3da5db
--- /dev/null
+++ b/app/ip-lens/support/page.tsx
@@ -0,0 +1,58 @@
+import type { Metadata } from "next";
+import Link from "next/link";
+import { SiteChrome } from "@/components/landing/SiteChrome";
+import { ipLensConfig } from "@/data/ip-lens";
+
+export const metadata: Metadata = {
+ title: "IP Lens Support",
+ description: "Troubleshooting, bug reports, and feature requests for IP Lens.",
+ alternates: { canonical: "/ip-lens/support" },
+ openGraph: {
+ title: "IP Lens Support | buffer.lol",
+ description: "Get help with IP Lens or send a focused bug report or feature request.",
+ url: "/ip-lens/support",
+ type: "website"
+ }
+};
+
+export default function IPLensSupportPage() {
+ return (
+
+
+
+ Home/ IP Lens/ Support
+ IP Lens / Support
+ Clear reports help.
+ For help with IP Lens, email {ipLensConfig.supportEmail} . A concise description and a few technical details are usually enough to begin.
+
+
+ !
+ Keep sensitive data out of support requests. Do not submit API keys or private, internal, or personally identifying IP information unless it is necessary to explain the problem.
+
+
+ Common Troubleshooting
+
+ Confirm the iPhone has a working internet connection before running an online lookup.
+ Check the address or domain for extra spaces and typing errors.
+ Try the request again after a short delay if a provider is temporarily unavailable.
+ For DNS issues, confirm whether Cloudflare or Quad9 is selected in Settings.
+ Install the latest available IP Lens and iOS updates, then restart the app.
+
+
+ Report a Bug
+ Include what you tried, what you expected, what happened instead, and whether the issue repeats. Add the lookup type and record type when relevant, but redact sensitive targets.
+
+ Version Information
+ In IP Lens, open Settings and note the Version shown under About. Include that value and your iOS version from Settings → General → About. Mention your iPhone model only when it appears relevant to the issue.
+
+ Request a Feature
+ Describe the networking task, the input you start with, and the result you need. A short real-world workflow is more useful than a broad feature name.
+
+ Contact
+ Email IP Lens support
+ Back to IP Lens · Read the privacy notice
+
+
+
+ );
+}
diff --git a/app/layout.tsx b/app/layout.tsx
index 46c0f62..c9ff388 100644
--- a/app/layout.tsx
+++ b/app/layout.tsx
@@ -44,7 +44,7 @@ export default function RootLayout({
children: React.ReactNode;
}>) {
return (
-
+
{children}
diff --git a/app/page.tsx b/app/page.tsx
index e66a753..68cab88 100644
--- a/app/page.tsx
+++ b/app/page.tsx
@@ -1,5 +1,6 @@
import Link from "next/link";
import type { Metadata } from "next";
+import { IPLensPromo } from "@/components/ip-lens/IPLensPromo";
import { HeroTerminal } from "@/components/landing/HeroTerminal";
import { SiteChrome } from "@/components/landing/SiteChrome";
import { ToolCard } from "@/components/tools/ToolCard";
@@ -34,6 +35,8 @@ export default function HomePage() {
+
+
The toolbox
From quick network checks to everyday data transforms. Browser-ready tools stay local; live diagnostics run through a restricted same-origin API.
diff --git a/app/sitemap.ts b/app/sitemap.ts
index 34d0186..96bfc0a 100644
--- a/app/sitemap.ts
+++ b/app/sitemap.ts
@@ -5,14 +5,14 @@ const baseUrl = "https://buffer.lol";
export default function sitemap(): MetadataRoute.Sitemap {
const lastModified = new Date();
- const staticRoutes = ["", "/privacy", "/terms"];
+ const staticRoutes = ["", "/privacy", "/terms", "/ip-lens", "/ip-lens/privacy", "/ip-lens/support"];
return [
...staticRoutes.map((route) => ({
url: `${baseUrl}${route}`,
lastModified,
- changeFrequency: route ? "yearly" as const : "weekly" as const,
- priority: route ? 0.3 : 1
+ changeFrequency: route === "/ip-lens" ? "monthly" as const : route ? "yearly" as const : "weekly" as const,
+ priority: route === "/ip-lens" ? 0.8 : route ? 0.3 : 1
})),
...tools.map((tool) => ({
url: `${baseUrl}/tools/${tool.slug}`,
diff --git a/components/ip-lens/AppScreenshotFrame.tsx b/components/ip-lens/AppScreenshotFrame.tsx
new file mode 100644
index 0000000..f2748f3
--- /dev/null
+++ b/components/ip-lens/AppScreenshotFrame.tsx
@@ -0,0 +1,38 @@
+import Image from "next/image";
+import type { IPLensScreenshot } from "@/data/ip-lens";
+
+export function AppScreenshotFrame({
+ screenshot,
+ featured = false
+}: {
+ screenshot: IPLensScreenshot;
+ featured?: boolean;
+}) {
+ return (
+
+
+ {!screenshot.src &&
}
+ {screenshot.src ? (
+
+ ) : (
+
+
{screenshot.command}
+
+
Screenshot slot
+
{screenshot.label}
+
Add the final app capture in /public/ip-lens/screenshots.
+
+
Ready for artwork
+
+ )}
+
+ {screenshot.command} {screenshot.label}
+
+ );
+}
diff --git a/components/ip-lens/AppStoreCTA.tsx b/components/ip-lens/AppStoreCTA.tsx
new file mode 100644
index 0000000..cdad0ad
--- /dev/null
+++ b/components/ip-lens/AppStoreCTA.tsx
@@ -0,0 +1,30 @@
+import { ipLensConfig } from "@/data/ip-lens";
+
+export function AppStoreCTA({ className = "primary-button" }: { className?: string }) {
+ if (ipLensConfig.appStoreUrl) {
+ return (
+
+ View on the App Store
+ ↗
+
+ );
+ }
+
+ return (
+
+ View on the App Store
+ {ipLensConfig.releaseStatus}
+
+ );
+}
diff --git a/components/ip-lens/IPLensFeatureCard.tsx b/components/ip-lens/IPLensFeatureCard.tsx
new file mode 100644
index 0000000..93f6122
--- /dev/null
+++ b/components/ip-lens/IPLensFeatureCard.tsx
@@ -0,0 +1,16 @@
+import type { IPLensFeature } from "@/data/ip-lens";
+
+export function IPLensFeatureCard({ feature }: { feature: IPLensFeature }) {
+ return (
+
+
+ {feature.command}
+ Included
+
+
+
{feature.title}
+
{feature.description}
+
+
+ );
+}
diff --git a/components/ip-lens/IPLensPromo.tsx b/components/ip-lens/IPLensPromo.tsx
new file mode 100644
index 0000000..b2d318c
--- /dev/null
+++ b/components/ip-lens/IPLensPromo.tsx
@@ -0,0 +1,17 @@
+import Image from "next/image";
+import Link from "next/link";
+import { ipLensConfig } from "@/data/ip-lens";
+
+export function IPLensPromo() {
+ return (
+
+ );
+}
diff --git a/components/landing/SiteChrome.tsx b/components/landing/SiteChrome.tsx
index 2ed352b..9250fbf 100644
--- a/components/landing/SiteChrome.tsx
+++ b/components/landing/SiteChrome.tsx
@@ -1,5 +1,6 @@
import Link from "next/link";
import { ToolLauncher } from "@/components/tools/ToolDiscovery";
+import { ipLensConfig } from "@/data/ip-lens";
type SiteChromeProps = {
children: React.ReactNode;
@@ -20,6 +21,7 @@ export function SiteHeader({ navHomePrefix = "" }: OmitNetworking
IP tools
Developer
+ IP Lens
{docsUrl && Docs }
@@ -33,8 +35,8 @@ export function SiteFooter() {
return (
>_ buffer
.lol Fast, simple networking tools.
- Networking
IP tools
Developer{docsUrl &&
Docs }
-
+ Networking
IP tools
Developer
IP Lens{docsUrl &&
Docs }
+ IP Lens privacy
Support & feature requests{ipLensConfig.appStoreUrl &&
App Store ↗ }
GitHub ↗ Site privacy
Terms
© 2026 buffer.lol Built for the curious.
);
diff --git a/data/ip-lens.ts b/data/ip-lens.ts
new file mode 100644
index 0000000..f56b92e
--- /dev/null
+++ b/data/ip-lens.ts
@@ -0,0 +1,173 @@
+export type IPLensScreenshot = {
+ id: string;
+ label: string;
+ command: string;
+ alt: string;
+ src: string | null;
+ width: number;
+ height: number;
+};
+
+export type IPLensFeature = {
+ command: string;
+ title: string;
+ description: string;
+};
+
+export const ipLensConfig = {
+ appName: "IP Lens",
+ platform: "iPhone",
+ minimumOS: "iOS 17 or later",
+ supportedPlatforms: ["iPhone running iOS 17 or later"],
+ appIcon: "/ip-lens/app-icon.png",
+ releaseStatus: "Coming soon",
+ appStoreUrl: null as string | null,
+ priceText: "$4.99 one-time purchase",
+ priceStatus: "Planned App Store price · USD",
+ supportEmail: "support@buffer.lol",
+ providers: {
+ ipData: "ipwho.is / ipwhois.pro",
+ freeIPData: "ipwho.is",
+ personalIPData: "ipwhois.pro",
+ dns: "Cloudflare or Quad9",
+ registration: "authoritative RDAP registry",
+ bootstrap: "IANA bootstrap data"
+ },
+ badges: ["No ads", "No subscription", "Native SwiftUI", "iOS 17+", "One-time purchase"],
+ screenshots: [
+ {
+ id: "ip-lookup",
+ label: "IP Lookup",
+ command: "whois",
+ alt: "IP Lens IP Lookup screen showing an IPv4 result with approximate location and map",
+ src: "/ip-lens/screenshots/iplookup.png",
+ width: 1206,
+ height: 2622
+ },
+ {
+ id: "dns-records",
+ label: "DNS Records",
+ command: "dig",
+ alt: "IP Lens DNS Lookup screen showing a Cloudflare query and returned A records",
+ src: "/ip-lens/screenshots/dnsrecords.png",
+ width: 1206,
+ height: 2622
+ },
+ {
+ id: "batch-lookup",
+ label: "Batch Lookup",
+ command: "batch",
+ alt: "IP Lens Batch Lookup screen showing organized results for multiple public and reserved addresses",
+ src: "/ip-lens/screenshots/batchlookup.png",
+ width: 1206,
+ height: 2622
+ },
+ {
+ id: "subnet-calculator",
+ label: "Subnet Calculator",
+ command: "cidr",
+ alt: "IP Lens Subnet Calculator screen showing an offline IPv4 CIDR calculation",
+ src: "/ip-lens/screenshots/subnetcalc.png",
+ width: 1206,
+ height: 2622
+ }
+ ] satisfies readonly IPLensScreenshot[],
+ features: [
+ {
+ command: "whois",
+ title: "IP intelligence",
+ description:
+ "View approximate location, ASN, ISP, organization, timezone, and network details for public IPv4 and IPv6 addresses."
+ },
+ {
+ command: "dig",
+ title: "DNS records",
+ description:
+ "Inspect A, AAAA, CNAME, MX, NS, TXT, and PTR records through your selected DNS-over-HTTPS resolver."
+ },
+ {
+ command: "batch",
+ title: "Batch lookup",
+ description: "Analyze up to 50 IP addresses in one organized workflow."
+ },
+ {
+ command: "rdap",
+ title: "Registration data",
+ description:
+ "Review domain, IP, and ASN registration data directly from the authoritative RDAP registry."
+ },
+ {
+ command: "cidr",
+ title: "Subnet calculator",
+ description:
+ "Calculate IPv4 and IPv6 networks, address ranges, masks, prefixes, and capacity entirely offline."
+ },
+ {
+ command: "ptr",
+ title: "Reverse DNS",
+ description: "Look up the hostname associated with an IP address when one is published."
+ },
+ {
+ command: "save",
+ title: "Offline results",
+ description: "Keep lookup history, favorites, and saved DNS, RDAP, and batch captures available on-device."
+ },
+ {
+ command: "export",
+ title: "Local export",
+ description: "Prepare CSV or JSON files locally, then choose where to share them with the iOS share sheet."
+ }
+ ] satisfies readonly IPLensFeature[],
+ audiences: [
+ "Developers",
+ "Network administrators",
+ "IT students",
+ "Homelab users",
+ "Website owners",
+ "Curious users"
+ ],
+ purchaseIncludes: [
+ "Pay once",
+ "All included tools",
+ "Future maintenance updates",
+ "No advertisements",
+ "No account required"
+ ],
+ faq: [
+ {
+ question: "Does IP Lens require an account?",
+ answer: "No. IP Lens does not require an account."
+ },
+ {
+ question: "Does IP Lens have advertisements?",
+ answer: "No. The app does not contain advertisements."
+ },
+ {
+ question: "Is IP Lens a subscription?",
+ answer: "No. IP Lens is intended to be a one-time App Store purchase."
+ },
+ {
+ question: "Does it work without an internet connection?",
+ answer:
+ "New IP, DNS, reverse DNS, and registration lookups require a connection. Saved captures and the IPv4/IPv6 subnet calculator work offline."
+ },
+ {
+ question: "Where does lookup data come from?",
+ answer:
+ "Free IP lookups use ipwho.is, while personal-key mode uses ipwhois.pro. DNS queries go only to the selected Cloudflare or Quad9 resolver. Registration queries go directly to the authoritative RDAP registry selected with IANA bootstrap data."
+ },
+ {
+ question: "Is IP geolocation exact?",
+ answer:
+ "No. IP geolocation is an estimate and may not represent a device's physical position."
+ },
+ {
+ question: "Which Apple devices are supported?",
+ answer: "IP Lens supports iPhone models running iOS 17 or later. iPad and Mac layouts are not part of version 1.0."
+ },
+ {
+ question: "How can I request a feature or report a problem?",
+ answer: "Use the IP Lens support page for reporting details and contact information."
+ }
+ ]
+} as const;
diff --git a/public/ip-lens/app-icon.png b/public/ip-lens/app-icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..5d7425f970c8e1b861bdb6ff310c796b2875387b
GIT binary patch
literal 1164981
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
z
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