<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: blackstonemotions2026</title>
    <description>The latest articles on DEV Community by blackstonemotions2026 (@blackstonemotion).</description>
    <link>https://dev.to/blackstonemotion</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3971955%2F5cddd493-9065-44a4-b9e8-f46aa7554b4f.jpg</url>
      <title>DEV Community: blackstonemotions2026</title>
      <link>https://dev.to/blackstonemotion</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/blackstonemotion"/>
    <language>en</language>
    <item>
      <title>5 signs your local business website is quietly losing customers</title>
      <dc:creator>blackstonemotions2026</dc:creator>
      <pubDate>Sun, 07 Jun 2026 20:51:22 +0000</pubDate>
      <link>https://dev.to/blackstonemotion/5-signs-your-local-business-website-is-quietly-losing-customers-2ab7</link>
      <guid>https://dev.to/blackstonemotion/5-signs-your-local-business-website-is-quietly-losing-customers-2ab7</guid>
      <description>&lt;p&gt;Most local businesses do not lose customers because their website is ugly. They lose them because the site is slow, unclear, or built for a desktop nobody is using. The damage is quiet. No error message, no angry email, just a visitor who taps away and calls the shop down the street instead.&lt;/p&gt;

&lt;p&gt;Here are five signs your site is costing you business, and what to do about each one.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. It takes more than three seconds to load on a phone
&lt;/h3&gt;

&lt;p&gt;More than half of local searches happen on a phone, often while someone is standing on a sidewalk deciding where to go. If your homepage takes five or six seconds to appear, a large share of those people are gone before they see a single word.&lt;/p&gt;

&lt;p&gt;Common causes: huge unoptimized images, a page builder loading a dozen scripts you do not use, and video backgrounds that autoplay on mobile data.&lt;/p&gt;

&lt;p&gt;The fix: compress images, cut unused scripts, and treat phone load time as the number that matters most. A clean hand-built page can load in under two seconds on the same connection where a template takes six.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Your hours, location, and phone number are hard to find
&lt;/h3&gt;

&lt;p&gt;Open your own site on your phone. Time how long it takes to find your hours and tap your phone number. If it is more than a couple of seconds, that is too long.&lt;/p&gt;

&lt;p&gt;People do not read local sites. They scan for three things: are you open, where are you, how do I reach you. Everything else is secondary. When those answers are buried in a footer or hidden behind a menu, you are adding friction at the exact moment someone wants to buy.&lt;/p&gt;

&lt;p&gt;The fix: put hours, address, and a tap-to-call button where they are visible without scrolling, on every page.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. The site looks like ten other businesses in town
&lt;/h3&gt;

&lt;p&gt;If your site came from a popular template, there is a good chance your competitors used the same one. Same hero image style, same three-column layout, same stock photos of people who do not work there.&lt;/p&gt;

&lt;p&gt;This is not only an aesthetic problem. A site that looks generic signals that the business behind it might be generic too. For trades, restaurants, salons, and practices that compete on craft and trust, that is the wrong message.&lt;/p&gt;

&lt;p&gt;The fix: use real photos of your actual space, work, and team. Even a handful of genuine images beats a polished template full of strangers. Build the layout around what makes you specific, not around what the template wanted.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Animation that decorates instead of guides
&lt;/h3&gt;

&lt;p&gt;Motion is not the enemy. Motion with no purpose is. Sliders nobody clicks, elements that bounce in for no reason, parallax that fights you while you scroll. These slow the page and pull attention away from the thing you actually want people to do.&lt;/p&gt;

&lt;p&gt;Good motion does the opposite. It guides the eye toward the next step, makes a long page feel navigable, and confirms that an action worked. You should be able to point at any animation on your site and say what job it does.&lt;/p&gt;

&lt;p&gt;The fix: keep motion that helps someone move through the page, and cut motion that only exists to look modern. Respect visitors who have reduced-motion settings turned on.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. There is no obvious next step
&lt;/h3&gt;

&lt;p&gt;Many local sites describe the business in detail and then leave the visitor with nowhere to go. No clear button, no booking path, no reason to act now.&lt;/p&gt;

&lt;p&gt;Every page should answer one question: what do you want this visitor to do next. Book, call, order, request a quote, get directions. One primary action per page, stated plainly, repeated where it makes sense.&lt;/p&gt;

&lt;p&gt;The fix: pick the single most valuable action for each page and make it impossible to miss. Secondary options can exist, but they should never compete with the main one.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to think about a fix
&lt;/h3&gt;

&lt;p&gt;You do not always need a full rebuild. Sometimes the highest-impact change is compressing images and fixing the mobile header. Sometimes it is rewriting the homepage around one clear action. The right move depends on where the leak is.&lt;/p&gt;

