CatalogEducation & public sector ›Associations & volunteering

Volunteer shift and hours log

A simple log to track the shifts of the people helping out at your association: who, when, how many hours and for what activity. Useful for reporting hours to members, to funders, or just to see who has stepped up in recent months.

▶ Use this app

volunteeringshiftsattendancehoursassociationnonprofit

What it records

  • Volunteer's name
  • Hours worked (e.g. 3)
  • Activity (e.g. meal distribution)

How it works

This is a Reactive app: a plain text document that your browser turns into a working app — forms, live data, tables, statistics and even charts, with nothing to install or configure.

  1. Use it right away. Hit “Use this app”: it opens right in your browser, ready to go, with data saved only on your device.
  2. Your data stays yours. Everything is stored locally on your device, kept separate for each app: no account, no server, nothing to set up.
  3. Make it your own. The text below is the entire app: copy it, tweak fields, views and words, and your changes become interactive instantly.
  4. Share it as a file. An app is a simple file: save it, export it or share it with a link; and with encrypted collaboration several people edit the same data in real time.
The app’s source
# 🤝 Volunteer shift log

A simple log to track the shifts of the people helping out at your
association: who, when, how many hours and for what activity. Useful for
reporting hours to members, to funders, or just to see who has stepped up in
recent months.

## Log a shift

::::form{path="shifts" id="ft"}
::input{form="ft" field="volunteer" placeholder="Volunteer's name" required="true"}
::input{form="ft" field="date" type="date" required="true" legend="Shift date"}
::input{form="ft" field="hours" type="number" placeholder="Hours worked (e.g. 3)" required="true"}
::input{form="ft" field="activity" placeholder="Activity (e.g. meal distribution)"}
::add-form{form="ft" path="shifts" label="Log shift"}
::::

:::sort{path="shifts" field="date" order="desc" as="table" headers="Date,Volunteer,Hours,Activity" deletable="true" editform="ft"}
{date} | **{volunteer}** | {hours} | {activity}
:::

## Total hours

Volunteer hours logged so far: **:sum[hourstot]{path="shifts" field="hours"}** over :count[n]{path="shifts"} shifts.

Keep it updated after every shift: the running total is ready any time for a
report to members, a grant application, or simply to thank whoever has given
the association the most time.