/**
* ING Forms — self-hosted form builder, full-stack core
* @author Roshan Aryan Majhi · editor + admissions contributor
*/
Ask anything.
Own everything.
ING Forms is a self-hosted form builder for admissions, internal data collection and client surveys — a customized OpnForm deployment with Keycloak SSO, education-specific fields, AI drafting and a containerized Laravel + Nuxt production fleet. I shipped editor polish and admissions-domain features on a nine-person team.
// design_system
System first, screens second.
color/tokens
primary
#774EA7
secondary
#F6EDFC
info
#9D90D1
warning
#F2C07E
notion
#191919
paper
#F7F6F3
type/scale
Aa
Inter / Nuxt UI
Heading 20
Body 14 · notion-calm
mono 11 · fields & logic
radius/soft
fields lg · avatars full
components/ui
{ "type": "select", "name": "course", "source": "attendance_api", "required": true }
3 fields · autosaved
“admission form for +2 science…”
4 fields will appear here
+55 more in package.json
webhooks never block a submit
// why_it_exists
Admissions can't wait on SaaS.
Intakes, surveys and internal data collection all ran through tools the team couldn't control — per-seat pricing, data off-site, and no way to model education domain logic.
ING Forms brings it home. A self-hosted builder on our own metal: admissions fields on the model, SSO at the gate, AI drafts in the editor, and every submission fanning out to queues, sheets and chat tools in seconds.
// feature_modules
What ships inside.
form_editor
Drag-and-drop builder over 20+ field types — text, email, phone with per-country placeholders, dates, dropdowns, files, signatures, payments, barcodes and notion-styled layout blocks.
admissions_domain
Education-specific fields (course, group, year, intake, phase, total_student) on the Form model, with duplicate-form flows pulling live course and group data from the attendance system.
submissions_analytics
Per-form dashboard with submission tracking, traffic breakdown and completion rates — including a global submission-settings section for surveys.
workspaces_access
Multi-workspace isolation with admin / user / readonly roles, workspace-scoped forms and submissions, plus 2FA on top of SSO.
ai_generation
OpenAI-powered drafting: describe the form you need and get a structured starting point with fields, validation and layout to refine in the editor.
keycloak_sso
Keycloak as the primary identity provider with JWT session management, replacing default auth — env-driven across demo and production.
integrations_webhooks
Native-feel bridges to Zapier, n8n, Activepieces and Google Sheets, plus Slack, Discord, Telegram and email notifications on every submission.
queue_fleet
Containerized workers (queue:work), scheduler (schedule:work) and Horizon supervision behind Nginx ingress, with health checks and zero-downtime deploys.
// engineering_decisions
Worth noting.
- +Self-host over SaaS — admissions data stays in-house on PostgreSQL + Redis instead of a third-party form vendor.
- +Extend, don't rebuild — OpnForm as the base bought the editor and 20+ fields; effort went into SSO, admissions domain and infrastructure.
- +Education fields via migrations — course, group, year, intake, phase live on the Form model, so every downstream view inherits them.
- +Async everything heavy — notifications, webhooks and sheets sync ride the queue fleet — submissions never wait on integrations.
- +Duplicate with live data — duplicating a form re-pulls courses and groups from the attendance system instead of copying stale options.
// my_role
What I built.
Editor polish and admissions-domain features across Nuxt and Laravel, driving the demo branch through stakeholder review cycles.
$form_editor_polish
- Form-editor UI fixes across the builder canvas
- Phone placeholder made country-specific instead of global
- Form / survey name made editable inline
$admissions_domain
- Duplicate-form flow wired to live course + group APIs
- Education fields carried through create / edit / duplicate
- Global survey submission-settings section
$platform_plumbing
- Keycloak env wiring (NUXT_PUBLIC_*) across environments
- Session-expired popup removal and delete-error copy fixes
- Initial loader replaced with shared circular spinner
$demo_branch_driver
- Drove demo-branch merges fronting stakeholder reviews
- User CRUD and submission-settings collaboration passes
- QC loop on editor regressions before showcases
// in_one_line
A self-hosted form builder where admissions logic, AI drafts and analytics share one workspace.