Website + quote backend · by WIIWID

A scrap yard's website that works like its scales. Fast. Accurate. No games.

Hub Scrap Metals, LLC has bought ferrous and non-ferrous metal since 2008, with full-service yards in Winchester, VA and Hagerstown, MD. WIIWID built hub-scrap.com to answer what every customer asks before they haul: what do you buy, where are you, when are you open, and how do I reach a buyer.

The site

Contact

Real screenshots of hub-scrap.com, captured from the site's own code.

01For customers

Everything a customer asks before they haul.

The questions a yard answers on the phone all day, answered on the site: what you buy, where you are, when you're open, what you can't take, and how to get a number.

No. 01

What We Buy

Ferrous and non-ferrous lists, from copper #1 and insulated wire to cars, appliances, rebar and structural steel, with an Unacceptable Items page so nobody hauls what the yard can't take.

Ferrous · Non-Ferrous · Unacceptable Items

No. 02

Two yards, hours & directions

Winchester, VA and Hagerstown, MD, each with its address, hours, phone, a Directions button, and a note on what that yard does and doesn't accept.

Winchester, VA · Hagerstown, MD

No. 03

Services

Roll-Offs & Transport, Demolition & Cleanup, Real Estate, Secure Destruction and Railcar Recycling, each on its own page.

Five service pages

No. 04

Call for today's number

Pricing follows the live commodity markets and changes daily, so the site doesn't pretend to quote it. The yard's phone sits in the header, and every number is tap-to-call.

(540) 667-6000 · (301) 790-0046

No. 05

Careers

A page for scale operators, equipment operators, drivers, mechanics, buyers and office staff: the benefits on offer, and one button to email a resume.

Pay · Insurance · Time-off · Paid training

No. 06

Contact & quote form

Name, email, phone, nearest yard, material or service, and details. It lands in the yard's inbox and in a database, and the customer sees “Request received.”

Posts to /api/quote

Also on the site: an About page, a customer testimonials section, and a slim utility bar with the yard's phone and email that tucks away as you scroll.

02From the form to the yard

A quote request that can't get lost.

The form posts to one route handler. It checks the details, drops the spam, then emails the yard and saves the request, both at the same time. Every request is also logged on the server, so the form worked on day one with nothing configured.

  1. Step 01

    The form

    Name and email required; phone, nearest yard, material or service, and details optional.

    POST /api/quote
  2. Step 02

    Zod validation

    Every field trimmed and length-capped. A bad email comes back as a plain message, not a crash.

    QuoteSchema.safeParse(body)
  3. Step 03

    Honeypot

    A hidden field humans never see. A bot that fills it gets a fake “ok” and nothing else happens.

    company: z.string().max(0)
  4. Step 04in parallel

    Email the yard

    Each request goes straight to the yard's inbox through Resend.

    emailQuote(record)
  5. Step 05in parallel

    Save it

    The same request is stored in a Supabase table, so nothing depends on an inbox.

    saveQuote(record)
  6. Step 06

    Request received

    The customer sees a confirmation and can send another. Need an answer now? Call the yard.

    { ok: true }

Email and storage switch on with environment variables, so the yard adds them whenever it's ready. The site also carries a leads panel: each request with a status, from new to contacted, quoted, won or lost, plus internal notes.

03Since 2008

Two yards. Rail-served. Built for scale.

Hub Scrap Metals started in 2008 and has grown into the largest scrap metal processor in Northern Virginia. Each yard is a self-contained recycling operation with modern material handlers and certified scales, processing raw scrap into mill-ready material.

Aerial view of the Hub Scrap Metals yard in Winchester, Virginia
The Winchester, VA yard from the air: headquarters and the shredder

Winchester, VA

Headquarters & Shredder

207 Ebert Rd

Winchester, VA 22603

  • Mon–Fri 8:00am – 5:00pm
  • Sat 8:00am – 12:00pm
(540) 667-6000On hub-scrap.com

Hagerstown, MD

Scrap Yard

625 North Prospect St

Hagerstown, MD 21740

  • Mon–Fri 8:00am – 4:00pm

Does not accept vehicles or non-ferrous metals.

(301) 790-0046On hub-scrap.com

Rail-served

Railcars roll straight into the yard.

The Winchester yard has direct access to the Winchester & Western Railroad, with interchange connections to both CSX and Norfolk Southern, so retired railcars can roll in for dismantling. Rail service, modern material handlers and certified scales mean the yards move volume fast.

2
Yards across VA & MD
18+
Years in business
Daily
Market-based pricing
Mid-Atlantic
Service region

The site's own numbers, as it reads today

04The build

Designed and built by WIIWID.

A brand system pulled from the wordmark: charcoal steel for the structure, the red of the “hub” for anything that needs attention, and condensed Oswald caps for everything that needs to shout.

The palette

  • Steel 950#0f0f10
  • Steel 900#1a1a1c
  • Steel 700#3d3d42
  • Steel 400#8d8d93
  • Steel 200#d8d8da
  • Steel 50#f6f6f7
  • Brand red#c1272d
  • Deep red#a81f25

The type

  • WHAT WE BUY · CONTACT USOswald · Nav, buttons & labels
  • Turn your scrap metal into top-dollar value.Rokkitt · Titles & body copy
  • SERVING VIRGINIA, MARYLAND & THE MID-ATLANTICSystem sans · Eyebrows & form labels

Industrial details

  • A painted red edge down the left of every dark band
  • The yard's own photography and video, with a dark hero over the yard at work
  • A slim utility bar with the phone and email that tucks away as you scroll
  • Structured data (a schema.org RecyclingCenter with both yards) for local search and maps
  • Per-page SEO titles and descriptions the yard can edit, with in-code defaults
  • A light-only color scheme, so phones in auto-dark mode never invert the brand

One file runs the business content

Names, phones, addresses, hours, services and material lists live in lib/site.ts. Change it in one place and it updates everywhere, from the header to the structured data.

export const site = {
  name: "Hub Scrap Metals",
  legalName: "Hub Scrap Metals, LLC",
  email: "info@hub-scrap.com",
  established: 2008,
} as const;

export const locations: Location[] = [
  { id: "winchester", role: "Headquarters & Shredder",
    phone: "(540) 667-6000", hours: "Mon-Fri 8:00am - 5:00pm · Sat 8:00am - 12:00pm", … },
  { id: "hagerstown", role: "Scrap Yard",
    phone: "(301) 790-0046", hours: "Mon-Fri 8:00am - 4:00pm", … },
];

export const ferrousMaterials = ["Prepared & Unprepared Steel", "Cast Iron", …];
export const nonFerrousMaterials = ["Copper #1 & #2", "Insulated Copper Wire", …];

Under the hood

  • Next.js 14 · App Router
  • TypeScript
  • Tailwind CSS
  • Zod
  • Resend
  • Supabase
  • Vercel

Next.js 14 with the App Router, TypeScript and Tailwind CSS, deployed on Vercel with zero configuration. Zod validates the quote form, Resend delivers it, Supabase keeps it. The form works with nothing set up, and each integration switches on with its environment variables.

Hub Scrap Metals

See the site. Then see the yard.

hub-scrap.com has what they buy, where they are, and the number to call for today's rates.