MuxForms portfolio contact forms give freelancers and designers a branded hire-me embed on Framer, Webflow, or static sites—reliable inbox and email without PHP mail, mailto links, or per-site Formspree accounts.

Use case

Contact forms for portfolios and personal sites

Your portfolio is static on Vercel or Netlify. Your inbox should not depend on the host’s mail() config or a Gmail address buried in a mailto: link.

Portfolio template

FieldPurpose
project_typeFilter fit
budgetOptional qualification
messageProject narrative
referralAttribution

Freelancers and creatives need a contact path that matches the craft of the portfolio—branded fields, reliable delivery, and a record when a lead says they emailed last week.

MuxForms embed.js styles from your dashboard tokens so the form feels native to your site, not a gray Google Form iframe. Allowlist `www.yourname.com` and localhost; paste one snippet into Framer’s embed, Webflow’s custom code, or Astro’s contact partial.

Keep the schema light for first touch: name, email, project type, message. Optional budget select filters tire-kickers before you schedule a call. A `referral` field credits who sent the client.

When Dribbble, Behance, or a viral post spikes traffic, honeypot and rate limits protect your notify inbox from SEO spam. Turnstile is one toggle if bots get aggressive.

Graduate to quote-requests or agency-client-intake templates on the same account when you open a studio—unlimited forms, one login.

Mobile-friendly embed means art directors can reach you from their phone after scrolling your case studies. No app required.

Submissions live in MuxForms search—not lost if you change hosting or email providers. Export before tax season if you track lead sources.

Ready-made template

Create a form named Portfolio — Contact with these fields, then paste the embed on your page. Allow apex + www origins; match embed colors to portfolio; notify your freelance email; optional Turnstile after viral posts.

FieldTypeRequired
NamenametextYes
EmailemailemailYes
CompanycompanytextNo
Project typeproject_typeselectYes
Estimated budgetbudgetselectNo
Tell me about your projectmessagetextareaYes
How did you hear about me?referraltextNo
Leave blank_hphiddentextNo

Embed demo

Illustrative preview—wire your form id after signup.

Preview only — connect embed.js to submit

Schema JSON

{
  "name": "Portfolio — Contact",
  "fields": [
    {
      "name": "name",
      "label": "Name",
      "type": "text",
      "required": true
    },
    {
      "name": "email",
      "label": "Email",
      "type": "email",
      "required": true
    },
    {
      "name": "company",
      "label": "Company",
      "type": "text",
      "required": false,
      "placeholder": "Optional"
    },
    {
      "name": "project_type",
      "label": "Project type",
      "type": "select",
      "required": true,
      "options": [
        "Website",
        "Product design",
        "Brand",
        "Development",
        "Other"
      ]
    },
    {
      "name": "budget",
      "label": "Estimated budget",
      "type": "select",
      "required": false,
      "options": [
        "Not sure yet",
        "< $5k",
        "$5k – $15k",
        "$15k+"
      ]
    },
    {
      "name": "message",
      "label": "Tell me about your project",
      "type": "textarea",
      "required": true
    },
    {
      "name": "referral",
      "label": "How did you hear about me?",
      "type": "text",
      "required": false,
      "placeholder": "Optional"
    }
  ]
}

Embed snippet

<div data-form-id="FORM_UUID"></div>
<script src="https://www.muxforms.com/embed.js" defer></script>

Common questions

Framer or Webflow?
Paste the embed snippet in custom code; allowlist your published domain.
Portfolio vs agency intake?
Portfolio stays short; graduate to agency-client-intake when you run a studio.
Formspree on personal site?
MuxForms adds inbox search. Pro and Team include unlimited forms after the trial. Free includes one form.
Style the form?
Set appearance tokens in the dashboard; embed picks them up automatically.

Create the form for this job.

Then clone the pattern for the next site or app.

Upgrade to Pro