WATCH A SITE GET BUILT

Seven stages, one page, code on the left and the result on the right. Drag the slider backwards and watch a finished website come apart into the pieces somebody had to type. This is what you are actually paying for.

  1. <!-- the words. the layer Google reads -->
  2. <header>
  3. <a class="logo">Sabine Diner</a>
  4. <nav> … four links … </nav>
  5. </header>
  6. <section class="hero">
  7. <h1>Breakfast all day.</h1>
  8. <p>Home cooking on Toledo Bend.</p>
  9. <a class="btn">Today's Plate</a>
  10. </section>
  11. <!-- … cards, footer, contact … -->
  12. /* structure — where the eye goes first */
  13. .site {
  14. max-width: 860px;
  15. margin-inline: auto;
  16. }
  17. .cards {
  18. display: grid;
  19. grid-template-columns:
  20. repeat(auto-fit, minmax(220px, 1fr));
  21. gap: 1.5rem;
  22. }
  23. /* brand — what everybody thinks is the job */
  24. :root {
  25. --ink: #2b1d14;
  26. --warm: #c8562b;
  27. --paper: #fdf6ec;
  28. }
  29. body { background: var(--paper); }
  30. h1 { font-family: Bitter, Georgia; }
  31. /* motion — tells you what is clickable */
  32. .card {
  33. transition: transform .35s
  34. cubic-bezier(.16, 1, .3, 1);
  35. }
  36. .card:hover { transform: translateY(-6px); }
  37. @media (prefers-reduced-motion: reduce) {
  38. .card { transition: none; }
  39. }
  40. /* one layout, every screen. not a 2nd site */
  41. @media (max-width: 640px) {
  42. nav { display: none; }
  43. .cards { grid-template-columns: 1fr; }
  44. .hero h1 { font-size: 7vw; }
  45. }
  46. # the invisible half. nobody praises it,
  47. # everybody feels it.
  48. Header always set Content-Security-Policy \
  49. "default-src 'self'"
  50. Header always set Strict-Transport-Security \
  51. "max-age=63072000"
  52. Header always set X-Content-Type-Options \
  53. "nosniff"
  54. # ✓ brotli · self-hosted fonts · schema.org
  55. # ✓ 0.4s to first paint on a cold cache
  56. --- ours/index.html
  57. +++ builder/index.html
  58. @@ the header @@
  59. <header>
  60. <a class="logo">Sabine Diner</a>
  61. </header>
  62. <div class="pb-section pb-s-1">
  63. <div class="pb-container">
  64. <div class="pb-row">
  65. <div class="pb-col pb-col-12">
  66. <div class="pb-wrap">
  67. <div class="pb-widget pb-text">
  68. <div class="pb-widget-inner">
  69. <div class="pb-el pb-el-a1f">
  70. <span style="font:700 22px Arial">
  71. Sabine Diner
  72. </span>
  73. … and eight closing </div>s …
  74. @@ what changed @@
  75. the picture on the right: nothing at all
  76. the layer Google reads: all of it
  77. no <header>, no <nav>, no <h1> —
  78. a screen reader is handed a stack of boxes

Open since 1974 · Hemphill, Texas

Breakfast all day. Pie until it runs out.

Home cooking on the north end of Toledo Bend. Same kitchen, same recipes, three generations.

See Today's Plate

Breakfast

Served from 6am to close, because somebody always wants eggs at four in the afternoon.

Pie Counter

Buttermilk, pecan, and whatever the fruit truck brought in. Whole pies need a day's notice.

Catering

Church socials, job sites, and funerals. We have fed all three in the same week.

412 Sabine Street, Hemphill TX · (936) 555-0114

nothing here yet

Same page. Same words. Same pixels.The markup underneath is not the same at all.

  • CSS Rules 0
  • Page Weight 0 KB
  • First Paint
  • Mobile Score 0
Stage 1 of 7

An empty page.

This is what a domain serves before anybody has done anything to it.

Why it costs money: Plenty of small businesses are here right now, paying for a domain that shows a parking page. It is costing them every search they do not appear in.

// Where The Money Goes Apportioned across a multi-page site — the usual job for a local business
  • This stage 0%
  • Build complete 0%
  • Work to here $0

Labour is $60/hour. The range above is this share of a multi-page site, rounded — your job gets its own number. Price yours.

The code is shortened for readability, the numbers under the preview are the shape of a real build rather than measurements of this page, and the split above is how the effort divides on a typical job — not a quote. The actual files are a great deal longer, which is rather the point.

WHY A TEMPLATE LOOKS CHEAPER

A page-builder gets you to stage 4 in an afternoon, and that is genuinely impressive. What it does not do is the two stages either side — and those are the ones that decide whether the site earns anything.

// What The Afternoon Version Skips
  • Stage 2 gets buried — page-builders wrap your content in layers of empty containers, and that is the layer search engines read
  • Stage 6 never happens — you get whatever speed and security the platform gives everybody, and you cannot change it
  • You are renting, not owning — stop paying and the site goes away, along with the address customers have bookmarked
  • Every competitor using the same platform picked from the same forty templates
tbg@bench: ~ ./compare
// the same page, both ways
 
page-builder 2.9s 1.8 MB 47 requests
hand-built 0.4s 180 KB 9 requests
 
// same words. same photos. same design.
the difference is what is underneath
 
you own the files either way you go
— with one of them
>

WANT TO WATCH IT HAPPEN TO YOURS?

Tell us what your business does. We will tell you what it costs and roughly how long each of those seven stages takes — no obligation, and no pretending stage 4 is the whole job.

GET A QUOTE