§01 context
Every side project I built needed a contact form, and every time I wrote the same endpoint again. formiq is the version I wanted to stop rewriting.
You add the SDK and point it at a project. The API validates and stores the submission, and the slow parts (emails, webhooks) run in background workers so the request returns quickly.
§02 shape
How it works
your app ── useFormiq() (typed SDK)
│
▼
API server ── API keys, Zod validation, rate limits
│ write submission, enqueue jobs
▼
MongoDB Redis + BullMQ
│
▼
workers ── emails, webhooks§03 hard parts
The hard parts
- 01
Fast submissions
Emails and webhooks go on a BullMQ queue instead of running inside the request. If an SMTP server is slow, the person filling the form doesn't have to wait for it.
- 02
The SDK
It's typed end to end and comes with React and Next.js hooks. Hooking up a form is a few lines, instead of writing a fetch call and your own loading and error state.
- 03
Bots
A public form endpoint gets found by bots quickly. Every API key is rate limited, input is validated before anything touches the database, and sensitive fields are encrypted before they're stored.
stack
- TypeScript
- Bun
- Express
- MongoDB
- BullMQ
- Redis
- Better Auth
- Zod
- Next.js
next →
offease
A site for finding and booking co-working spaces, plus the dashboard the spaces use to run things.