/* FriendlyPhotons — Marketing site REDESIGN · sections part 2. */ // ── CONTRIBUTE + METER GUIDE ───────────────────────────────────────────────── const RMETERS = [ { brand: "AlphaLab", model: "TriField TF2", price: "~$170–$190", tags: ["AC Magnetic", "AC Electric", "RF"], best: "Quick diagnostics and before/after comparisons. One of the few true tri-mode consumer meters.", url: "https://www.trifield.com" }, { brand: "Cornet Microsystems", model: "ED88TPlus / ED85EXPlus", price: "~$200–$260", tags: ["RF 100MHz–8GHz", "AC Magnetic", "AC Electric"], best: "Identifying RF sources — Wi-Fi, cell, DECT. Includes numeric frequency readout.", url: "https://cornetmicro.com" }, { brand: "GQ Electronics", model: "EMF-390", price: "~$140–$170", tags: ["RF 50MHz–10GHz", "AC Magnetic", "Data logging"], best: "Trending and field surveys. Data logging and USB export for long-term observation.", url: "https://www.gqelectronicsllc.com" }, { brand: "Latnex", model: "MG-300 / AF-3500", price: "~$40–$70", tags: ["AC Magnetic (ELF)"], best: "Best entry-level option for power lines, appliances, and breaker panels.", url: "https://www.latnex.com" }, { brand: "TES", model: "TES-1393", price: "~$180–$230", tags: ["RF 50MHz–3.5GHz"], best: "Wi-Fi and cellular density checks. Stable readings from a respected manufacturer.", url: "https://www.tes.com.tw" }, ]; function RContribute() { const [open, setOpen] = React.useState(false); return (

Start with a meter.

Contributing takes one piece of gear: an EMF meter. There's no official device — but any of these widely available consumer meters will get you started and on the map.

{RMETERS.map(m => (
{m.brand}
{m.model}
{m.price}
{m.tags.map(t => {t})}

{m.best}

Visit site →
))}

FriendlyPhotons does not manufacture, sell, or endorse hardware. Prices are approximate.

); } // ── QS BAND ────────────────────────────────────────────────────────────────── function RQS() { const pillars = [["01","Visibility","That's FriendlyPhotons"],["02","Behavior change","Informed choices"],["03","Trust & certification","For organizations"],["04","Research & policy","The long game"]]; return (

This is about
more than one app.

FriendlyPhotons is part of the Quantum Spaces Project — a broader effort to make electromagnetic environments measurable, understandable and actionable.

Every reading is a small act of collective intelligence.

Learn about Quantum Spaces →
{pillars.map(([n,t,s]) =>
{n}{t}{s}
)}
); } // ── FINAL CTA ──────────────────────────────────────────────────────────────── function RFinal({ onDownload }) { return (

The invisible world is waiting to be seen.

Explore right now — no meter required. Download the app, find your neighborhood, and see what the community has already discovered.

Available on iOS · Android coming soon

); } // ── INSIDE THE APP — static product showcase ───────────────────────────────── function RShowcase() { const shots = [ { img: "shot-map.png?v=2", index: "01 · Explore", label: "See what's around you", desc: "Every rated space nearby, color-coded from quiet to blaring." }, { img: "shot-card.png", index: "02 · Read", label: "Read the rating", desc: "One score from 1 to 5 — with the readings and notes behind it." }, { img: "shot-add.png", index: "03 · Contribute", label: "Add a reading", desc: "Contributors log what their meter shows, and the map grows." }, ]; return (
Inside the app

From map to meter, one calm place.

Find a space, read its rating, or add what your own meter sees. No physics degree required.

{shots.map(s => (
{s.label}
{s.index} {s.label}

{s.desc}

))}
); } // ── RATING SCALE (folded into RAnswer) ─────────────────────────────────────── Object.assign(window, { RContribute, RQS, RFinal, RShowcase }); // ── JOURNEY — follow one reading from meter to map to conversation ─────────── function JSketch({ className }) { return ( ); } function RJourney({ variant = "bands", rating = "noisy" }) { const RJ = ({ quiet: { level: 1, label: "Quiet" }, audible: { level: 2, label: "Audible" }, noisy: { level: 3, label: "Noisy" }, loud: { level: 4, label: "Loud" }, blaring: { level: 5, label: "Blaring" } })[rating] || { level: 3, label: "Noisy" }; const steps = [ { img: "journey-1-measure.png", h: "Take a reading", p: "A FriendlyPhotons contributor measures the electromagnetic radiation — ELF & RF — right where they stand: a home, a school, a park, anywhere in between." }, { img: "journey-2-record-" + rating + ".png?v=hi", h: "It becomes the record", p: "The reading joins that place's record — a single rating, with the detailed numbers, photos, and comments behind it." }, { img: "journey-3-map.png?v=5", h: "It lands on the map", p: "Live for everyone to see. Check your neighborhood for cell towers, your child's school, or the hotel you're booking." }, { img: "journey-4-community-" + rating + ".png?v=r1", h: "The community weighs in", p: "Corroborate a reading, share what you know, and hunt down the source together." }, ]; const head = (

One reading at a time.

Follow a single measurement from a contributor's meter to the map.

); const Copy = ({ i, side }) => (
{i + 1}

{steps[i].h}

{steps[i].p}

); const Phone = ({ i }) => (
{steps[i].h}
); if (variant === "stack") { return (
{head}
{steps.map((s, i) => (
{s.h}
Step 0{i + 1}

{s.h}

{s.p}

))}
); } if (variant === "bands") { return (
{head}
); } return (
{head}
{steps.map((s, i) => (
{i < 3 && (variant === "sharpie" ? ( ) : ( ))}
{s.h}
{i + 1}

{s.h}

{s.p}

))}
); } window.RJourney = RJourney;