# Chrome Web Store submission: Lildra 0.3.1

Prepared: 27 July 2026

This document is a drafting and validation aid. Compare all privacy answers with the current dashboard wording before certification. Do not upload reviewer credentials to the repository or package.

## Product details

- Product name: Lildra
- Version: 0.3.1
- Display version: 0.3.1 (no separate `version_name`)
- Recommended primary category: Productivity
- Language: English (Australia)
- Package: `Lildra-v0.3.1-chrome-web-store.zip`
- Support URL: https://napper.au/lildra/support
- Privacy-policy URL: https://napper.au/lildra/privacy
- Homepage: https://napper.au/lildra

### Short description

> A distraction-free reading layout for Canvas and QLearn lesson pages.

The description is 70 characters and is within the 132-character limit.

### Detailed description

> Lildra gives supported Canvas and QLearn lesson pages a cleaner, distraction-free reading layout while preserving the original lesson content.
>
> - Hides Canvas global and course navigation after you activate it.
> - Keeps the existing lesson centred at a bounded, responsive reading width.
> - Shows a compact, single-line title that follows dynamically rendered Canvas page titles.
> - Toggles from the extension toolbar or with Alt+L.
> - Restores the normal page when toggled off.
> - Contains no analytics, remote code, settings, or persistent site access.
>
> Lildra works only on supported HTTPS Canvas course page and wiki content routes with the expected Canvas lesson structure. It does not support dashboards, module lists, assignments, discussions, quizzes, or arbitrary websites. It does not move, clone, reconstruct, or otherwise edit lesson content.
>
> Lildra is an independent Napper.au project and is not affiliated with or endorsed by Instructure, Google, the Queensland Department of Education, or any educational institution.

### Single-purpose statement

> Lildra's single purpose is to provide a user-invoked, distraction-free reading layout on supported Canvas and QLearn lesson pages while preserving the existing lesson content.

## Permission justifications

### `activeTab`

Lildra uses `activeTab` to receive temporary access to the current tab only after the user clicks the toolbar action or invokes the Alt+L extension command. It needs this access to check the selected tab's HTTPS Canvas route and page structure and to apply or remove the focused layout. A narrower persistent host pattern would not provide user-invoked access across independently hosted Canvas installations; persistent host access would also grant broader access than Lildra needs. Page information remains on the device and is not transmitted by Lildra.

### `scripting`

Lildra uses `chrome.scripting.executeScript()` to inject the packaged `lildra.js` file into the temporarily authorised active tab. This is required because the extension is intentionally inactive until the user chooses to run it and does not register a persistent content script. The injected script contains no remote code and transmits no accessed information.

### Host permissions

Lildra requests no `host_permissions`. Temporary page access comes only from `activeTab` after an explicit user gesture.

## Manifest and code audit

- Manifest V3: confirmed.
- Name/version: `Lildra` / `0.3.1`.
- Manifest description: 70 characters.
- Permissions: only `activeTab` and `scripting`, both used by `background.js`.
- Host permissions: none.
- Remote executable code: none.
- Credentials/API keys: none found.
- Storage APIs: none.
- Network APIs in extension code: none (`fetch`, `XMLHttpRequest`, `WebSocket`, and `sendBeacon` absent).
- Analytics/telemetry SDKs: none.
- Runtime references: validated during package build.
- ZIP contents: limited to the manifest, two scripts, and four referenced icons.

## Privacy-practices dashboard draft

Use the following as a conservative code-based draft, then compare each answer with the dashboard's current definitions.

| Category | Draft answer | Reason |
| --- | --- | --- |
| Personally identifiable information | No as an intended category; review wording | Lildra does not seek identity data, but a lesson title could incidentally contain a person's name and is processed locally. |
| Health information | No | No code seeks or uses health data. Incidental lesson content is not extracted or transmitted. |
| Financial or payment information | No | No payment or financial APIs or fields are accessed. |
| Authentication information | No | Lildra does not access passwords, cookies, tokens, or authentication records. |
| Personal communications | No | Lildra does not access email, chat, messages, or communications APIs. |
| Location | No | No location API or location data is accessed. |
| Web browsing activity | Review dashboard wording; disclose current active URL handling if included | The active supported tab URL is checked locally after a user gesture. Lildra does not collect history, monitor other tabs, retain URLs, or transmit them. |
| Website content | Yes | Canvas DOM structure and the visible page title are processed locally to validate the page and provide the layout. |
| User-generated content | Review dashboard wording; likely Yes if lesson pages qualify | A lesson or title may be authored by a teacher or another user. It is processed only in the active page and is not retained or transmitted. |
| Form data | No | Lildra does not read, intercept, or submit form fields. |

Data-use declarations:

- Sold: No.
- Used for advertising or profiling: No.
- Used for creditworthiness or lending: No.
- Transmitted off-device by Lildra: No.
- Shared with third parties by Lildra: No.
- Used only for the disclosed single purpose: Yes.
- Human access to page information: No.
- Retention: No persistent extension retention; temporary state ends when Lildra is disabled or the page closes.

Limited Use statement:

> The use of information received from Google APIs will adhere to the Chrome Web Store User Data Policy, including the Limited Use requirements.

## Screenshot sequence

All screenshots are 1280×800 PNG, square-cornered, and use deterministic crops of the supplied real interface.

