Chrome Extension · Version 1.1.0
Attendance OS is a Chrome extension and companion web app that reads your attendance data from the Landmark University (LMU) student portal (att2.lmu.edu.ng) and displays it in a local dashboard with skip calculators, recovery planning, and analytics. It is an independent, open-source student project and is not affiliated with or endorsed by Landmark University.
✅ All data this extension touches stays on your device. It is never transmitted to any external server, cloud service, or third party — not even to the developer.
The extension operates two content scripts. The table below describes exactly what each one reads and when it runs.
| Script | Runs on | When it activates | What it reads |
|---|---|---|---|
content-scraper.js |
att2.lmu.edu.ng |
Automatically on page load (if the attendance table is present), and again when you click Sync Now in the popup. | The attendance table rows — see field list below. |
webapp-bridge.js |
highnine699-del.github.io/ |
On page load, only when the web app is open. Responds to
postMessage requests from the web app to relay
already-stored data. Does not read any page content. |
Nothing from the page. Only relays data already held in
chrome.storage.local. |
The following fields are extracted from the LMU portal attendance table:
| Field | Table column | Purpose |
|---|---|---|
| Course code | Column 2 (e.g. EEE102) |
Identifies which course the record belongs to |
| Credit units | Column 3 (e.g. 2CC) |
Used to compute unit-weighted attendance averages |
| Total classes held | Column 5 | Denominator for all attendance calculations |
| Classes attended | Column 6 | Numerator for all attendance calculations |
| Classes suppressed | Column 7 | Informational — displayed alongside attendance counts |
| Attendance percentage | Column 8 | Portal-computed value displayed in the dashboard |
❌ We do not collect: your name, student ID, matric number, password, session cookies, email address, IP address, device identifiers, location, biometrics, or any information beyond the six numeric attendance fields listed above.
Scraped attendance data is saved to chrome.storage.local under the key
attendanceData. This is a sandboxed browser storage area that:
User preferences (theme, pass threshold, optional display name) entered in the web
app's Settings page are stored separately in localStorage under the key
attendanceOS_state_<userId>, where <userId> is a
randomly generated local identifier that is never sent anywhere.
Collected attendance figures are used exclusively to:
Data is never used for advertising, profiling, tracking, or any purpose other than the attendance-related features listed above.
✅ We share your data with no one. There are no analytics SDKs, advertising networks, crash-reporting services, or backend servers involved.
The only data flows in the entire system are:
window.postMessage to the Attendance OS web app running in
the same browser session. This message never leaves your machine. The bridge
script validates the message origin and refuses to relay data to any unrecognised
or insecure origin.
The Chrome Web Store build of Attendance OS declares exactly the following permissions. No others are requested.
| Permission | Scope | Justification |
|---|---|---|
storage |
API permission | Saves attendance data to chrome.storage.local on your device.
No sync storage is used. |
tabs |
API permission | Detects whether you have the LMU portal tab open and retrieves its tab ID so the scraper can be triggered on the correct tab. Tab URLs are checked but never stored or transmitted. |
Host: att2.lmu.edu.ng/* |
Host permission | Allows content-scraper.js to run on the LMU portal and
read the attendance table. Required for the core sync feature. |
Content script on highnine699-del.github.io/ATTENDANCE_TRACKER/* |
Content script (not a host permission) | Injects webapp-bridge.js into the Attendance OS web app
so it can receive locally stored attendance data from the extension via
postMessage. The script reads no page content. |
No remote code is loaded or executed. All JavaScript is bundled inside the extension package at install time.
webapp-bridge.js validates
window.location.origin at startup and disables itself entirely if
the page is served from an insecure or unrecognised origin. It also rejects any
incoming postMessage that does not match the expected origin.
background.js checks that the target tab's URL starts with
https://att2.lmu.edu.ng/ and that the tab has fully loaded.
It retries up to 8 times (500 ms apart) before giving up, with a hard 15-second
timeout.
eval(), innerHTML assignments, or dynamically
fetched scripts.
Attendance OS is designed for university students aged 18 and above. We do not knowingly collect data from users under 13. If you believe a minor has used this extension, contact us using the details in Section 10 and we will help with data removal.
You have complete control over your data at all times:
| Action | How to do it |
|---|---|
| View all stored data | All data is visible in the Attendance OS web app dashboard and course list. |
| Export a copy | Web app → Settings → Export JSON or Export CSV. |
| Delete all data | Web app → Settings → Reset All Data. Permanently erases all stored attendance records and preferences. |
| Remove extension data | Uninstalling the extension from Chrome automatically clears
chrome.storage.local. |
Attendance OS is released under the MIT License. The full source code is publicly available and can be audited at:
github.com/highnine699-del/attendance-os
If this policy is updated, the Last updated date at the top of this page will change. Material changes — ones that affect how data is collected or used — will also be noted in the Chrome Web Store listing update notes. Continued use of the extension after a change is posted constitutes acceptance of the revised policy.
For questions, data removal requests, or concerns about this privacy policy:
Developer: Josiah Odetayo (independent student developer)
Email: highnine699@gmail.com
Source code & issues: github.com/highnine699-del/attendance-os