lilt
is a tool to allow students to actively participate in learning sessions by means of interactive exercises. When tutors are delivering learning material via a lecture or a talk, there is always a question as to whether the students are actually understanding the content. lilt
allows tutors to check students' understanding by integrating lecture material with interactive exercises which students can answer in class. The tutor can then view submitted answers and the submitted answers can be discussed in class, to address common misunderstandings.
lilt
also allows tutors to hide sections of the notes until particular exercises have been answered. This allows students to think through problems themselves and suggest their own ideas before the problem is discussed through the notes.
First of all, a quick word on what lilt
is not. It is not, and does not aim to be, a full Virtual Learning Environment (VLE). Students do not provide their personal details at all, providing a private and anonymous environment. lilt
does not aim to assess students over the period of a whole module, but just aims to check their understanding of the current topic.
It's also geared at tutors who are happy using HTML (and Markdown, though support for the latter is not yet implemented) to write their notes. Notes are expected to be provided in plain HTML, or in due course, in Markdown; it does not yet support PowerPoint slides for example and may not for some considerable time.
lilt
can, however, store full module notes as a series of HTML pages. These can be simply static HTML pages, or can include interactive exercises.
As lilt
servers are expected to be small-scale, servicing just one class at a time, SQLite is used. An SQL setup file setupdb.sql
is provided. Import this with the sqlite3
client, for example:
sqlite3 < setupdb.sql
lilt
uses Node, Express, React and Vite. First install the dependencies:
npm install
Then build:
npm run build
To start:
npm start
lilt
will run on port 3002 by default.
A lilt
server should have one or more admin users. These are setup by means of a utility script in server/utils
, addAdmin.mjs
. Run this, to add an admin user to the database.
- Notes should be placed in the directory specified by the
RESOURCES
environment variable (you can, for example, place this in a.env
file). - Within this directory you should create separate subdirectories for each module, using the module code you specify when adding a module as an admin user as the directory name.
- Then, you create numbered directories within the module directory corresponding to each topic, and save your HTML for a given module as
index.html
within the appropriate module directory.
With lilt
you just write your notes in plain old HTML5, though it is planned to add Markdown support. You break the page down into a series of <div>
s and label them with appropriate classes to determine whether the content should be public, an exercise, or protected. Protected content is content which is only visible when a particular exercise has been answered and discussed, allowing students to try to think through questions themselves without "cheating" by reading later content!
Your notes MUST be well-formed HTML, if they are not, lilt
may fail to render them properly. Before you test your pages, make sure you run them through the W3C HTML validator and fix all errors.
Your notes must have a <main>
element which contains your content.
Inside your <main>
you should create a series of <div>
s each of which should have one of the following classes:
-
content-public
:<div>
s with this class will be fully publicly visible. -
content-exercise
: thisdiv
will contain an exercise. It must take an attributedata-id
which should be set equal to the exercise's number. It can contain arbitrary content, but must contain a child<div>
with a class ofquestions
. This will contain the exercise's questions. These are setup via the admin interface - see below. -
content-protected
:<div>
s with this class are protected. This means that they can only be viewed if a particular exercise has been completed, and the tutor/admin has authorised students' answers. This is specified via thedata-depends
attribute, which should be set equal to the number of the exercise which must be completed to view this protected section. You can similarly also add adata-depends
attribute tocontent-exercise
<div>
s, to only show a later exercise when an earlier one has been completed.
Here is an example HTML document:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Example Notes</title>
<meta charset="utf-8">
</head>
<body>
<main>
<div class='content-public'>
This is some public content. It will always be available to view.
</div>
<div class='content-exercise' data-id='1'>
<p>This is an introductory paragraph for the exercise.</p>
<div class='questions'></div> <!-- questions will be automatically inserted here -->
</div>
<div class='content-protected' data-depends='1'>
This is protected content. It will not be visible to a given student until they have answered Exercise 1 and had their answers authorised by the tutor.
</div>
<div class='content-public'>
This is some more public content.
</div>
<div class='content-exercise' data-id='2' data-depends='1'>
<p>This is a second exercise. It will not be visible until the student has completed Exercise 1 and had their answers authorised by the tutor.</p>
<div class='questions'></div>
</div>
<div class='content-protected' data-depends='2'>
This protected content will not be visible until the student has answered Exercise 2 and had their answers authorised by the tutor.
</div>
</main>
</body>
</html>
When the server is running you can access the admin section with
http://localhost:3002/admin
A number of options are available to setup modules, topics and exercises. These will be described in more detail in a later revision of this README
.
On the main page, students can signup for a random and anonymous 6-digit user code. This identifies them as a user and allows lilt
to determine if they have answered exercises and whether the tutor has authorised their answers.
These user codes are intended to be only usable for one week (i.e they are for the current topic only); in the utils
directory within server
there is a cleanup script which will delete answers and users older than a week.
Again the main interface will be described in a later revision of this README
.