1. `01-original-canvas-page.png` — the normal Canvas lesson with global and course navigation visible.
2. `02-lildra-focused-reading.png` — Lildra's primary focused reading layout.
3. `03-sticky-dynamic-title.png` — the compact title bar above the lesson.
4. `04-original-content-preserved.png` — representative headings, text, learning goals, and imagery preserved in the lesson.
5. `05-before-and-after.png` — the same lesson before and after Lildra activation.

Browser chrome was cropped to remove the production hostname, course identifiers, and unrelated extension icons. The private sandbox course name was covered in the remaining Canvas breadcrumb. No Lildra UI was generated or reconstructed.

## Store icon validation

The 0.3.0 packaged icon was fully opaque and had an unintended white square background. For 0.3.1, the established mark was technically normalised without redesigning it:

- 128×128 PNG: confirmed.
- Alpha transparency and transparent corners: confirmed.
- Visible artwork: centred at approximately 96×96 pixels.
- Packaged and promotional icon: derived from the same normalised asset.
- 16, 32, 48, and 128 sizes: generated and require final visual confirmation in Chrome on both light and dark themes.

## Reviewer instructions

> Lildra has one purpose: it provides a user-invoked, distraction-free reading layout on supported HTTPS Canvas and QLearn course page/wiki lesson routes.
>
> To test, install the extension and open an HTTPS Canvas page matching `/courses/{course}/pages/{page}` or `/courses/{course}/wiki/{page}` that contains the standard Canvas `#application #wrapper` and `#wiki_page_show` structure. Click the Lildra toolbar icon or invoke Alt+L. Canvas global navigation and the left course navigation should hide, the existing lesson should remain centred without content reconstruction, and a compact title bar should appear. Click the icon or invoke Alt+L again to restore the normal page.
>
> On unsupported routes such as dashboards, module lists, assignments, discussions, or quizzes, Lildra performs no layout change. It also performs no change when the expected Canvas page structure is absent.
>
> A Canvas/QLearn account and suitable lesson URL are required because the extension does not include or control a public test environment. If reviewer access is required, provide credentials only through the Chrome Web Store dashboard's secure reviewer-credentials field; never place credentials in the extension ZIP or repository.

## Public website alignment

Confirmed strengths:

- `/lildra`, `/lildra/privacy`, `/lildra/support`, and `/lildra/terms` are live.
- The public pages accurately describe explicit activation, supported page types, lack of persistent host access, local processing, permissions, and independence.
- The public privacy page discloses local access to the active URL, title, and Canvas structure.

Required before submission:

1. Update visible version references from `0.3.0` to `0.3.1`.
2. On the homepage privacy card, replace **“No data collection”** with **“Local processing only”** and use: “The selected lesson is processed in your browser and is not stored or transmitted by Lildra.” This avoids ambiguity under Chrome's definition of data handling.
3. After Web Store publication, replace release-download installation calls to action with the Chrome Web Store listing. The support page may retain a source/release link as a secondary option.
4. Update support installation instructions after publication so normal users install from the store rather than enabling Developer mode.

## Manual submission and testing checklist

- [ ] Install from `Lildra-v0.3.1-chrome-web-store.zip` in current stable Chrome.
- [ ] Confirm Chrome reports no manifest or service-worker errors.
- [ ] Activate using both the toolbar button and Alt+L on representative QLearn and generic Canvas wiki/page lessons.
- [ ] Toggle off and confirm all navigation, layout, styles, observers, and injected elements are restored/removed.
- [ ] Confirm unsupported dashboards, modules, assignments, discussions, quizzes, HTTP pages, and unrelated sites do not change.
- [ ] Test a supported route with missing or renamed Canvas DOM elements; Lildra should make no change.
- [ ] Test long and dynamically rendered titles, including one-line ellipsis.
- [ ] Test keyboard focus and screen-reader output for duplicate titles or inaccessible content.
- [ ] Test narrow/mobile-width viewport behaviour.
- [ ] Test long lessons and unusual heading structures.
- [ ] Test images, video, embeds, captions, transcripts, links, and wide tables.
- [ ] Refresh and restart Chrome; confirm Lildra does not persist without another explicit activation.
- [ ] Confirm there are no preference-storage behaviours to test or clear.
- [ ] Confirm the only permission explanation/prompt is consistent with `activeTab` and `scripting` behaviour.
- [ ] Inspect DevTools Network while toggling; confirm Lildra adds no unexpected requests.
- [ ] Check the 16/32/48/128 icons on light and dark browser themes.
- [ ] Recheck all five screenshots for private names, identifiers, URLs, unrelated extensions, and accurate captions.
- [ ] Upload the privacy-policy URL and compare every dashboard privacy answer against its current wording.
- [ ] Provide any reviewer credentials only through the dashboard's secure field.

## Distribution recommendation

Use **Unlisted** for the first controlled beta. The implementation and submission package are narrowly scoped, but representative live QLearn testing, the 0.3.1 public-site wording updates, icon checks in Chrome, and dashboard privacy-category review remain manual. Move to **Public** after those checks pass and the store/support links are aligned.

## Official references

- [Supplying Images](https://developer.chrome.com/docs/webstore/images)
- [Creating a great listing page](https://developer.chrome.com/docs/webstore/best-listing)
- [Privacy Policies](https://developer.chrome.com/docs/webstore/program-policies/privacy)
- [User Data FAQ](https://developer.chrome.com/docs/webstore/program-policies/user-data-faq)
- [Limited Use](https://developer.chrome.com/docs/webstore/program-policies/limited-use)
- [Disclosure Requirements](https://developer.chrome.com/docs/webstore/program-policies/disclosure-requirements)
