CONTACT SECTIONS / FREE HTML + ASTRO

Rooms project enquiry section

An image-led interior studio contact section with an editorial introduction and carefully grouped project enquiry fields.

Try the design

Open demo ↗

Preview links stay in the example. Copy the source to use your own destinations. Form previews never send information.

Copy the source

<section
  class="fct-rooms-project-enquiry"
  data-snippet="rooms-project-enquiry"
  aria-labelledby="fct-rooms-project-enquiry-title"
>
  <div class="r-contact">
    <div class="r-contact-image">
      <img
        src="images/interior.webp"
        alt="Green sofa beneath a tall arched window"
        width="1120"
        height="747"
      />
      <div class="r-photo-label">
        <span>ROOMS / STUDIO</span><span>Spaces for everyday living.</span>
      </div>
    </div>
    <div class="r-form-column">
      <p class="r-micro">A conversation is a good beginning.</p>
      <h2 id="fct-rooms-project-enquiry-title">
        Tell us about<br /><span class="r-italic">your space.</span>
      </h2>
      <p class="r-contact-note">
        A new home, a fresh perspective, or something still taking shape. Start with a few details.
      </p>
      <form action="#" method="post" data-demo-form>
        <fieldset disabled>
          <legend class="r-visually-hidden">Project enquiry details</legend>
          <div class="r-field-pair">
            <label
              >Your name <span>(required)</span
              ><input name="name" autocomplete="name" maxlength="100" required /></label
            ><label
              >Email address <span>(required)</span
              ><input name="email" type="email" autocomplete="email" maxlength="254" required
            /></label>
          </div>
          <label
            >What are you considering? <span>(optional)</span
            ><select name="project">
              <option value="">Choose a project type</option>
              <option>Full interior project</option>
              <option>One room</option>
              <option>Consultation</option>
            </select></label
          ><label
            >A little about the project <span>(required)</span
            ><textarea
              name="message"
              rows="3"
              maxlength="3000"
              required
              placeholder="The space, the location, the possibilities…"
            ></textarea>
          </label>
          <div class="r-submit-row">
            <p>
              Or write directly:<br /><a href="mailto:studio@example.com">studio@example.com</a>
            </p>
            <button type="submit" class="r-pill">
              Send enquiry <span aria-hidden="true">↗</span>
            </button>
          </div>
        </fieldset>
        <p class="r-status" role="status">Demo only. No information is sent.</p>
      </form>
    </div>
  </div>
</section>

Where this design fits

A licensed interior photograph anchors one side of the composition, with a form and project information on the other. The fields describe an initial conversation, without implying a quote, booking or delivery backend.

  • Licensed interior photograph
  • Grouped native form fields
  • Responsive editorial split

What is included

The HTML ZIP includes a standalone demo, reusable markup, scoped CSS, its small JavaScript runtime, a license and setup notes. The Astro ZIP includes Snippet.astro, self-hosted fonts and asset license notes. It can be imported into an existing Astro page or layout.

Connect a real form backend

These forms demonstrate layout and native browser validation. No messages are sent. Configure the form action, remove the demo interception and disabled fieldset, then implement delivery, server validation and spam handling on your backend. Test actual success and error responses before publishing. An appointment request does not confirm availability.

Add it to an HTML website

  1. Copy snippet.html into the relevant page section.
  2. Load snippet.css after your existing site stylesheet. The class prefix identifies this design.
  3. Load snippet.js once with defer. Keep the included keyboard behavior when adapting interactions.
  4. Replace example content and check mobile widths, zoom, links and keyboard focus in your actual website.

Use it in Astro

Copy Snippet.astro into src/components/, import it into your page or shared layout, and insert the component where the section belongs. Copy the fonts and any images folders into public/snippet-assets/rooms-project-enquiry/; the component uses those public paths. Keep each generated prefix unique if you duplicate a component on one page.

Keep the section maintainable

Start with the variables at the top of the CSS for background, text and accent colors. Preserve semantic labels and focus styles. Existing site selectors can still affect imported markup, so test the combined result. Read the complete setup notes.

GOOD DESIGN, OCCASIONALLY.

Your next idea
could start here.

New templates, useful guides, and updates from us.
A little inspiration for whatever you’re building.