No description
- TypeScript 95.8%
- CSS 3.9%
- Dockerfile 0.3%
| api | ||
| db | ||
| frontend | ||
| .gitignore | ||
| docker-compose.yml | ||
| README.md | ||
BeeFormed
BeeFormed is a form system with:
- A Next.js frontend for creating/editing forms, sharing public links, and viewing submissions
- A Fastify API for forms, fields, permissions, and submissions
- Postgres for persistent storage and an email queue (SMTP with retries)
What you can do
- Log in via Authentik (OAuth2).
- Create and manage forms (including field definitions and publication window).
- Share a public form link:
GET /f/:slug - Let users submit forms (anonymous submissions supported).
- Enforce
limit+waitlistand optionally block multiple submissions per user. - Receive confirmation emails for registered/waitlisted submissions (with QR code attachment for the submission).
- Scan submissions using QR codes in the admin UI and mark them as scanned.
Architecture
- Frontend:
frontend/(Next.js) - API:
api/(Fastify + Postgres) - Database schema:
db/init.sql
Docker Compose runs three services:
beeformed(Frontend)beeformed_api(API)beeformed_database(Postgres)
Local / Docker setup
1) Environment variables
Docker Compose expects a root .env file (used by both services).
Go to 1Pass to get the required variables (may need to be changed for local development).
The API validates the required variables at startup (api/src/constants.ts) and the frontend reads them from frontend/constants.ts.
2) Start with Docker Compose
From the repo root:
docker compose up --build
Then:
- Frontend:
http://localhost:8700 - API:
http://localhost:8701/api
Database schema
Defined in db/init.sql.
Email confirmations
On submission-related events, the API sends templated emails via SMTP (nodemailer).
If SMTP fails, emails are queued in email_queue for retry; disable all sending/queueing with DISABLE_SMTP=true.