168

Aerospace Company Website Template

£29
or the whole Vault, £99

A seven-page website for a hardware or aerospace company: sentence-case grotesk display type on true black, spec sheets of huge numerals, products colour-coded with their own buy bars, and a viewfinder hero whose brackets hunt the hardware and lock onto parts. Worked example: a satellite bus maker in Prestwick, Scotland.

ScrollTrigger advanced
15 more details
pointer-trackingclick-togglepointer-dragkeyboard-navigationfocus-managementcount-upscroll-revealstaggerload-sequenceview-transitionsprogressive-enhancementcountdownrange-inputodometer-counterlocal-storage-state

Released

About this template

A seven-page site for a company that sells hardware and wants it to look engineered: satellites, robots, drones, electric vehicles, industrial machines. The ground is true black, the display type is a quiet grotesk set in sentence case whose lines lift in as each heading arrives, and specifications are set as spec sheets: a mono label, a very large numeral and a small unit. Each product carries its own colour (ice, foil gold and signal green in the demo) on its name, its buy bar and every row it appears in, and the interface has one accent, the same signal green, kept to live and chosen states: the mission clock, the current page, the hotspots and the lock.

Read the full template overview

The home page opens on a photograph of the hardware framed in viewfinder brackets. Move the pointer over it and the brackets hunt the machine, snap onto a component when you are over one, and lock on a click, opening a callout with that part's figures. Inner pages each have one hands-on piece: a payload scale that dims the products that cannot carry your load and lights the one that fits, a configurator whose numerals roll as you change mass, power and orbit, a launch schedule where every row keeps its own live clock and one can be sent to the bar, a horizontal strip through six factory stations, a careers list filtered from a numbered mono menu, and a launch-window picker that starts a countdown.

A live mission clock sits in the bar on every page and survives page loads. To make it yours, rename the three products and set their colours, replace the photographs (three product shots on black share one angle and light), move the hero hotspots to your own machine's parts and rewrite the figures. Every business, person and number in the demo is fictional.

Aerospace Company - website template preview

What's included

15 items
  • Seven plain pages (home, products, product detail, missions, factory, company with careers, contact) sharing one stylesheet and one script, with a short cross-page fade where browsers support it
  • One bracketed code system across the site: pages [01] to [06], products [01A] to [01C], factory stations [S1] to [S6], teams [EN], [PR], [OP]
  • Viewfinder hero: corner brackets track the pointer over the photograph, magnet onto a component and lock on click, tap or Enter, opening a callout with counting numerals; hotspot positions are percentages of the photograph, so they survive any crop
  • Display headings in a self-hosted grotesk, sentence case, medium weight and tightly tracked, in solid ink; each heading's lines lift in once as it enters
  • Apex-style spec cells and spec rows: mono labels, very large numerals, small units, hairline grid with corner marks
  • One colour per product, carried on its name, its buy bar, its schedule chip and its column in the comparison table
  • Payload scale on the products page: a native range marker over a ruled scale; margins roll like an odometer, buses that cannot carry the load dim and the best-fitting bus fills its buy bar
  • Product configurator: payload mass, power and orbit recompute lead time line by line, array, battery, delta-v and design life, and hand the spec to the contact form
  • Launch schedule with a live mission-elapsed clock (MET, counting down before launch) on every row; picking a row makes it the clock in the bar on every page, remembered in the browser
  • Factory station strip: a native scroll-snap strip with mouse drag, arrow buttons, a numbered rail and arrow keys
  • Careers list filtered from a numbered mono menu with live role counts
  • Launch-window picker that greys out windows inside the chosen product's lead time and starts a countdown in the form header
  • Phone navigation: a Menu button that shows the clock opens a black full-screen sheet of large numbered rows with the current page marked and the clock at its foot
  • Natural-colour photography bundled as WebP derivatives, about 2.5 MB across seven pages
  • Readable without JavaScript, and every interaction keeps working when the GSAP CDN is blocked