&lt;p&gt;At Blackstone Motion we hand-code marketing sites for local businesses, with motion that serves the content rather than decorating it. We start by finding which of these five problems is actually costing you customers, then fix that first.&lt;/p&gt;

&lt;p&gt;If your site shows two or three of these signs, it is worth a closer look. You can see our work and send a short brief here:&lt;/p&gt;

&lt;p&gt;Portfolio: &lt;a href="https://blackstone-motion.com" rel="noopener noreferrer"&gt;https://blackstone-motion.com&lt;/a&gt;&lt;br&gt;
Contact: &lt;a href="https://blackstone-motion.com/contact.html" rel="noopener noreferrer"&gt;https://blackstone-motion.com/contact.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A clear, fast site is not a luxury for a local business. It is the difference between a visitor who acts and one who quietly leaves.&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>webdev</category>
      <category>gsap</category>
      <category>frontend</category>
      <category>css</category>
    </item>
    <item>
      <title>Why we still hand-code marketing sites in 2026 (GSAP, no page builder)</title>
      <dc:creator>blackstonemotions2026</dc:creator>
      <pubDate>Sun, 07 Jun 2026 01:13:22 +0000</pubDate>
      <link>https://dev.to/blackstonemotion/why-we-still-hand-code-marketing-sites-in-2026-gsap-no-page-builder-5f59</link>
      <guid>https://dev.to/blackstonemotion/why-we-still-hand-code-marketing-sites-in-2026-gsap-no-page-builder-5f59</guid>
      <description>&lt;p&gt;Page builders won. Wix, Squarespace, Webflow, and Framer cover most small business needs in an afternoon. So why would anyone still hand-code a marketing site in 2026?&lt;/p&gt;

&lt;p&gt;We run &lt;a href="https://blackstone-motion.vercel.app" rel="noopener noreferrer"&gt;Blackstone Motion&lt;/a&gt;, a motion-first web studio. We build custom sites for service businesses, hospitality, and local brands that outgrew their template but do not need a full product engineering team. This is when hand-coded HTML, CSS, JavaScript, and &lt;a href="https://greensock.com/gsap/" rel="noopener noreferrer"&gt;GSAP&lt;/a&gt; still make sense, and when they do not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Templates optimize for launch, not for your funnel
&lt;/h2&gt;

&lt;p&gt;Most template sites solve one problem: &lt;strong&gt;existence&lt;/strong&gt;. You get a domain, hours, a contact page, and something that looks acceptable on a phone.&lt;/p&gt;

&lt;p&gt;They rarely solve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One clear action&lt;/strong&gt; repeated on every scroll depth (call, book, order)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile hierarchy&lt;/strong&gt; that matches how people actually decide (trust, offer, proof, action)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt; once you stack widgets, chat bubbles, pop-ups, and third-party embeds&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Brand specificity&lt;/strong&gt; beyond font and color swaps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a solo operator testing an idea, templates are fine. For a business where the site is the primary salesperson, the template becomes a ceiling.&lt;/p&gt;

&lt;h2&gt;
  
  
  What hand-coding buys you
&lt;/h2&gt;

&lt;p&gt;Hand-coded does not mean reinventing React for a bakery site. It means you control the document, the layout, and the motion layer without fighting a builder export.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Semantic structure you can reason about
&lt;/h3&gt;

&lt;p&gt;You choose the heading order, landmarks, and link text. That helps accessibility, SEO basics, and future refactors. Builders often output nested div soup that is hard to tune without breaking the editor.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Motion that serves content, not decoration
&lt;/h3&gt;

&lt;p&gt;We use GSAP with ScrollTrigger for entrances, pinned sections, and scrubbed reveals. The goal is to &lt;strong&gt;guide attention&lt;/strong&gt;, not to animate everything because we can.&lt;/p&gt;

&lt;p&gt;A typical pattern for a service homepage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hero: short timeline on load (headline, subcopy, CTA)&lt;/li&gt;
&lt;li&gt;One pinned or scrubbed section that explains the offer&lt;/li&gt;
&lt;li&gt;Light section entrances elsewhere&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;prefers-reduced-motion&lt;/code&gt; respected throughout&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is hard to do well in a generic builder without heavy embeds or brittle custom code blocks.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Performance you can actually measure
&lt;/h3&gt;

&lt;p&gt;Transform and opacity animations, lazy-loaded media, no unused framework bundle for a four-page marketing site. A hand-coded marketing build can stay lean in a way that full-stack SPA or bloated theme stacks often do not.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Design that cannot be mistaken for the neighbor's site
&lt;/h3&gt;

&lt;p&gt;Templates cluster by vertical. Two dentists in the same zip code can have the same Wix skin. Custom layout, type rhythm, and photography treatment are how a local brand looks &lt;strong&gt;intentional&lt;/strong&gt; instead of &lt;strong&gt;placeholder&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A minimal GSAP pattern (scroll section)
&lt;/h2&gt;

