← built

formiq

Form backend infrastructure with a typed SDK, an API, a dashboard and async workers.

kind
side project
year
2025

§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

  1. 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.

  2. 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.

  3. 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.