diff --git a/testapp/client/main.html b/testapp/client/main.html
new file mode 100644
index 00000000..0631c435
--- /dev/null
+++ b/testapp/client/main.html
@@ -0,0 +1,16 @@
+
+
+ AutoForm DEMO
+
+
+
+
AutoForm DEMO
+
+ {{> quickForm id="userForm" type="normal" schema=schema}}
+
+ {{#let userDoc=userDoc}}
+ Name: {{userDoc.name}}
+ Age: {{userDoc.age}}
+ {{/let}}
+
+
diff --git a/testapp/client/main.js b/testapp/client/main.js
new file mode 100644
index 00000000..673ad916
--- /dev/null
+++ b/testapp/client/main.js
@@ -0,0 +1,47 @@
+import { Template } from 'meteor/templating'
+import { ReactiveVar } from 'meteor/reactive-var'
+import SimpleSchema from 'simpl-schema'
+import { Tracker } from 'meteor/tracker'
+import './setup'
+import './main.html'
+
+SimpleSchema.extendOptions(['autoform'])
+const schema = new SimpleSchema({
+ name: {
+ type: String,
+ min: 2,
+ max: 20
+ },
+ age: {
+ type: Number,
+ min: 18,
+ max: 120,
+ autoform: {
+ min: 18,
+ max: 120,
+ defaultValue: 18,
+ }
+ }
+}, { tracker: Tracker })
+
+Template.body.onCreated(function () {
+ const instance = this
+ instance.user = new ReactiveVar()
+})
+
+Template.body.helpers({
+ schema () {
+ return schema
+ },
+ userDoc () {
+ return Template.instance().user.get()
+ }
+})
+
+Template.body.events({
+ 'submit #userForm' (event, instance) {
+ event.preventDefault()
+ const { insertDoc } = AutoForm.getFormValues('userForm')
+ instance.user.set(insertDoc)
+ }
+})
diff --git a/testapp/client/setup.js b/testapp/client/setup.js
new file mode 100644
index 00000000..71d6f029
--- /dev/null
+++ b/testapp/client/setup.js
@@ -0,0 +1,9 @@
+import 'bootstrap'
+import 'bootstrap/dist/css/bootstrap.css' // optional, default theme
+import popper from '@popperjs/core'
+import { AutoFormThemeBootstrap5 } from 'meteor/communitypackages:autoform-bootstrap5/static'
+import 'meteor/aldeed:autoform/static'
+
+AutoForm.load()
+AutoFormThemeBootstrap5.load()
+AutoForm.setDefaultTemplate('bootstrap5')