← built

formiq

A backend for forms. You add the SDK, it stores the submissions and sends out the emails and webhooks.

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.

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

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

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

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