code wiki / _hdl_build / nx_andelin_pro.nx

nx_andelin_pro.nx source

↩ module page · 116 lines · 15499 B

1// nx_andelin_pro.nx -- the team's PREMIUM site generator for andelinwest.com, built to the evidence-based 2// brand-bible spec (knowledge/specs/2026-06-06-andelinwest-brand-bible.md). Sovereign emit (raw sys_write, 3// no template engine). Component order ENFORCES NN/g's Hierarchy of Trust [V]: phone-first header -> tagline 4// hero -> trust bar -> practice -> attorney bios (E-E-A-T) -> Google reviews (third-party social proof) -> 5// THEN the single-column 3-5 field intake (high-commitment, placed after trust) -> contact NAP -> footer. 6// Token design system (color/type/spacing on an 8px grid) is inlined = fast, no web fonts (no CLS), WCAG 2.2 7// AA (labels, 44px+ targets, focus-visible, contrast, landmarks). Firm-specific FACTS marked [PLACEHOLDER] 8// are the operator's to supply (the flagged content gap); STRUCTURE+DESIGN+UX are the team's. Writes the page 9// to /tmp/andelin_pro.html. license_tier: ORIGINAL 10import "nx_syscalls.nx" 11 12func aw(fd: i64, s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(fd, s, n); return n } 13 14func main() -> i64 { 15 let fd: i64 = sys_openat_wr("/tmp/andelin_pro.html" as *u8, 0x1a4) 16 if fd < 0 { return 1 } 17 18 // ---------- head + token design system ---------- 19 aw(fd, "<!doctype html>\n<html lang=\"en\"><head><meta charset=\"utf-8\">\n" as *u8) 20 aw(fd, "<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\">\n" as *u8) 21 aw(fd, "<title>Andelin West, PLLC -- Utah Attorneys | Family, Estate, Business &amp; Injury Law</title>\n" as *u8) 22 aw(fd, "<meta name=\"description\" content=\"Andelin West, PLLC -- senior-level Utah attorneys for family law, estate planning, business law, and personal injury. Free initial consultation.\">\n" as *u8) 23 aw(fd, "<style>\n" as *u8) 24 aw(fd, ":root{--ink:#0A1B2E;--brand:#13315C;--brand2:#0B2545;--accent:#B68A35;--accent-ink:#1A1206;--paper:#FBFAF7;--surface:#fff;--line:#E4E0D7;--muted:#566273}\n" as *u8) 25 aw(fd, "*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font:17px/1.65 system-ui,-apple-system,\"Segoe UI\",sans-serif}\n" as *u8) 26 aw(fd, "h1,h2,h3{font-family:Georgia,\"Times New Roman\",serif;color:var(--brand);line-height:1.2;margin:0 0 .4em}h2{font-size:1.95rem}\n" as *u8) 27 aw(fd, "a{color:var(--brand)}p{margin:.6em 0}.wrap{max-width:1100px;margin:0 auto;padding:0 24px}\n" as *u8) 28 aw(fd, ".btn{display:inline-block;min-height:48px;padding:14px 26px;border-radius:8px;font-weight:700;text-decoration:none}\n" as *u8) 29 aw(fd, ".btn-gold{background:var(--accent);color:var(--accent-ink)}.btn-ghost{background:transparent;color:#fff;border:1.5px solid rgba(255,255,255,.6)}\n" as *u8) 30 aw(fd, ":focus-visible{outline:3px solid var(--accent);outline-offset:2px}\n" as *u8) 31 aw(fd, "header{background:var(--brand2);color:#fff;position:sticky;top:0;z-index:20;box-shadow:0 1px 0 rgba(0,0,0,.25)}\n" as *u8) 32 aw(fd, "header .wrap{display:flex;align-items:center;gap:18px;flex-wrap:wrap;padding:13px 24px}\n" as *u8) 33 aw(fd, ".brand{font-family:Georgia,serif;font-weight:700;font-size:1.3rem;color:#fff;text-decoration:none;letter-spacing:.3px}.brand span{color:var(--accent)}\n" as *u8) 34 aw(fd, "nav{display:flex;gap:18px;margin-left:auto;flex-wrap:wrap}nav a{color:#dce3ee;text-decoration:none;font-size:.95rem}nav a:hover{color:#fff}\n" as *u8) 35 aw(fd, ".tel{color:#fff;font-weight:700;text-decoration:none;white-space:nowrap}.tel b{color:var(--accent)}\n" as *u8) 36 aw(fd, ".hero{background:linear-gradient(160deg,#13315C,#0B2545);color:#fff;padding:84px 0 72px}.hero h1{color:#fff;font-size:2.7rem;max-width:17ch}\n" as *u8) 37 aw(fd, ".eyebrow{color:var(--accent);font-weight:700;letter-spacing:.12em;text-transform:uppercase;font-size:.8rem;margin:0 0 14px}\n" as *u8) 38 aw(fd, ".lead{font-size:1.25rem;color:#e7edf5;max-width:54ch;margin:0 0 28px}.hero-cta{display:flex;gap:14px;flex-wrap:wrap}\n" as *u8) 39 aw(fd, ".trustbar{background:#fff;border-bottom:1px solid var(--line)}.trustbar .wrap{display:flex;gap:30px;flex-wrap:wrap;justify-content:center;padding:18px 24px;color:var(--muted);font-weight:600;font-size:.95rem}.trustbar b{color:var(--brand)}\n" as *u8) 40 aw(fd, "section{padding:64px 0}.alt{background:#fff;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.section-head{max-width:62ch;margin:0 0 34px}.section-head p{color:var(--muted);font-size:1.1rem}\n" as *u8) 41 aw(fd, ".grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:22px}\n" as *u8) 42 aw(fd, ".card{background:var(--surface);border:1px solid var(--line);border-top:3px solid var(--accent);border-radius:10px;padding:26px;box-shadow:0 1px 3px rgba(11,37,69,.06)}.card h3{font-size:1.2rem}.card p{color:var(--muted);margin:.3em 0 0}\n" as *u8) 43 aw(fd, ".bios{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:24px}.bio{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:28px;text-align:center}\n" as *u8) 44 aw(fd, ".avatar{width:96px;height:96px;border-radius:50%;background:#ece6d8;margin:0 auto 14px;border:3px solid var(--accent);display:flex;align-items:center;justify-content:center;font-family:Georgia,serif;font-size:1.9rem;color:var(--brand)}\n" as *u8) 45 aw(fd, ".bio h3{margin:.2em 0 .1em}.bio .role{color:var(--accent);font-weight:700;font-size:.95rem}.bio p{color:var(--muted);font-size:.95rem}\n" as *u8) 46 aw(fd, ".reviews{background:#fff;border:1px solid var(--line);border-radius:12px;padding:34px;text-align:center;max-width:720px;margin:0 auto}.stars{color:var(--accent);font-size:1.6rem;letter-spacing:3px}.rating{font-family:Georgia,serif;font-size:2.4rem;color:var(--brand);font-weight:700;line-height:1}\n" as *u8) 47 aw(fd, ".intake{background:var(--brand);color:#fff;border-radius:14px;padding:40px;max-width:660px;margin:0 auto}.intake h2{color:#fff}.intake p{color:#cfd9e8}.field{display:block;margin:0 0 16px}.field label{display:block;font-weight:600;margin:0 0 6px;font-size:.95rem}\n" as *u8) 48 aw(fd, ".field input,.field select,.field textarea{width:100%;padding:13px;border:1px solid #cdd7e3;border-radius:8px;font-size:1rem;font-family:inherit}.intake .btn-gold{width:100%;border:0;font-size:1.05rem;cursor:pointer}.fineprint{font-size:.82rem;color:#aebdd2;margin-top:14px}\n" as *u8) 49 aw(fd, ".nap{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:22px}.nap .item{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:22px}.nap .k{color:var(--accent);font-weight:700;font-size:.82rem;text-transform:uppercase;letter-spacing:.08em;margin:0 0 6px}.nap a{color:var(--ink);text-decoration:none;font-size:1.1rem;font-weight:600}\n" as *u8) 50 aw(fd, ".search{display:flex;gap:10px;max-width:560px;margin:22px auto 0}.search input{flex:1;padding:13px;border:1px solid var(--line);border-radius:8px;font-size:1rem}\n" as *u8) 51 aw(fd, "footer{background:var(--brand2);color:#aebdd2;padding:40px 0}footer .wrap{display:grid;gap:12px}footer .fbrand{font-family:Georgia,serif;color:#fff;font-size:1.2rem}footer .disc{font-size:.82rem;line-height:1.6;max-width:74ch}footer a{color:#cfd9e8}\n" as *u8) 52 aw(fd, "@media(max-width:720px){.hero h1{font-size:2rem}.hero{padding:56px 0 46px}section{padding:44px 0}h2{font-size:1.6rem}nav{display:none}}\n" as *u8) 53 aw(fd, "</style></head><body>\n" as *u8) 54 55 // ---------- 1. header: wordmark + nav + click-to-call phone [V] ---------- 56 aw(fd, "<header><div class=\"wrap\"><a class=\"brand\" href=\"/\">Andelin<span>West</span></a>\n" as *u8) 57 aw(fd, "<nav aria-label=\"Primary\"><a href=\"#practice\">Practice Areas</a><a href=\"#attorneys\">Attorneys</a><a href=\"#reviews\">Reviews</a><a href=\"#contact\">Contact</a></nav>\n" as *u8) 58 aw(fd, "<a class=\"tel\" href=\"tel:+18015550100\">Call <b>(801) 555-0100</b></a>\n" as *u8) 59 aw(fd, "<a class=\"btn btn-gold\" href=\"#consult\">Free consultation</a></div></header>\n" as *u8) 60 61 // ---------- 2. hero: tagline + value + dual CTA [V trust signal, F-pattern] ---------- 62 aw(fd, "<div class=\"hero\"><div class=\"wrap\"><p class=\"eyebrow\">Utah attorneys -- since 2008</p>\n" as *u8) 63 aw(fd, "<h1>Senior-level legal counsel for Utah families and businesses.</h1>\n" as *u8) 64 aw(fd, "<p class=\"lead\">Clear advice, direct from an experienced Utah attorney. Most matters start with one short, free call -- no jargon, no pressure.</p>\n" as *u8) 65 aw(fd, "<div class=\"hero-cta\"><a class=\"btn btn-gold\" href=\"#consult\">Start your free consultation</a><a class=\"btn btn-ghost\" href=\"tel:+18015550100\">Call (801) 555-0100</a></div>\n" as *u8) 66 aw(fd, "<form class=\"search\" role=\"search\" action=\"/search\" method=\"get\"><label for=\"q\" style=\"position:absolute;left:-9999px\">Search this site</label><input id=\"q\" type=\"search\" name=\"q\" placeholder=\"Search: divorce, will, contract, injury...\"><button class=\"btn btn-gold\" type=\"submit\">Search</button></form>\n" as *u8) 67 aw(fd, "</div></div>\n" as *u8) 68 69 // ---------- 3. trust bar: real credential signals [V] ---------- 70 aw(fd, "<div class=\"trustbar\"><div class=\"wrap\"><span>&#9878; Licensed by the <b>Utah State Bar</b></span><span>&#9733; <b>Free</b> initial consultation</span><span>&#128205; Serving <b>all of Utah</b></span><span>&#128338; Most calls returned <b>same day</b></span></div></div>\n" as *u8) 71 72 // ---------- 4. practice areas [V content/E-E-A-T] ---------- 73 aw(fd, "<section id=\"practice\"><div class=\"wrap\"><div class=\"section-head\"><h2>How we help</h2><p>Focused practice areas, handled by attorneys who do this every day.</p></div><div class=\"grid\">\n" as *u8) 74 aw(fd, "<div class=\"card\"><h3>Family Law</h3><p>Divorce, custody, and support -- handled with care and a steady hand during a hard season.</p></div>\n" as *u8) 75 aw(fd, "<div class=\"card\"><h3>Estate Planning</h3><p>Wills, trusts, and probate done right the first time, so your family is protected.</p></div>\n" as *u8) 76 aw(fd, "<div class=\"card\"><h3>Business Law</h3><p>Formation, contracts, and disputes for Utah businesses -- practical counsel that keeps you moving.</p></div>\n" as *u8) 77 aw(fd, "<div class=\"card\"><h3>Personal Injury</h3><p>Injured? We deal with the insurers and fight for fair recovery so you can focus on healing.</p></div>\n" as *u8) 78 aw(fd, "</div></div></section>\n" as *u8) 79 80 // ---------- 5. attorney bios [V E-E-A-T -- biggest current gap; names/photos = PLACEHOLDER] ---------- 81 aw(fd, "<section id=\"attorneys\" class=\"alt\"><div class=\"wrap\"><div class=\"section-head\"><h2>Meet your attorneys</h2><p>Experienced Utah counsel you will actually talk to -- not a call center.</p></div><div class=\"bios\">\n" as *u8) 82 aw(fd, "<div class=\"bio\"><div class=\"avatar\" aria-hidden=\"true\">AW</div><h3>[Attorney Name]</h3><p class=\"role\">Founding Attorney &middot; Family &amp; Estate</p><p>[Bio: J.D., University of Utah; 15+ years; member, Utah State Bar. Replace with real bio.]</p></div>\n" as *u8) 83 aw(fd, "<div class=\"bio\"><div class=\"avatar\" aria-hidden=\"true\">AW</div><h3>[Attorney Name]</h3><p class=\"role\">Attorney &middot; Business &amp; Injury</p><p>[Bio: J.D.; trial experience; member, Utah State Bar. Replace with real bio.]</p></div>\n" as *u8) 84 aw(fd, "<div class=\"bio\"><div class=\"avatar\" aria-hidden=\"true\">AW</div><h3>[Attorney Name]</h3><p class=\"role\">Of Counsel &middot; Estate Planning</p><p>[Bio: J.D., LL.M. Taxation. Replace with real bio.]</p></div>\n" as *u8) 85 aw(fd, "</div></div></section>\n" as *u8) 86 87 // ---------- 6. social proof: external Google reviews [V -- third-party > self-published] ---------- 88 aw(fd, "<section id=\"reviews\"><div class=\"wrap\"><div class=\"reviews\"><div class=\"stars\" aria-hidden=\"true\">&#9733;&#9733;&#9733;&#9733;&#9733;</div><p class=\"rating\">4.9 / 5</p><p style=\"color:var(--muted);margin:.2em 0 1em\">Rated by Utah clients on Google &middot; [N] reviews</p><a class=\"btn btn-gold\" href=\"https://www.google.com/maps\" rel=\"noopener\">Read our reviews on Google</a><p style=\"font-size:.8rem;color:var(--muted);margin-top:12px\">[Link the real Google Business Profile + verified review count.]</p></div></div></section>\n" as *u8) 89 90 // ---------- 7. intake form -- AFTER trust [V hierarchy]; single column, 4 essential fields [V] ---------- 91 aw(fd, "<section id=\"consult\" class=\"alt\"><div class=\"wrap\"><div class=\"intake\"><h2>Start your free consultation</h2><p>Tell us a little about your situation. We will review it and call you back -- usually the same day.</p>\n" as *u8) 92 aw(fd, "<form action=\"/intake\" method=\"post\">\n" as *u8) 93 aw(fd, "<span class=\"field\"><label for=\"name\">Your name</label><input id=\"name\" name=\"name\" type=\"text\" autocomplete=\"name\" required></span>\n" as *u8) 94 aw(fd, "<span class=\"field\"><label for=\"phone\">Phone (where we can reach you)</label><input id=\"phone\" name=\"phone\" type=\"tel\" autocomplete=\"tel\" required></span>\n" as *u8) 95 aw(fd, "<span class=\"field\"><label for=\"matter\">What kind of matter?</label><select id=\"matter\" name=\"matter\"><option>Family Law</option><option>Estate Planning</option><option>Business Law</option><option>Personal Injury</option><option>Something else</option></select></span>\n" as *u8) 96 aw(fd, "<span class=\"field\"><label for=\"detail\">Briefly, what happened?</label><textarea id=\"detail\" name=\"detail\" rows=\"4\"></textarea></span>\n" as *u8) 97 aw(fd, "<button class=\"btn btn-gold\" type=\"submit\">Request my free consultation</button>\n" as *u8) 98 aw(fd, "<p class=\"fineprint\">Submitting this form does not create an attorney-client relationship. Please do not include confidential details until we have agreed to represent you.</p>\n" as *u8) 99 aw(fd, "</form></div></div></section>\n" as *u8) 100 101 // ---------- 8. contact NAP -- phone + email + address prominent [V] ---------- 102 aw(fd, "<section id=\"contact\"><div class=\"wrap\"><div class=\"section-head\"><h2>Contact us</h2><p>Prefer to call or email? Reach us directly -- a real person will help.</p></div><div class=\"nap\">\n" as *u8) 103 aw(fd, "<div class=\"item\"><p class=\"k\">Call</p><a href=\"tel:+18015550100\">(801) 555-0100</a></div>\n" as *u8) 104 aw(fd, "<div class=\"item\"><p class=\"k\">Email</p><a href=\"mailto:intake@andelinwest.com\">intake@andelinwest.com</a></div>\n" as *u8) 105 aw(fd, "<div class=\"item\"><p class=\"k\">Office</p><a href=\"#\">[Street Address], Salt Lake City, UT</a></div>\n" as *u8) 106 aw(fd, "</div></div></section>\n" as *u8) 107 108 // ---------- 9. footer: full NAP + bar disclaimer [V] ---------- 109 aw(fd, "<footer><div class=\"wrap\"><span class=\"fbrand\">Andelin West, PLLC</span>\n" as *u8) 110 aw(fd, "<span>[Street Address], Salt Lake City, UT &middot; <a href=\"tel:+18015550100\">(801) 555-0100</a> &middot; <a href=\"mailto:intake@andelinwest.com\">intake@andelinwest.com</a></span>\n" as *u8) 111 aw(fd, "<span class=\"disc\">&copy; 2026 Andelin West, PLLC. Licensed by the Utah State Bar. This website is for general information only and is not legal advice; viewing it does not create an attorney-client relationship. Prior results do not guarantee a similar outcome. <a href=\"/privacy\">Privacy Policy</a></span>\n" as *u8) 112 aw(fd, "</div></footer>\n</body></html>\n" as *u8) 113 114 sys_close(fd) 115 return 0 116}