Obscura: A Personal Journal (v1)
OBSCURA
A private journal. Encrypted. Yours alone.
A single file. Open it in a browser. You get a three-panel journal: entries on the left, the editor in the middle, ambience and stats on the right.
Write. Tag. Search. Fold the day into an entry, or spill four thousand words. When you're done, copy one block of encrypted text somewhere safe. That block is the journal. It's the only thing that persists.
No server. No account. No cloud. No localStorage. The block is the save.
What this actually is, plainly:
You create a passphrase. The app uses it — locally, in your browser, in this tab — to derive an encryption key. You write entries. The app keeps them in memory and, on demand, encrypts the entire journal into a single block of text:
-----BEGIN ENCRYPTED JOURNAL----- kR7fL2mN8xQ9pWvT4hKd... ...many more base64 lines... -----END ENCRYPTED JOURNAL-----
You copy that block. Paste it into a text file, a note, a password manager, an email to yourself. That's the save. Come back tomorrow, paste the block, type your passphrase, and everything is where you left it — entries, tags, theme, settings.
The passphrase never leaves your browser. It's never sent anywhere, never stored anywhere, never written to disk. It exists in memory for the length of one tab session. Close the tab and it's gone. Come back and you type it again.
The encryption is real. AES-256-GCM with PBKDF2-SHA256 key derivation, 250,000 iterations. That's the same family of cryptography used by Signal, 1Password, and every serious encrypted-messaging app. It runs on the Web Crypto API that's built into every browser shipped in the last seven years. Nothing is imported from a third-party library; nothing comes from a server; nothing about the app phones home.
Every load is fresh. No cookies, no session storage, no autofill, no "remember me." The app opens to the lock screen every single time. You paste the block. You type the passphrase. You're in. When you're done, you copy the block back out. Close the tab and the key is gone.
You can write markdown. Headings, bold, italic, code, blockquotes, lists, links, strikethrough. There's a live preview toggle in the editor if you want to see it rendered, and a split view if you want to see both at once.
Tags are just #hashtags in the body. Write #ideas or #october or #garden anywhere in an entry and it becomes a tag. The tag list is derived from what you actually wrote, not from a menu you have to configure.
Search is plaintext substring search. Type a word, see the entries that contain it. No fuzzy matching, no ranking, no "we noticed you might mean." It's a journal you know the contents of. The search is for finding what you remember, not for discovering what you forgot.
Six themes — mint, lumen, nebula, ember, ice, jade — plus a monochrome ink theme. The theme is part of the encrypted save, so the journal looks the way you left it.
Ambience. A quiet drone runs under everything. Four instruments (Tines, Piano, Bell, Pad) and four loops (Focus, Night, Ship, Slow Page). The visualizer at the top of the right panel pulses with whatever is playing. You can mute it, change the volume, or turn it off. It's optional.
Merge blocks. If you keep your journal on two machines and both have new entries, you can merge the two blocks into one. Entries match by ID. If the same entry exists in both, the newer one wins. The app tells you how many were added and how many were updated. Then you copy the merged block and use that going forward.
Things it isn't, deliberately:
- No recovery. If you lose your passphrase, the journal is noise. There is no reset, no hint, no security question, no email-the-owner flow. That's not a missing feature — it's the whole point. Any recovery mechanism would be a way in, and a way in is a way in for the wrong person too.
- No cloud. Nothing syncs anywhere. If you want the journal on another machine, you copy the block to that machine.
- No accounts. There's no user database because there's no user. The block is the identity.
- No localStorage. Nothing is kept in your browser. Reload the page and the app is a stranger.
- No analytics. No telemetry. No pingbacks. No "anonymous usage data." The app has no way to know you used it.
- No subscription. No plan. No feature gates. There's nowhere for your data to go and nothing to charge you for.
- Not a password manager. Don't put passwords in it. The app encrypts the file, but a password manager has threat models this doesn't — browser-extension attacks, autofill leaks, memory-scraping malware on the client. Use the right tool.
- Not unbreakable. A weak passphrase makes a weak block. Use at least six words. Write it down on paper. This is the one piece of advice that matters and there's no way around it.
How to try it:
- Open the file. You'll see the lock screen.
- Click Create new journal.
- Type a passphrase. Type it again to confirm. Write it down somewhere physical. The app cannot recover it.
- Click Begin journal. The block modal opens automatically with your new (empty) encrypted journal.
- Copy that block somewhere safe. You'll need it to reopen the journal later.
- Close the modal. Write a few entries. Tag them. Change the theme. Pick a loop.
- Click Copy block in the footer. The block now contains everything you wrote.
- Click End session. The tab wipes. It's as if you never opened it.
- Paste the block back into the top field. Type the passphrase. Click Unlock. Everything comes back.
That's the whole loop. It's the same loop you'll do every time you use it. Every session is a fresh paste-and-type.
On the crypto, one honest sentence:
This app uses real, standard cryptography — the same primitives you'd find in any serious encrypted product. That said, no web app can protect you from a compromised browser, a keylogger, or a machine you don't control. The threat model here is:
I want to write in a journal on a machine I trust, save the result somewhere public, and have it be unreadable to anyone but me. If that's your threat model, this is the right tool. If your threat model is "a nation-state is actively watching me," no single-file app is going to solve that and you know it.
Created by —
Complex Software
A suite of small, single-file, offline-first tools. The save is a text file. The file is yours.
