A beautiful, open-source TypeForm alternative. Create engaging forms with a one-question-at-a-time experience.
- 6 beautiful themes - Midnight, Ocean, Sunset, Forest, Lavender, Minimal
- Keyboard navigation - Navigate with Enter, arrow keys, and scroll wheel
- Mobile-first forms - Responsive form-taking experience
- Secure authentication - Google OAuth and Magic Link
- Response dashboard - View, search, filter, and export to CSV
- 13 question types - Text, multiple choice, rating, file upload, and more
| Type | Description |
|---|---|
| Short text | Single line text input |
| Long text | Multi-line textarea |
| Dropdown | Select one option |
| Checkboxes | Select multiple options |
| Email with validation | |
| Phone | Phone number input |
| Number | Numeric input |
| Date | Date picker |
| Rating | Star rating (1-5) |
| Opinion scale | Numeric scale (1-10) |
| Yes/No | Binary choice |
| File upload | Images and PDFs |
| Website URL | URL with validation |
- Framework: Next.js 16 (App Router)
- Database: Supabase (PostgreSQL)
- Auth: Supabase Auth (Google OAuth + Magic Link)
- Styling: Tailwind CSS + shadcn/ui
- Animations: Framer Motion
- File storage: Cloudflare R2 (optional)
- Node.js 18+
- A Supabase account
- (Optional) Cloudflare account for file uploads
git clone https://github.com/yourusername/openform.git cd openform npm install-
Create a new project at supabase.com
-
Run the database schema in SQL Editor:
- Copy the contents of
supabase/schema.sql - Paste and run in Supabase SQL Editor
- Copy the contents of
-
Configure authentication:
Enable Google OAuth:
- Go to Authentication, then Providers, then Google
- Enable and add your Google OAuth credentials
- Get credentials from Google Cloud Console
- Set redirect URI:
https://YOUR_PROJECT.supabase.co/auth/v1/callback
Configure URLs:
- Go to Authentication, then URL Configuration
- Site URL:
http://localhost:3000 - Add redirect URL:
http://localhost:3000/auth/callback
-
Get your API keys:
- Go to Settings, then API
- Copy "Project URL" and "anon public" key
cp .env.example .env.localEdit .env.local with your Supabase credentials:
NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-keynpm run devOpen http://localhost:3000 to see your app.
To enable file uploads, configure Cloudflare R2:
- Create an R2 bucket in your Cloudflare dashboard
- Create an API token with R2 read/write permissions
- Add the credentials to
.env.local:
R2_ACCOUNT_ID=your-account-id R2_ACCESS_KEY_ID=your-access-key R2_SECRET_ACCESS_KEY=your-secret-key R2_BUCKET_NAME=openform-uploads R2_PUBLIC_URL=https://your-bucket.r2.dev- Push your code to GitHub
- Import the repository in Vercel
- Add environment variables in Vercel dashboard
- Deploy
Remember to update your Supabase URL Configuration with your production URL.
openform/ ├── app/ │ ├── (auth)/ # Auth pages (login) │ ├── (dashboard)/ # Protected dashboard pages │ │ ├── dashboard/ # Forms list │ │ ├── forms/ # Form builder and responses │ │ └── settings/ # User settings │ ├── api/ # API routes │ ├── auth/ # Auth callback │ └── f/[slug]/ # Public form pages ├── components/ │ ├── dashboard/ # Dashboard components │ ├── form-builder/ # Form builder components │ ├── form-player/ # Form player components │ ├── responses/ # Response dashboard │ └── ui/ # shadcn/ui components ├── lib/ │ ├── supabase/ # Supabase clients │ ├── database.types.ts # TypeScript types │ ├── questions.ts # Question type definitions │ └── themes.ts # Theme configurations └── supabase/ └── schema.sql # Database schema MIT License - feel free to use this for any project.
Contributions are welcome. Please open an issue or pull request.
