Framer is a fast way for indie hackers to turn an idea into a live product. In this guide you will learn how to set up a project, design a UI, add interactivity, and publish a responsive site without leaving the browser. The steps are written for people who want to move from prototype to revenue quickly.
Go to framer.com and click “Sign up”. You can register with Google, GitHub, or email. The free tier gives you three projects and 500 MB of storage.
If you need unlimited projects, custom domains, and code export, upgrade to the Indie plan at $15 / month. The plan also removes the Framer branding from published sites.
From the dashboard click “New Project”, select “Blank Canvas”, and give it a name like “My SaaS MVP”. Framer will create a URL such as my-saas-mvp.framer.website.
Frames are the building blocks. Drag a Frame onto the canvas, set its width to 100% and height to auto. Turn on “Auto‑layout” in the right panel to stack child elements vertically with a 24 px gap.
// No code needed – just drag a Frame, add Text links, and set
// Layout → Horizontal, Gap 32px, Align Center.
Insert a background image (e.g., hero-bg.jpg), then add a Heading and a Call‑to‑Action button. Use the “Resize to Fit” option so the text scales on mobile.
Stores hold JSON data that components can read. Click “+ Store”, paste:
{
"features": [
{"title":"Realtime analytics","desc":"See usage instantly."},
{"title":"Email onboarding","desc":"Automated welcome flow."},
{"title":"Custom branding","desc":"Add your logo and colors."}
]
}
Make a new Component called FeatureCard. Inside, bind the title text to {store.features[i].title} and the description to {store.features[i].desc}. Use a repeat loop on the parent Frame to render all three cards.
Drag a Form component, set its “Action URL” to https://api.example.com/subscribe, and map the email input to email. Framer will send a POST request when the user clicks Submit.
From the Insert menu choose “Code”. Replace the default code with a simple counter:
import * as React from "react";
export default function Counter() {
const [count, setCount] = React.useState(0);
return (
<button onClick={() => setCount(c => c + 1)}>
Clicked {count} times
</button>
);
}
Open the Project Settings → “Dependencies”. Add date-fns version 2.30.0. Then import it in a Code Component to format dates:
import { format } from "date-fns";
export default function Today() {
return <div>{format(new Date(), "PPP")}</div>;
}
Framer supports “Server Functions”. Create a new file api/price.js:
export async function onRequest(context) {
const { searchParams } = new URL(context.request.url);
const qty = Number(searchParams.get("qty")) || 1;
const price = qty * 9.99;
return new Response(JSON.stringify({total: price}), {
headers: {"Content-Type":"application/json"}
});
}
Call it from the client with fetch("/api/price?qty=3").
Click the “Preview” button. Use the device selector (mobile, tablet, desktop) to ensure layouts adapt.
In Settings → “Domain”, type myapp.com. Add the DNS A record pointing to Framer’s IP (provided in the UI). After propagation, your site is live at https://myapp.com.
Add a “Head” component and insert:
<title>My SaaS – Real‑time analytics for startups</title>
<meta name="description" content="Instant analytics, email onboarding, and custom branding. Try for free.">
<meta property="og:image" content="https://myapp.com/og.png">
Paste your Google Analytics or Plausible script into the “Head” component. Framer’s fast reload lets you see changes instantly.
Indie hackers often compare Framer with Webflow, Bubble, and Vercel + Next.js. The table below summarises key differences for a typical MVP.
| Feature | Framer | Webflow | Bubble | Next.js on Vercel |
|---|---|---|---|---|
| Learning curve | Low – visual canvas + optional code | Medium – visual + CSS | Medium – visual workflow | High – full React |
| Code export | Yes, clean React/HTML | No, proprietary | No, proprietary | Yes, full control |
| Custom domain | Included in Indie plan | Included in paid plans | Included in paid plans | Free with Vercel |
| Built‑in CMS | Basic Stores | Robust CMS | Full DB | None – add yourself |
| Pricing (as of 2026) | $15/mo Indie | $24/mo Basic | $29/mo Personal | Free tier, pay for serverless |
| SEO friendliness | Good – static HTML | Good – meta editor | Average – SPA | Excellent – full control |
Framer is a design and prototyping tool that lets you build interactive UI with visual editing and real code.
No. Framer offers a no‑code canvas, but you can add React components if you want more control.
Yes. Framer lets you publish to framer.com or export the code bundle for self‑hosting.
Framer has a free tier with limited projects. The Indie plan is $15/month and includes unlimited projects, custom domains, and code export.
Framer outputs clean HTML and supports meta tags, so you can optimise for search engines just like any static site.
With this guide you now have a complete workflow: create a Framer account, design a responsive UI, add real data, write a bit of code, and publish a live site. Test, iterate, and watch your indie project grow.