Perfect for

5 use cases
  • Satellite, launch and space hardware companies
  • Robotics and industrial automation makers
  • Drone, eVTOL and e-bike manufacturers with a short product range
  • Industrial machinery and test equipment suppliers
  • Medical device and lab hardware companies that sell by specification

How it works

5 sections

The viewfinder

The hero photograph sits in a stage box with the photograph's own proportions, sized to cover the screen, so a hotspot placed at a percentage of the photograph stays on its part at every width. On phones the stage switches to a 4:5 crop and two variables map the same percentages into it. The brackets are one element moved and resized by quick tweens; callouts open on whichever side of the locked part has room.

Odometer numerals

Any element marked as an odometer is rebuilt as one sliding column per digit, with a visually hidden copy of the value for screen readers. Each digit slot takes the width of the digit it shows, because the display face has no tabular figures. The roll is a CSS transition, so it also runs when the animation library is unavailable.

The mission clock

One timer, printing mission elapsed time as MET days:hours:minutes:seconds (negative before launch), aligned to the wall-clock second, updates the bar, the phone sheet, the footer, the Menu button and every schedule row together. The chosen mission is stored as a name and a launch timestamp, so the clock is correct on every page and in every tab. Scheduled launches and launch windows are set as days from today, so the demo never runs out of future dates.

Plain pages

Each page is a standalone HTML file that runs only the features whose markup it finds, so pages and sections can be deleted freely. Navigation is ordinary links with a cross-document view transition where supported; the bar keeps its own transition name so it holds still while the page changes underneath.

Fallbacks

Reveals are hidden only under a class set before first paint. Without JavaScript the hero callouts become a static row, the launch schedule shows launch dates, the station strip swipes natively and the footer site map reaches every page. Reduced motion keeps every control and jumps instead of travelling.

Plugins ScrollTrigger
Difficulty Advanced
Includes HTML + JS + CSS source, documentation, AI setup prompt, lifetime updates

Lighthouse, as measured

Google Lighthouse on this template's demo (7 pages, lowest score shown), from the latest scan. A measurement of the demo as shipped, not a promise for your page.

Accessibility
100
Best practices
100

No performance score, on purpose. That figure depends on how you deploy: your server's compression and caching, your CDN, the connection and the device doing the test, none of which the code controls. The same page can score very differently on two consecutive runs, so measure it where it will live.

Questions about this template

Does this only suit a satellite company?

No. The design is a hardware company with a short range sold on specification: robots, drones, e-bikes, industrial machines and medical devices fit as well. Rename the three products and give each its colour, swap the photographs for your own machines, move the viewfinder hotspots onto your own parts and rewrite the spec rows. The mission clock can count from a product launch, a delivery or an install instead.

How do I move the viewfinder hotspots to my own photograph?

Each hotspot is a button with its centre written as a percentage of the photograph (style="--x:58.9;--y:61.6") and its lock box as a width and height percentage. Open your image, note where each part sits as a share of its width and height, and change those numbers and the callout text. The phone crop is set by two variables on the stage, so the same numbers work there.

Can I sell more or fewer than three products?

Yes. Products are repeated markup with a data-bus name and a capacity. A new product needs a colour in the stylesheet's token block and its display name in BUS_NAMES in the script; then copy a card, a row and a table column for it. The payload scale and the comparison read whatever cards they find. A single product works too: delete the other two.

Does the contact form send anything or book a launch?

No. It is a static front end that collects the chosen product, a launch window, name, organisation, email, payload mass and notes, and shows a confirmation that nothing was sent. Point the form at Formspree, Netlify Forms or your CRM's form endpoint before you publish. The launch windows and countdown are demo data worked out in the browser, not a real schedule.

Where do the mission clock and launch schedule data come from?

