SINK & FAUCET PLANNER — AI URL GUIDE Tool: https://www.lejnel.com/tools/sink-faucet/ Query parameter: layout LINK CREATION Serialize the state as compact JSON and percent-encode it ONCE as the named query parameter. Do not use Base64. JavaScript: encodeURIComponent(JSON.stringify(state)); Python: urllib.parse.quote(json.dumps(state,separators=(',',':')),safe=''). Encode Unicode, &, #, +, % and other reserved characters. Return a clickable URL and summarize inputs and assumptions. Ask about missing inputs; do not invent measurements or product requirements. All JSON numbers must be finite, with decimal points and no unit suffixes. SAVING The complete URL stores the inputs, not a server-side account record. Open the link and check every input. Bookmark or copy the updated URL after edits to retain that version. Anyone with the link can read its contents; avoid personal data. Results are recalculated on reopening and may change with future tool improvements. Print a fixed record when necessary. STATE EXAMPLE (illustrative only) { "topWidth": 1200, "topDepth": 635, "sinkWidth": 600, "sinkDepth": 450, "sinkLeft": 300, "sinkRear": 150, "inset": 10, "base": 50, "hole": 35, "gap": 30, "offset": 0, "rearMin": 65, "reach": 200, "reference": "centre", "extras": [ { "type": "soap", "x": 700, "y": 95, "base": 45, "hole": 25, "reach": 120, "rearMin": 0 } ] } FIELDS AND LIMITATIONS Every length is in MILLIMETRES, even when the user chooses imperial display. Convert inches × 25.4 and feet × 304.8 before generating the URL. The inputs below are required except extras (defaults to []). topWidth, topDepth: countertop width left-to-right and depth back-to-front. sinkWidth, sinkDepth: OUTSIDE sink rim dimensions, not bowl dimensions. sinkLeft, sinkRear: position of outside sink left/back edges from countertop left/back. inset: cutout inset on EACH side; must be less than half both sink dimensions. Use actual product template values. base: main faucet visible base diameter. hole: main faucet mounting-hole diameter. These are NOT the same measurement. gap: sink outside rear rim to nearest main faucet base edge. offset: horizontal main faucet offset from sink centre; positive right, negative left. rearMin: minimum rear clearance per product instructions. reference: "centre" = clearance from back to mounting centre, "edge" = back to rear edge of base. The reference IKEA illustration uses 65 mm to the centre; do not apply this to other models without confirmation. reach: HORIZONTAL mounting-centre to outlet-tip distance, not height or curved spout length. Legacy links missing reach use a 200 mm example; always specify it in new links. extras: up to 5 objects. Each requires type ("soap", "hot", "faucet"), x (centre from left), y (centre from back), base (diameter), hole (diameter), reach and rearMin (back to centre requirement). 0 rearMin means unspecified, not a verified acceptable clearance. All lengths are nonnegative except offset. Absolute values at most 6000. Countertop, sink, base and hole dimensions must be positive. Extra base/hole must also be positive. Do not invent fixture positions. Ask where each should sit. Main faucet centre: x=sinkLeft+sinkWidth/2+offset; y=sinkRear-gap-base/2. Tip y=y+reach. All spouts point towards the front. Extra coordinates are absolute. The tool warns about overlaps, out-of-bounds fixtures and some clearance issues. Bowl opening is approximated by the rectangular cutout; handles, stream angle, mounting parts and cabinet structure are not modelled. The diagram is not a drilling template. Keep decoded state under 6000 characters. READY-TO-OPEN EXAMPLE https://www.lejnel.com/tools/sink-faucet/?layout=%7B%22topWidth%22%3A1200%2C%22topDepth%22%3A635%2C%22sinkWidth%22%3A600%2C%22sinkDepth%22%3A450%2C%22sinkLeft%22%3A300%2C%22sinkRear%22%3A150%2C%22inset%22%3A10%2C%22base%22%3A50%2C%22hole%22%3A35%2C%22gap%22%3A30%2C%22offset%22%3A0%2C%22rearMin%22%3A65%2C%22reach%22%3A200%2C%22reference%22%3A%22centre%22%2C%22extras%22%3A%5B%7B%22type%22%3A%22soap%22%2C%22x%22%3A700%2C%22y%22%3A95%2C%22base%22%3A45%2C%22hole%22%3A25%2C%22reach%22%3A120%2C%22rearMin%22%3A0%7D%5D%7D