Easy-to-manage touch screens
Free, open-source touch screens. Guided USB setup, a drag-and-drop editor and local control. Made for Home Assistant.
Dream Journal focused on lucid dreaming
Translation pending
LifestyleJavaScript · CSSGitHub @WebdreamjournalOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Capture your dreams and discover patterns for lucid dreaming.
A private dream journal that runs in your browser and keeps your dreams on your device.
Dream Journal is a Progressive Web App (PWA) for recording dreams and spotting patterns in them, built with lucid dreaming in mind. There is no account, no server component and no analytics. The app is a set of static files, and your journal is stored in your browser, on your own device.
Optional extras (a PIN lock, password encryption and Dropbox backups) are covered in Privacy and security, including what each one does not protect.Read the full README ↗Dream Journal is a Progressive Web App (PWA) for recording dreams and spotting patterns in them, built with lucid dreaming in mind. There is no account, no server component and no analytics. The app is a set of static files, and your journal is stored in your browser, on your own device.
Optional extras (a PIN lock, password encryption and Dropbox backups) are covered in Privacy and security, including what each one does not protect.
It is written in plain JavaScript (ES modules), HTML and CSS, with no framework and no build step.
title:, content:, emotion:, tag: and sign:, for example tag:lucid emotion:happy or title:"vacation dream". You can also filter to lucid or non-lucid dreams, limit by date range, sort (newest, oldest, lucid first, longest) and choose between pages of 5, 10, 20 or 50, endless scrolling, or everything at once.Your journal stays on your device unless you export it or connect Dropbox. This section describes what the code actually does, including the parts that are less protected than you might assume. Most of the code was written by AI tools and has had little human review (see About this project), so do not rely on it for anything you cannot afford to lose or leak.
Dreams, goals, voice notes and suggestion lists are kept in your browser's IndexedDB. Settings, the PIN hash and Dropbox tokens are kept in localStorage. If the browser will not open the database (for example, when site storage is blocked), the app shows a banner and holds entries in memory only, so they are lost when you close the page.
| Data | Encrypted when encryption is on? | In a complete JSON backup? |
|---|---|---|
| Dreams, goals, and tag, dream sign and emotion suggestions | Yes | Yes |
| Voice notes (audio) | No | No, by design (download them one at a time) |
| Settings (theme, page size, collapsed sections) | No | Theme, page size and the dream form's collapsed state |
| PIN | Not encrypted, but stored only as a salted hash | No |
| Dropbox sign-in tokens | Encrypted, with your journal password or a per-device key | No |
| Connected Dropbox account (name and email) | No | No |
.enc file) with a password you choose for it. It follows the same rules as the journal password (8 to 128 characters, very common passwords rejected), and the app does not store it, so keep it safe: a lost export password cannot be recovered. Exports without the checkbox, and the AI-analysis prompt file, are readable plain text.Imported files and cloud data are treated as untrusted: IDs are validated and text is escaped before it is displayed. A content security policy forbids inline scripts. Automated tests cover both.
Everything lives in your browser's storage, so clearing site data, resetting or uninstalling the browser, or running out of device storage can delete it. Private windows delete a site's data when they close. The app asks the browser to keep its storage, but browsers decide whether to agree. Safari also deletes a site's data after about a week of Safari use without visiting it, unless the site has been added to the Home Screen.
Connect an account under Settings → Cloud Sync.
dream-journal-cloud-sync.json, or .enc when encrypted) to your Dropbox, replacing the previous one. Download from Cloud replaces the dreams and goals on the current device with that file's contents.localhost).Everything is static, so you can run it from a plain file server:
git clone https://github.com/Webdreamjournal/DreamJournal.git
cd DreamJournal
python3 -m http.server 8000 # then open http://localhost:8000
The checks need Node 20 or newer:
npm install
npm run lint # ESLint, correctness rules only
npm test # node:test suites in tests/*.test.js, no browser needed
npm run test:e2e # Playwright tests in tests/e2e/ (needs Chromium)
npm run qa:screenshots # screenshots of every tab into qa-screenshots/
Set CHROMIUM_PATH to use an installed Chromium for the browser tests and the screenshots. CI (.github/workflows/test.yml) runs lint, the unit tests and the browser tests on pushes to main and on pull requests.
All modules sit flat in the repository root. src/app.js is only the entry point.
| Path | Role |
|---|---|
index.html | Static shell. The tab panels are rendered by JavaScript. |
main.js, action-router.js, state.js | Startup order and lock state, event delegation through data-action, and shared state. |
storage.js, storage-banner.js | IndexedDB and localStorage access, and the storage problem banner. |
security*.js, pin-*.js, encryption-*.js, lock-screen.js | Cryptography, the PIN, encryption settings, recovery and the lock screen. |
*tab.js, dream-crud.js, voice-notes.js, dom-helpers.js | The interface: tab rendering, dreams, voice notes, and the UI modules that dom-helpers.js re-exports. |
import-export.js, cloud-sync.js, device-key.js | Backups, Dropbox sync and token storage. |
sw.js, pwa.js, manifest.json | Offline support and installation. |
tests/ | Unit tests (*.test.js) and Playwright tests (e2e/). |
AGENTS.md has the full module table and the rules that have caused bugs here (for example read-only imports, escaping untrusted strings, no inline event handlers, and keeping the version and the service worker's precache list in step). Read it before changing code.
Diagnostics are silent by default. To see them, run localStorage.setItem('dreamJournalDebug', 'true') in the browser console and reload. console.warn and console.error always print.
Bump APP_VERSION in version.js, then update the README badge, the index.html footer and CACHE_NAME in sw.js to match. npm test fails if they drift.
Serve the repository root from any static host over HTTPS. There is nothing to build. Dropbox sync needs your own app key at a different address (see Dropbox backup).
Almost all of the code was written by AI tools, mainly Claude Code and Jules, and has had little human review. The lint, unit test and browser test suites, which run in CI, are the main safety net. Keep that in mind before trusting the PIN or encryption with anything important, and keep your own backups.
Distributed under the GNU Affero General Public License v3.0 or later (SPDX: AGPL-3.0-or-later). See LICENSE for the full text. Under the AGPL, if you offer a modified version to others over a network, you must also make its source available to those users.
Dream Journal is for entertainment and personal journalling only. It does not provide medical, psychological or therapeutic advice. If you have concerns about your sleep, dreams or mental health, please consult a qualified healthcare professional.