From the markup. Each schedule row carries its launch time as an ISO timestamp, or a number of days from today for a scheduled launch, and the default mission for the bar is one line in the script. Nothing is fetched. If you run real operations you can write those attributes from your own system, or remove the clock cell and keep the schedule as a list.

Can I change the display face?

Yes. Display headings, product names and spec numerals all read --font-display, so swapping the font file, its @font-face rule and that one token retypes every heading on all seven pages. Headings are solid ink, so any face you choose keeps the contrast the demo was measured at.

The Vault opens this source and the whole library.

Each product gives you the HTML, CSS and JavaScript source, the full documentation and an AI setup prompt, licensed for unlimited personal and commercial projects. Every paid product is tested for desktop and mobile layouts, reduced-motion handling, animation cleanup and keyboard controls wherever there is something to operate.

One payment, over 300 products, and future additions to the library.

Documentation

Quick Start

  1. Unzip and open index.html in a browser, or serve the folder with any static server (npx serve .).
  2. Every page is a plain HTML file: index.html (home), products.html (all three products), gannet.html (one product in detail, with the configurator), missions.html (launch schedule), factory.html, company.html (story, people and careers) and contact.html (book a mission).
  3. All pages share assets/style.css and assets/script.js. There is no build step.
  4. Deploy the folder as it is to any static host.

Using It With Your Own Design

  • Products and their colours: the demo has three products, Kite, Gannet and Albatross, each named by data-bus="kite|gannet|albatross" on its markup. Each name maps to a colour (--kite, --gannet, --albatross and their -rgb triples) at the top of assets/style.css and to a display name in BUS_NAMES near the top of assets/script.js. Rename them in all three places. Product colours carry black text, so keep each at 4.5:1 or better against #000.
  • Ground and ink: the token block at the top of assets/style.css. Every .display heading is set in solid --ink.
  • Type: Schibsted Grotesk (500 for display headings and product names, 400 for spec numerals and body, 600 for small headings; one variable file) and Kode Mono (menu, clock, labels), self-hosted in assets/fonts/. Swap the files, the @font-face rules at the top of the stylesheet and --font-display, --font-body and --font-mono.
  • Photographs: the hero, three product shots on black, an open product, a launch fairing, the factory hall, six build stations, an operations room, three portraits, a solar-cell close-up and the building at dusk. See Images and Credits.
  • Lead times and windows: LEAD_WEEKS, INTEGRATION_WEEKS and WINDOW_HOUR_UTC near the top of assets/script.js.

Pages and Configuration

Page Sections Hands-on piece
Home Viewfinder hero, four spec cells, three-product trio, close-up band, black pause with three statements, launch band, factory tiles, closing call The viewfinder; pause arrows
Products Title, payload scale, comparison trio, one full row per product, side-by-side table Payload scale
Gannet (product detail) Product hero with spec cells, configurator, five subsystems, flight heritage, the other two products Configurator
Missions Title, spec cells, launch schedule, operations band, launch options Pick a mission clock
Factory Black pause, hall photograph, station strip [S1] to [S6], test figures Station strip
Company Building photograph, story, figures, people, careers Roles filter
Contact Title, window picker with countdown, form, mission desk Window picker

Every feature looks for its own markup and does nothing when it is missing, so you can delete a section, or a whole page and its links, without touching the script.

Navigation and the mission clock

The site uses one bracketed code system: pages are [00] (Home) to [06], the three products [01A] to [01C], factory stations [S1] to [S6] and careers teams two-letter codes ([AL], [EN], [PR], [OP]). The codes are plain text in the markup; change them in the nav, sheet, footer and section labels together.

