A full-stack web application for managing and receiving daily reminders of book highlights and personal quotes with Kindle import functionality.
- User Authentication: Secure email/password registration and login with JWT sessions
- Highlight Management: Add, edit, delete, and organize your book highlights and quotes
- Kindle Import: Upload and parse Kindle highlight exports (.txt, .csv files)
- Favorites System: Mark highlights as favorites for prioritization in daily reminders
- Daily Email Reminders: Automated daily emails with up to 10 curated highlights
- Search & Filter: Find highlights by text, source, or tags
- Responsive Design: Mobile-friendly interface with dark mode support
- Settings Management: Configure email preferences and reminder timing
- React 18 with TypeScript
- Vite for build tooling
- TailwindCSS for styling
- Shadcn/ui component library
- Wouter for routing
- TanStack Query for data fetching
- React Hook Form with Zod validation
- Node.js with Express
- TypeScript
- MongoDB with Mongoose ODM
- JWT authentication with bcrypt
- File upload with Multer
- Email sending with Nodemailer
- Scheduled jobs with node-cron
- Node.js 20 or higher
- npm or yarn
- Clone the repository:
git clone <your-repo-url>
cd recollection
- Install dependencies:
npm install
- Set up environment variables:
# Database configuration (required)
MONGODB_URI=mongodb://localhost:27017/recollection
# Email configuration (optional - for daily reminders)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
[email protected]
SMTP_PASS=your-app-password
APP_URL=http://localhost:5000
- Start MongoDB:
# Using MongoDB service
mongod
# Or using Docker
docker run -d -p 27017:27017 --name mongodb mongo:latest
- Start the development server:
npm run dev
The application will be available at http://localhost:5000
├── client/ # Frontend React application
│ ├── src/
│ │ ├── components/ # Reusable UI components
│ │ ├── hooks/ # Custom React hooks
│ │ ├── lib/ # Utilities and configurations
│ │ ├── pages/ # Page components
│ │ └── main.tsx # Application entry point
│ └── index.html
├── server/ # Backend Express application
│ ├── middleware/ # Express middleware
│ ├── services/ # Business logic services
│ ├── utils/ # Utility functions
│ ├── index.ts # Server entry point
│ ├── routes.ts # API routes
│ └── storage.ts # Data storage layer
├── shared/ # Shared types and schemas
│ └── schema.ts # Database schema and validation
└── package.json
POST /api/auth/register
- Create new user accountPOST /api/auth/login
- User loginPOST /api/auth/logout
- User logoutGET /api/auth/me
- Get current user info
GET /api/highlights
- Get user's highlights (paginated)POST /api/highlights
- Create new highlightPATCH /api/highlights/:id
- Update highlightDELETE /api/highlights/:id
- Delete highlightPOST /api/highlights/:id/favorite
- Toggle favorite statusGET /api/highlights/favorites
- Get favorite highlights
POST /api/import/kindle
- Import highlights from Kindle file
GET /api/stats
- Get user statisticsPATCH /api/user/preferences
- Update email preferences
The application supports importing highlights from Amazon Kindle:
- Export your highlights from read.amazon.com
- Save as .txt or .csv file
- Upload through the import interface
- Highlights are automatically parsed and deduplicated
- Configurable timing (6 AM - 8 PM)
- Prioritizes favorite highlights
- Sends up to 10 highlights per day
- Tracks sent highlights to avoid repetition
- Beautiful HTML email template
- MongoDB database with Mongoose ODM
- Proper data validation with Zod schemas
- Type-safe API with TypeScript
- Schema validation and data modeling
The application is designed to work seamlessly with:
- Replit Deployments
- Vercel
- Netlify
- Railway
- Any Node.js hosting platform
For production deployment:
- Set up environment variables for email configuration
- Configure database connection (if using PostgreSQL)
- Build the application:
npm run build
- Start the production server:
npm start
- Fork the repository
- Create a feature branch:
git checkout -b feature-name
- Make your changes
- Add tests if applicable
- Commit your changes:
git commit -m 'Add feature-name'
- Push to the branch:
git push origin feature-name
- Submit a pull request
This project is licensed under the MIT License. See the LICENSE file for details.
For support, email [email protected] or create an issue in the GitHub repository.