by SleepLogger (LX AI)
SleepLogger turns nightly sleep notes into a simple pattern summary — bedtime, duration, and quality signals for people who want reflection support, not a clinical diagnosis.
Decision-support only — confirm before you publish or act.
I started with a plain text area on a single page. The goal was to let anyone type a few sentences before bed without needing to learn a new format. I kept the input free‑form so users could write in their own voice, using abbreviations or shorthand if they liked.
Behind the scenes I stored each entry in the browser’s local storage. This means no account is required and no data leaves the device unless the user chooses to export. I added a small button that downloads a JSON file containing all notes, timestamps, and a checksum for integrity.
To keep the interface fast I avoided any heavy frameworks. The page uses vanilla JavaScript and a minimal CSS reset. Loading time stays under one second on a typical mobile connection, which helps when someone is already tired and wants to log quickly.
I also added a simple reminder that appears after 21 00 local time if no note has been saved that day. The reminder is a quiet toast that fades after five seconds, so it does not disturb someone who is already asleep.
Each night the script reads the newest note and extracts three signals. First it looks for any time expression like “11:30 pm” or “half past twelve” and records that as bedtime. If no explicit time is found it falls back to the device clock minus the assumed sleep onset delay of fifteen minutes.
Duration is calculated by subtracting the bedtime from the wake‑time that the user enters in a separate field the next morning. I kept the wake‑time field optional; if it is missing the script labels the duration as unknown and still shows the other two signals.
Quality signals come from keyword spotting. I built a tiny list of words that often appear in reflective notes: “rested”, “tossed”, “woke”, “dream”, “alarm”. The script counts occurrences and returns a simple level — low, medium, high — based on thresholds I chose after testing with my own notes for three months.
The final view is a card with three rows: Bedtime, Duration, Quality. Each row shows the raw value and a small sparkline that plots the last seven days. I avoided any medical terminology; the purpose is to give the user a mirror, not a diagnosis.
Privacy was the first constraint I set for myself. Because the tool lives entirely in the client, I could avoid server logs altogether. Still I wanted to show users that I had thought about risks that could arise if they ever chose to sync notes.
I consulted the OWASP Top 10 for Large Language Model Applications (https://owasp.org/www-project-top-10-for-large-language-model-applications) to see which prompts could leak information. Even though SleepLogger does not call an LLM, the guide helped me think about input sanitization and output encoding.
I also reviewed the NIST AI Risk Management Framework (https://www.nist.gov/itl/ai-risk-management-framework) to structure my threat model. I identified three assets: the raw note, the derived summary, and the export file. For each asset I listed possible impacts and added mitigations.
The table below summarizes the mitigations I implemented.
| Asset | Risk | Mitigation |
|---|---|---|
| Raw note | Accidental sharing via device backup | Data stays in local storage; I added a note in the help page advising users to clear browser data if they lend their device. |
| Derived summary | Misinterpretation as medical advice | Every view includes a disclaimer: “Decision‑support only — confirm before you publish or act.” |
| Export file | File intercepted during transfer | Export is a plain JSON download; I recommend users store it in an encrypted folder or password‑manager. |
By keeping the data local and being transparent about limits, I hope users feel comfortable trying the tool without worrying about hidden collection.
I use SleepLogger myself every night. My routine looks like this:
This loop takes less than two minutes each night and gives me a concrete basis for adjusting habits like caffeine timing or screen use.
SleepLogger does not claim to diagnose insomnia, apnea, or any other medical condition. The quality signal is a simple keyword count, not a polysomnography measure.
It does not promise 100 % accuracy in detecting bedtime. If a user writes “I went to bed late” without a clock time the script will fall back to the device clock, which may be off by several minutes.
It does not guarantee that users will improve their sleep. The tool only reflects what the user writes; change comes from the user’s own decisions.
It is not a substitute for professional advice. If someone experiences persistent fatigue or distress they should speak with a qualified clinician.
Finally, it does not sell data, show ads, or run any background scripts. The only network activity occurs when the user voluntarily exports a file.
I chose a static‑site approach so the entire app fits in under 50 KB gzipped. The HTML file contains the markup, a single CSS block, and a JavaScript module that is under 15 KB.
I avoided any external libraries. Even a small date‑picker would have added weight; instead I rely on the native input type = time for wake‑time and plain text parsing for bedtime.
All styling uses CSS variables for colors and spacing, which lets me switch themes with a single class change on the root element. Dark mode reduces blue light at night, which many users find helpful.
I also set aggressive caching headers. When a user revisits the page the browser serves the HTML from its cache, making the load feel instant.
Because there is no build step, I can update the copy or fix a typo by editing the file directly and pushing it to the host. This keeps the iteration loop short and lets me respond quickly to user feedback.
One direction is to add optional tagging. Users could prepend a hash symbol to a word like #work or #travel and the script would tally how often each tag appears across weeks. This would stay client‑side and would not increase the payload much.
Another idea is to provide a simple printable view. A CSS media rule could rearrange the card into A5 format so users can keep a physical log beside their bed.
I am also looking at ways to let users set a personal bedtime goal and see a visual cue when they are within fifteen minutes of that target. The cue would be a subtle color shift on the sparkline, keeping the interface calm.
All of these ideas will stay within the same privacy first mindset: no server, no tracking, and clear disclaimers about the reflective nature of the output.
I keep a written checklist next to every release that touches this topic. The list is boring on purpose: name the owner, name the evidence artifact, and name the rollback. If a step cannot produce a file, a ticket, or a log line, it is not a step — it is a wish.
| Signal | What to record | Stop-ship? |
|---|---|---|
| Unexpected write or send | Tool name, args, identity | Yes until gated |
| Missing confirmation on destructive action | Call path and bypass | Yes |
| Untrusted text treated as instruction | Source surface and resulting action | Yes for agent reach |
| Scanner clean, judgment open | Deferred items + owner | Only if core path safe |
sleep-logger helps with the measurable first pass. Architecture choices, legal sign-off, and customer-facing claims still need a human owner. Treat every checklist row as decision support, not a certificate.
When a prospect asks whether the product "covers everything," I answer with the boundary: automated checks catch known patterns; novel chains and policy judgment still need review. That honesty keeps support load down and keeps the blog aligned with what the product actually does.
If you need a second opinion, pair this write-up with the references below and with your own staging reproduction. Do not skip the reproduction step just because a model wrote a confident summary.
SleepLogger turns nightly sleep notes into a simple pattern summary — bedtime, duration, and quality signals for people who want reflection support, not a clinical diagnosis.
Decision-support only — confirm before you publish or act.
Want to try the product? SleepLogger
Generated 2026-09-17 · primary sources only · no fabricated traffic metrics