The same <header class="bar"> is on every page; mark the current page's link with aria-current="page" (the product detail page marks Products with aria-current="true"). On wide screens the links are mono cells with bracketed codes ([01] Products to [06] Contact) divided by hairlines, followed by the clock cell. Under 1180px the bar becomes the wordmark and a Menu button that shows the clock; it opens a black full-screen sheet (#sheet) of large numbered rows with the current page marked and the clock at its foot. The button is a real <button> with aria-expanded/aria-controls; Escape, a tap on the sheet's empty ground or a link closes it, focus moves into the sheet and returns to the button, and Tab stays inside while it is open. Without JavaScript the button is hidden and a Pages link jumps to the footer site map, which lists every page.

Every [data-clock] element shows mission elapsed time for the current mission as MET 412:07:13:02 · GANNET-4 (days, hours, minutes, seconds; a minus sign before launch). fmtClock near the top of the script owns the format. The default mission is DEFAULT_MISSION near the top of the script (a name and an ISO launch time). A mission picked on the Missions page is stored in localStorage under halyard-mission as a name and a timestamp, so it follows the visitor to every page and every tab. The text inside each clock element is what visitors without JavaScript see.

Viewfinder (Home)

The hero is a [data-viewfinder] wrapper holding the .hero and the callouts. Inside, [data-stage] is a box with the photograph's own 16:9 proportions sized to cover the screen; data-rest="cx cy w h" is the box the brackets frame when idle, in percent of the photograph. Each hotspot is a button:

In your downloadThe working code for this step, in index.html.

--x/--y is the part's centre and data-w/data-h its lock box, all in percent of the photograph. Its callout is the [data-callout="wheel"] element with the matching id. On phones the stage shows a 4:5 crop of the same photograph; --crop-l and --crop-w on the stage (the crop's left edge and width, in percent of the full photograph) map the hotspots into it, so if you crop your phone image differently, change those two numbers. Add or remove hotspots freely.

The brackets follow a fine pointer, snap onto a part when the pointer is over its box and lock on click. Touch locks by tapping a mark; keyboard users Tab between marks (the brackets move to each) and press Enter. Escape, the close button or a click on the photograph releases the lock. The callout opens beside the locked part, on the side with room, and its large figure counts up.

Payload scale (Products)

[data-payload-scale] holds a native <input type="range"> ([data-scale-input], 5 to 1,000 kg) styled as a marker over a ruled scale, so dragging, touch and arrow keys work without the script. Each card in [data-compare] has data-cap (its payload capacity in kg) and a [data-margin] odometer. As the marker moves, cards whose capacity is below the load get .is-out and dim, the smallest card that carries it fills its bar (.bar-cta--fill.is-full), and the verdict line says so. The coloured marks under the scale are .scale__cap elements placed at left: <capacity / 10>%.

Odometer numerals

Any element with data-odo is rebuilt as rolling digit columns, with a visually hidden copy of the value for screen readers. The script calls setOdo(element, text) with the formatted value. Separators such as commas and points stay put while digits roll.

Configurator (product detail)

[data-config] is a form: two range sliders (data-cfg="mass", data-cfg="power") and orbit radios (data-cfg="orbit"). initConfigurator in the script holds the rules: the standard lead time plus a week over 180 kg, two weeks over 900 W, and the orbit's own weeks from ORBITS, with array size, battery, delta-v and design life worked out alongside. The [data-line] items light up as each rule applies. Submitting goes to contact.html with the spec in the address, and the contact form fills itself in from it.

Launch schedule (Missions)

Each [data-mission] row is a button with either data-t="<ISO launch time>" (flying) or data-in-days="<n>" (scheduled, that many days from today at WINDOW_HOUR_UTC). Rows tick their own clocks; clicking one makes it the mission in the bar and marks it aria-pressed="true". Colour chips follow the row's data-bus.

Station strip (Factory)

[data-track] is a horizontal scroll-snap strip of [data-station] articles, so it swipes natively on touch and works with no script. The script adds mouse drag (a flick moves one station), the previous and next buttons, the numbered [data-rail] buttons and the Left, Right, Home and End keys while the strip has focus. Links such as factory.html#station-4 open on that station.

Careers filter (Company)

