A journal for those too busy to journal with zero-knowledge encryption. Chronicles is designed as a simple daily log. The core philosophy is to capture the key moments of your day briefly in less than 10-15 minutes, then use topics to organize and find them later.
- Encrypted Journal Entries - Rich text editor with client-side encryption
- Topic Organization - Categorize entries with custom topics, icons, and colors
- Goals & Milestones - Track goals with milestone progress
- Medical Tracking - Log medications, symptoms, food (with calorie tracking), and schedules
- Calendar View - Visual overview of entries by date
- Entry Sharing - Share specific entries via secure public links
- Bookmarks - Mark and quickly access important entries
- Mobile Responsive - Works on desktop and mobile devices
- Customizable colors and background - Choose from a variety of colors and background images
- All entry content is encrypted in the browser before transmission
- Recovery key system allows password reset without compromising zero-knowledge design
- Schema-per-user database isolation (not row-level security)
- Session Management - Revoke sessions at any time if you see an unfamiliar device
- Non-extractable CryptoKeys — master key cannot be exported from the browser's crypto subsystem
- Split-token sessions — database leaks cannot reconstruct valid session tokens
This is a complete rebuild combining the best of the original Chronicles UI with a cleaner, modular architecture:
- Client: React 19 SPA (Vite) — no Next.js, ready for React Native
- Server: Express 5 API with TypeScript
- Shared: Crypto, types, validation, and theme tokens shared across platforms
- Components: Atomic Design (atoms → molecules → organisms → templates → views)
- Styling: styled-components (CSS-in-JS) — works on both web and React Native
chronicles-rebuild/
├── client/ # React SPA (Vite + styled-components)
├── server/ # Express API (Prisma + PostgreSQL)
├── shared/ # Shared code (crypto, types, theme)
└── docs/ # BLUEPRINT.md — full architectural plan
Chronicles is designed as a simple daily log. The core philosophy is to capture the key moments of your day briefly in less than 10-15 minutes, then use topics to organize and find them later.
Important: You can only add entries for today or edit past entries. You cannot create entries for future dates. This keeps Chronicles focused as a record of what happened, not a planning tool. However, you can use it to track goals, milestones, events, and ideas.
Topics are how you categorize entries. Think of them as tags or folders.
Default Topics: Chronicles comes with several built-in topics that have special functionality:
- Task - Todo items with completion tracking
- Goal - Long-term objectives with milestone support
- Milestone - Checkpoints within goals
- Medication - Medication schedules and tracking
- Food - Meal logging with ingredients and calorie tracking
- Symptom - Health symptom tracking with severity
- Exercise - Daily logs of exercise types and duration
- Event - Calendar events with date/time/location
- Meeting - Meetings with attendees and agenda
- Music - Track music you're listening to
- Books - Log books you're reading
- TV/Movies - Track shows and films
- Research - Save research notes and findings
- Idea - Capture ideas for later
- Quote - Save inspiring quotes
You can create your own topics for anything else (Work, Personal, Ideas, etc.).
When you select certain topics, additional settings appear:
- Completed - Check when the task is done
- Auto-migrate if incomplete - Uncompleted tasks automatically move to the current day at midnight
- Link to Milestones - Connect tasks to milestones to track progress toward goals
- Type - Short-term or Long-term
- Status - Active, Completed, or Archived
- Target Date - Optional deadline
- Progress - Automatically calculated from linked milestones
- Dosage - Amount per dose (e.g., "500mg")
- Frequency - Once daily, twice daily, three times daily, as needed, or custom
- Schedule Times - Specific times for each dose
- Active - Toggle when starting/stopping a medication
- Meal Type - Breakfast, lunch, dinner, or snack
- Time Consumed - When you ate
- Ingredients - Comma-separated list (used for correlation analysis with symptoms)
- Calories - Estimated calorie count for the meal
- Severity - Scale of 1-10 (mild to severe)
- Time Occurred - When the symptom started
- Duration - How long it lasted (in minutes)
- Sessions - View and revoke active sessions on other devices
- Change Password - Update your password (master key is re-wrapped, data is not re-encrypted)
- Feature Toggles - Enable/disable features like the medical tracker
- Theme Customization:
- Header Color - Choose from 18 colors (Dark, Navy, Teal, Coral, etc.) or transparent
- Background Image - Select from 28 curated images from Unsplash artists
- Node.js 18+
- PostgreSQL 15+
-
Clone the repository
-
Install dependencies:
npm install
-
Set up environment variables:
cp server/.env.example server/.env # Edit server/.env with your database credentials -
Set up the database:
cd server npx prisma generate npx prisma db push -
Run both servers:
npm run dev
This starts the Express API on port 3001 and the Vite dev server on port 5173.
Password requirements:
- Minimum 12 characters
- At least one uppercase letter
- At least one lowercase letter
- At least one number
Recovery Key: At registration, you'll receive a recovery key (formatted as hex with dashes). This key is shown only once — save it securely. If you forget your password, this key is the only way to recover your account.
npm run dev # Start both client and server
npm run dev:client # Start Vite dev server only
npm run dev:server # Start Express API only
npm run build # Build all packages
npm run test # Run all tests (shared + server + client)
npm run test:coverage # Run tests with coverage- Frontend: React 19, Vite, react-router-dom, styled-components, Zustand, TipTap
- Backend: Express 5, TypeScript, Prisma
- Database: PostgreSQL (schema-per-user isolation)
- Encryption: Web Crypto API (AES-256-GCM, PBKDF2-SHA256 600k iterations)
- Auth: Split-token sessions (selector + SHA-256 verifier hash)
- Testing: Vitest, React Testing Library, supertest
© 2025 Claudette Raynor | All Rights Reserved. You may not use this for any commercial purpose. You can download this application for personal use only, but you may not modify it.