a landing page is not a homepage with a form. that is the default a bangkok dtc founder receives from a shopify theme or a 'website refresh' agency: five sections, a hero photo, three feature cards, a testimonial slider, an embedded contact form, and a checkout flow that loses to lazada at 1.8% conversion. the page is wrong-shaped for the job. a campaign landing surface owns one goal: hold attention for 15 seconds, deliver the proof, ask for the action, ship that conversion at scale.
i build on next.js or framer depending on what the campaign needs. next.js for performance-critical surfaces where every kilobyte and every server-side event matters (fintech onboarding, sass demo signups, paid-traffic landing surfaces with a thb 50 cpc that needs a 4% conversion to break even). framer for motion-led campaigns, dtc product launches and brand stories where the asset library and the marketing team's velocity are the differentiator.
performance on a thai mobile network is the constraint everything bends to. ais and dtacs in bangkok give a real user a 4g experience that is 30% slower than the european 4g median. lcp under 1.8 seconds on a real thai mobile is the acceptance criterion, not a nice-to-have. images served as avif from a cdn point of presence in singapore, no blocking third-party scripts above the fold, server-side analytics so the cookie banner does not block the conversion.
the bilingual case matters more than most agencies admit. a thai-targeted campaign needs a thai native surface that reads as written by a thai speaker, not a translated en page. an expat-targeted campaign in bangkok runs en-only and gets a line oa share card that previews correctly when an expat forwards the link to an austcham group. both surfaces share a content model and a tracking spine. they do not share copy.