Step 1 of 3 — permissions
Before we start
This tool asks for three things. Camera and motion are required for the live compass view; location is entirely optional.
Camera. Shows the Vastu grid over your room. Video stays on your device. It is never uploaded or recorded.
Motion & orientation. Reads your phone's compass to see which way you face. Stays on your device.
Location. Turns magnetic north into true north for where you are (World Magnetic Model 2025). Used only if you tick the box below or tap sun calibration. Without either, the compass reads relative to magnetic north. Your location is used for that one request and not stored.
Step 2 of 3 — live view
Your reading
Waiting for a compass reading or your manual North entry. Saved readings remain available below.
Step 3 of 3 — optional
Calibrate using the sun
This optional step requests a fresh location and a two-second sensor hold. With usable reported degree accuracy, it computes an assistive solar offset from your location, heading and time. Keep the same screen orientation while aiming. Devices that report only an accuracy class cannot use this step. The result does not verify device alignment or replace a physical survey.
Optional — hands-free showcase
Demo mode
Cycles simulated headings through all 8 directions every 2.5 seconds, so the compass, zone, and remedies panels update on their own — useful for a hands-free walkthrough. Demo readings are labeled as simulated. Saving stays off until you enter a direction or a new sensor reading arrives.
Optional — room scan
Place room remedies on the floor
On supported Android Chrome, trace the outline and named rooms by tapping floor corners, then face a direction you already know is north and hold the north button. Finish keeps the camera session open: room outlines, an 8/16-sector direction guide, numbered placement notes and remedy pins appear on the scanned floor with a score chip. Close AR to read the complete advice and its sources on the same north-up plan. Your phone tracks the positions; north is where you set it. Treat this as a zoning sketch, not a survey. Placement rules and modern remedy conventions keep their own source labels; a remedy is not a promise of benefit.
The camera scan requires WebXR floor hit testing and touch controls. iPhone and other unsupported devices can open a saved scan as the 2D remedy plan below. Closing the camera or losing its tracking origin requires a fresh scan before placing remedies again.
The example is a drawn plan. Saved scans keep the north direction entered when they were captured. To draw a different plan, use the plan tracer.
Optional — headset
See these zones in VR
On a WebXR headset this draws the same eight-zone grid around you: a labelled band at eye level and a mandala on the floor, from the same zone table the compass above uses. A headset has no compass, so this view measures nothing — it opens with north placed along the direction you were facing, and you press the controller trigger while facing a direction you already know is north to line it up. Zone boundaries follow Brihat Samhita Ch.53 (Iyer 1884) and Manasara Ch.38 (Acharya 1933); the deity, element and room guidance is Vedika convention, not a cited verse. This panel stays hidden on browsers without immersive-vr support.
For developers
Embed this on your own page
Three ways to drop the AR compass into a page you own — documented in js/vastu/vastu-ar-embed.js, which this page's own widget is built on.
1. Data-attribute auto-mount — no JavaScript required on your page beyond the one script tag. Geolocation stays off unless you set data-vedika-auto-geolocate="true" explicitly.
<div data-vedika-widget="vastu-ar"
data-vedika-zone-resolution="8"
data-vedika-auto-geolocate="false"></div>
<script type="module"
src="https://vedika.io/js/vastu/vastu-ar-embed.js"></script>
2. Explicit mount — call it yourself, e.g. from a click handler.
<div id="vastu-ar"></div>
<script type="module">
import { mountVastuAR } from 'https://vedika.io/js/vastu/vastu-ar-embed.js';
const widget = mountVastuAR(document.getElementById('vastu-ar'), {
onZoneChange(zone, meta) { console.log(zone.code, meta.bearingDeg); },
});
// widget.start() from inside a click/tap handler — camera + motion
// permissions require a real user gesture.
</script>
3. Iframe embed — this whole guided page, framed.
<iframe
src="https://vedika.io/vastu-ar/"
allow="camera; gyroscope; accelerometer; magnetometer; geolocation"
style="width:100%;height:640px;border:0"
></iframe>
Permissions-Policy caveat: the iframe's allow= attribute grants permission from the parent's side, but it is not sufficient by itself — your own page's Permissions-Policy response header must also not block the framed origin (e.g. Permissions-Policy: camera=(self) with no allowance for vedika.io silently blocks the iframe's camera access, with no console error naming the header). If camera/motion don't work inside your embed, check your own response headers first.
No API key is ever accepted by this embed surface — it runs against the free keyless sandbox, or point apiBase at a server-side proxy you own for keyed accuracy. See vastu-ar-embed.js's header comment for the full reasoning.