Vibha's data and monitoring platform · vibha.org

Build an app, step by step

One app, built end to end: a record type with real matching & display settings, a registration step, a repeatable step scoped to a reporting window, an optional step with its own duplicate rule, and a rule that reads an earlier step's answer back on a later one. Every mechanic named below is covered on its own page — Record types, Steps and Records and timeline — this page is where they meet in one worked example.

What we are building — a field monitoring app

A field team visits schools on a quarterly cycle. The same school is visited again and again, issues get logged in between visits, and at the end of a quarter someone needs to see one school's whole history on one page rather than three separate response lists. That is exactly the shape an app exists for.

1. The record type — School

  1. 1Create a record type named School.
  2. 2Set its matching & display settingsto the school's UDISE code when one is captured, falling back to the combination of school name, block and district when it is not — a real decision, not every field, and one that does not change between visits.
  3. 3Choose district, block and school_name as key details, so a list of Schools is scannable without opening each one.

2. Step one — School details (registers the record, once)

The first step is what creates the record. It runs once per school, ever — visiting the same school again does not create a second one. Adding the record type's registration form as the very first step sets How many times to Filled once automatically — this is the one setting you do not need to touch yourself.

Step 1 — School details

District

Select an option · dropdown list: districts

Block

Select an option · cascades from District

Cascading

School name

Select an option · cascades from Block

Cascading

UDISE code

Short answer · official code, if known

2. Step two — Quarterly training visit (repeats, once per period)

The second step is filed against the school this session resolved to in step one. It is Repeatable, and three settings together are what turn “repeatable” into “exactly one training visit per school, per quarter” — a real constraint the server enforces, not a convention field workers are trusted to follow:

SettingSet toWhy
Counted perRecord, per cycleThe count resets at the start of each reporting cycle, rather than growing forever or resetting every time the app is opened.
Response count1 to 1Exactly one entry is required, and a second attempt within the same cycle is rejected rather than silently added as a duplicate.
Date this happenedVisit dateOrders this entry on the school's timeline by the real visit date, not by whenever it happened to be typed up.

Step 2 — Quarterly training visit

Visit date

Date

Required

District

Short answer · read-only, filled from the registration step

Calculated

Topics covered

Choose all that apply

Attendance count

Number

The read-only District field is the piece that ties the two steps together — it is not re-asked, it is read back:

3. Step three — Site issue log (optional, repeats, no duplicate date)

Not every visit turns up an issue, and an issue can be logged between visits, not only during one — so this step is Optional and, unlike step two, Counted per is set to plain Record: the whole history, not just the current cycle, since an issue is not tied to a reporting window the way a scheduled visit is.

Step 3 — Site issue log

Issue date

Date

Required

Description

Long answer

Resolved

Choose one · Yes / No

Photo

File upload

What the record shows afterward

Open the School record for this school and the three steps appear as one timeline, newest first: every quarterly visit, every issue logged in between, each response showing the form it came from and when it arrived. District, block and school name sit at the top as the key details chosen in step one — the same three fields on every visit and issue response, without re-typing them each time.

Next quarter, the same public link resolves to the same record, step two opens again because a new window is open, and step one does not — the school is already registered.

Go deeper