§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.
Drop in the SDK, point it at a project, done. The API validates and stores the submission, and everything slow (emails, webhooks) runs in background workers so the request returns quickly.
§02 shape
How it’s put together
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
Keeping the request path short
Notifications and webhooks are queued on BullMQ instead of running inline, so a slow SMTP server never makes someone's form hang.
- 02
An SDK people would actually use
Typed end to end, with React and Next.js hooks, so integrating is a few lines instead of a fetch call and a pile of state.
- 03
Abuse
Public form endpoints attract bots. Per-key rate limiting and strict validation at the edge, and sensitive fields encrypted before they're stored.
stack
- TypeScript
- Bun
- Express
- MongoDB
- BullMQ
- Redis
- Better Auth
- Zod
- Next.js
next →
offease
A co-working aggregator: discovery and booking on one side, operations for the spaces on the other.