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 ## What is this?
- [@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
## 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 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.
export default defineConfig([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Remove tseslint.configs.recommended and replace with this **How it works:**
tseslint.configs.recommendedTypeChecked,
// Alternatively, use this for stricter rules
tseslint.configs.strictTypeChecked,
// Optionally, add this for stylistic rules
tseslint.configs.stylisticTypeChecked,
// Other configs... - 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.
languageOptions: { - The backend stores only the encrypted blob (ciphertext + nonce). No title, no content, no plaintext.
parserOptions: { - Decryption happens entirely in your browser using the in-memory master key.
project: ['./tsconfig.node.json', './tsconfig.app.json'], - Logging out clears the key from memory. Your device key persists so the next login is seamless.
tsconfigRootDir: import.meta.dirname, - The same Google account works across devices — the master key is deterministically derived from your credentials, so your entries are always accessible.
},
// other options...
},
},
])
```
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([ ## Features
globalIgnores(['dist']),
{ - **Write** — A clean, distraction-free writing area. Give your entry a title and write your thoughts.
files: ['**/*.{ts,tsx}'], - **History** — A calendar view of all your past entries. Green dots mark the days you wrote. Tap a date to read what you wrote.
extends: [ - **Settings** — Change your display name, profile photo, and app theme (light/dark).
// Other configs... - **Onboarding tour** — A guided walkthrough on first login to show you around.
// Enable lint rules for React - **Encrypted storage** — Every entry encrypted end-to-end with industry-standard cryptography.
reactX.configs['recommended-typescript'],
// Enable lint rules for React DOM ---
reactDom.configs.recommended,
], ## Tech
languageOptions: {
parserOptions: { | Layer | What |
project: ['./tsconfig.node.json', './tsconfig.app.json'], |-------|------|
tsconfigRootDir: import.meta.dirname, | Frontend | React 19 + TypeScript, Vite |
}, | Auth | Firebase (Google Sign-In) |
// other options... | 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* -->