Update README.md

This commit is contained in:
2026-03-23 10:45:25 +05:30
parent c07ff5edd8
commit b084069190

110
README.md
View File

@@ -1,73 +1,63 @@
# React + TypeScript + Vite
# Grateful Journal
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
A minimal, private-first gratitude journaling app. Write what you're grateful for. Nothing more, nothing less.
Currently, two official plugins are available:
---
- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
## What is this?
## React Compiler
Grateful Journal is a personal journaling app built around one simple habit — writing down what you're grateful for each day. No social feeds, no algorithms, no sharing. Just you and your thoughts.
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see [this documentation](https://react.dev/learn/react-compiler/installation).
The app is designed to get out of your way. Open it, write a sentence or a page, save it. Done.
## Expanding the ESLint configuration
---
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
## Privacy by Design
```js
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
Every journal entry is **end-to-end encrypted** before it ever leaves your device. The server stores only ciphertext — it has no ability to read your entries, even if compromised.
// Remove tseslint.configs.recommended and replace with this
tseslint.configs.recommendedTypeChecked,
// Alternatively, use this for stricter rules
tseslint.configs.strictTypeChecked,
// Optionally, add this for stylistic rules
tseslint.configs.stylisticTypeChecked,
**How it works:**
// Other configs...
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])
```
- You sign in with Google. Your Firebase UID is used to derive a 256-bit master key via Argon2i key derivation.
- Your entries are encrypted client-side using XSalsa20-Poly1305 (libsodium) before being sent to the backend.
- The backend stores only the encrypted blob (ciphertext + nonce). No title, no content, no plaintext.
- Decryption happens entirely in your browser using the in-memory master key.
- Logging out clears the key from memory. Your device key persists so the next login is seamless.
- The same Google account works across devices — the master key is deterministically derived from your credentials, so your entries are always accessible.
You can also install [eslint-plugin-react-x](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-x) and [eslint-plugin-react-dom](https://github.com/Rel1cx/eslint-react/tree/main/packages/plugins/eslint-plugin-react-dom) for React-specific lint rules:
**What the server can never see:** your entry titles, your entry content, anything you write.
```js
// eslint.config.js
import reactX from 'eslint-plugin-react-x'
import reactDom from 'eslint-plugin-react-dom'
---
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Enable lint rules for React
reactX.configs['recommended-typescript'],
// Enable lint rules for React DOM
reactDom.configs.recommended,
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])
```
## Features
- **Write** — A clean, distraction-free writing area. Give your entry a title and write your thoughts.
- **History** — A calendar view of all your past entries. Green dots mark the days you wrote. Tap a date to read what you wrote.
- **Settings** — Change your display name, profile photo, and app theme (light/dark).
- **Onboarding tour** — A guided walkthrough on first login to show you around.
- **Encrypted storage** — Every entry encrypted end-to-end with industry-standard cryptography.
---
## Tech
| Layer | What |
|-------|------|
| Frontend | React 19 + TypeScript, Vite |
| Auth | Firebase (Google Sign-In) |
| Encryption | libsodium — XSalsa20-Poly1305, Argon2i |
| Backend | FastAPI (Python) |
| Database | MongoDB |
| Deployment | Docker (3 containers — nginx, FastAPI, MongoDB) |
---
## Philosophy
Most journaling apps are over-engineered. Prompts, streaks, mood tracking, sharing — all noise. This app exists for one thing: a private place to write what you're grateful for.
The encryption isn't a feature, it's a requirement. A journal is personal. It should stay that way.
---
<!-- *Built by Jeet Debnath* -->