The bracketed mono menu is a group of buttons with data-filter-btn="all|eng|prod|ops" and aria-pressed; each role is a .role with a matching data-team. The open-application row (data-team="any") always shows. Add a team by adding a button and setting data-team on its roles; update the count in its <sup>.

Booking (Contact)

[data-book] holds the product select, the launch-window radios (data-win-days = days from today), the form fields and the countdown header. Windows earlier than the chosen product's lead time plus INTEGRATION_WEEKS are disabled with a reason. Choosing a window starts a countdown to its opening in the same MET -ddd:hh:mm:ss form as the clock. The form is not connected: submitting shows a note that nothing was sent. Set the form's action and method for Formspree, Netlify Forms or your CRM and remove the submit handler in initBooking.

Display headings and reveals

Put .display on each line (display: block spans) so the heading breaks where you choose. Add data-display to a heading (or a .display element) to lift its lines in once as it enters the screen; a heading already on screen at load is left as it is. data-reveal fades an element up once; data-reveal-group staggers its children; data-hero-fade runs on load; data-count counts a spec numeral up from zero.

Palette

Token Value Use
--ground #000000 Page ground; ink on it 17.9:1
--surface #0B0E12 Callouts, station cards, form fields
--ink #E9EDF1 Text, rules, buttons at rest
--ink-dim ink at 0.68 Secondary text, 8.1:1 on ground
--ink-faint ink at 0.52 Mono labels on black or surface, 4.9:1; never over photographs
--kite #D8E7EE Kite (ice): name, bar, chip, column; 16.6:1 on black
--gannet #CFA545 Gannet (foil gold); 9.1:1
--albatross #2EF27E Albatross (signal green); 14.1:1
--accent #2EF27E The interface's one accent: clock dot, current page, hotspots and the lock, focus rings, button hover, configurator choices, contact submit, station rail; black on it 14.1:1. Matches Albatross in the demo; give it its own value if your products change

Accessibility and Fallbacks

  • Without JavaScript every page is complete: the hero callouts are a static row under the photograph, the pause statements are listed, the scale and configurator are ordinary controls, the launch schedule shows launch dates, the station strip swipes, and the footer site map reaches every page.
  • If the GSAP CDN is blocked, every interaction still works (they run on CSS transitions and direct styles) and the reveal gate is lifted.
  • Reduced motion keeps every control but jumps instead of travelling: no bracket travel, glint, count-up, reveals or roll.
  • Hotspots, arrows, filters, launch schedule rows and the Menu button are real buttons with aria-expanded or aria-pressed; the payload and configurator controls are native range inputs and radios with spoken values. Odometers keep a readable copy of their value for screen readers.
  • Focus rings show for keyboard use only (:focus-visible).

Dependencies

  • GSAP 3.15.0 with ScrollTrigger (works with 3.12+), from jsDelivr. No other libraries.
  • Fonts: Schibsted Grotesk and Kode Mono, self-hosted (see Images and Credits).

Images and Credits

Bundled photographs are WebP derivatives in assets/img/, cropped and resized, with a slight saturation trim. All of them are AI-generated images made for this template; they show no real factory, product or person, and none contain words or logos. The hero has a phone crop (hero-m.webp); the three product shots share one camera angle and light on pure black so they line up in rows. Replace a file with your own at the same name and proportions, and update its alt text and any caption that describes it. If you replace the hero, move the hotspots (see Viewfinder).

Fonts in assets/fonts/ are the latin files of Schibsted Grotesk (Schibsted, designed by Bakken & Bæck) and Kode Mono (Isa Ozler), as served by Google Fonts, unmodified, under the SIL Open Font License 1.1; the licence is in assets/fonts/OFL.txt.

Halyard Orbital, its people, customers, missions, address and phone number are fictional. Prestwick is real; the address and postcode are not.

Also in your download: the full source, worked examples, the events and programmatic API, and the class reference.

£29