&lt;p&gt;This is simplified from how we structure client builds. It is not drop-in for every project, but it shows the idea: one ScrollTrigger section, scrubbed progress, reduced motion fallback.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;section&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;'story-pin'&lt;/span&gt; &lt;span class="na"&gt;aria-label=&lt;/span&gt;&lt;span class="s"&gt;'How we work'&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;'story-pin__track'&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;'story-pin__panel story-pin__panel--one'&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Discovery&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;'story-pin__panel story-pin__panel--two'&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Design&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;'story-pin__panel story-pin__panel--three'&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Build&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/section&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.story-pin&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;relative&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;min-height&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100vh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.story-pin__track&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.story-pin__panel&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="m"&gt;#222&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;gsap&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;gsap&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;ScrollTrigger&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;gsap/ScrollTrigger&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="nx"&gt;gsap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;registerPlugin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ScrollTrigger&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;prefersReduced&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;matchMedia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;(prefers-reduced-motion: reduce)&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;matches&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;prefersReduced&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;panels&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;gsap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;utils&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toArray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.story-pin__panel&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;gsap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;timeline&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;scrollTrigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;trigger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.story-pin&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;top top&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;end&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;+=120%&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;pin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;scrub&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;panels&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;y&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;stagger&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;duration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On client projects we split modules, scope with &lt;code&gt;gsap.context()&lt;/code&gt;, and refresh ScrollTrigger after fonts and images load. The point is: &lt;strong&gt;the motion is code you own&lt;/strong&gt;, not a plugin slot fighting the rest of the page.&lt;/p&gt;

&lt;h2&gt;
  
  
  When a page builder is the right call
&lt;/h2&gt;

&lt;p&gt;Be honest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tight budget, need live this week:&lt;/strong&gt; use a builder or a solid theme&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Owner will edit copy weekly:&lt;/strong&gt; Webflow or similar may beat custom if they need visual editing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No brand assets yet:&lt;/strong&gt; design and content work matter more than custom code&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Internal tool or MVP:&lt;/strong&gt; ship the stack your team already knows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We turn down or defer projects that fit better as a $500 template job. Hand-coded motion work starts where &lt;strong&gt;clarity, craft, and conversion&lt;/strong&gt; matter more than time-to-publish.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a custom marketing build usually includes
&lt;/h2&gt;

&lt;p&gt;For a typical 3 to 5 page service site at our studio:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Written brief (goals, pages, references, timeline, budget range)&lt;/li&gt;
&lt;li&gt;Figma frames for key breakpoints&lt;/li&gt;
&lt;li&gt;Hand-coded responsive build&lt;/li&gt;
&lt;li&gt;GSAP tier matched to scope (light entrances vs pinned storytelling)&lt;/li&gt;
&lt;li&gt;Staging URL, two async revision rounds, launch handoff&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We work &lt;strong&gt;async by email&lt;/strong&gt;. No calls. Decisions stay in writing so nothing gets lost between a Zoom and a random text message.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you are comparing options for your business
&lt;/h2&gt;

&lt;p&gt;Ask any developer or studio:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Who owns the code after launch?&lt;/li&gt;
&lt;li&gt;What happens to performance if we add a chat widget and a booking embed?&lt;/li&gt;
&lt;li&gt;How is motion scoped so it does not hurt mobile load?&lt;/li&gt;
&lt;li&gt;What is included in revisions?&lt;/li&gt;
&lt;li&gt;Can you show a live preview on a staging URL before we pay the balance?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If they cannot answer in plain language, that is a signal.&lt;/p&gt;

&lt;h2&gt;
  
  
  See the approach live
&lt;/h2&gt;

&lt;p&gt;Our portfolio is hand-coded with the same patterns we use on client work:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://blackstone-motion.vercel.app" rel="noopener noreferrer"&gt;https://blackstone-motion.vercel.app&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you are planning a rebuild from Wix, GoDaddy, or a dated WordPress theme and want a motion-first marketing site, send a one-paragraph brief through the &lt;a href="https://blackstone-motion.com/contact.html" rel="noopener noreferrer"&gt;contact form&lt;/a&gt; or email &lt;strong&gt;&lt;a href="mailto:hello@blackstonemotion.com"&gt;hello@blackstonemotion.com&lt;/a&gt;&lt;/strong&gt; with pages, timeline, and rough budget range. We reply in writing with next steps.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Blackstone Motion is a motion-first web studio based in New England, US. We build custom sites with GSAP, semantic HTML, and modern CSS. Remote clients welcome.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>gsap</category>
      <category>frontend</category>
      <category>css</category>
    </item>
  </channel>
</rss>
